Strangler-fig migration setup for the frontend. Legacy public/js/*.js keeps working unchanged; new TypeScript code lives under client/ and gets bundled into public/dist/ at image-build time. Adds: - esbuild@0.28 as a regular dep (so docker build can run the bundler without --include-dev). It's small; tsx already pulled in a pinned version transitively. - scripts/build-client.mjs: bundles every top-level client/*.ts file into public/dist/<name>.js as ESM with sourcemap. --watch mode for dev. Sub-directories under client/ are bundled by their parent entry, not separately. - tsconfig.client.json: browser target (lib: DOM), bundler module resolution, isolatedModules:true so esbuild + tsc agree. - Two npm scripts: build:client, typecheck:client. - Dockerfile: 'RUN node scripts/build-client.mjs' between COPY and CMD, so the prod image ships with the built bundle. - .gitignore: public/dist/ — build output, never committed. - public/index.html: <script type="module" src="/dist/main.js"> appended after legacy script tags. - client/main.ts: minimal entry point with a console.log marker (window.__clientBundle = true) so we can verify the bundle loaded. Sacred files (per project memory) kept off the migration path: - public/js/encounters.js (save/idempotency) - voiceDictation.js, sickVisit.js recording paths (STT plumbing) These need explicit per-file approval from Daniel before migration. Verification: - npm run typecheck → 0 errors (backend) - npm run typecheck:client → 0 errors (frontend) - npm run build:client → public/dist/main.js + .map in 3 ms - 46/46 unit tests pass Next session: migrate the first real frontend module (small + isolated, likely extensions.js or memories.js) into client/ as ES module + TS.
31 lines
570 B
JSON
31 lines
570 B
JSON
{
|
|
"compilerOptions": {
|
|
"target": "ES2022",
|
|
"module": "ES2022",
|
|
"moduleResolution": "bundler",
|
|
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
"esModuleInterop": true,
|
|
"forceConsistentCasingInFileNames": true,
|
|
"skipLibCheck": true,
|
|
|
|
"allowJs": true,
|
|
"checkJs": false,
|
|
|
|
"noEmit": true,
|
|
|
|
"strict": false,
|
|
"noImplicitAny": false,
|
|
"strictNullChecks": false,
|
|
|
|
"resolveJsonModule": true,
|
|
"isolatedModules": true
|
|
},
|
|
"include": [
|
|
"client/**/*"
|
|
],
|
|
"exclude": [
|
|
"node_modules",
|
|
"public",
|
|
"dist"
|
|
]
|
|
}
|