script-launcher
Version:
Script Launcher
117 lines (116 loc) • 3.7 kB
JavaScript
;
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;