fuse-box
Version:
Fuse-Box a bundler that does it right
66 lines (65 loc) • 2.29 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.sparky = void 0;
const env_1 = require("../env");
const FuseBoxLogAdapter_1 = require("../fuseLog/FuseBoxLogAdapter");
const utils_1 = require("../utils/utils");
const sparky_chain_1 = require("./sparky_chain");
let prettyTime = require('pretty-time');
function sparky(Ctx) {
const ctx = new Ctx();
const tasks = new Map();
const log = FuseBoxLogAdapter_1.createFuseLogger({ level: 'verbose' });
log.flush();
const findTask = (name) => {
for (const [key, value] of tasks.entries()) {
if (typeof key === 'string' && key === name)
return value;
if (key instanceof RegExp && key.test(name))
return value;
}
return null;
};
let execScheduled = false;
const execNext = () => {
if (!execScheduled) {
const argv = process.argv;
argv.splice(0, 2);
let taskName = argv[0] || 'default';
taskName = /^--/.test(taskName) ? 'default' : taskName;
setTimeout(async () => {
await scope.exec(taskName);
}, 0);
}
execScheduled = true;
};
const times = {};
const scope = {
activities: [],
exec: async (name) => {
const task = findTask(name);
if (!task) {
log.error("Can't find task name: $name", { name });
log.printBottomMessages();
return;
}
times[name] = process.hrtime();
log.info('<magenta>[ ' + name + ' ]</magenta>', 'Starting', { name });
await task(ctx);
log.info('<dim><magenta>[ ' + name + ' ]</magenta></dim>', '<dim>Completed in $time</dim>', {
time: prettyTime(process.hrtime(times[name]), 'ms'),
});
log.printBottomMessages();
},
rm: (folder) => {
utils_1.removeFolder(utils_1.ensureAbsolutePath(folder, env_1.env.SCRIPT_PATH));
},
src: (glob) => sparky_chain_1.sparkyChain(log).src(glob),
task: (name, fn) => {
tasks.set(name, fn);
execNext();
},
};
return scope;
}
exports.sparky = sparky;
;