Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/54822 Updates hash generation in `versionExportedApis.js` to track changes to `declare const` type declarations like `AccessibilityInfo_default`. Previously, changes to APIs (e.g., `AccessibilityInfo`) would not always update their hashes in `ReactNativeApi.d.ts`, causing the breaking change detection to miss actual API changes. Three issues prevented proper hash tracking: 1. **`VariableDeclaration` types weren't tracked** - `declare const X: {...}` was not in the list of tracked declaration types 2. **Duplicate declarations caused overwrites** - `declare type X = typeof X` would overwrite `declare const X: typeof X_default` in the declarations map, losing the dependency on `X_default` 3. **`typeof X` queries weren't extracting dependencies** - references via `typeof` weren't being added to the dependency graph ## Fix - Add `t.isVariableDeclaration(node)` to tracked types with proper name extraction - Prevent overwriting existing declarations (first declaration wins) - Handle `TSTypeQuery` nodes to extract `typeof X` dependencies ### Note on Hash Changes This PR causes many hashes to change, even for types that haven't been modified. This is expected because the hash computation now includes `declare const` dependencies that were previously ignored. **Before:** `AccessibilityInfo` hash only included `declare type AccessibilityInfo = typeof AccessibilityInfo` (self-reference) **After:** Hash now includes `declare const AccessibilityInfo: typeof AccessibilityInfo_default` + the full `AccessibilityInfo_default` type ## Changelog: [GENERAL] [FIXED] - hash generation includes `declare const` types in API snapshot Reviewed By: huntie Differential Revision: D88653322 fbshipit-source-id: abdf9c5e11bf8ff9e6e2f17a743a2d5aa213ae1c
scripts/js-api
TypeScript build pipeline for React Native's JavaScript API.
Overview
yarn build-types is a custom build pipeline for translating React Native's Flow source code to TypeScript.
Specifically, it reduces the runtime JavaScript API of react-native into two outputs:
- Generated TypeScript types
Public user types for react-native, shipped to npm
packages/react-native/types_generated/ - Public API snapshot
Snapshot file of the public API shape, used by maintainers
packages/react-native/ReactNativeApi.d.ts
Dependencies
yarn build-types makes use of the following dependencies, composed with other pre/post transformation steps and dependency resolution.
- Flow → TypeScript conversion: flow-api-extractor
- TypeScript → (initial) API rollup: @microsoft/api-extractor
Usage
Build generated types + API snapshot
Maintainers should run this script whenever making intentional API changes.
# Build types + API snapshot
yarn build-types [--validate]
# Build types without API snapshot
yarn build-types --skip-snapshot
Diff API snapshot compatibility
This script is run by CI to compare changes to ReactNativeApi.d.ts between commits.
# Compare two versions of the API snapshot
yarn js-api-diff <before.d.ts> <after.d.ts>
{
"result": "BREAKING",
"changedApis": [
"ViewStyle"
]
}
Configuration
Sparse configuration options are defined and documented in scripts/js-api/config.js.
About the two output formats
Generated TypeScript types
types_generated/
Directory providing TypeScript user types for the react-native package, distributed via npm.
- Gitignored.
- Scoped to the
index.d.tsentry point viapackage.json#exports. - Preserves
unstable_andexperimental_APIs. - Preserves doc comments.
- Preserves source file names (for go to definition).
Public API snapshot
ReactNative.d.ts
Provides a human-readable, maintainable reference of the React Native's public JavaScript API, optimized for developers and diff tooling.
- Committed to the repo.
- Strips
unstable_andexperimental_APIs. - Strips doc comments.
- Strips source file names (types are merged into a single program).
- Versions exported APIs with an 8 char SHA hash, which will be updated when any input type dependencies change shape.