mirror of
https://github.com/storytold/craft-repo-status-app.git
synced 2026-10-13 15:09:09 +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>
1.3 KiB
1.3 KiB
Craft Repo Status App
Rules
- No raw JavaScript, ever. All frontend code is TypeScript in
ui/src/. Never add.js,.mjs,.cjsor.jsxfiles, inline<script>code, inlineon…=handlers orjavascript:URLs, and never commitui/build/(tsc's output). Scripts and tooling go in Rust, shell or Makefile targets, not JS.ui/src/repo.test.tsenforces this inmake test. - New UI code gets tests: pure logic in
ui/src/model.tswithmodel.test.ts, DOM behavior inapp.test.ts(happy-dom, fake host API).
TypeScript setup
tsconly, no bundler. Sources import each other with.tsextensions;node --testruns them directly (type stripping) and tsc rewrites the imports to.jswhen emitting. Use only erasable syntax (erasableSyntaxOnly): no enums, namespaces or parameter properties.tsconfig.jsontype-checks everything, tests included;tsconfig.build.jsonemits the browser code toui/build/.crates/craft-status-app/build.rsrunsnpm run buildbefore Tauri embedsui/.ui/src/model.ts's data types mirrorcrates/craft-core/src/model.rs: change both together.
Commands
make test: Rust tests +npm test(UI tests)make check: clippy, rustfmt,npm run typecheckmake preview: the UI in a browser againstui/dev-snapshot.json