123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- // @flow
- const 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-ignore
- const 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
|