Skip to content
codefastlabs

Command Palette

Search for a command to run...

v0.11.0· Changelog

@codefast/typescript-config

0.11.0

Minor Changes

  • #1068 Add the node22.json and node22-dom.json overlays, which narrow lib and target to what Node 22 ships for a package whose floor is on Node 22, and lower the package's own Node.js floor to 22.12.

0.10.0

Minor Changes

  • #976 engines.node is now >=24.0.0, up from >=22.12.0, and Node 22 is no longer supported. Node 24.0.0 is the first release with explicit resource management built in (using, await using, DisposableStack, AsyncDisposableStack, SuppressedError) and all of ES2025, so the packages use both as the platform ships them instead of shimming them for an older line, and the CI matrix runs the unit suite on 24.0.0 itself. Move to Node 24, or stay on the current minor while a deployment still runs Node 22.

  • #976 The presets' lib and target move from ES2024 to ES2025, the newest edition that Node 24 and the supported browsers both ship. base.json, and so react.json and next.json, lists DOM, DOM.Iterable and ES2025; library.json lists ES2025. A program on a preset can use ES2025 builtins with no lib entry of its own, and a builtin newer than that, such as Map.prototype.getOrInsert, is still a type error.

  • #965 The typescript peer range is now >=7.0.0, up from >=5.0.0: TypeScript 7 is the one compiler the presets are checked against, so it is the floor they support. A project pinned to TypeScript 6 or older now fails npm's peer resolution (ERESOLVE) and gets a pnpm peer warning. Move it to TypeScript 7, or stay on 0.9.x while its tooling still needs TypeScript 6. A Next.js app on next.json needs Next.js 16.3 or later, the first release that type-checks with TypeScript 7.

  • #977 library-build.json sets types: [] instead of ["node"], so a build loads only the ambient types its own config names. A package that runs on Node adds types: ["node"] to its tsconfig.build.json, which also brings explicit resource management. A browser or universal package leaves it empty, so a Node global in its source fails the build. No preset lists ESNext.Disposable: a Node program gets explicit resource management from @types/node 24 or later, and a browser program adds it once the browsers it targets ship it, which Safari has not.

0.9.1

Patch Changes

  • #892 4c97c5b Thanks @thevuong! - Lower the monorepo's Node floor from 24 to 22.12, so the packages install and run on the active Node 22 LTS line.

    engines.node becomes >=22.12.0 across every package — the floor the shared toolchain (oxlint, Vite, Vitest, TanStack Start) already requires. Development stays on the latest Node (.node-version) for speed, and a CI matrix exercises the floor and the active LTS directly, so the floor is a contract CI proves rather than one everyone has to run. @types/node is pinned to the floor's major (^22), with a workspace override holding the whole tree there so a dev tool's @types/node: "*" peer can no longer pull a newer major and mask an API the floor lacks. The floor stays mechanical, not advisory: @codefast/di keeps its own Map upsert helpers rather than the ES2025 Map.prototype.getOrInsert (which would raise the floor to 26) and its lib stays ES2024. @codefast/cli's mirror step now calls the node:path functions directly instead of aliasing them, which the floor's types correctly flag as unbound methods.

    The shared @codefast/typescript-config presets pin lib and target to ES2024 (was ESNext) so the compiler's ECMAScript surface matches the Node floor: an ES2025 builtin such as Map.prototype.getOrInsert now fails to type-check rather than compiling and crashing on Node 22.12. @codefast/di and @codefast/di-testing already pinned lib and are unchanged.

    Internal subpath imports move from a #/ prefix to a bare # (#core/token, not #/core/token), and the package.json#imports keys become #*/#tests/*/#examples/* to match. Node's native ESM resolver rejects a #/-prefixed specifier with ERR_INVALID_MODULE_SPECIFIER on the whole Node 22 line (and on Node 24 before 24.14), and each package ships those specifiers verbatim inside its published dist/*.js for a consumer's Node to resolve — so this rename is what actually lets the packages import on the new floor. Purely internal: a consumer's own import paths are unchanged.

0.9.0

Minor Changes

  • #809 7485645 Thanks @thevuong! - exactOptionalPropertyTypes now defaults to true in base.json, so every preset (base, library, react) turns it on and each package inherits one source of truth instead of repeating the flag. Packages not yet ready for it opt out explicitly with "exactOptionalPropertyTypes": false (@codefast/cli, @codefast/tailwind-variants, and the private benchmark packages). A consumer extending these presets will now type-check under exactOptionalPropertyTypes; set it back to false locally if that surfaces errors you are not ready to fix.

Patch Changes

  • #791 37a212b Thanks @thevuong! - Point the README's license badge and "License" section at the package's own LICENSE file instead of the monorepo root.

  • #793 83cceeb Thanks @thevuong! - Make "MIT" in the README's License section the link to the package's LICENSE file.

  • #796 ba04d27 Thanks @thevuong! - Rewrite the README around one structure — what the package is, installation and requirements, a complete quick start, the concepts in learning order, then the documents and the license — with every API claim checked against the current code and no figures that go stale.

0.8.0

Minor Changes

  • #746 3dc0808 Thanks @thevuong! - chore(typescript-config): hoist noImplicitOverride and verbatimModuleSyntax into the base preset

    Both flags were copy-pasted across five workspace tsconfigs and were absent from the shared preset. They now live in base.json, so every workspace inherits them and the redundant per-package copies are removed. Enabling them repo-wide was verified to produce zero new type errors. exactOptionalPropertyTypes is intentionally left per-package: turning it on everywhere surfaces mostly-benign errors in the component/CLI packages, so it stays opt-in for the logic-heavy packages that benefit from it.

0.7.0

0.6.2

0.6.1

0.6.0

0.5.0

Minor Changes

  • 71cf664 Thanks @thevuong! - Add a library-build.json preset holding the shared emit options for the native tsc package build (noEmit: false, declaration, declarationMap, sourceMap, types: ["node"]). Each package's tsconfig.build.json now uses array extends (["./tsconfig.json", "@codefast/typescript-config/library-build.json"]) and keeps only its local outDir/rootDir and include — dropping the duplicated emit block across all library packages. Path-relative options stay local because extends resolves them against the file that declares them.

0.5.0-canary.9

0.5.0-canary.8

0.5.0-canary.7

0.5.0-canary.6

Minor Changes

  • 71cf664 Thanks @thevuong! - Add a library-build.json preset holding the shared emit options for the native tsc package build (noEmit: false, declaration, declarationMap, sourceMap, types: ["node"]). Each package's tsconfig.build.json now uses array extends (["./tsconfig.json", "@codefast/typescript-config/library-build.json"]) and keeps only its local outDir/rootDir and include — dropping the duplicated emit block across all library packages. Path-relative options stay local because extends resolves them against the file that declares them.

1.0.0-canary.7

Minor Changes

  • 71cf664 Thanks @thevuong! - Add a library-build.json preset holding the shared emit options for the native tsc package build (noEmit: false, declaration, declarationMap, sourceMap, types: ["node"]). Each package's tsconfig.build.json now uses array extends (["./tsconfig.json", "@codefast/typescript-config/library-build.json"]) and keeps only its local outDir/rootDir and include — dropping the duplicated emit block across all library packages. Path-relative options stay local because extends resolves them against the file that declares them.

1.0.0-canary.6

0.5.0-canary.5

0.5.0-canary.4

0.5.0-canary.3

0.5.0-canary.2


Showing the latest 20 releases; the full changelog on GitHub has 197 more releases.