Skip to content

T-UWFT-augmented-packages-split-and-adopt

State: planning/draft · Impact: medium · Complexity: large

The six packages under solutions/augmented/packages/ts are the only configs in the repo that emit dist/ from tsconfig.json itself rather than a separate tsconfig.build.json. So they cannot simply extend the shared bar — the bar sets noEmit: true. They need the dev/build split first, which is why they are last in the adoption order and their own task.

LocationRole today
solutions/augmented/packages/ts/books/tsconfig.jsonEmits: outDir, rootDir, declaration, declarationMap, sourceMap in the dev config; paths aliases; strictNullChecks restated under strict
solutions/augmented/packages/ts/context/tsconfig.jsonByte-identical
solutions/augmented/packages/ts/hierarchy/tsconfig.jsonByte-identical
solutions/augmented/packages/ts/logging/tsconfig.jsonByte-identical
solutions/augmented/packages/ts/entity/tsconfig.jsonSame family but NodeNext; excludes **/*.test.ts
solutions/augmented/packages/ts/utils/tsconfig.jsonNodeNext, and noEmit: true instead of the emit block — already the odd one out
packages/ts/tsconfig/presets/build.jsonThe shared emit mixin these should end up using

Each package has a tsconfig.json that extends the shared bar and does not emit, plus a tsconfig.build.json that extends ["./tsconfig.json", "@sksizer/tsconfig/build"] and carries only rootDir and any include narrowing — the shape every publishable package in packages/ts already uses.

The paths aliases stay local: they are per-package facts and, unlike compilerOptions, resolve against the config that declares them.

  1. Split one package first — books — and establish the pattern end to end: dev config on the bar, build config on the mixin, bun run build producing the same dist/ as before.
  2. Verify by building from the old config and the new one and diffing the trees. That is what caught the ${configDir} trap in #1644 and it is the right check here too.
  3. Apply the pattern to the other four emitting packages.
  4. utils already sets noEmit, so it only needs the extends change — take it last as the easy one, or first as a warm-up.
  5. Delete the strictNullChecks restatement (implied by strict) and the noImplicitAny / forceConsistentCasingInFileNames restatements while there.
  6. Confirm each package’s consumers still resolve — these are workspace:* dependencies of the augmented apps, and the emit shape is what those apps import.
AreaNote
solutions/augmented/packages/ts/books/tsconfig.jsonextend the bar, stop emitting
solutions/augmented/packages/ts/books/tsconfig.build.jsonthe emit mixin
solutions/augmented/packages/ts/context/same split
solutions/augmented/packages/ts/entity/same split, keeping NodeNext
solutions/augmented/packages/ts/hierarchy/same split
solutions/augmented/packages/ts/logging/same split
solutions/augmented/packages/ts/utils/tsconfig.jsonextend the bar; already noEmit
  • AC-1: All six extend a @sksizer/tsconfig/* preset and none emits from tsconfig.json.
  • AC-2: The five that emit have a tsconfig.build.json on the shared mixin.
  • AC-3: dist/ output is byte-identical before and after for each package, verified by building both ways and diffing.
  • AC-4: The augmented apps that consume these packages still build.
  • The augmented apps’ own configs — three are Nuxt project-reference stubs and cannot take the bar; augmented-books/src-frontend and vimit are separate standalone configs that belong with the strays.
  • Publishing any of these packages.

Called out as the hardest tranche in #1644’s deferred section: these six are structurally different rather than merely laxer.


← Back to Tasks