From 4f142eef327a534eeb19e4df07cb3557d666812a Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Tue, 16 Jun 2026 03:04:03 -0700 Subject: [PATCH 1/3] Document assets-registry package, add TS definitions Summary: Quality pass on the `assets-registry` package ahead of the next diff. - Add user-facing notes to package README. - Add adjacent `.d.ts` definitions (manually/AI-maintained is fine at this scale). - Move source files to `src/` (`"exports"` map added; no breaking changes). Changelog: [Internal] Differential Revision: D108624321 --- packages/assets-registry/README.md | 29 +++++++++++-------- packages/assets-registry/package.json | 14 ++++----- .../{ => src}/__tests__/path-support-test.js | 0 .../assets-registry/src/path-support.d.ts | 19 ++++++++++++ .../assets-registry/{ => src}/path-support.js | 0 packages/assets-registry/src/registry.d.ts | 27 +++++++++++++++++ .../assets-registry/{ => src}/registry.js | 6 ++-- 7 files changed, 74 insertions(+), 21 deletions(-) rename packages/assets-registry/{ => src}/__tests__/path-support-test.js (100%) create mode 100644 packages/assets-registry/src/path-support.d.ts rename packages/assets-registry/{ => src}/path-support.js (100%) create mode 100644 packages/assets-registry/src/registry.d.ts rename packages/assets-registry/{ => src}/registry.js (89%) diff --git a/packages/assets-registry/README.md b/packages/assets-registry/README.md index 51f229af163b..b1f095860994 100644 --- a/packages/assets-registry/README.md +++ b/packages/assets-registry/README.md @@ -1,21 +1,26 @@ # @react-native/assets-registry -[![Version][version-badge]][package] +![npm package](https://img.shields.io/npm/v/@react-native/assets-registry?color=brightgreen&label=npm%20package) -## Installation +Runtime registry that maps asset IDs generated in a Metro bundle to asset metadata. It backs ``, `Image.resolveAssetSource()`, and any code that resolves `require('./img.png')` on native. -``` -yarn add --dev @react-native/assets-registry -``` +Most apps never import this directly — assets are handled through ``. -*Note: We're using `yarn` to install deps. Feel free to change commands to use `npm` 3+ and `npx` if you like* +## API -[version-badge]: https://img.shields.io/npm/v/@react-native/assets-registry?style=flat-square -[package]: https://www.npmjs.com/package/@react-native/assets-registry +### `@react-native/assets-registry/registry` -## Testing +| Export | Signature | Notes | +|---|---|---| +| `registerAsset` | `(asset: PackagerAsset) => number` | Stores the asset; returns a numeric ID | +| `getAssetByID` | `(assetId: number) => PackagerAsset` | Looks an asset back up by ID | -To run the tests in this package, run the following commands from the React Native root folder: +### `@react-native/assets-registry/path-support` -1. `yarn` to install the dependencies. You just need to run this once -2. `yarn jest packages/assets-registry`. +Android resource-path helpers, used when copying assets into `drawable-*` folders. + +| Export | Signature | Notes | +|---|---|---| +| `getAndroidResourceFolderName` | `(asset: PackagerAsset, scale: number) => string` | e.g. `drawable-xhdpi`; non-drawable types resolve to `raw` | +| `getAndroidResourceIdentifier` | `(asset: PackagerAsset) => string` | Sanitised resource name | +| `getBasePath` | `(asset: PackagerAsset) => string` | `httpServerLocation` without the leading slash | diff --git a/packages/assets-registry/package.json b/packages/assets-registry/package.json index e7208814e309..a5e7e9b47e79 100644 --- a/packages/assets-registry/package.json +++ b/packages/assets-registry/package.json @@ -10,19 +10,19 @@ }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/assets-registry#readme", "keywords": [ - "assets", - "registry", - "react-native", - "support" + "react-native" ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" }, + "exports": { + "./path-support": "./src/path-support.js", + "./registry": "./src/registry.js", + "./package.json": "./package.json" + }, "files": [ - "path-support.js", - "registry.js", - "README.md", + "src", "!**/__docs__/**", "!**/__fixtures__/**", "!**/__mocks__/**", diff --git a/packages/assets-registry/__tests__/path-support-test.js b/packages/assets-registry/src/__tests__/path-support-test.js similarity index 100% rename from packages/assets-registry/__tests__/path-support-test.js rename to packages/assets-registry/src/__tests__/path-support-test.js diff --git a/packages/assets-registry/src/path-support.d.ts b/packages/assets-registry/src/path-support.d.ts new file mode 100644 index 000000000000..abdea750aacd --- /dev/null +++ b/packages/assets-registry/src/path-support.d.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import type {PackagerAsset} from './registry'; + +export function getAndroidResourceFolderName( + asset: PackagerAsset, + scale: number, +): string; + +export function getAndroidResourceIdentifier(asset: PackagerAsset): string; + +export function getBasePath(asset: PackagerAsset): string; diff --git a/packages/assets-registry/path-support.js b/packages/assets-registry/src/path-support.js similarity index 100% rename from packages/assets-registry/path-support.js rename to packages/assets-registry/src/path-support.js diff --git a/packages/assets-registry/src/registry.d.ts b/packages/assets-registry/src/registry.d.ts new file mode 100644 index 000000000000..7509ef9ba13e --- /dev/null +++ b/packages/assets-registry/src/registry.d.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +export type AssetDestPathResolver = 'android' | 'generic'; + +export type PackagerAsset = { + readonly __packager_asset: boolean; + readonly fileSystemLocation: string; + readonly httpServerLocation: string; + readonly width: number | null | undefined; + readonly height: number | null | undefined; + readonly scales: Array; + readonly hash: string; + readonly name: string; + readonly type: string; + readonly resolver?: AssetDestPathResolver | undefined; +}; + +export function registerAsset(asset: PackagerAsset): number; + +export function getAssetByID(assetId: number): PackagerAsset; diff --git a/packages/assets-registry/registry.js b/packages/assets-registry/src/registry.js similarity index 89% rename from packages/assets-registry/registry.js rename to packages/assets-registry/src/registry.js index d193d3af1c87..08f886c6afbd 100644 --- a/packages/assets-registry/registry.js +++ b/packages/assets-registry/src/registry.js @@ -40,5 +40,7 @@ function getAssetByID(assetId /*: number */) /*: PackagerAsset */ { return assets[assetId - 1]; } -// eslint-disable-next-line @react-native/monorepo/no-commonjs-exports -module.exports = {registerAsset, getAssetByID}; +module.exports = { + registerAsset, + getAssetByID, +}; From 6635de83ed21aade3d3ab55e4ddee29e7dfbf9aa Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Tue, 16 Jun 2026 07:32:31 -0700 Subject: [PATCH 2/3] Move AssetRegistry implementation into main package Summary: Resolves T275935135. Differential Revision: D108750302 --- packages/assets-registry/README.md | 3 ++ packages/assets-registry/package.json | 5 +- packages/assets-registry/src/registry.js | 36 +++---------- .../Libraries/Image/AssetSourceResolver.js | 37 +++++-------- .../Libraries/Image/RelativeImageStub.js | 2 +- .../__tests__/resolveAssetSource-test.js | 5 +- .../Libraries/Image/resolveAssetSource.js | 2 +- packages/react-native/ReactNativeApi.d.ts | 22 +++++++- packages/react-native/index.js | 3 ++ packages/react-native/index.js.flow | 6 +++ .../src/private/assets/AssetRegistry.js | 52 +++++++++++++++++++ scripts/shared/monorepoUtils.js | 6 ++- 12 files changed, 117 insertions(+), 62 deletions(-) create mode 100644 packages/react-native/src/private/assets/AssetRegistry.js diff --git a/packages/assets-registry/README.md b/packages/assets-registry/README.md index b1f095860994..04f17cacffce 100644 --- a/packages/assets-registry/README.md +++ b/packages/assets-registry/README.md @@ -10,6 +10,9 @@ Most apps never import this directly — assets are handled through ``. ### `@react-native/assets-registry/registry` +> [!Note] +> Aliases to [`AssetRegistry`](https://reactnative.dev/docs/assetregistry) (since 0.87). Prefer importing directly from the `'react-native'` package in libraries. + | Export | Signature | Notes | |---|---|---| | `registerAsset` | `(asset: PackagerAsset) => number` | Stores the asset; returns a numeric ID | diff --git a/packages/assets-registry/package.json b/packages/assets-registry/package.json index a5e7e9b47e79..71ec1e6da84f 100644 --- a/packages/assets-registry/package.json +++ b/packages/assets-registry/package.json @@ -27,5 +27,8 @@ "!**/__fixtures__/**", "!**/__mocks__/**", "!**/__tests__/**" - ] + ], + "peerDependencies": { + "react-native": "*" + } } diff --git a/packages/assets-registry/src/registry.js b/packages/assets-registry/src/registry.js index 08f886c6afbd..e69b5788bf12 100644 --- a/packages/assets-registry/src/registry.js +++ b/packages/assets-registry/src/registry.js @@ -4,43 +4,19 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @flow strict + * @flow strict-local * @format */ 'use strict'; -/*:: -export type AssetDestPathResolver = 'android' | 'generic'; +import {AssetRegistry} from 'react-native'; -export type PackagerAsset = { - readonly __packager_asset: boolean, - readonly fileSystemLocation: string, - readonly httpServerLocation: string, - readonly width: ?number, - readonly height: ?number, - readonly scales: Array, - readonly hash: string, - readonly name: string, - readonly type: string, - readonly resolver?: AssetDestPathResolver, - ... -}; +/*:: +export type {AssetDestPathResolver, PackagerAsset} from 'react-native'; */ -const assets /*: Array */ = []; - -function registerAsset(asset /*: PackagerAsset */) /*: number */ { - // `push` returns new array length, so the first asset will - // get id 1 (not 0) to make the value truthy - return assets.push(asset); -} - -function getAssetByID(assetId /*: number */) /*: PackagerAsset */ { - return assets[assetId - 1]; -} - module.exports = { - registerAsset, - getAssetByID, + registerAsset: AssetRegistry.registerAsset, + getAssetByID: AssetRegistry.getAssetByID, }; diff --git a/packages/react-native/Libraries/Image/AssetSourceResolver.js b/packages/react-native/Libraries/Image/AssetSourceResolver.js index 2b1e9647608a..a515cf096f60 100644 --- a/packages/react-native/Libraries/Image/AssetSourceResolver.js +++ b/packages/react-native/Libraries/Image/AssetSourceResolver.js @@ -10,31 +10,10 @@ 'use strict'; -export type ResolvedAssetSource = { - readonly __packager_asset: boolean, - readonly width: ?number, - readonly height: ?number, - readonly uri: string, - readonly scale: number, -}; - -// From @react-native/assets-registry -type AssetDestPathResolver = 'android' | 'generic'; - -// From @react-native/assets-registry -type PackagerAsset = Readonly<{ - __packager_asset: boolean, - fileSystemLocation: string, - httpServerLocation: string, - width: ?number, - height: ?number, - scales: Array, - hash: string, - name: string, - type: string, - resolver?: AssetDestPathResolver, - ... -}>; +import type { + AssetDestPathResolver, + PackagerAsset, +} from '../../src/private/assets/AssetRegistry'; const PixelRatio = require('../Utilities/PixelRatio').default; const Platform = require('../Utilities/Platform').default; @@ -46,6 +25,14 @@ const { } = require('@react-native/assets-registry/path-support'); const invariant = require('invariant'); +export type ResolvedAssetSource = { + readonly __packager_asset: boolean, + readonly width: ?number, + readonly height: ?number, + readonly uri: string, + readonly scale: number, +}; + /** * Returns a path like 'assets/AwesomeModule/icon@2x.png' */ diff --git a/packages/react-native/Libraries/Image/RelativeImageStub.js b/packages/react-native/Libraries/Image/RelativeImageStub.js index 8472f13dc4a9..73d403a4ecbf 100644 --- a/packages/react-native/Libraries/Image/RelativeImageStub.js +++ b/packages/react-native/Libraries/Image/RelativeImageStub.js @@ -13,7 +13,7 @@ // This is a stub for flow to make it understand require('./icon.png') // See metro/src/Bundler/index.js -const AssetRegistry = require('@react-native/assets-registry/registry'); +const {AssetRegistry} = require('../../src/private/assets/AssetRegistry'); const RelativeImageStub = AssetRegistry.registerAsset({ __packager_asset: true, diff --git a/packages/react-native/Libraries/Image/__tests__/resolveAssetSource-test.js b/packages/react-native/Libraries/Image/__tests__/resolveAssetSource-test.js index dfa7d011fa14..ae68d860e004 100644 --- a/packages/react-native/Libraries/Image/__tests__/resolveAssetSource-test.js +++ b/packages/react-native/Libraries/Image/__tests__/resolveAssetSource-test.js @@ -8,7 +8,7 @@ * @format */ -import type {PackagerAsset} from '../../../../assets-registry/registry'; +import type {PackagerAsset} from '../../../src/private/assets/AssetRegistry'; import type {ResolvedAssetSource} from '../AssetSourceResolver'; describe('resolveAssetSource', () => { @@ -20,7 +20,8 @@ describe('resolveAssetSource', () => { beforeEach(() => { jest.resetModules(); - AssetRegistry = require('@react-native/assets-registry/registry'); + AssetRegistry = + require('../../../src/private/assets/AssetRegistry').AssetRegistry; resolveAssetSource = require('../resolveAssetSource').default; NativeSourceCode = require('../../NativeModules/specs/NativeSourceCode').default; diff --git a/packages/react-native/Libraries/Image/resolveAssetSource.js b/packages/react-native/Libraries/Image/resolveAssetSource.js index e08a6c848868..9da1b5f45a16 100644 --- a/packages/react-native/Libraries/Image/resolveAssetSource.js +++ b/packages/react-native/Libraries/Image/resolveAssetSource.js @@ -16,10 +16,10 @@ import type {ImageSource} from './ImageSource'; import SourceCode from '../NativeModules/specs/NativeSourceCode'; +const {AssetRegistry} = require('../../src/private/assets/AssetRegistry'); const AssetSourceResolver: AssetSourceResolverT = require('./AssetSourceResolver').default; const {pickScale} = require('./AssetUtils'); -const AssetRegistry = require('@react-native/assets-registry/registry'); type CustomSourceTransformer = ( resolver: AssetSourceResolver, diff --git a/packages/react-native/ReactNativeApi.d.ts b/packages/react-native/ReactNativeApi.d.ts index 567e2db03e99..345e7b211857 100644 --- a/packages/react-native/ReactNativeApi.d.ts +++ b/packages/react-native/ReactNativeApi.d.ts @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> * * This file was generated by scripts/js-api/build-types/index.js. */ @@ -151,6 +151,10 @@ declare const AnimatedScrollView_default: AnimatedComponentType< > declare const AppState: typeof AppState_default declare const AppState_default: AppStateImpl +declare const AssetRegistry: { + getAssetByID(assetId: number): PackagerAsset + registerAsset(asset: PackagerAsset): number +} declare const attachNativeEvent: typeof $$AnimatedImplementation.attachNativeEvent declare const BackHandler: typeof BackHandler_default declare const BackHandler_default: TBackHandler @@ -1628,6 +1632,8 @@ declare interface ArrayLike_2 extends Iterable { [indexer: number]: T readonly length: number } +declare type AssetDestPathResolver = "android" | "generic" +declare type AssetRegistry = typeof AssetRegistry declare type attachNativeEvent = typeof attachNativeEvent declare function attachNativeEventImpl( viewRef: any, @@ -3469,6 +3475,17 @@ declare type OptionalVirtualizedSectionListProps< declare type OrientationChangeEvent = { readonly orientation: "landscape" | "portrait" } +declare type PackagerAsset = { + readonly fileSystemLocation: string + readonly hash: string + readonly height: number | undefined + readonly httpServerLocation: string + readonly name: string + readonly resolver?: AssetDestPathResolver + readonly scales: Array + readonly type: string + readonly width: number | undefined +} declare type PanResponder = typeof PanResponder declare type PanResponderCallbacks = { readonly onMoveShouldSetPanResponder?: ActiveCallback @@ -5915,6 +5932,8 @@ export { AppStateEvent, // 80f034c3 AppStateStatus, // 447e5ef2 Appearance, // 83e9641a + AssetDestPathResolver, // 59047424 + AssetRegistry, // 6070bb45 AutoCapitalize, // c0e857a0 BackHandler, // f139fc69 BackPressEventName, // 4620fb76 @@ -6046,6 +6065,7 @@ export { NativeUIEvent, // 44ac26ac Networking, // bbc5be42 OpaqueColorValue, // 25f3fa5b + PackagerAsset, // d1c88cf4 PanResponder, // f8f71cac PanResponderCallbacks, // 6d63e7be PanResponderGestureState, // 54baf558 diff --git a/packages/react-native/index.js b/packages/react-native/index.js index 69c3f67ca8b1..3b3c566ccd8c 100644 --- a/packages/react-native/index.js +++ b/packages/react-native/index.js @@ -211,6 +211,9 @@ module.exports = { get AppState() { return require('./Libraries/AppState/AppState').default; }, + get AssetRegistry() { + return require('./src/private/assets/AssetRegistry').AssetRegistry; + }, get BackHandler() { return require('./Libraries/Utilities/BackHandler').default; }, diff --git a/packages/react-native/index.js.flow b/packages/react-native/index.js.flow index f5558ea6448a..b232139779fa 100644 --- a/packages/react-native/index.js.flow +++ b/packages/react-native/index.js.flow @@ -276,6 +276,12 @@ export type { } from './Libraries/AppState/AppState'; export {default as AppState} from './Libraries/AppState/AppState'; +export {AssetRegistry} from './src/private/assets/AssetRegistry'; +export type { + AssetDestPathResolver, + PackagerAsset, +} from './src/private/assets/AssetRegistry'; + export type {BackPressEventName} from './Libraries/Utilities/BackHandler'; export {default as BackHandler} from './Libraries/Utilities/BackHandler'; diff --git a/packages/react-native/src/private/assets/AssetRegistry.js b/packages/react-native/src/private/assets/AssetRegistry.js new file mode 100644 index 000000000000..22b716bd37c7 --- /dev/null +++ b/packages/react-native/src/private/assets/AssetRegistry.js @@ -0,0 +1,52 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict + * @format + */ + +export type AssetDestPathResolver = 'android' | 'generic'; + +export type PackagerAsset = Readonly<{ + __packager_asset: boolean, + fileSystemLocation: string, + httpServerLocation: string, + width: ?number, + height: ?number, + scales: Array, + hash: string, + name: string, + type: string, + resolver?: AssetDestPathResolver, + ... +}>; + +const assets: Array = []; + +/** + * Runtime registry that maps asset IDs generated in a Metro bundle to asset + * metadata. It backs ``, `Image.resolveAssetSource()`, and any code + * that resolves `require('./img.png')` on native. + * + * Most apps do not use this directly — assets are handled through ``. + */ +export const AssetRegistry = { + /** + * Register an asset. Returns the asset ID. + */ + registerAsset(asset: PackagerAsset): number { + // `push` returns the new length, so the first asset gets id 1 (not 0), + // keeping ids truthy. + return assets.push(asset); + }, + + /** + * Retrieve a registered asset by ID. + */ + getAssetByID(assetId: number): PackagerAsset { + return assets[assetId - 1]; + }, +}; diff --git a/scripts/shared/monorepoUtils.js b/scripts/shared/monorepoUtils.js index 6260b0a19f70..eecb81250a01 100644 --- a/scripts/shared/monorepoUtils.js +++ b/scripts/shared/monorepoUtils.js @@ -155,7 +155,11 @@ async function updatePackageJson( } for (const dependency in newPackageVersions) { - if (dependency in deps) { + if ( + dependency in deps && + // Preserve wildcard specifiers + deps[dependency] !== '*' + ) { deps[dependency] = newPackageVersions[dependency]; } } From 80824e6f096de4c65f85359c8e01f27c235db7e6 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Tue, 16 Jun 2026 08:08:16 -0700 Subject: [PATCH 3/3] Expose build entry point for AssetRegistry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: **Problem** Following D108750303, we now expose an `AssetsRegistry` API from `'react-native'`. This is great, as we need to replace a deep `/Libraries/...` import in Metro configs (`transformer.assetRegistryPath`): https://www.internalfb.com/code/fbsource/[31661d52e803d77356725429f44331135601b634]/xplat/js/react-native-github/packages/metro-config/src/index.flow.js?lines=87 **Unfortunately**, we can't quite reuse the new `AssetRegistry` API from the index module, as we'd break Metro's API contract (generate an inline require) — we need a dedicated wrapper module that can be read without destructuring. **This diff** Adds a new `'react-native/asset-registry'` secondary entry point, intended/documented for this Metro config use case — and deprecates `react-native/assets-registry/registry`. - Solves the above problem (migrated in our own `react-native/metro-config` use). - Remains consistent with D108750302 (we intend to remove `react-native/assets-registry` at a later date). - As a bonus, fixes the longstanding naming inconsistency between `react-native/assets-registry` and `'react-native/Libraries/Image/AssetRegistry'` — `AssetRegistry` (singular) is now canonical. Changelog: - [General][Breaking] - `react-native/Libraries/Image/AssetRegistry` is removed. Please use the `AssetRegistry` API (apps/library code) and/or the `react-native/asset-registry` entrypoint (Metro/build configs). - [General][Deprecated] - **assets-registry**: `react-native/assets-registry/registry` is deprecated. Please use the `AssetRegistry` API (apps/library code) and/or the `react-native/asset-registry` entrypoint (Metro/build configs). Differential Revision: D108750303 --- packages/assets-registry/README.md | 12 ++++++--- packages/metro-config/src/index.flow.js | 2 +- .../Libraries/Image/AssetRegistry.js | 14 ---------- packages/react-native/package.json | 4 +++ packages/react-native/src/asset-registry.js | 26 +++++++++++++++++++ 5 files changed, 39 insertions(+), 19 deletions(-) delete mode 100644 packages/react-native/Libraries/Image/AssetRegistry.js create mode 100644 packages/react-native/src/asset-registry.js diff --git a/packages/assets-registry/README.md b/packages/assets-registry/README.md index 04f17cacffce..9384eab7db0f 100644 --- a/packages/assets-registry/README.md +++ b/packages/assets-registry/README.md @@ -8,10 +8,14 @@ Most apps never import this directly — assets are handled through ``. ## API -### `@react-native/assets-registry/registry` - -> [!Note] -> Aliases to [`AssetRegistry`](https://reactnative.dev/docs/assetregistry) (since 0.87). Prefer importing directly from the `'react-native'` package in libraries. +### `@react-native/assets-registry/registry` (DEPRECATED) + +> [!Warning] +> **Deprecated**: Aliases to [`AssetRegistry`](https://reactnative.dev/docs/assetregistry) (since 0.87). +> +> Please use: +> - `import { AssetRegistry } from 'react-native';` (apps/library code) +> - `'react-native/asset-registry'` (entrypoint for Metro/build configs) | Export | Signature | Notes | |---|---|---| diff --git a/packages/metro-config/src/index.flow.js b/packages/metro-config/src/index.flow.js index 6bba33bd975a..03a9aed5ace4 100644 --- a/packages/metro-config/src/index.flow.js +++ b/packages/metro-config/src/index.flow.js @@ -84,7 +84,7 @@ export function getDefaultConfig(projectRoot: string): ConfigT { }, transformer: { allowOptionalDependencies: true, - assetRegistryPath: 'react-native/Libraries/Image/AssetRegistry', + assetRegistryPath: 'react-native/asset-registry', asyncRequireModulePath: require.resolve( 'metro-runtime/src/modules/asyncRequire', ), diff --git a/packages/react-native/Libraries/Image/AssetRegistry.js b/packages/react-native/Libraries/Image/AssetRegistry.js deleted file mode 100644 index 3e1785346ff3..000000000000 --- a/packages/react-native/Libraries/Image/AssetRegistry.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - * @format - */ - -export { - registerAsset, - getAssetByID, -} from '@react-native/assets-registry/registry'; diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 47d4675facb7..ffdbbffe2255 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -56,6 +56,10 @@ "react-native-strict-api": null, "default": "./types/*.d.ts" }, + "./asset-registry/*": { + "types": null, + "default": "./src/asset-registry.js" + }, "./gradle/*": null, "./React/*": null, "./ReactAndroid/*": null, diff --git a/packages/react-native/src/asset-registry.js b/packages/react-native/src/asset-registry.js new file mode 100644 index 000000000000..9f0ad5b00814 --- /dev/null +++ b/packages/react-native/src/asset-registry.js @@ -0,0 +1,26 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +// ---------------------------------------------------------------------------- +// Secondary react-native/assets-registry entry point. +// +// This is an untyped secondary entry point intended to be referenced from +// Metro's `transformer.assetRegistryPath` config option. +// +// Apps/libraries should prefer `import {AssetRegistry} from 'react-native'`. +// ---------------------------------------------------------------------------- + +import {AssetRegistry} from './private/assets/AssetRegistry'; + +/* eslint-disable @react-native/monorepo/no-commonjs-exports */ +module.exports = { + registerAsset: AssetRegistry.registerAsset, + getAssetByID: AssetRegistry.getAssetByID, +};