iwa-cli
Version:
An ImmutableWebApp CLI using oclif and cosmiconfig
64 lines (63 loc) • 2.94 kB
JavaScript
;
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;