diff --git a/types/react-native__assets-registry/.eslintrc.json b/types/react-native__assets-registry/.eslintrc.json new file mode 100644 index 00000000000000..0967ef424bce67 --- /dev/null +++ b/types/react-native__assets-registry/.eslintrc.json @@ -0,0 +1 @@ +{} diff --git a/types/react-native__assets-registry/.npmignore b/types/react-native__assets-registry/.npmignore new file mode 100644 index 00000000000000..93e307400a5456 --- /dev/null +++ b/types/react-native__assets-registry/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.d.ts +!**/*.d.cts +!**/*.d.mts +!**/*.d.*.ts diff --git a/types/react-native__assets-registry/index.d.ts b/types/react-native__assets-registry/index.d.ts new file mode 100644 index 00000000000000..cb0ff5c3b541f6 --- /dev/null +++ b/types/react-native__assets-registry/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/react-native__assets-registry/package.json b/types/react-native__assets-registry/package.json new file mode 100644 index 00000000000000..362a132b0d5d77 --- /dev/null +++ b/types/react-native__assets-registry/package.json @@ -0,0 +1,34 @@ +{ + "private": true, + "name": "@types/react-native__assets-registry", + "version": "0.84.9999", + "projects": [ + "https://github.com/facebook/react-native/tree/main/packages/assets" + ], + "exports": { + ".": { + "types": { + "default": "./index.d.ts" + } + }, + "./registry": { + "types": { + "default": "./registry.d.ts" + } + }, + "./path-support": { + "types": { + "default": "./path-support.d.ts" + } + } + }, + "devDependencies": { + "@types/react-native__assets-registry": "workspace:." + }, + "owners": [ + { + "name": "Yevhenii Kotyrlo", + "githubUsername": "YevheniiKotyrlo" + } + ] +} diff --git a/types/react-native__assets-registry/path-support.d.ts b/types/react-native__assets-registry/path-support.d.ts new file mode 100644 index 00000000000000..3e5165c7ad05be --- /dev/null +++ b/types/react-native__assets-registry/path-support.d.ts @@ -0,0 +1,5 @@ +import { 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/types/react-native__assets-registry/react-native__assets-registry-tests.ts b/types/react-native__assets-registry/react-native__assets-registry-tests.ts new file mode 100644 index 00000000000000..40637e6db1088a --- /dev/null +++ b/types/react-native__assets-registry/react-native__assets-registry-tests.ts @@ -0,0 +1,69 @@ +import { + getAndroidResourceFolderName, + getAndroidResourceIdentifier, + getBasePath, +} from "@react-native/assets-registry/path-support"; +import { + AssetDestPathResolver, + getAssetByID, + PackagerAsset, + registerAsset, +} from "@react-native/assets-registry/registry"; + +const asset: PackagerAsset = { + __packager_asset: true, + fileSystemLocation: "/assets", + httpServerLocation: "/assets", + width: 100, + height: 100, + scales: [1, 1.5, 2, 3, 4], + hash: "abc123", + name: "logo", + type: "png", +}; + +const assetWithResolver: PackagerAsset = { + __packager_asset: true, + fileSystemLocation: "/assets", + httpServerLocation: "/assets", + scales: [1], + hash: "def456", + name: "icon", + type: "png", + resolver: "android", +}; + +const assetWithNullDimensions: PackagerAsset = { + __packager_asset: true, + fileSystemLocation: "/assets", + httpServerLocation: "/assets", + width: null, + height: null, + scales: [1], + hash: "ghi789", + name: "placeholder", + type: "png", +}; + +// exactOptionalPropertyTypes: explicit undefined is valid +const assetWithUndefinedDimensions: PackagerAsset = { + __packager_asset: true, + fileSystemLocation: "/assets", + httpServerLocation: "/assets", + width: undefined, + height: undefined, + scales: [1], + hash: "jkl012", + name: "empty", + type: "png", + resolver: undefined, +}; + +const resolver: AssetDestPathResolver = "generic"; + +const id: number = registerAsset(asset); +const retrieved: PackagerAsset = getAssetByID(id); + +const folder: string = getAndroidResourceFolderName(asset, 2); +const identifier: string = getAndroidResourceIdentifier(asset); +const basePath: string = getBasePath(asset); diff --git a/types/react-native__assets-registry/registry.d.ts b/types/react-native__assets-registry/registry.d.ts new file mode 100644 index 00000000000000..6ba261989a05b2 --- /dev/null +++ b/types/react-native__assets-registry/registry.d.ts @@ -0,0 +1,17 @@ +export type AssetDestPathResolver = "android" | "generic"; + +export interface PackagerAsset { + __packager_asset: boolean; + fileSystemLocation: string; + httpServerLocation: string; + width?: number | null | undefined; + height?: number | null | undefined; + scales: number[]; + hash: string; + name: string; + type: string; + resolver?: AssetDestPathResolver | undefined; +} + +export function registerAsset(asset: PackagerAsset): number; +export function getAssetByID(assetId: number): PackagerAsset; diff --git a/types/react-native__assets-registry/tsconfig.json b/types/react-native__assets-registry/tsconfig.json new file mode 100644 index 00000000000000..86a859833d8fe7 --- /dev/null +++ b/types/react-native__assets-registry/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "module": "node16", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "exactOptionalPropertyTypes": true, + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "react-native__assets-registry-tests.ts" + ] +}