forked from olcxjas-softworks/LarpixClient
139 lines
5.7 KiB
JavaScript
139 lines
5.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.run = void 0;
|
|
const tslib_1 = require("tslib");
|
|
const c = (0, tslib_1.__importStar)(require("../colors"));
|
|
const android_1 = require("../platforms/android");
|
|
const ios_1 = require("../platforms/ios");
|
|
const pwa_1 = require("../platforms/pwa");
|
|
const log_1 = require("../util/log");
|
|
async function run(ctx) {
|
|
try {
|
|
if (!(await ctx.project.assetDirExists())) {
|
|
(0, log_1.error)(`Asset directory not found at ${ctx.project.projectRoot}. Use --asset-path to specify a specific directory containing assets`);
|
|
return [];
|
|
}
|
|
const assets = await ctx.project.loadInputAssets();
|
|
if ([assets.logo, assets.icon, assets.splash, assets.splashDark].every((a) => !a)) {
|
|
(0, log_1.error)(`No assets found in the asset path ${c.ancillary(ctx.project.assetDir)}. See https://github.com/ionic-team/capacitor-assets to learn how to use this tool.`);
|
|
return [];
|
|
}
|
|
let platforms = ['ios', 'android', 'pwa'];
|
|
if (ctx.args.ios || ctx.args.android || ctx.args.pwa) {
|
|
platforms = [];
|
|
}
|
|
if (ctx.args.ios) {
|
|
platforms.push('ios');
|
|
}
|
|
if (ctx.args.android) {
|
|
platforms.push('android');
|
|
}
|
|
if (ctx.args.pwa) {
|
|
platforms.push('pwa');
|
|
}
|
|
await verifyPlatformFolders(/* mut */ platforms, ctx.project);
|
|
if (platforms.length > 0) {
|
|
if (!ctx.args.silent) {
|
|
(0, log_1.log)(`Generating assets for ${platforms.map((p) => c.strong(c.success(p))).join(', ')}`);
|
|
}
|
|
const generators = getGenerators(ctx, platforms);
|
|
const generated = await generateAssets(assets, generators, ctx.project);
|
|
if (!ctx.args.silent) {
|
|
logGenerated(generated);
|
|
}
|
|
/*
|
|
if (!ctx.args.silent && platforms.indexOf('pwa') >= 0 && ctx.args.pwaTags) {
|
|
PwaAssetGenerator.logInstructions(generated);
|
|
}
|
|
*/
|
|
return generated;
|
|
}
|
|
else {
|
|
log_1.logger.warn('No platforms found, exiting');
|
|
return [];
|
|
}
|
|
}
|
|
catch (e) {
|
|
(0, log_1.error)('Unable to generate assets', e.message);
|
|
(0, log_1.error)(e);
|
|
}
|
|
return [];
|
|
}
|
|
exports.run = run;
|
|
async function verifyPlatformFolders(platforms, project) {
|
|
var _a, _b;
|
|
if (platforms.indexOf('ios') >= 0 && !(await project.iosExists())) {
|
|
platforms.splice(platforms.indexOf('ios'), 1);
|
|
log_1.logger.warn(`iOS platform not found at ${((_a = project.config.ios) === null || _a === void 0 ? void 0 : _a.path) || ''}, skipping iOS generation`);
|
|
}
|
|
if (platforms.indexOf('android') >= 0 && !(await project.androidExists())) {
|
|
platforms.splice(platforms.indexOf('android'), 1);
|
|
log_1.logger.warn(`Android platform not found at ${((_b = project.config.android) === null || _b === void 0 ? void 0 : _b.path) || ''}, skipping android generation`);
|
|
}
|
|
}
|
|
async function generateAssets(assets, generators, project) {
|
|
const generated = [];
|
|
async function generateAndCollect(asset) {
|
|
const g = await Promise.all(generators.map((g) => asset.generate(g, project)));
|
|
generated.push(...g.flat().filter((f) => !!f));
|
|
}
|
|
const assetTypes = Object.values(assets).filter((v) => !!v);
|
|
for (const asset of assetTypes) {
|
|
await generateAndCollect(asset);
|
|
}
|
|
return generated;
|
|
}
|
|
function getGenerators(ctx, platforms) {
|
|
return platforms.map((p) => {
|
|
if (p === 'ios') {
|
|
return new ios_1.IosAssetGenerator(ctx.args);
|
|
}
|
|
if (p === 'android') {
|
|
return new android_1.AndroidAssetGenerator(ctx.args);
|
|
}
|
|
if (p === 'pwa') {
|
|
return new pwa_1.PwaAssetGenerator(ctx.args);
|
|
}
|
|
});
|
|
}
|
|
// Print out a nice report of the assets generated
|
|
// and totals per platform
|
|
function logGenerated(generated) {
|
|
const sorted = generated.slice().sort((a, b) => {
|
|
return a.template.platform.localeCompare(b.template.platform);
|
|
});
|
|
for (const g of sorted) {
|
|
Object.keys(g.destFilenames).forEach((name) => {
|
|
const filename = g.getDestFilename(name);
|
|
const outputInfo = g.getOutputInfo(name);
|
|
(0, log_1.log)(`${c.strong(c.success('CREATE'))} ${c.strong(c.extra(g.template.platform))} ${c.weak(g.template.kind)} ${filename !== null && filename !== void 0 ? filename : ''}${outputInfo ? ` (${size(outputInfo.size)})` : ''}`);
|
|
});
|
|
}
|
|
(0, log_1.log)('\n');
|
|
// Aggregate total assets and size per platform
|
|
const totals = sorted.reduce((totals, g) => {
|
|
if (!(g.template.platform in totals)) {
|
|
totals[g.template.platform] = {
|
|
count: 0,
|
|
size: 0,
|
|
};
|
|
}
|
|
const entry = totals[g.template.platform];
|
|
const count = Object.values(g.destFilenames).reduce((v) => v + 1, 0);
|
|
const size = Object.values(g.outputInfoMap).reduce((v, c) => v + c.size, 0);
|
|
totals[g.template.platform] = {
|
|
count: entry.count + count,
|
|
size: entry.size + size,
|
|
};
|
|
return totals;
|
|
}, {});
|
|
(0, log_1.log)('Totals:');
|
|
for (const platformName of Object.keys(totals).sort()) {
|
|
const e = totals[platformName];
|
|
(0, log_1.log)(`${c.strong(c.success(platformName))}: ${c.strong(c.extra(e.count))} generated, ${c.strong(size(e.size))} total`);
|
|
}
|
|
}
|
|
function size(bytes) {
|
|
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
return Number((bytes / Math.pow(1024, i)).toFixed(2)) * 1 + ' ' + ['B', 'KB', 'MB', 'GB', 'TB'][i];
|
|
}
|