FirebaseExtended / FirebaseExtended/reactfire

Add a published .d.ts diff to the release process to catch breaking type changes

Ouverte
#749 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
TypeScript
Étoiles
3.6k
Forks
403
Merge moyen
14 h 53 min
PR mergées (30 j)
5

Description

## Problem

4.2.4 shipped as a patch but contained breaking TypeScript type changes with no changelog note. The main one: `ObservableStatus` was refactored from a flat interface (`data: T`) into a discriminated union (`data: T | undefined` unless narrowed on `status`), which breaks the standard destructure-and-use pattern across every data hook, including the documented suspense pattern. It is type-only (no runtime impact), but it reds strict-TS consumer CI on upgrade.

It slipped through because:

- The change came in via #583 ("use `useSyncExternalStore` to sync data"), whose title looked like an internals change, not a public API break.
- It then sat unreleased for ~3 years (v4.2.3 was 2022-08, #583 merged 2023-07).
- 4.2.4 batched 35 PRs of accumulated `main` into one bump, with no step auditing the cumulative public type surface.

## Proposal

Add a release-time (or CI) check that diffs the candidate's emitted types against the last published version:

1. `npm pack` the latest published version, extract `dist/*.d.ts`.
2. `npm pack` the release candidate, extract `dist/*.d.ts`.
3. Diff them. Any non-additive change (removed/narrowed/changed signature) fails the check or requires an explicit "breaking" acknowledgment and a minor/major bump.

This exact diff would have flagged both the `ObservableStatus` union change and the `useFirestoreDocData` widening (#733) immediately.

## Related

- Remediation for the live 4.2.4 release is tracked separately (deprecate + re-cut as 4.3.0 with a migration note).
- Surfaced while reviewing #740.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Start with the repository's existing release or CI process and use npm pack to compare the latest published package with the release candidate. Extract dist/*.d.ts, identify non-additive type changes, and make the check fail or require an explicit breaking acknowledgment with an appropriate version bump.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
ci-cd, release
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
55/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.