chore(bindings): TypeScript 7, nodenext resolution, and the Biome canon - #43
Merged
Conversation
…ption TypeScript 5.9.3 -> 7.0.2 in bindings/typescript. TS7 hard-removes moduleResolution: node (TS5108), so module/moduleResolution move to nodenext -- not bundler, which permits extensionless specifiers that would survive into the emitted dist/*.js and break Node resolution. target moves to es2023. TS7 also defaults types to [], so tsconfig now sets types: ["bun"] explicitly for bun:test and the Bun global. Adopts the shared Biome canon (@ceralive/biome-config 2026.8.0 on Biome 2.5.8) and the workspace bindings script convention already used by srtla-send-rs: lint = biome check, typecheck = tsc --noEmit. The old tsc-meaning lint script is renamed to typecheck and bindings.yml runs both as separate steps. Published exports are unchanged -- all four entrypoints import to identical key sets before and after. The dist recompilation diff is formatting- and syntax-level only (canon reflow, import ordering, es2023 numeric separators, TS7 declaration key order).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Affected repo & language:
srtla— TypeScript (bindings/typescriptonly)What
Brings the TS bindings package onto TypeScript 7.0.2 with
nodenextmodule resolution,and adopts the shared Biome canon (
@ceralive/biome-config@2026.8.0, Biome 2.5.8) —which this package had no lint coverage from at all until now.
Adopting Biome meant renaming a script that already existed under a misleading name:
lintused to betsc --noEmit. It is nowbiome check ., and the typecheck moved toits own
typecheckscript.bindings.ymlwas updated so the type gate is not silentlydropped: the old single "Type-check" step is now two steps,
LintandType-check.The C/C++ receiver and everything outside
bindings/typescriptare untouched.Why
@ceralive/biome-config@2026.8.0is published and is the workspace-wide lint/formatcanon. This package and the cerastream bindings were the last two TypeScript packages in
the workspace with zero Biome coverage — a lint break could land here and nothing
would say so.
TypeScript 7 is the workspace direction for packages that can take it (the compiler is
verified per package with
tsc --versionrather than assumed from the manifest), andthis package can: it has no Svelte, no compiler-API consumer, and no
svelte-check.How to verify
The published API is unchanged. To confirm rather than take my word for it, build
dist/from
mainin a worktree and compare the exported names:All four entrypoints (index 26 / sender 8 / receiver 9 / telemetry 7 exports) come back
identical.
Risks
The interesting one, and the reason this PR is worth reading rather than skimming:
Biome's
organizeImportsassist re-sorts re-exports but leaves JSDoc comments wherethey were. In
src/sender/index.ts(a barrel of threeexport * from) the first--writepass orphaned a/** @deprecated */block and stripped the doc offexport * from './types.js'. Lint was perfectly green; the repo's own ADR-003deprecation-coverage.test.tswent red. That is fixed here, and it is the reason theverification steps above run the test suite and not just
lint.Second:
dist/is tracked in this package, so adopting the canon formatter produces areal
distdiff (tsc re-prints from the reformatted AST). It was reviewed and classified— line re-wrapping at the 100-col canon, import/export member ordering, and two
tsconfig-driven syntax differences (numeric separators preserved under
target: es2023;.d.tsobject-key ordering from the TS7 declaration emitter). Zero value, identifier,control-flow or export-name changes.
Biome's unsafe autofix for
noNonNullAssertion(x!→x?.) was not taken — itchanges runtime semantics. All five hits were redundant assertions
(
noUncheckedIndexedAccessis off, solines[i]is alreadystring), so the!wassimply deleted, which is semantics-preserving and keeps the typecheck green.
Upgrade ledger
typescriptmoduleResolutionmovednode→nodenext@biomejs/biome@ceralive/biome-config@types/bunzodHeld back / not taken: nothing.
bun outdatedreturns empty after the bumps.TypeScript
7.1.0-dev.*prereleases remain forbidden.New
biome-ignorecomments: none. The 37 first-run diagnostics were all formattingand import ordering, fixed by a single
biome check --write .with no rule disabled andno override added.
Config note:
biome.jsonexcludesdistandtest-resultsfromfiles.includes—distis tsc-formatted output, not Biome-formatted, and including it produces hundredsof bogus format diagnostics.