Migrate frontend to TypeScript with Deno-based tooling (#209)

* Migrate frontend to TypeScript with Deno-based tooling (#206)

Compiles assets/*.ts via sensiolabs/typescript-bundle (standalone SWC
binary) and adds Deno for formatting, linting, type-checking, and
tests, keeping the project's no-Node/npm approach intact. Wires all
four into CI, the Justfile, and the pre-commit hook.

* fix: build TypeScript assets before running PHPUnit in CI

The tests job ran bin/console sass:build but never typescript:build,
so var/typescript/ didn't exist and any page rendering the importmap
(e.g. backoffice/base.html.twig) errored during tests.

* test: add regression test for backoffice navbar-toggler dead target

Guards against the navbar-toggler button pointing at a collapse
target (#navbarSupportedContent) that isn't rendered for the current
user — the bug hit on the login page before #210 restructured the
nav to always render at least one item (the Releases link) regardless
of auth state.

* fix: stop hand-enumerating TS files for deno check

deno check assets/*.ts assets/controllers/*.ts assets/controllers/bo/*.ts
was duplicated in CI and the Justfile, and silently misses any new
controller subdirectory (fmt/lint/test already recurse assets/ via
deno.json). Add a top-level exclude for assets/vendor/ (respected by
all deno subcommands, unlike the per-task include/exclude blocks) so
deno check assets/ can recurse safely instead.

* fix: GitHubReleasesService date parsing and falsy release name

- Move the release-mapping array_map inside the try block so a
  malformed published_at (or any other parse failure) degrades to the
  same empty-list fallback as an HTTP failure, instead of throwing
  uncaught out of the cache callback.
- Stop treating a release literally named "0" as unnamed — the old
  `?:` fallback is falsy for that string and silently substituted the
  tag name instead.
- Render release dates in UTC explicitly; Twig's date filter otherwise
  silently converts to the app's default timezone (Europe/Amsterdam),
  which could show the wrong calendar day for releases near midnight.

* docs: add scope-creep-as-a-service rule to CLAUDE.md

Per user instruction: when a review turns up a real bug outside the
current task's scope, fix it in the same MR (with a regression test)
rather than just reporting it, unless it needs a human design call.
This commit is contained in:
2026-07-12 22:11:00 +02:00
committed by GitHub
parent 4e98909f11
commit b4a27a7c0d
44 changed files with 1473 additions and 509 deletions
Generated
+57 -1
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "519e76dd9df3bca43c3e32e347c600e7",
"content-hash": "b2f319bad9d390a60067420d772e06e6",
"packages": [
{
"name": "composer/pcre",
@@ -3173,6 +3173,62 @@
},
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "sensiolabs/typescript-bundle",
"version": "v0.2.2",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/AssetMapperTypeScriptBundle.git",
"reference": "b4a498a2b1dd699fd4ea95ae9dfa30ebe77cc8ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/AssetMapperTypeScriptBundle/zipball/b4a498a2b1dd699fd4ea95ae9dfa30ebe77cc8ce",
"reference": "b4a498a2b1dd699fd4ea95ae9dfa30ebe77cc8ce",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/asset-mapper": "^6.3|^7.0|^8.0",
"symfony/console": "^6.3|^7.0|^8.0",
"symfony/http-client": "^6.3|^7.0|^8.0",
"symfony/process": "^6.3|^7.0|^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1",
"phpstan/phpstan-symfony": "^1.3",
"phpunit/phpunit": "^10.5",
"symfony/filesystem": "^6.3|^7.0|^8.0",
"symfony/framework-bundle": "^6.3|^7.0|^8.0"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Sensiolabs\\TypeScriptBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Maelan LE BORGNE",
"homepage": "https://github.com/maelanleborgne"
}
],
"description": "TypeScript support for Symfony + AssetMapper",
"homepage": "https://github.com/sensiolabs/AssetMapperTypeScriptBundle",
"keywords": [
"asset-mapper",
"typescript"
],
"support": {
"issues": "https://github.com/sensiolabs/AssetMapperTypeScriptBundle/issues",
"source": "https://github.com/sensiolabs/AssetMapperTypeScriptBundle/tree/v0.2.2"
},
"time": "2025-08-28T10:10:44+00:00"
},
{
"name": "sentry/sentry",
"version": "4.29.0",