Skip to content

chore: bump dev tooling to modern versions#713

Open
tyler-reitz wants to merge 13 commits into
FirebaseExtended:mainfrom
tyler-reitz:chore/bump-devdependencies
Open

chore: bump dev tooling to modern versions#713
tyler-reitz wants to merge 13 commits into
FirebaseExtended:mainfrom
tyler-reitz:chore/bump-devdependencies

Conversation

@tyler-reitz

@tyler-reitz tyler-reitz commented Jun 17, 2026

Copy link
Copy Markdown

Summary

  • TypeScript `^5.1.3` → `^6.0.3`
  • Vitest `^0.32.2` → `^4.1.9`, `@vitest/ui` → `^4.1.9`
  • Vite `^4.3.9` → `^8.0.16`, `@vitejs/plugin-react` `^4.0.1` → `^6.0.2`
  • `@rollup/plugin-typescript` `^11.1.1` → `^12.3.0`
  • Prettier `^2.8.8` → `^3.8.4`
  • typedoc `^0.24.8` → `^0.28.19`, typedoc-plugin-markdown `^3.15.3` → `^4.12.0` (required for TypeScript 6 compatibility)
  • `tsconfig.json`: `moduleResolution: "node"` + `ignoreDeprecations: "6.0"` (bundler resolution breaks rxfire subpath imports — keeping node resolution for now; tracked in Migrate moduleResolution from "node" to "bundler" and remove ignoreDeprecations #723)
  • GitHub Actions: bump checkout, setup-node, upload-artifact, download-artifact, cache to v4
  • Node: CI matrix 20/22 → 22/24; build/publish/docs jobs → Node 24
  • `firebase-tools`: `^12.4.0` → `^15.22.3`
  • `firebase` (devDep): `^9.23.0` → `^11.10.0` (required for firebase-tools 15 emulator compatibility; 12.x blocked by rxfire peer dep)
  • `rxfire`: `^6.0.3` → `^6.1.0` (supports firebase 11.x peer dep)
  • `functions/`: migrate to Gen 2 API, firebase-admin `^11` → `^13`, firebase-functions `^4` → `^7`, engines node 18 → 22
  • Fix TypeScript 6 type errors: `NodeJS.Timeout` → `ReturnType`, declare `process.env`, `as ObservableStatus` assertions in firestore.tsx

Test plan

  • `tsc --noEmit` passes clean
  • `npm run build` succeeds (pre-existing MISSING_GLOBAL_NAME warnings unchanged)
  • `npm run test:useObservable` — 14/14 pass
  • `npm run test:firebaseApp` — 7/7 pass
  • `npm test` (full emulator suite) — 59/59 pass on Node 24 locally; Node 22 + 24 pass in CI

@google-cla

google-cla Bot commented Jun 17, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates several devDependencies in package.json and adds the ignoreDeprecations setting to tsconfig.json. The feedback highlights that multiple updated dependency versions (such as typescript, vite, vitest, and prettier) do not exist on the public npm registry, which would cause installation failures. Additionally, the ignoreDeprecations value in tsconfig.json should be corrected from "6.0" to "5.0" to properly suppress the legacy module resolution deprecation warning.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread package.json
Comment thread package.json
Comment thread package.json
Comment thread package.json
Comment thread package.json
Comment thread package.json
Comment thread package.json
Comment thread tsconfig.json
"noUnusedParameters": true,
// use Node's module resolution algorithm, instead of the legacy TS one
"moduleResolution": "node",
"ignoreDeprecations": "6.0",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The ignoreDeprecations: "6.0" setting is incorrect because TypeScript 6.0 does not exist, and the deprecation of the legacy node (Node 10) module resolution was introduced in TypeScript 5.0. To suppress the deprecation warning, you should specify "5.0".

Suggested change
"ignoreDeprecations": "6.0",
"ignoreDeprecations": "5.0",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please file an issue to investigate what we need to fix so that we can remove this option?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed #723. Also fixed the value from "6.0" to "5.0" while I was in here.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually reverting that -- with TypeScript 6, the node10 deprecation warning requires "6.0" to silence it, not "5.0". So the original value was correct for our setup. The tracking issue (#723) still stands.

@tyler-reitz

Copy link
Copy Markdown
Author

Note on the failing test checks: the 'throws an error if no observableId is provided' test failure in CI appears to be pre-existing and specific to the full emulator test suite environment — the test passes locally with both the old and new Vitest versions (14/14). Flagging so this doesn't block review.

@tyler-reitz tyler-reitz force-pushed the chore/bump-devdependencies branch 3 times, most recently from 01eebed to c995882 Compare June 18, 2026 18:31
Upgrade TypeScript 5→6, Vitest 0.32→4.1, Vite 4→8, @vitejs/plugin-react 4→6, @rollup/plugin-typescript 11→12, and Prettier 2→3. Add ignoreDeprecations:"6.0" to tsconfig to silence the node moduleResolution deprecation warning (rxfire subpath exports lack a types condition so bundler resolution breaks them).
typedoc@0.24.8 only supports TypeScript up to 5.1.x; upgrading to
0.28.19 which supports 6.0.x. Also bumps typedoc-plugin-markdown
from 3.15.3 to 4.12.0 to match the new typedoc peer requirement.
Vite 8 (via rolldown) requires Node 20+ for styleText from node:util.
Update CI test matrix to Node 20/22 and build/publish jobs to Node 20.
Node 18 reached EOL in April 2025.

Also fix the "throws an error if no observableId is provided" test which
was failing under Vitest 4. React 18 dispatches a window error event
when a component throws during render, even when the throw is caught by
expect().toThrow(). Vitest 4 surfaces these as uncaught errors. Fix by
adding a window error listener that calls preventDefault(), and match on
the error message via expect.objectContaining to account for React
setting _suppressLogging on the error object.

Also widen the firebase peerDependency to accept v10/v11/v12.
@tyler-reitz tyler-reitz force-pushed the chore/bump-devdependencies branch from c995882 to 74bb15b Compare June 25, 2026 20:09
Comment thread .github/workflows/test.yaml Outdated
strategy:
matrix:
node: ["18", "20"]
node: ["20", "22"]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's jump to 22 and 24: https://nodejs.org/en/about/previous-releases

Suggested change
node: ["20", "22"]
node: ["22", "24"]

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, updated to ["22", "24"].

Comment thread .github/workflows/test.yaml Outdated
uses: actions/setup-node@v4
with:
node-version: '18'
node-version: '20'

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
node-version: '20'
node-version: '24'

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated to 24.

Comment thread .github/workflows/docs.yaml Outdated
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: '18'

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
node-version: '18'
node-version: '24'

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated to 24.

Comment thread .github/workflows/test.yaml Outdated
uses: actions/setup-node@v4
with:
node-version: '18'
node-version: '20'

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
node-version: '20'
node-version: '24'

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated to 24.

Comment thread tsconfig.json
"noUnusedParameters": true,
// use Node's module resolution algorithm, instead of the legacy TS one
"moduleResolution": "node",
"ignoreDeprecations": "6.0",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please file an issue to investigate what we need to fix so that we can remove this option?

Comment thread package.json Outdated

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if the CI is failing because firebase-tools is so old. Could you try to update to 15.22.3?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated to ^15.22.3 -- will see if it clears the CI failures.

…Deprecations

- CI matrix: Node 20/22 -> 22/24; build/publish/docs jobs: node 20/18 -> 24
- firebase-tools: ^12.4.0 -> ^15.22.3 (may fix emulator test CI failures)
- tsconfig: fix ignoreDeprecations value from "6.0" to "5.0" (tracked in FirebaseExtended#723)
…-tools 15

- firebase devDep: ^9.23.0 -> ^12.15.0 (required for firebase-tools 15 emulator compatibility)
- functions/index.js: migrate from Gen 1 to Gen 2 API (firebase-functions v7)
- functions: firebase-admin ^11 -> ^13, firebase-functions ^4 -> ^7
- functions: engines.node 18 -> 22
- SuspenseSubject: NodeJS.Timeout -> ReturnType<typeof setTimeout>
- firebaseApp: declare process.env for Vite define replacement
- firestore: type assert useObservable return as ObservableStatus<T>
@tyler-reitz

Copy link
Copy Markdown
Author

All CI checks now passing. Summary of changes made during review:

  • Node bumped to 22/24 per your suggestion
  • firebase-tools bumped to 15.22.3, which required also bumping firebase devDep to 11.x (12.x blocked by rxfire's peer dep) and migrating the test functions to the Gen 2 API
  • Full emulator test suite now passes on Node 22 and 24
  • Fixed 3 TypeScript 6 type errors surfaced by the tighter checker (tracked in Migrate moduleResolution from "node" to "bundler" and remove ignoreDeprecations #723)

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.

2 participants