mirror of
https://github.com/storytold/craft-repo-status-app.git
synced 2026-10-13 23:17:45 +00:00
All UI code moves to strict TypeScript in ui/src/, compiled by tsc (no bundler) to ui/build/, which index.html loads; the app's build.rs runs the compile so every cargo build ships the current UI. Sources import each other as ./x.ts so node --test runs them directly, and the data types mirror crates/craft-core/src/model.rs. app.ts now exports start(api) and main.ts wires it to Tauri or the browser preview, so the UI can be tested in happy-dom against a fake host: sorting, dragging, clicks, the window picker, status, the urgent view and shortcuts. Sort toggling and drop placement move into model.ts with unit tests. The inline error-reporting script becomes report.ts. CLAUDE.md records the rule: no .js/.mjs/.cjs/.jsx files, inline scripts, inline handlers or javascript: URLs. ui/src/repo.test.ts enforces it in make test; make check adds a tsc type-check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26 lines
839 B
JSON
26 lines
839 B
JSON
// Type-checks the UI and its tests. Sources import each other as `./x.ts`, so
|
|
// `node --test` runs them directly (type stripping) and tsc rewrites the
|
|
// imports to `./x.js` when building; `erasableSyntaxOnly` keeps to syntax
|
|
// Node can strip. tsconfig.build.json emits the browser code to ui/build/.
|
|
{
|
|
"compilerOptions": {
|
|
"target": "es2023",
|
|
"module": "esnext",
|
|
"moduleResolution": "bundler",
|
|
"moduleDetection": "force",
|
|
"lib": ["es2023", "dom", "dom.iterable"],
|
|
"types": ["node"],
|
|
"strict": true,
|
|
"noImplicitOverride": true,
|
|
"noFallthroughCasesInSwitch": true,
|
|
"erasableSyntaxOnly": true,
|
|
"verbatimModuleSyntax": true,
|
|
"rewriteRelativeImportExtensions": true,
|
|
"allowJs": false,
|
|
"skipLibCheck": true,
|
|
"rootDir": "ui/src",
|
|
"noEmit": true
|
|
},
|
|
"include": ["ui/src"]
|
|
}
|