UNPKG

iwa-cli

Version:

An ImmutableWebApp CLI using oclif and cosmiconfig

64 lines (63 loc) 2.94 kB
"use strict"; const tslib_1 = require("tslib"); const fs_1 = (0, tslib_1.__importDefault)(require("fs")); const path_1 = (0, tslib_1.__importDefault)(require("path")); const lodash_pick_1 = (0, tslib_1.__importDefault)(require("lodash.pick")); const chalk_1 = (0, tslib_1.__importDefault)(require("chalk")); const cosmiconfig_1 = require("cosmiconfig"); const command_1 = require("@oclif/command"); const helpers_1 = require("../helpers"); const explorer = (0, cosmiconfig_1.cosmiconfig)('iwa'); class GenerateCommand extends command_1.Command { async getData() { const { flags } = this.parse(GenerateCommand); const cosmic = await explorer.search(flags.config); if (!cosmic) { this.log(chalk_1.default.redBright `Could not find a config file!`); return {}; } const env = process.env.ENV || flags.env; this.log(chalk_1.default.cyanBright(`Specified environment - "${env}".`)); const cosmicDefaultData = cosmic.config.env.all || {}; const cosmicData = cosmic.config.env[env]; const processOverrideData = (0, lodash_pick_1.default)(process.env, Object.keys(cosmicData)); const iwaConfig = Object.assign(Object.assign(Object.assign({}, cosmicDefaultData), cosmicData), processOverrideData); if (flags.verbose) { this.log(chalk_1.default.cyanBright('Uses verbose output ')); this.log(chalk_1.default.cyanBright('Generated config:')); this.log(chalk_1.default.cyanBright(JSON.stringify(iwaConfig, null, 4))); } return iwaConfig; } async run() { const { args } = this.parse(GenerateCommand); const { input } = args; const output = args.output || input; const data = await this.getData(); const inputLocation = path_1.default.join(process.cwd(), input); const outputLocation = path_1.default.join(process.cwd(), output); const inputContent = fs_1.default.readFileSync(inputLocation, { encoding: 'utf-8', }); const outputContent = (0, helpers_1.replaceIWA)(inputContent, data); fs_1.default.writeFileSync(outputLocation, outputContent); this.log(chalk_1.default.greenBright `File with injected configuration was generated!`); } } GenerateCommand.aliases = ['gen', 'g']; GenerateCommand.description = 'Generates a HTML file, where window.env configuration is injected'; GenerateCommand.flags = { env: command_1.flags.string({ char: 'e', default: 'production', }), config: command_1.flags.string({ char: 'c', description: 'Location to look for iwa configuration', }), verbose: command_1.flags.boolean({ char: 'd' }), version: command_1.flags.version({ char: 'v' }), help: command_1.flags.help({ char: 'h' }), }; GenerateCommand.args = [{ name: 'input' }, { name: 'output' }]; module.exports = GenerateCommand;