ngm-cli
Version:
Simple way to manage angular submodules in one repository
219 lines • 21.4 kB
JavaScript
;
// 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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