UNPKG

@armor/create-armor-ui

Version:

A cli tool for generating Armor UI apps.

114 lines (90 loc) 3.44 kB
#!/usr/bin/env node "use strict"; 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);