- clients/web/tsconfig.{app,node,test}.json: repoint the pino, hono,
hono/streaming, @hono/node-server, atomically, chokidar and @napi-rs/keyring
path mappings from ./node_modules to ../../node_modules. The stale mappings
were not failing the build — an unresolvable paths entry falls back to
ordinary walk-up resolution, which finds the root copy — but chokidar is the
case where the fallback never runs: Vite's transitive copy still sits under
clients/web, so tsc was type-checking against the client's copy while Vitest
and the shipped bundle both resolved the root's. Same version today, silent
skew tomorrow. Both path prefixes now carry a comment saying which ownership
each one asserts.
- local-dev skill: the consolidation rationale no longer groups commander, open
and @hono/node-server (client-imported) with the core/ set, no longer claims
#2195 moved undici (it was already root-only), and no longer implies every
root-declared package has an alias.
npm run local:gate passes with clients/web/node_modules/.tmp cleared, so the
tsc results are from a cold build rather than an incremental cache.
Signed-off-by: cliffhall <cliff@futurescale.com>
62 lines
2.6 KiB
JSON
62 lines
2.6 KiB
JSON
{
|
|
"compilerOptions": {
|
|
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
"target": "ES2023",
|
|
/* DOM is included so dev-backend files (and transitively core/) can use
|
|
* Web Fetch APIs (Request, Response, Headers, RequestInfo) without losing
|
|
* type info. Node 18+ provides these as globals at runtime; the DOM lib
|
|
* is the canonical source of their type declarations. */
|
|
"lib": ["ES2023", "DOM", "DOM.Iterable"],
|
|
"module": "ESNext",
|
|
"types": ["node"],
|
|
"skipLibCheck": true,
|
|
|
|
/* Bundler mode */
|
|
"moduleResolution": "bundler",
|
|
"allowImportingTsExtensions": true,
|
|
"verbatimModuleSyntax": true,
|
|
"moduleDetection": "force",
|
|
"noEmit": true,
|
|
|
|
/* Linting */
|
|
"strict": true,
|
|
"noUnusedLocals": true,
|
|
"noUnusedParameters": true,
|
|
"erasableSyntaxOnly": true,
|
|
"noFallthroughCasesInSwitch": true,
|
|
"noUncheckedSideEffectImports": true,
|
|
|
|
/* Path aliases. The dev-backend files imported by vite.config.ts
|
|
* (vite-hono-plugin.ts, web-server-config.ts, server.ts,
|
|
* start-vite-dev-server.ts) live in src/ and import from @inspector/core/*;
|
|
* tsc follows those transitive imports while type-checking vite.config.ts,
|
|
* so this tsconfig needs the same alias tsconfig.app.json has.
|
|
*
|
|
* Two prefixes, and the difference is ownership rather than style. A
|
|
* `./node_modules/...` mapping names a package this client declares — the
|
|
* `@types/*` packages, `vitest`, `yaml`. A `../../node_modules/...` one
|
|
* names a package declared only in the root manifest (#2195), which is
|
|
* every runtime dependency `core/` imports. Those must be spelled out:
|
|
* `chokidar` in particular is still present under `clients/web` as a
|
|
* transitive copy of Vite's, so a `./node_modules` mapping resolves the
|
|
* client's copy at compile time while Vitest and the shipped bundle both
|
|
* resolve the root's. Same version today, and a silent skew tomorrow.
|
|
*
|
|
* Paths are relative to this config file (no `baseUrl` — deprecated in
|
|
* TypeScript 6 / removed in 7).
|
|
*/
|
|
"paths": {
|
|
"@inspector/core/*": ["../../core/*"],
|
|
"pino": ["../../node_modules/pino"],
|
|
"hono": ["../../node_modules/hono"],
|
|
"hono/streaming": [
|
|
"../../node_modules/hono/dist/types/helper/streaming/index"
|
|
],
|
|
"@hono/node-server": ["../../node_modules/@hono/node-server"],
|
|
"atomically": ["../../node_modules/atomically"],
|
|
"chokidar": ["../../node_modules/chokidar"],
|
|
"@napi-rs/keyring": ["../../node_modules/@napi-rs/keyring"]
|
|
}
|
|
},
|
|
"include": ["vite.config.ts", "tsup.runner.config.ts", "server/**/*.ts"]
|
|
}
|