@armor/create-armor-ui
Version:
A cli tool for generating Armor UI apps.
114 lines (90 loc) • 3.44 kB
JavaScript
;
var _environments = _interopRequireDefault(require("./environments"));
var _angularCode = _interopRequireDefault(require("./angular-code"));
var _angularJson = _interopRequireDefault(require("./angular-json"));
var _npmInstalls = _interopRequireDefault(require("./npm-installs"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const program = require('commander');
const exec = require('child-process-promise').exec;
const oneLine = require('common-tags').oneLine;
const Listr = require('listr');
const fs = require('fs');
const requireText = require('require-text'); // Config Defaults
const packageJsonDefaults = require('../defaults/package-defaults');
const styleDefaults = require('../defaults/styles/styles-defaults');
const themeLightDefaults = require('../defaults/styles/theme-light-defaults'); // External Tasks
program.version('0.0.1');
program.command('*').action(name => {
createTasks.run({
name
});
});
/**
* All the tasks we run to generate the app, some are defined in external
* modules. see 'External Tasks' above. Shorter tasks are in this file,
* below the Listr object.
* @type {Listr}
*/
const createTasks = new Listr([{
title: ' Generate App Via Angular CLI, This May Take A Few Minutes',
task: ctx => create(ctx.name)
}, {
title: ' Install @armor Modules',
task: () => _npmInstalls.default.dependencies()
}, {
title: ' Install @armor Peer Dependencies',
task: () => _npmInstalls.default.peers()
}, {
title: ' Add Npm Scripts',
task: () => addNpmScript()
}, {
title: ' Update Angular.json',
task: ctx => (0, _angularJson.default)(ctx.name)
}, {
title: ' Generate Module',
task: () => generateModule()
}, {
title: ' Install Default Styles',
task: () => installStyles()
}, {
title: ' Overwrite Angular Code',
task: () => (0, _angularCode.default)()
}, {
title: ' Install Armor Environments',
task: () => (0, _environments.default)()
}, {
title: ' Generate Example Component',
task: () => addExampleComponent()
}]);
function create(name) {
return exec(oneLine`ng new ${name}
--directory="./"
--style="scss"
--routing=true
--prefix="armor"
`);
}
function addNpmScript() {
return exec(oneLine`json -I -f package.json -e 'this.scripts=${JSON.stringify(packageJsonDefaults)}'`);
}
function generateModule() {
return exec(`ng generate module mainModule --routing=true`);
}
function installStyles() {
exec('cp ./node_modules/@armor/brandkit/assets/preflight.css ./src/assets');
exec('mkdir src/styles src/styles/themes').then(() => {
fs.writeFileSync('src/styles/styles.scss', styleDefaults);
fs.writeFileSync('src/styles/themes/theme-light.scss', themeLightDefaults);
});
}
function addExampleComponent() {
// Default Components
const helloArmorComponentHtml = requireText('../defaults/hello-armor/hello-armor.component.html', require);
const helloArmorComponentTs = requireText('../defaults/hello-armor/hello-armor.component.ts', require);
exec('ng generate component main-module/hello-armor --export=true --module main-module').then(() => {
fs.writeFileSync('src/app/main-module/hello-armor/hello-armor.component.ts', helloArmorComponentTs);
fs.writeFileSync('src/app/main-module/hello-armor/hello-armor.component.html', helloArmorComponentHtml);
});
}
program.parse(process.argv);