create-cttq
Version: 
CTTQ大前端脚手架项目
46 lines (44 loc) • 1.32 kB
JavaScript
/**
 * 交互命令生成器,用于集成各模块的交互命令,生成最终的交互命令顺序。
 */
const prompts = require("prompts");
const { red, green, bold } = require("kolorist")
const PromptorAPI = require("./PromptorAPI");
const { loadPlugins } = require("./util/plugins")
const ModuleName = "prompts";
module.exports = class Promptor {
    /**
     * 构造器
     * @param {*} plugins 所有插件
     */
    constructor(plugins) {
        this.plugins = plugins;
        this.questions = [];
        this.completes = [];
        this.answers = {};
        this.preset = {};
        this.pluginModules = loadPlugins(plugins, ModuleName)
    }
    /**
     * 显示交互命令
     */
    async show() {
        for (const module of this.pluginModules) {
            let promptorAPI = new PromptorAPI(module.moduleName, this);
            module(promptorAPI);
        }
        prompts.override(this.preset);
        Object.assign(this.answers, this.preset);
        this.answers = await prompts(
            this.questions,
            {
                onCancel: () => {
                    throw new Error(red("✖") + " 取消创建项目");
                },
            },
        );
        for (const complete of this.completes) {
            complete(this.answers);
        }
    }
}