"use strict";
import Bob from "./bob.js";
import cli from "bagofcli";
import fs from "fs";
import os from "os";
import p from "path";
const APP_DIR = process.cwd(),
DIRNAME = p.dirname(import.meta.url).replace("file://", ""),
BOB_DIR = p.join(DIRNAME, "..");
function _exec() {
const commandAndFirstTaskArg = arguments[0],
remainingTasksArg = arguments[1] || [],
quiet =
commandAndFirstTaskArg.parent && commandAndFirstTaskArg.parent.quiet,
tasks = [commandAndFirstTaskArg._name].concat(remainingTasksArg),
pkgFile = p.join(APP_DIR, "package.json"),
pkg = JSON.parse(fs.readFileSync(pkgFile)),
bob = new Bob({
appDir: APP_DIR,
appName: pkg.name,
appVersion: pkg.version,
bobDir: BOB_DIR,
bobMode: process.env.BOB_MODE || "human",
maxBufferInKb: 1000,
tmpDir: p.join(os.tmpdir(), ".bob", pkg.name),
quiet: quiet,
});
function errorCb(err) {
if (err.code && !isNaN(err.code)) {
console.error("%s | exit code %d", "FAILURE".red, err.code);
process.exit(err.code);
} else {
console.error("%s | %s", "ERROR".red, err.message);
}
}
function successCb() {
console.log("%s | exit code 0", "SUCCESS".green);
}
bob.build(tasks, cli.exitCb(errorCb, successCb));
}
/**
* Execute Bob CLI.
*/
function exec() {
const commandFile = p.join(BOB_DIR, "conf", "commands.json"),
commands = Object.keys(JSON.parse(fs.readFileSync(commandFile)).commands),
configFile = p.join(APP_DIR, ".bob.json"),
config = fs.existsSync(configFile)
? JSON.parse(fs.readFileSync(configFile))
: {},
actions = { commands: {} };
// replace aliases with tasks
let argv = process.argv.slice(0, 2);
process.argv.slice(2, process.argv.length).forEach((arg) => {
if (
Object.keys(config).indexOf(arg) !== -1 &&
commands.indexOf(arg) === -1
) {
argv = argv.concat(config[arg].split(" "));
} else {
argv.push(arg);
}
});
process.argv = argv;
commands.forEach((command) => {
actions.commands[command] = { action: _exec };
});
cli.command(DIRNAME, actions);
}
const exports = {
exec: exec,
};
export { exports as default };