UNPKG

ngm-cli

Version:

Simple way to manage angular submodules in one repository

219 lines 21.4 kB
"use strict"; // todo: add load from config file, TBD Object.defineProperty(exports, "__esModule", { value: true }); const path = require("path"); const Listr = require('listr'); const cpy = require('cpy'); const del = require('del'); const fs = require('fs'); const utils_1 = require("../utils"); const tasks_1 = require("../tasks"); const inline_resources_1 = require("../helpers/inline-resources"); function buildCommand({ project, verbose, clean, local, main, watch, skipBundles, buildEs2015 }) { // 1. clean dist folders // 2.1 merge pkg json // todo: 2.2 validate pkg (main, module, types fields) // 2.3 write pkg // 3. compile ts return utils_1.findSubmodules(project, { local }) .then(opts => new Listr([ /** * 1. Clean /dist folders * delete only dist content, but not folders itself * no not break npm link */ { title: 'Clean dist folders', task: () => new Listr(opts.map(opt => ({ title: `Cleaning ${opt.dist}`, task: () => del(path.join(opt.dist, '**/*')) }))), skip: () => !clean }, { title: 'Copy *.md and license files', task: () => Promise.all(opts.map(opt => cpy(['*.md', 'LICENSE'], opt.dist) .then(() => cpy([ path.join(opt.src, '*.md'), path.join(opt.src, 'LICENSE') ], opt.dist)))) }, { title: 'Build package.json files', task: () => tasks_1.buildPkgs(opts, { local }) }, { title: 'Copy source files to temporary folder', task: () => new Listr(opts.map(opt => ({ title: `Copying ${opt.pkg.name} source files to ${opt.src}`, task: () => cpy(['**/*.*', '!node_modules'], // opt.tmp, path.resolve(opt.tmp), { cwd: opt.project, parents: true, overwrite: true, nodir: true }) }))) }, /** * 3. Inline template (.html) and style (.css) files into the component .ts files. * We do this on the /.tmp folder to avoid editing the original /src files */ { title: 'Inline template and style files into the components', task: () => new Listr(opts.map(opt => ({ title: `Inlining ${opt.pkg.name} templates and styles`, task: () => inline_resources_1.inlineResources(opt.tmp) }))) }, { title: 'Build projects', task: () => new Listr(opts.map(opt => ({ title: `Building ${opt.pkg.name} (${opt.src})`, task: () => watch ? tasks_1.build(opt.tmp) : tasks_1.build(opt.tmp).catch(error => { console.log(error.toString()); process.exit(1); }) }))) }, { title: 'Copy assets to dist folder', skip: () => false, task: () => new Listr(opts.map(opt => ({ title: `Copying ${opt.pkg.name} assets to ${opt.src}`, task: () => cpy(['**/*', '!node_modules', '!**/*.{ts, html}', '!package.json', '!tsconfig.json'], path.relative(opt.project, opt.dist), { cwd: opt.project, parents: true, overwrite: true, nodir: true }) }))) }, { title: 'Bundling umd version', task: () => new Listr(opts.map(opt => ({ title: `Bundling ${opt.pkg.name}`, task: () => { if (Array.isArray(main) && main.length) { return Promise.all(main.map((entryPoint, i) => tasks_1.bundleUmd({ main: entryPoint, src: opt.tmp, dist: opt.dist, name: i === 0 ? opt.pkg.name : entryPoint.replace('.ts', ''), tsconfig: opt.tsconfig.path, minify: false }))); } return tasks_1.bundleUmd({ main, src: opt.tmp, dist: opt.dist, name: opt.pkg.name, tsconfig: opt.tsconfig.path, minify: false }); }, skip: () => watch || skipBundles }))), skip: () => watch || skipBundles }, { title: 'Bundling minified umd version', task: () => new Listr(opts.map(opt => ({ title: `Bundling ${opt.pkg.name}`, task: () => { if (Array.isArray(main) && main.length) { return Promise.all(main.map((entryPoint, i) => tasks_1.bundleUmd({ main: entryPoint, src: opt.tmp, dist: opt.dist, name: i === 0 ? opt.pkg.name : entryPoint.replace('.ts', ''), tsconfig: opt.tsconfig.path, minify: true }))); } return tasks_1.bundleUmd({ main, src: opt.tmp, dist: opt.dist, name: opt.pkg.name, tsconfig: opt.tsconfig.path, minify: true }); }, skip: () => watch || skipBundles }))), skip: () => watch || skipBundles }, { title: 'Bundling es2015 version', task: () => new Listr(opts.map(opt => ({ title: `Bundling ${opt.pkg.name}`, task: () => { const tsconfig = JSON.parse(fs.readFileSync(path.resolve(opt.tmp, 'tsconfig.json'), 'utf8')); tsconfig.compilerOptions.target = 'es2015'; tsconfig.compilerOptions.module = 'es2015'; tsconfig.compilerOptions.outDir = 'dist-es2015'; fs.writeFileSync(path.resolve(opt.tmp, 'tsconfig.json'), JSON.stringify(tsconfig), 'utf8'); if (Array.isArray(main) && main.length) { return Promise.all(main.map((entryPoint, i) => tasks_1.bundleEs2015({ input: entryPoint, dist: opt.dist, name: i === 0 ? opt.pkg.name : entryPoint.replace('.ts', ''), tmp: opt.tmp }))); } return tasks_1.bundleEs2015({ input: main, dist: opt.dist, name: opt.pkg.name, tmp: opt.tmp }); }, skip: () => !buildEs2015 || watch || skipBundles }))), skip: () => !buildEs2015 || watch || skipBundles }, { title: 'Clean .tmp folders', task: () => new Listr(opts.map(opt => ({ title: `Cleaning ${opt.tmp}`, task: () => del(path.join(opt.tmp, '**/*'), { force: true }) }))) } ], { renderer: verbose ? 'verbose' : 'default' })); } exports.buildCommand = buildCommand; function buildTsRun(cli) { const config = cli.flags.config ? JSON.parse(fs.readFileSync(path.resolve(cli.flags.config), 'utf8')) : {}; let { src, main, modules, watch, verbose, clean, local, skipBundles, buildEs2015 } = config; const project = cli.flags.project || src; main = cli.flags.main || main || 'index.ts'; verbose = cli.flags.verbose || verbose; watch = cli.flags.watch || watch; clean = cli.flags.clean || clean; skipBundles = cli.flags.skipBundles || skipBundles; buildEs2015 = cli.flags.buildEs2015 || buildEs2015; const modulePaths = modules ? modules.map(module => module.src) : []; if (!project && !modulePaths) { console.error('Please provide path to your projects source folder, `-p DIR` or specify `src` or `modules` in config'); process.exit(1); } if (modulePaths.length) { const commands = modules.map((module) => { return { title: `Build ${module.src}`, task: () => buildCommand({ project: module.src, verbose, clean, local, main: module.entryPoints, watch, skipBundles, buildEs2015 }) }; }); const taskQueue = new Listr(commands, { renderer: verbose ? 'verbose' : 'default' }); return utils_1.tasksWatch({ project: modulePaths, taskQueue, watch, paths: modulePaths }); } return buildCommand({ project, verbose, clean, local, main, watch, skipBundles, buildEs2015 }) .then(taskQueue => utils_1.tasksWatch({ project, taskQueue, watch, paths: null })); } exports.buildTsRun = buildTsRun; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1Q0FBdUM7O0FBRXZDLDZCQUE4QjtBQUU5QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFekIsb0NBQXNEO0FBQ3RELG9DQUFxRTtBQUNyRSxrRUFBOEQ7QUFHOUQsc0JBQTZCLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBQztJQUNsRyx3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLHNEQUFzRDtJQUN0RCxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLE1BQU0sQ0FBQyxzQkFBYyxDQUFDLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBQyxDQUFDO1NBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3RCOzs7O1dBSUc7UUFDSDtZQUNFLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixLQUFLLEVBQUUsWUFBWSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUM3QixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUks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