| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | "use strict";var __importDefault = (this && this.__importDefault) || function (mod) {    return (mod && mod.__esModule) ? mod : { "default": mod };};Object.defineProperty(exports, "__esModule", { value: true });// @flowconst chalk_1 = __importDefault(require("chalk"));const fs_1 = __importDefault(require("fs"));const lodash_padend_1 = __importDefault(require("lodash.padend"));const microcli_1 = __importDefault(require("microcli"));// @ts-ignoreconst omelette_1 = __importDefault(require("omelette"));const path_1 = __importDefault(require("path"));const CLIError = microcli_1.default.CliError;const common_1 = require("./common");const DEFAULT_RUNFILE_PATH = "./runfile.js";function requirer(filePath) {    return require(path_1.default.resolve(filePath));}exports.requirer = requirer;function hasAccess(filePath) {    return fs_1.default.accessSync(path_1.default.resolve(filePath));}exports.hasAccess = hasAccess;function getConfig(filePath) {    let config;    try {        config = requirer(filePath).runjs || {};    }    catch (error) {        config = {};    }    return config;}exports.getConfig = getConfig;function load(config, logger, requirer, access) {    const runfilePath = config.runfile || DEFAULT_RUNFILE_PATH;    // Load requires if given in config    if (Array.isArray(config.requires)) {        config.requires.forEach(modulePath => {            logger.log(chalk_1.default.gray(`Requiring ${modulePath}...`));            requirer(modulePath);        });    }    // Process runfile    logger.log(chalk_1.default.gray(`Processing ${runfilePath}...`));    try {        access(runfilePath);    }    catch (error) {        throw new common_1.RunJSError(`No ${runfilePath} defined in ${process.cwd()}`);    }    const runfile = requirer(runfilePath);    if (runfile.default) {        return runfile.default;    }    return runfile;}exports.load = load;function describe(obj, logger, namespace) {    if (!namespace) {        logger.log(chalk_1.default.yellow("Available tasks:"));    }    Object.keys(obj).forEach(key => {        const value = obj[key];        const nextNamespace = namespace ? `${namespace}:${key}` : key;        const help = value.help;        if (typeof value === "function") {            // Add task name            const funcParams = help && help.params;            const logArgs = [chalk_1.default.bold(nextNamespace)];            // Add task params            if (Array.isArray(funcParams) && funcParams.length) {                logArgs[0] += ` [${funcParams.join(" ")}]`;            }            // Add description            if (help && (help.description || typeof help === "string")) {                const description = help.description || help;                logArgs[0] = lodash_padend_1.default(logArgs[0], 40); // format                logArgs.push("-", description.split("\n")[0]);            }            // Log            logger.log(...logArgs);        }        else if (typeof value === "object") {            describe(value, logger, nextNamespace);        }    });    if (!namespace) {        logger.log("\n" +            chalk_1.default.blue('Type "run [taskname] --help" to get more info if available.'));    }}exports.describe = describe;function tasks(obj, namespace) {    let list = [];    Object.keys(obj).forEach(key => {        const value = obj[key];        const nextNamespace = namespace ? `${namespace}:${key}` : key;        if (typeof value === "function") {            list.push(nextNamespace);        }        else if (typeof value === "object") {            list = list.concat(tasks(value, nextNamespace));        }    });    return list;}function call(obj, args, logger, subtaskName) {    const taskName = subtaskName || args[2];    if (typeof obj[taskName] === "function") {        const cli = microcli_1.default(args.slice(1), obj[taskName].help, undefined, logger);        cli((options, ...params) => {            obj[taskName].apply({ options }, params);        });        return obj[taskName];    }    const namespaces = taskName.split(":");    const rootNamespace = namespaces.shift() || "";    const nextSubtaskName = namespaces.join(":");    if (obj[rootNamespace]) {        const calledTask = call(obj[rootNamespace], args, logger, nextSubtaskName);        if (calledTask) {            return calledTask;        }    }    if (!subtaskName) {        throw new common_1.RunJSError(`Task ${taskName} not found`);    }}exports.call = call;function autocomplete(config) {    const logger = new common_1.SilentLogger();    const completion = omelette_1.default("run <task>");    completion.on("task", ({ reply }) => {        const runfile = load(config, logger, requirer, hasAccess);        reply(tasks(runfile));    });    completion.init();}function main() {    try {        const config = getConfig("./package.json");        autocomplete(config);        const runfile = load(config, common_1.logger, requirer, hasAccess);        const ARGV = process.argv.slice();        if (ARGV.length > 2) {            call(runfile, ARGV, common_1.logger);        }        else {            describe(runfile, common_1.logger);        }    }    catch (error) {        if (error instanceof common_1.RunJSError || error instanceof CLIError) {            common_1.logger.error(error.message);            process.exit(1);        }        else {            common_1.logger.log(error);            process.exit(1);        }    }}exports.main = main;//# sourceMappingURL=script.js.map
 |