UNPKG

nss-run

Version:

nss-run (not so simple run) is a very simplistic build tool.

80 lines (78 loc) 2.32 kB
"use strict"; 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;