@jigra/cli
Version:
Jigra: Cross-platform apps with JavaScript and the web
129 lines (128 loc) • 7.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.copy = exports.copyCommand = void 0;
const tslib_1 = require("tslib");
const utils_fs_1 = require("@familyjs/utils-fs");
const path_1 = require("path");
const colors_1 = tslib_1.__importDefault(require("../colors"));
const common_1 = require("../common");
const cordova_1 = require("../cordova");
const errors_1 = require("../errors");
const common_2 = require("../ios/common");
const log_1 = require("../log");
const plugin_1 = require("../plugin");
const iosplugin_1 = require("../util/iosplugin");
const promise_1 = require("../util/promise");
const copy_1 = require("../web/copy");
const sourcemaps_1 = require("./sourcemaps");
async function copyCommand(config, selectedPlatformName, inline = false) {
var _a;
if (selectedPlatformName && !(await (0, common_1.isValidPlatform)(selectedPlatformName))) {
const platformDir = (0, common_1.resolvePlatform)(config, selectedPlatformName);
if (platformDir) {
await (0, common_1.runPlatformHook)(config, selectedPlatformName, platformDir, 'jigra:copy');
}
else {
log_1.logger.error(`Platform ${colors_1.default.input(selectedPlatformName)} not found.`);
}
}
else {
const platforms = await (0, common_1.selectPlatforms)(config, selectedPlatformName);
try {
await (0, promise_1.allSerial)(platforms.map((platformName) => () => copy(config, platformName, inline)));
}
catch (e) {
if ((0, errors_1.isFatal)(e)) {
throw e;
}
log_1.logger.error((_a = e.stack) !== null && _a !== void 0 ? _a : e);
}
}
}
exports.copyCommand = copyCommand;
async function copy(config, platformName, inline = false) {
await (0, common_1.runTask)(colors_1.default.success(colors_1.default.strong(`copy ${platformName}`)), async () => {
var _a, _b, _c, _d, _e, _f;
const result = await (0, common_1.checkWebDir)(config);
if (result) {
throw result;
}
await (0, common_1.runHooks)(config, platformName, config.app.rootDir, 'jigra:copy:before');
const allPlugins = await (0, plugin_1.getPlugins)(config, platformName);
let usesLiveUpdates = false;
if (allPlugins.filter((plugin) => plugin.id === '@jigra/live-updates').length > 0) {
usesLiveUpdates = true;
}
if (platformName === config.ios.name) {
await copyWebDir(config, await config.ios.webDirAbs, config.app.webDirAbs);
if (usesLiveUpdates && ((_c = (_b = (_a = config.app.extConfig) === null || _a === void 0 ? void 0 : _a.plugins) === null || _b === void 0 ? void 0 : _b.LiveUpdates) === null || _c === void 0 ? void 0 : _c.key)) {
await copySecureLiveUpdatesKey(config.app.extConfig.plugins.LiveUpdates.key, config.app.rootDir, config.ios.nativeTargetDirAbs);
}
await copyJigraConfig(config, config.ios.nativeTargetDirAbs);
const cordovaPlugins = await (0, cordova_1.getCordovaPlugins)(config, platformName);
await (0, cordova_1.handleCordovaPluginsJS)(cordovaPlugins, config, platformName);
const iosPlugins = await (0, common_2.getIOSPlugins)(allPlugins);
await (0, iosplugin_1.generateIOSPackageJSON)(config, iosPlugins);
}
else if (platformName === config.android.name) {
await copyWebDir(config, config.android.webDirAbs, config.app.webDirAbs);
if (usesLiveUpdates && ((_f = (_e = (_d = config.app.extConfig) === null || _d === void 0 ? void 0 : _d.plugins) === null || _e === void 0 ? void 0 : _e.LiveUpdates) === null || _f === void 0 ? void 0 : _f.key)) {
await copySecureLiveUpdatesKey(config.app.extConfig.plugins.LiveUpdates.key, config.app.rootDir, config.android.assetsDirAbs);
}
await copyJigraConfig(config, config.android.assetsDirAbs);
const cordovaPlugins = await (0, cordova_1.getCordovaPlugins)(config, platformName);
await (0, cordova_1.handleCordovaPluginsJS)(cordovaPlugins, config, platformName);
await (0, cordova_1.writeCordovaAndroidManifest)(cordovaPlugins, config, platformName);
}
else if (platformName === config.web.name) {
await (0, copy_1.copyWeb)(config);
}
else {
throw `Platform ${platformName} is not valid.`;
}
if (inline) {
await (0, sourcemaps_1.inlineSourceMaps)(config, platformName);
}
});
await (0, common_1.runHooks)(config, platformName, config.app.rootDir, 'jigra:copy:after');
}
exports.copy = copy;
async function copyJigraConfig(config, nativeAbsDir) {
const nativeRelDir = (0, path_1.relative)(config.app.rootDir, nativeAbsDir);
const nativeConfigFile = 'jigra.config.json';
const nativeConfigFilePath = (0, path_1.join)(nativeAbsDir, nativeConfigFile);
await (0, common_1.runTask)(`Creating ${colors_1.default.strong(nativeConfigFile)} in ${nativeRelDir}`, async () => {
var _a;
(_a = config.app.extConfig.android) === null || _a === void 0 ? true : delete _a.buildOptions;
await (0, utils_fs_1.writeJSON)(nativeConfigFilePath, config.app.extConfig, {
spaces: '\t',
});
});
}
async function copyWebDir(config, nativeAbsDir, webAbsDir) {
var _a;
const webRelDir = (0, path_1.basename)(webAbsDir);
const nativeRelDir = (0, path_1.relative)(config.app.rootDir, nativeAbsDir);
if (((_a = config.app.extConfig.server) === null || _a === void 0 ? void 0 : _a.url) && !(await (0, utils_fs_1.pathExists)(webAbsDir))) {
log_1.logger.warn(`Cannot copy web assets from ${colors_1.default.strong(webRelDir)} to ${nativeRelDir}\n` +
`Web asset directory specified by ${colors_1.default.input('webDir')} does not exist. This is not an error because ${colors_1.default.input('server.url')} is set in config.`);
return;
}
await (0, common_1.runTask)(`Copying web assets from ${colors_1.default.strong(webRelDir)} to ${nativeRelDir}`, async () => {
await (0, utils_fs_1.remove)(nativeAbsDir);
return (0, utils_fs_1.copy)(webAbsDir, nativeAbsDir);
});
}
async function copySecureLiveUpdatesKey(secureLiveUpdatesKeyFile, rootDir, nativeAbsDir) {
const keyAbsFromPath = (0, path_1.join)(rootDir, secureLiveUpdatesKeyFile);
const keyAbsToPath = (0, path_1.join)(nativeAbsDir, (0, path_1.basename)(keyAbsFromPath));
const keyRelToDir = (0, path_1.relative)(rootDir, nativeAbsDir);
if (!(await (0, utils_fs_1.pathExists)(keyAbsFromPath))) {
log_1.logger.warn(`Cannot copy Secure Live Updates signature file from ${colors_1.default.strong(keyAbsFromPath)} to ${keyRelToDir}\n` +
`Signature file does not exist at specified key path.`);
return;
}
await (0, common_1.runTask)(`Copying Secure Live Updates key from ${colors_1.default.strong(secureLiveUpdatesKeyFile)} to ${keyRelToDir}`, async () => {
return (0, utils_fs_1.copy)(keyAbsFromPath, keyAbsToPath);
});
}