amis-rpc-design/node_modules/@react-native-community/cli-plugin-metro/build/commands/bundle/saveAssets.js

124 lines
4.1 KiB
JavaScript
Raw Normal View History

2023-10-07 19:42:30 +08:00
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _cliTools() {
const data = require("@react-native-community/cli-tools");
_cliTools = function () {
return data;
};
return data;
}
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
var _assetCatalogIOS = require("./assetCatalogIOS");
var _filterPlatformAssetScales = _interopRequireDefault(require("./filterPlatformAssetScales"));
var _getAssetDestPathAndroid = _interopRequireDefault(require("./getAssetDestPathAndroid"));
var _getAssetDestPathIOS = _interopRequireDefault(require("./getAssetDestPathIOS"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* 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.
*
*/
function saveAssets(assets, platform, assetsDest, assetCatalogDest) {
if (!assetsDest) {
_cliTools().logger.warn('Assets destination folder is not set, skipping...');
return;
}
const filesToCopy = Object.create(null); // Map src -> dest
const getAssetDestPath = platform === 'android' ? _getAssetDestPathAndroid.default : _getAssetDestPathIOS.default;
const addAssetToCopy = asset => {
const validScales = new Set((0, _filterPlatformAssetScales.default)(platform, asset.scales));
asset.scales.forEach((scale, idx) => {
if (!validScales.has(scale)) {
return;
}
const src = asset.files[idx];
const dest = _path().default.join(assetsDest, getAssetDestPath(asset, scale));
filesToCopy[src] = dest;
});
};
if (platform === 'ios' && assetCatalogDest != null) {
// Use iOS Asset Catalog for images. This will allow Apple app thinning to
// remove unused scales from the optimized bundle.
const catalogDir = _path().default.join(assetCatalogDest, 'RNAssets.xcassets');
if (!_fs().default.existsSync(catalogDir)) {
_cliTools().logger.error(`Could not find asset catalog 'RNAssets.xcassets' in ${assetCatalogDest}. Make sure to create it if it does not exist.`);
return;
}
_cliTools().logger.info('Adding images to asset catalog', catalogDir);
(0, _assetCatalogIOS.cleanAssetCatalog)(catalogDir);
for (const asset of assets) {
if ((0, _assetCatalogIOS.isCatalogAsset)(asset)) {
const imageSet = (0, _assetCatalogIOS.getImageSet)(catalogDir, asset, (0, _filterPlatformAssetScales.default)(platform, asset.scales));
(0, _assetCatalogIOS.writeImageSet)(imageSet);
} else {
addAssetToCopy(asset);
}
}
_cliTools().logger.info('Done adding images to asset catalog');
} else {
assets.forEach(addAssetToCopy);
}
return copyAll(filesToCopy);
}
function copyAll(filesToCopy) {
const queue = Object.keys(filesToCopy);
if (queue.length === 0) {
return Promise.resolve();
}
_cliTools().logger.info(`Copying ${queue.length} asset files`);
return new Promise((resolve, reject) => {
const copyNext = error => {
if (error) {
reject(error);
return;
}
if (queue.length === 0) {
_cliTools().logger.info('Done copying assets');
resolve();
} else {
// queue.length === 0 is checked in previous branch, so this is string
const src = queue.shift();
const dest = filesToCopy[src];
copy(src, dest, copyNext);
}
};
copyNext();
});
}
function copy(src, dest, callback) {
const destDir = _path().default.dirname(dest);
_fs().default.mkdir(destDir, {
recursive: true
}, err => {
if (err) {
callback(err);
return;
}
_fs().default.createReadStream(src).pipe(_fs().default.createWriteStream(dest)).on('finish', callback);
});
}
var _default = saveAssets;
exports.default = _default;
//# sourceMappingURL=saveAssets.ts.map