Skip to content

feat!: ship the editor plugin as its own package - #224

Merged
tiagolauer merged 1 commit into
docs/versioning-policyfrom
feat/split-ts-plugin
Jul 28, 2026
Merged

feat!: ship the editor plugin as its own package#224
tiagolauer merged 1 commit into
docs/versioning-policyfrom
feat/split-ts-plugin

Conversation

@tiagolauer

Copy link
Copy Markdown
Owner

Last of four. Stacked on #223. Breaking.

TypeScript 7.0 shipped on 8 July 2026 and is already the latest tag on npm. It carries no public compiler API — ts.Node, ts.forEachChild, ts.createProgram are gone, and the tsserver protocol that loads plugins has been replaced by LSP. That takes out every editor plugin built the classic way, not just this one. 7.1's new API will be different enough that reaching it is a rewrite, not a port.

The library is unaffected. I installed 7.0.2 and checked: tsconfig.json type-checks clean, every .test-d.ts and @ts-expect-error included. The two plugin tsconfigs are dead there, dozens of errors. A CI job now proves the library half — something peerDependencies has claimed since before anyone verified it.

So one package needed two peer ranges. Narrowing to < 7 blocks installs for a library that works fine there; keeping < 8 ships a subpath that can't load for a growing share of users. Either way half the package is misrepresented.

@owlsql/ts-plugin now ships separately on its own version and stays on 0.x — it's in no position to promise stability while its foundation is upstream's call. The library keeps typescript >= 5.4 < 8, and neither package's release is gated on the other's tests.

The plugin imported nothing from the library, so this was a move, not an untangling. Repo becomes an npm workspace. Test counts are unchanged: 156 + 142 = the same 298.

Migration — install the package and rename the plugin:

{ "compilerOptions": { "plugins": [{ "name": "@owlsql/ts-plugin" }] } }

Two smaller things ride along, both consequences of the above:

  • The TypeScript 7 job runs test:types:core, because tests/cli-codegen-edge.test.ts uses the compiler API to prove generated schema output parses. It moved to its own tsconfig so it can sit out that run without being dropped from the others.
  • A prebuild clean on both packages. tsc doesn't clear its outDir, so a dist/ts-plugin left over from a build predating this split would have been published inside the library's tarball. npm pack --dry-run is clean now.

TypeScript 7.0 shipped in July 2026 and is now the latest tag on npm. It
carries no public compiler API: the ts.Node / ts.forEachChild /
ts.createProgram surface the plugin is built on is gone, and the tsserver
protocol that loads plugins has been replaced by LSP. That takes out every
editor plugin built the classic way, not just this one, and 7.1's new API
will be different enough that reaching it is a rewrite rather than a port.

The library is unaffected. It needs no compiler API, type-checks clean on
TypeScript 7, and now has a CI job proving it — something the
peerDependencies range has claimed since before anyone verified it.

That left one package needing two different peer ranges. Narrowing to < 7
would block installs for a library that works fine there; keeping < 8 would
ship a subpath that cannot load for a growing share of users. Either way one
half of the package is misrepresented, so the plugin moves out.

@owlsql/ts-plugin now ships on its own version and stays on 0.x: it is in no
position to promise stability while its foundation is upstream's to decide.
The library keeps typescript >= 5.4 < 8 and is no longer held to the
plugin's range, and a release of one is not gated on the tests of the other.

The plugin imported nothing from the library, so this is a move rather than
an untangling. The repository becomes an npm workspace; the root npm test
deliberately does not run plugin code.

The TypeScript 7 job runs test:types:core rather than test:types, because
tests/cli-codegen-edge.test.ts uses the compiler API to prove generated
schema output parses. That one file moved to its own tsconfig so it can sit
out the TypeScript 7 run without being dropped from the others.

Also adds a prebuild step to both packages: tsc does not clean its outDir,
so a dist/ts-plugin left over from a build predating this split would have
been published inside the library's tarball.

BREAKING CHANGE: the @owlsql/core/ts-plugin subpath is gone. Install
@owlsql/ts-plugin as a dev dependency and change the plugin name in
tsconfig.json.
@tiagolauer
tiagolauer force-pushed the docs/versioning-policy branch from e4fc579 to c44b61c Compare July 28, 2026 17:03
@tiagolauer
tiagolauer force-pushed the feat/split-ts-plugin branch from d3000ad to 6c2a150 Compare July 28, 2026 17:03
@tiagolauer
tiagolauer merged commit bd4d3aa into docs/versioning-policy Jul 28, 2026
13 checks passed
@tiagolauer
tiagolauer deleted the feat/split-ts-plugin branch July 28, 2026 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant