UNPKG

script-launcher

Version:
117 lines (116 loc) 3.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = require("fs"); var path_1 = require("path"); var deepmerge = require("deepmerge"); var scripts_1 = require("./scripts"); var Config = /** @class */ (function () { function Config(config) { this.scripts = new scripts_1.Scripts(config.scripts); this.menu = config.menu; this.options = config.options; } Object.defineProperty(Config.prototype, "customFile", { get: function () { var match = this.options.files.reverse().find(function (item) { return path_1.basename(item) === 'launcher-custom.json'; }); if (match) return match; return 'launcher-custom.json'; }, enumerable: true, configurable: true }); Config.load = function () { var hash = new Set(); var config = Config.default; var files = Config.default.options.files; var loaded; do { loaded = 0; for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { var file = files_1[_i]; if (file && !hash.has(file)) { config = deepmerge(config, Config.loadConfig(file)); hash.add(file); loaded++; } } files = config.options.files; } while (loaded > 0); Config.verifyScriptNames(config.scripts); return new Config(config); }; Config.verifyScriptNames = function (scripts) { var hash = new Set(); for (var _i = 0, _a = Object.keys(scripts); _i < _a.length; _i++) { var key = _a[_i]; var value = key.replace(/\$\w+(\:|$)/g, '$1'); if (hash.has(value)) throw new Error('Duplicate object key: "' + key + '"'); hash.add(value); } }; Config.loadConfig = function (file) { var absolutePath = path_1.resolve(file); if (fs_1.existsSync(absolutePath)) { return require(absolutePath); } return {}; }; Config.default = { scripts: {}, menu: { description: '', }, options: { files: [ 'launcher-config.json', 'launcher-scripts.json', 'launcher-menu.json', 'launcher-custom.json', ], logLevel: 0, script: { shell: true, }, menu: { defaultChoice: '', defaultScript: '', }, }, }; Config.init = { scripts: { 'serve:$project:dev': { sequential: [], concurrent: [ 'echo Start development server', 'echo ng serve $project -configuration=dev', ], }, 'serve:$project:$config': 'echo ng serve $project -configuration=$config', }, menu: { description: 'organization', uva: { description: 'environment', development: 'serve:uva:dev', acceptance: 'serve:uva:acc', production: 'serve:uva:prd', }, hva: { description: 'environment', development: 'serve:hva:dev', acceptance: 'serve:hva:acc', production: 'serve:hva:prd', }, }, options: { menu: { defaultChoice: 'hva:dev', }, }, }; return Config; }()); exports.Config = Config;