nss-run
Version:
nss-run (not so simple run) is a very simplistic build tool.
80 lines (78 loc) • 2.32 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _chalk = _interopRequireDefault(require("chalk"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class TaskCollector {
constructor() {
this.tasks = {};
}
addTask(name, fn, options = {}) {
// Do some basic validation
if (!name) {
throw new Error('Task requires a name');
}
if (typeof name !== 'string') {
throw new Error('Task requires a name that is a string');
}
if (typeof fn !== 'function') {
throw new Error(`Task ${name} requires a function that is a function`);
}
if (this.hasTask(name)) {
throw new Error(`Task with name ${name} is already added`);
}
// Store the task
this.tasks[name] = {
name,
fn,
options
};
}
hasTask(name) {
return !!this.tasks[name];
}
runTask(name, args = [], exitOnNotFound = false) {
if (!this.hasTask(name)) {
console.log(_chalk.default.red(`No Task with name '${_chalk.default.cyan(name)}' found`));
if (exitOnNotFound) {
process.exit(1);
}
return Promise.reject(new Error(`No Task with name '${name}' found`));
}
function finishRunTask(time) {
const formattedTime = ((Date.now() - time) / 1000).toFixed(2);
console.log(_chalk.default.blue(`< Finished "${name}" in ${formattedTime}sec`));
}
return new Promise((resolve, reject) => {
const time = Date.now();
console.log(_chalk.default.blue(`> Running "${name}"...`));
Promise.resolve(this.tasks[name].fn.apply(null, args)).then(data => {
finishRunTask(time);
resolve(data);
}).catch(error => {
finishRunTask(time);
reject(error);
});
});
}
printHelp() {
console.log(_chalk.default.bold('Available tasks:'));
Object.keys(this.tasks).sort().forEach(name => {
const {
options
} = this.tasks[name];
if (options.hidden) {
return;
}
if (options.description) {
console.log(` ${_chalk.default.cyan(name)} - ${options.description}`);
} else {
console.log(` ${_chalk.default.cyan(name)}`);
}
});
console.log();
}
}
exports.default = TaskCollector;
;