FirebaseExtended / FirebaseExtended/reactfire

React 19 foundation: run tests against 19, then drop React 16/17

Aperta
#789 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
v5
Lingua principale
TypeScript
Stelle
3.6k
Fork
403
Merge medio
14h 53m
PR unite (30g)
5

Descrizione

Tracking issue for the v5 React 19 foundation. Two PRs, in this order.

## Why this is first

Every other v5 cluster sits on top of it, and one half of it is a gap rather than a migration: **CI type-checks React 19 but has never executed a test against it.** The type-check job carries `matrix.react: ["18","19"]`; the test job's matrix is Node versions only, and the lockfile resolves React 18.2.0. So executed coverage on 19 is zero today.

## PR 1: React 19 as an executed test job (CI only)

Adds a `react` dimension to the test job so the suite actually runs on 19.

This lands **first and alone**, before any `src/` change. The `use-sync-external-store` shim delegates to `React.useSyncExternalStore` when it exists, so the suite runs on React 19 with the shim still in place. That gives a measured baseline to compare against once the shim is deleted, instead of changing the runtime and the dependency in one step.

⚠️ **Not a one-line matrix addition.** The test job currently matrixes `node: [22, 24]` only. Adding a `react` dimension **doubles the emulator jobs from two to four**, each with its own Java setup and emulator cache.

⚠️ **That interacts with #776.** The firestore flake sits at 7.5% per full-suite run, so doubling the emulator jobs roughly doubles per-PR exposure to a red job. Deliberately not putting a number on it: contention is the suspected mechanism, so the jobs are correlated rather than independent, and multiplying the rate would overstate the precision. **This argues for #787's timing data landing before the matrix widens.**

Reviewable by anyone; no `src/` change, no API surface.

## PR 2: drop React 16/17

One PR, one review:

- `peerDependencies.react`: `>=16 || experimental` becomes `^18 || ^19`
- delete the `use-sync-external-store` shim and its dependency
- drop the 16/17 entries from the CI matrix

Splitting these buys a second review round trip on what is a single decision.

## Acceptance

- `peerDependencies.react` reads `^18 || ^19`
- `use-sync-external-store` is absent from `package.json`
- the test job runs on React 19 and is green, with the shim gone

## Notes

- **The `use()` suspend-gate swap is out of scope.** Spiked: it is a behavioural no-op on React 19.2.8 and React 19 emits no warning for the current throw form, so there is no deprecation pressure and no reason to bundle it here.
- **Related to #788.** "CI type-checks React 19 but never runs a test against it" is a live instance of the pattern that issue collects: a check that passes while measuring nothing. #788 currently has no example attached to it.
- The React floor is `^18 || ^19`, not 19-only. Dropping 18 is not part of this.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start with the test job matrix, package.json, and the lockfile to trace the current React and Node combinations. Land the React 19 test-job coverage first, then verify the stated peer dependency, shim removal, CI matrix, and green React 19 suite meet the acceptance criteria.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
github-actions, react, typescript
Ambito
ci-cd, testing
Tipo di issue
Refactoring
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
55/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.