Add `@react-native/assets` package for Asset Registry related code
Summary: Changelog: [Internal] Reviewed By: GijsWeterings Differential Revision: D22628865 fbshipit-source-id: 66ff311b2dab4e0c42f906d5a2642997b1570ae4
This commit is contained in:
Родитель
91d16bbd9f
Коммит
63377fa66b
|
@ -10,29 +10,4 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
export type PackagerAsset = {
|
module.exports = require('@react-native/assets/registry');
|
||||||
+__packager_asset: boolean,
|
|
||||||
+fileSystemLocation: string,
|
|
||||||
+httpServerLocation: string,
|
|
||||||
+width: ?number,
|
|
||||||
+height: ?number,
|
|
||||||
+scales: Array<number>,
|
|
||||||
+hash: string,
|
|
||||||
+name: string,
|
|
||||||
+type: string,
|
|
||||||
...
|
|
||||||
};
|
|
||||||
|
|
||||||
const assets: Array<PackagerAsset> = [];
|
|
||||||
|
|
||||||
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};
|
|
||||||
|
|
|
@ -18,21 +18,26 @@ export type ResolvedAssetSource = {|
|
||||||
+scale: number,
|
+scale: number,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
import type {PackagerAsset} from './AssetRegistry';
|
import type {PackagerAsset} from '@react-native/assets/registry';
|
||||||
|
|
||||||
const PixelRatio = require('../Utilities/PixelRatio');
|
const PixelRatio = require('../Utilities/PixelRatio');
|
||||||
const Platform = require('../Utilities/Platform');
|
const Platform = require('../Utilities/Platform');
|
||||||
|
|
||||||
const assetPathUtils = require('./assetPathUtils');
|
|
||||||
const invariant = require('invariant');
|
const invariant = require('invariant');
|
||||||
|
|
||||||
|
const {
|
||||||
|
getAndroidResourceFolderName,
|
||||||
|
getAndroidResourceIdentifier,
|
||||||
|
getBasePath,
|
||||||
|
} = require('@react-native/assets/path-support');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a path like 'assets/AwesomeModule/icon@2x.png'
|
* Returns a path like 'assets/AwesomeModule/icon@2x.png'
|
||||||
*/
|
*/
|
||||||
function getScaledAssetPath(asset): string {
|
function getScaledAssetPath(asset): string {
|
||||||
const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());
|
const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());
|
||||||
const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';
|
const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';
|
||||||
const assetDir = assetPathUtils.getBasePath(asset);
|
const assetDir = getBasePath(asset);
|
||||||
return assetDir + '/' + asset.name + scaleSuffix + '.' + asset.type;
|
return assetDir + '/' + asset.name + scaleSuffix + '.' + asset.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,11 +46,8 @@ function getScaledAssetPath(asset): string {
|
||||||
*/
|
*/
|
||||||
function getAssetPathInDrawableFolder(asset): string {
|
function getAssetPathInDrawableFolder(asset): string {
|
||||||
const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());
|
const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());
|
||||||
const drawbleFolder = assetPathUtils.getAndroidResourceFolderName(
|
const drawbleFolder = getAndroidResourceFolderName(asset, scale);
|
||||||
asset,
|
const fileName = getAndroidResourceIdentifier(asset);
|
||||||
scale,
|
|
||||||
);
|
|
||||||
const fileName = assetPathUtils.getAndroidResourceIdentifier(asset);
|
|
||||||
return drawbleFolder + '/' + fileName + '.' + asset.type;
|
return drawbleFolder + '/' + fileName + '.' + asset.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,9 +135,7 @@ class AssetSourceResolver {
|
||||||
Platform.OS === 'android',
|
Platform.OS === 'android',
|
||||||
'resource identifiers work on Android',
|
'resource identifiers work on Android',
|
||||||
);
|
);
|
||||||
return this.fromSource(
|
return this.fromSource(getAndroidResourceIdentifier(this.asset));
|
||||||
assetPathUtils.getAndroidResourceIdentifier(this.asset),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// This is a stub for flow to make it understand require('./icon.png')
|
// This is a stub for flow to make it understand require('./icon.png')
|
||||||
// See metro/src/Bundler/index.js
|
// See metro/src/Bundler/index.js
|
||||||
|
|
||||||
const AssetRegistry = require('./AssetRegistry');
|
const AssetRegistry = require('@react-native/assets/registry');
|
||||||
|
|
||||||
module.exports = (AssetRegistry.registerAsset({
|
module.exports = (AssetRegistry.registerAsset({
|
||||||
__packager_asset: true,
|
__packager_asset: true,
|
||||||
|
|
|
@ -19,7 +19,7 @@ describe('resolveAssetSource', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
jest.resetModules();
|
||||||
|
|
||||||
AssetRegistry = require('../AssetRegistry');
|
AssetRegistry = require('@react-native/assets/registry');
|
||||||
resolveAssetSource = require('../resolveAssetSource');
|
resolveAssetSource = require('../resolveAssetSource');
|
||||||
NativeSourceCode = require('../../NativeModules/specs/NativeSourceCode')
|
NativeSourceCode = require('../../NativeModules/specs/NativeSourceCode')
|
||||||
.default;
|
.default;
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const AssetRegistry = require('./AssetRegistry');
|
const AssetRegistry = require('@react-native/assets/registry');
|
||||||
const AssetSourceResolver = require('./AssetSourceResolver');
|
const AssetSourceResolver = require('./AssetSourceResolver');
|
||||||
|
|
||||||
import type {ResolvedAssetSource} from './AssetSourceResolver';
|
import type {ResolvedAssetSource} from './AssetSourceResolver';
|
||||||
|
|
|
@ -88,6 +88,7 @@
|
||||||
"@react-native-community/cli-platform-android": "^4.10.0",
|
"@react-native-community/cli-platform-android": "^4.10.0",
|
||||||
"@react-native-community/cli-platform-ios": "^4.10.0",
|
"@react-native-community/cli-platform-ios": "^4.10.0",
|
||||||
"@react-native-community/cli": "^4.10.0",
|
"@react-native-community/cli": "^4.10.0",
|
||||||
|
"@react-native/assets": "1.0.0",
|
||||||
"@react-native/polyfills": "1.0.0",
|
"@react-native/polyfills": "1.0.0",
|
||||||
"abort-controller": "^3.0.0",
|
"abort-controller": "^3.0.0",
|
||||||
"anser": "^1.4.9",
|
"anser": "^1.4.9",
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
**/__mocks__/**
|
||||||
|
**/__tests__/**
|
||||||
|
BUCK
|
|
@ -0,0 +1,34 @@
|
||||||
|
load("@fbsource//tools/build_defs:js_glob.bzl", "js_glob")
|
||||||
|
load("@fbsource//tools/build_defs/third_party:yarn_defs.bzl", "yarn_workspace")
|
||||||
|
load("@fbsource//xplat/js:JS_DEFS.bzl", "rn_library")
|
||||||
|
|
||||||
|
rn_library(
|
||||||
|
name = "assets",
|
||||||
|
srcs = js_glob([
|
||||||
|
"**/*",
|
||||||
|
"package.json",
|
||||||
|
]),
|
||||||
|
labels = ["supermodule:xplat/default/public.react_native.core"],
|
||||||
|
skip_processors = True,
|
||||||
|
visibility = ["PUBLIC"],
|
||||||
|
worker = "//xplat/js:experimental-packager",
|
||||||
|
)
|
||||||
|
|
||||||
|
yarn_workspace(
|
||||||
|
name = "yarn-workspace",
|
||||||
|
srcs = glob(
|
||||||
|
[
|
||||||
|
"**/*.js",
|
||||||
|
"**/*.json",
|
||||||
|
],
|
||||||
|
exclude = [
|
||||||
|
"**/__fixtures__/**",
|
||||||
|
"**/__flowtests__/**",
|
||||||
|
"**/__mocks__/**",
|
||||||
|
"**/__tests__/**",
|
||||||
|
"**/node_modules/**",
|
||||||
|
"**/node_modules/.bin/**",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
visibility = ["PUBLIC"],
|
||||||
|
)
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "@react-native/assets",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Asset support code for React Native.",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git@github.com:facebook/react-native.git"
|
||||||
|
},
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import type {PackagerAsset} from './AssetRegistry';
|
import type {PackagerAsset} from './registry.js';
|
||||||
|
|
||||||
const androidScaleSuffix = {
|
const androidScaleSuffix = {
|
||||||
'0.75': 'ldpi',
|
'0.75': 'ldpi',
|
||||||
|
@ -79,7 +79,6 @@ function getBasePath(asset: PackagerAsset): string {
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAndroidAssetSuffix,
|
|
||||||
getAndroidResourceFolderName,
|
getAndroidResourceFolderName,
|
||||||
getAndroidResourceIdentifier,
|
getAndroidResourceIdentifier,
|
||||||
getBasePath,
|
getBasePath,
|
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
export type PackagerAsset = {
|
||||||
|
+__packager_asset: boolean,
|
||||||
|
+fileSystemLocation: string,
|
||||||
|
+httpServerLocation: string,
|
||||||
|
+width: ?number,
|
||||||
|
+height: ?number,
|
||||||
|
+scales: Array<number>,
|
||||||
|
+hash: string,
|
||||||
|
+name: string,
|
||||||
|
+type: string,
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|
||||||
|
const assets: Array<PackagerAsset> = [];
|
||||||
|
|
||||||
|
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};
|
|
@ -1144,6 +1144,11 @@
|
||||||
"@react-native-community/eslint-plugin@file:packages/eslint-plugin-react-native-community":
|
"@react-native-community/eslint-plugin@file:packages/eslint-plugin-react-native-community":
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
|
|
||||||
|
"@react-native/assets@1.0.0":
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e"
|
||||||
|
integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==
|
||||||
|
|
||||||
"@react-native/polyfills@1.0.0":
|
"@react-native/polyfills@1.0.0":
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-1.0.0.tgz#05bb0031533598f9458cf65a502b8df0eecae780"
|
resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-1.0.0.tgz#05bb0031533598f9458cf65a502b8df0eecae780"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче