Node 24 + dependency upgrade - #72
Merged
Merged
Conversation
- CI, canary and release test jobs: node-version 22 -> 24 - fastify spec container: node:18-alpine -> node:24-alpine - add .nvmrc (24) and root engines.node >=24 (root is private; published packages keep their engines floors) - eslint: rename react/vue eslint.config.js -> .mjs and express test app express.js -> .mjs so Node 24 stops printing MODULE_TYPELESS_PACKAGE_JSON - eslint: --flag unstable_config_lookup_from_file was renamed to v10_config_lookup_from_file - eslint: allow require() in *.cjs (scripts/fixup-dist.cjs failed lint) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01APQhTaYTjEoreeUdJdcZWi
- identifier, vue: add the `types` condition to `exports` so consumers on moduleResolution bundler/node16 get typings - web-identity: `types` must be the first condition to take effect - web-identity: mark dist/cjs as CommonJS (same fixup-dist.cjs step httpsig and email-verification use); require() of the package failed with "Cannot find module './tokens/request-token.js'" because the package root is "type": "module" Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01APQhTaYTjEoreeUdJdcZWi
Held back on purpose (see report): typescript 6 not 7 (typescript-eslint, svelte-check, @sveltejs/kit peers), eslint 9 (eslint-plugin-react peer), vitest 4 (better-auth peerOptional), and jose/cookie/nanoid/chalk/open on their current majors because the next major raises the Node floor above the packages' engines. - typescript 6: drop baseUrl (rootDir instead), add types: ["node"] where node builtins are used, moduleResolution NodeNext/bundler; CJS builds keep node10 resolution behind ignoreDeprecations 6.0 - @types/node ^24 everywhere; BufferSource casts in httpsig - better-auth 1.7: generateState takes an options object; declare @better-auth/core (imported but never declared) - vite 8: rollupOptions -> rolldownOptions; vite-plugin-dts 5 needs @vue/language-core - dotenv 17 logs by default: quiet: true in quickstart - lockfile regenerated (it had drifted: vite 6, chalk 4, get-port 5) - husky pre-commit: prettier --ignore-unknown (prettier 3.9 exits 2 on files it has no parser for, e.g. .nvmrc) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01APQhTaYTjEoreeUdJdcZWi
Prettier 3.9 reformats 11 files (union types, markdown tables). That reformat is deferred to its own PR, so the upgrade stays on 3.4.x for now and `prettier --check` stays green. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01APQhTaYTjEoreeUdJdcZWi
Removed (verified by knip/depcheck plus grep): rimraf (rm -rf in scripts), esm, npm-run-all, root next, @types/cookie (stub; cookie ships types), cors and swr (nextjs), cors and @hellocoop/helper-server (express), dotenv (fastify; express moves it to dev), eslint-config-next, @hellocoop/definitions (better-auth), @misskey-dev/node-http-message-signatures, react-dom (react dev), svelte-check, tslib, fs-extra (quickstart uses fs.mkdirSync + writeFileSync). Declared what was imported but only resolved through hoisting: cookie and @hellocoop/definitions in fastify; @better-auth/core, @better-fetch/fetch, better-call, zod, jose in better-auth; @tsconfig/node18 in definitions, helper/*, react; typescript in definitions; @types/node in httpsig and nextjs; vite in vue; @eslint/js and globals at the root. @vitejs/plugin-vue moves to devDependencies. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01APQhTaYTjEoreeUdJdcZWi
…r collection The 10 MB threshold in performance-security.test.ts is only meaningful when global.gc runs before each measurement; without --expose-gc the result is GC-timing dependent and flakes in CI (10.36 MB on the PR run). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01APQhTaYTjEoreeUdJdcZWi
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.
Stacked branches chore/node24 → chore/deps-latest → chore/deps-prune: root toolchain and CI on Node 24 (published packages keep their engines floors, see #70); 55 dependency bumps across root + 16 workspaces (TS 6, lerna 10, mocha 12, chai 6, vite 8, adapter-auto 7, plugin-vue 6, esbuild 0.28); 20 removals/moves (rimraf → rm -rf, esm, npm-run-all, unused cors/swr/dotenv/tslib…), 7 undeclared-but-imported deps declared; identifier/vue exports maps gain a types condition; web-identity CJS entry fixed. prettier held at ~3.4 (reformat is #71). Build + lint + all suites green on Node 24. No publish.
🤖 Generated with Claude Code
https://claude.ai/code/session_01APQhTaYTjEoreeUdJdcZWi