@nstudio/ionic
Version:
Ionic Plugin for xplat
58 lines (57 loc) • 3.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const xplat_1 = require("@nstudio/xplat");
const xplat_utils_1 = require("@nstudio/xplat-utils");
const schematics_1 = require("@angular-devkit/schematics");
const utils_1 = require("../../utils");
const versions_1 = require("../../utils/versions");
const devkit_1 = require("@nx/devkit");
function default_1(options) {
if (!options.name) {
throw new schematics_1.SchematicsException((0, xplat_1.missingArgument)('name', 'Provide a name for your Ionic app.', 'nx g @nstudio/ionic:app name'));
}
return (0, schematics_1.chain)([
(0, xplat_utils_1.prerun)(options),
// adjust naming convention
xplat_1.XplatHelpers.applyAppNamingConvention(options, 'ionic'),
// create app files
(tree, context) => addAppFiles(options, options.name)(tree, context),
// add root package dependencies
utils_1.XplatIonicHelpers.updateRootDeps(options),
// addInstallTask(),
// add start/clean scripts
(tree) => {
const scripts = {};
const platformApp = options.name.replace('-', '.');
const directory = options.directory ? `${options.directory}/` : '';
scripts[`start.${platformApp}`] = `cd apps/${directory}${options.name} && npm start`;
scripts[`build.${platformApp}`] = `cd apps/${directory}${options.name} && npm run build:ionic`;
scripts[`prepare.${platformApp}`] = `npm run clean && npm run clean.${platformApp} && npm run build.${platformApp}`;
scripts[`prepare.${platformApp}.ios`] = `npm run prepare.${platformApp} && cd apps/${directory}${options.name} && npm run cap.add.ios`;
scripts[`prepare.${platformApp}.android`] = `npm run prepare.${platformApp} && cd apps/${directory}${options.name} && npm run cap.add.android`;
scripts[`open.${platformApp}.ios`] = `cd apps/${directory}${options.name} && npm run cap.ios`;
scripts[`open.${platformApp}.android`] = `cd apps/${directory}${options.name} && npm run cap.android`;
scripts[`sync.${platformApp}`] = `cd apps/${directory}${options.name} && npm run cap.copy`;
scripts[`clean.${platformApp}`] = `cd apps/${directory}${options.name} && npx rimraf hooks node_modules platforms www plugins ios android package-lock.json yarn.lock && yarn`;
return (0, xplat_1.updatePackageScripts)(tree, scripts);
},
(tree, context) => {
const directory = options.directory ? `${options.directory}/` : '';
(0, devkit_1.addProjectConfiguration)((0, xplat_1.convertNgTreeToDevKit)(tree, context), options.name, {
name: options.name,
root: `apps/${directory}${options.name}/`,
sourceRoot: `apps/${directory}${options.name}/src`,
projectType: 'application',
});
},
]);
}
function addAppFiles(options, appPath) {
const appname = (0, xplat_utils_1.getAppName)(options, 'ionic');
const directory = options.directory ? `${options.directory}/` : '';
return (0, schematics_1.branchAndMerge)((0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)(`./_files`), [
(0, schematics_1.template)(Object.assign(Object.assign(Object.assign({}, options), (0, xplat_1.getDefaultTemplateOptions)()), { pathOffset: directory ? '../../../' : '../../', appname, xplatFolderName: xplat_1.XplatHelpers.getXplatFoldername('ionic'), capacitorVersion: versions_1.capacitorVersion })),
(0, schematics_1.move)(`apps/${directory}${appPath}`),
])));
}