chore: replace Biome with oxlint, oxfmt and Knip - #7
Open
Thomasims wants to merge 4 commits into
Open
Conversation
Swaps @biomejs/biome for the shared @antelopejs/tooling-configs presets: oxlint (type-aware, via oxlint-tsgolint) for linting, oxfmt for formatting and Knip for dead-code and dependency analysis. The lint / format scripts are repointed and a `knip` script is added; CI already runs `pnpm lint`. tsconfig: tsgolint rejects the `moduleResolution: "node"` (node10) value TypeScript 7 removed, and it discovers each file's tsconfig itself, so the field is dropped rather than raised — `module: "commonjs"` is untouched so the emit stays byte-compatible. There was no `baseUrl` to remove and `rootDir` was already set. The linter forced no changes at all: `pnpm lint` reports zero errors and zero warnings on the single source file, nothing is disabled, and `pnpm knip` reports no unused files, exports or dependencies. Verified: the whole of dist is byte-identical to the origin/main build and the runtime export keys of the `.` subpath match (RunQuery, r). This package has no test suite — `ajs module test` is not wired up here and there is no `test` script on origin/main either — so there is no test result to compare.
Thomasims
marked this pull request as ready for review
September 7, 2026 16:10
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.
Replaces
@biomejs/biomewith the shared@antelopejs/tooling-configspresets: oxlint (type-aware, viaoxlint-tsgolint) for linting, oxfmt for formatting, and Knip for dead-code and dependency analysis.Tooling swap
biome.jsondeleted,@biomejs/biomeremoved.oxlint.config.ts,oxfmt.config.ts,knip.config.ts, each extending the shared preset with no repo-specific overrides — this repo needed none.oxlintis pinned to exactly1.81.0— the JS plugin API is alpha and has to match the versiontooling-configsbuilds against.lint→oxlint,lint:fix→oxlint --fix,format→oxfmt .,format:check→oxfmt --check ., plus a newknip..github/workflows/ci.ymlgainspnpm format:checkandpnpm knipsteps next to the existingpnpm lint, in a separateci:commit. This package has no test suite, so there is nopnpm teststep.oxfmt.config.tscarries a temporary.github/ISSUE_TEMPLATE/**ignore — those are Markdown templates with a.ymlextension that oxfmt cannot parse. It goes away with tooling-configs#5.tsconfig
Type-aware linting runs tsgolint, which rejects options TypeScript 7 removed and auto-discovers each file's
tsconfig.json(so pointing it at a separate config does not help). One change:"moduleResolution": "node"is deleted. tsgolint only rejects the explicit removednode10value, so dropping the field satisfies it while the emit stays byte-compatible."module": "commonjs"is deliberately left alone. Raising it tonode16looks like the tidier fix and is a runtime break: tsc then stops downlevellingawait import(...)and emits a native ESM dynamic import, which bypasses the CommonJS resolver detour theajsruntime installs. There was nobaseUrlto remove androotDirwas already set, so this is the whole tsconfig diff.What the linter forced
Nothing.
pnpm lintreports zero errors and zero warnings across the single source file, andoxlint --fixhad no import order to correct. Nothing is disabled anywhere in the repo — there are nooxlint-disablecomments in this PR.What Knip needed
Nothing. No unused files, exports or dependencies, and no ignore entries were required, so
knip.config.tsis the bare preset.pnpm knipexits 0 (the remaining "configuration hints" are preset globs —nuxt-layer/**,playground/**,scripts/**— that simply do not match this repo).Worth stating explicitly for an interface package: Knip flagged no exported symbol as unused, so nothing was deleted on its advice.
RunQueryand the re-exportedrare the published contract. Note the scope of that check:src/index.tsis this repo's only source file and it is Knip's entry point, so Knip does not evaluate its exports at all — by design, since an interface's entry exports are the contract. Knip does catch unused files and unused exports in any non-entry module (verified with a planted dead export); there simply are none here.Verification
The public surface of a versioned interface must not move, so it was checked against a build from an untouched
origin/mainworktree:package.jsonexportsdeclares.and./package.json. The runtime export keys of.are identical:RunQueryandr.disttree is byte-identical to theorigin/mainbuild —index.js,index.d.tsand the source map — both before and after the oxfmt pass.pnpm lint,pnpm knipandpnpm format:checkall exit 0.Test baseline: this package has no test suite. There is no
testscript and noantelopeJs.testentry onorigin/main, and CI does not run one. So there is no pass/fail to compare — the verification above rests on the byte-identical build, not on tests.The oxfmt pass is a separate commit recorded in
.git-blame-ignore-revsto keepgit blamereadable. It normalizespackage.jsonkey order and reflows Markdown code blocks inAGENTS.md,CHANGELOG.mdanddocs/; no source file changed.