@react-native/community-cli-plugin 0.88.0-nightly-20260824-0c7f63a4e → 0.88.0-nightly-20260826-ea06a3191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/bundle/assetCatalogIOS.js +37 -3
- package/dist/commands/bundle/assetCatalogIOS.js.flow +13 -1
- package/dist/commands/bundle/filterPlatformAssetScales.js +3 -3
- package/dist/commands/bundle/filterPlatformAssetScales.js.flow +2 -0
- package/dist/commands/bundle/saveAssets.js +2 -5
- package/package.json +4 -4
|
@@ -4,9 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
6
|
exports.cleanAssetCatalog = cleanAssetCatalog;
|
|
7
|
+
exports.getCatalogImages = getCatalogImages;
|
|
7
8
|
exports.getImageSet = getImageSet;
|
|
8
9
|
exports.isCatalogAsset = isCatalogAsset;
|
|
9
10
|
exports.writeImageSet = writeImageSet;
|
|
11
|
+
var _filterPlatformAssetScales = require("./filterPlatformAssetScales");
|
|
10
12
|
var _assetUtils = require("@react-native/asset-utils");
|
|
11
13
|
var _nodeFs = _interopRequireDefault(require("node:fs"));
|
|
12
14
|
var _nodePath = _interopRequireDefault(require("node:path"));
|
|
@@ -24,16 +26,48 @@ function cleanAssetCatalog(catalogDir) {
|
|
|
24
26
|
});
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
|
-
|
|
29
|
+
const CATALOG_SCALES = _filterPlatformAssetScales.ALLOWED_SCALES.ios;
|
|
30
|
+
function getCatalogImages(asset) {
|
|
31
|
+
const images = [];
|
|
32
|
+
asset.scales.forEach((scale, idx) => {
|
|
33
|
+
if (CATALOG_SCALES.includes(scale)) {
|
|
34
|
+
images.push({
|
|
35
|
+
scale,
|
|
36
|
+
src: asset.files[idx],
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
if (images.length === 0 && asset.scales.length > 0) {
|
|
41
|
+
const maxCatalogScale = CATALOG_SCALES[CATALOG_SCALES.length - 1];
|
|
42
|
+
let idx = asset.scales.findIndex((scale) => scale > maxCatalogScale);
|
|
43
|
+
if (idx === -1) {
|
|
44
|
+
idx = asset.scales.length - 1;
|
|
45
|
+
}
|
|
46
|
+
const scale = Math.min(
|
|
47
|
+
maxCatalogScale,
|
|
48
|
+
Math.max(1, Math.ceil(asset.scales[idx])),
|
|
49
|
+
);
|
|
50
|
+
console.warn(
|
|
51
|
+
`warning: Asset "${asset.name}" has no 1x/2x/3x variant; ` +
|
|
52
|
+
`using its @${asset.scales[idx]}x file as the ${scale}x catalog rendition.`,
|
|
53
|
+
);
|
|
54
|
+
images.push({
|
|
55
|
+
scale,
|
|
56
|
+
src: asset.files[idx],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return images;
|
|
60
|
+
}
|
|
61
|
+
function getImageSet(catalogDir, asset) {
|
|
28
62
|
const fileName = (0, _assetUtils.getAndroidResourceIdentifier)(asset);
|
|
29
63
|
return {
|
|
30
64
|
basePath: _nodePath.default.join(catalogDir, `${fileName}.imageset`),
|
|
31
|
-
files:
|
|
65
|
+
files: getCatalogImages(asset).map(({ scale, src }) => {
|
|
32
66
|
const suffix = scale === 1 ? "" : `@${scale}x`;
|
|
33
67
|
return {
|
|
34
68
|
name: `${fileName + suffix}.${asset.type}`,
|
|
35
69
|
scale,
|
|
36
|
-
src
|
|
70
|
+
src,
|
|
37
71
|
};
|
|
38
72
|
}),
|
|
39
73
|
};
|
|
@@ -17,10 +17,22 @@ type ImageSet = {
|
|
|
17
17
|
files: { name: string, src: string, scale: number }[],
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
+
type CatalogImage = { scale: number, src: string };
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Pairs each catalog-valid scale of the asset with its source file.
|
|
24
|
+
*
|
|
25
|
+
* If the asset has no valid scale at all (e.g. only a fractional @1.5x
|
|
26
|
+
* variant), its closest variant is mapped into the nearest valid slot,
|
|
27
|
+
* mirroring the "closest larger" fallback filterPlatformAssetScales applies
|
|
28
|
+
* to loose files, so the imageset always contains at least one rendition
|
|
29
|
+
* actool will compile.
|
|
30
|
+
*/
|
|
31
|
+
declare export function getCatalogImages(asset: AssetData): Array<CatalogImage>;
|
|
32
|
+
|
|
20
33
|
declare export function getImageSet(
|
|
21
34
|
catalogDir: string,
|
|
22
35
|
asset: AssetData,
|
|
23
|
-
scales: ReadonlyArray<number>,
|
|
24
36
|
): ImageSet;
|
|
25
37
|
|
|
26
38
|
declare export function isCatalogAsset(asset: AssetData): boolean;
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
const ALLOWED_SCALES = {
|
|
6
|
+
exports.default = exports.ALLOWED_SCALES = void 0;
|
|
7
|
+
const ALLOWED_SCALES = (exports.ALLOWED_SCALES = {
|
|
8
8
|
ios: [1, 2, 3],
|
|
9
|
-
};
|
|
9
|
+
});
|
|
10
10
|
function filterPlatformAssetScales(platform, scales) {
|
|
11
11
|
const whitelist = ALLOWED_SCALES[platform];
|
|
12
12
|
if (!whitelist) {
|
|
@@ -64,12 +64,9 @@ async function saveAssets(assets, platform, assetsDest, assetCatalogDest) {
|
|
|
64
64
|
(0, _assetCatalogIOS.cleanAssetCatalog)(catalogDir);
|
|
65
65
|
for (const asset of assets) {
|
|
66
66
|
if ((0, _assetCatalogIOS.isCatalogAsset)(asset)) {
|
|
67
|
-
|
|
68
|
-
catalogDir,
|
|
69
|
-
asset,
|
|
70
|
-
(0, _filterPlatformAssetScales.default)(platform, asset.scales),
|
|
67
|
+
(0, _assetCatalogIOS.writeImageSet)(
|
|
68
|
+
(0, _assetCatalogIOS.getImageSet)(catalogDir, asset),
|
|
71
69
|
);
|
|
72
|
-
(0, _assetCatalogIOS.writeImageSet)(imageSet);
|
|
73
70
|
} else {
|
|
74
71
|
addAssetToCopy(asset);
|
|
75
72
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native/community-cli-plugin",
|
|
3
|
-
"version": "0.88.0-nightly-
|
|
3
|
+
"version": "0.88.0-nightly-20260826-ea06a3191",
|
|
4
4
|
"description": "Core CLI commands for React Native",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"prepack": "node ../../scripts/build/prepack.js"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@react-native/asset-utils": "0.88.0-nightly-
|
|
29
|
-
"@react-native/dev-middleware": "0.88.0-nightly-
|
|
28
|
+
"@react-native/asset-utils": "0.88.0-nightly-20260826-ea06a3191",
|
|
29
|
+
"@react-native/dev-middleware": "0.88.0-nightly-20260826-ea06a3191",
|
|
30
30
|
"commander": "^12.0.0",
|
|
31
31
|
"debug": "^4.4.0",
|
|
32
32
|
"invariant": "^2.2.4",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@react-native-community/cli": "*",
|
|
41
|
-
"@react-native/metro-config": "0.88.0-nightly-
|
|
41
|
+
"@react-native/metro-config": "0.88.0-nightly-20260826-ea06a3191"
|
|
42
42
|
},
|
|
43
43
|
"peerDependenciesMeta": {
|
|
44
44
|
"@react-native-community/cli": {
|