UNPKG

jgb-cli

Version:

```shell npm i -g jgb-cli #全局安装 ```

375 lines 27.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var chalk_1 = require("chalk"); var glob = require("fast-glob"); var fs = require("fs-extra"); var inquirer = require("inquirer"); var Logger_1 = require("jgb-shared/lib/Logger"); var beautify = require("js-beautify"); var path = require("path"); var config_1 = require("../config"); var utils_1 = require("jgb-shared/lib/utils"); var templateFile_1 = require("../utils/templateFile"); function create(templateName, folderName, program) { if (program === void 0) { program = {}; } return tslib_1.__awaiter(this, void 0, void 0, function () { var config, isCreateTemplate, tmp, useComponentFolder, sourceDir, distRootDir, _a, dir, _b, fileName, distDir, outputDist, files, tasks; return tslib_1.__generator(this, function (_c) { switch (_c.label) { case 0: return [4 /*yield*/, config_1.getJGBConfig(program.config)]; case 1: config = _c.sent(); if (!program.list) return [3 /*break*/, 3]; return [4 /*yield*/, showAllTemplate()]; case 2: _c.sent(); return [2 /*return*/]; case 3: if (!templateName) { return [2 /*return*/, Logger_1.logger.warning("please enter [template-name]")]; } isCreateTemplate = !!program.template; if (!isCreateTemplate) return [3 /*break*/, 5]; return [4 /*yield*/, generateTemplate(templateName)]; case 4: _c.sent(); return [2 /*return*/]; case 5: if (!config) { Logger_1.logger.warning("cannot found jgb config file."); return [2 /*return*/]; } tmp = templateFile_1.generateTemplatePath("template-" + templateFile_1.md5(templateName)); if (!fs.existsSync(tmp)) { return [2 /*return*/, Logger_1.logger.warning("cannot found template folder: " + templateName)]; } useComponentFolder = !!program.component; sourceDir = path.join(tmp, useComponentFolder ? 'component' : 'page'); distRootDir = path.join(process.cwd(), config.sourceDir || 'src'); _a = tslib_1.__read(folderName.split(':'), 2), dir = _a[0], _b = _a[1], fileName = _b === void 0 ? 'index' : _b; distDir = path.join(distRootDir, dir); fs.ensureDirSync(distDir); outputDist = utils_1.pathToUnixType(path.join(dir, fileName)); if (!(fileName === 'index')) return [3 /*break*/, 7]; return [4 /*yield*/, fs.copy(sourceDir, distDir)]; case 6: _c.sent(); return [3 /*break*/, 10]; case 7: return [4 /*yield*/, glob(sourceDir + "/*")]; case 8: files = _c.sent(); tasks = files.map(function (file) { var basename = path.basename(file); var name = basename.replace(/index\./, fileName + "."); return fs.copy(file, path.join(distDir, name)); }); return [4 /*yield*/, Promise.all(tasks)]; case 9: _c.sent(); _c.label = 10; case 10: console.log(outputDist + " has been created"); return [2 /*return*/]; } }); }); } exports.default = create; /** * 生成模板文件 * @param templateName * @param folderName */ function generateTemplate(templateName) { return tslib_1.__awaiter(this, void 0, void 0, function () { var mode, promise, result; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, getTemplateMode()]; case 1: mode = _a.sent(); switch (mode) { case 'online': promise = createOnlineTemplate(templateName); break; case 'inline': default: promise = createInlineTemplate(templateName); break; } return [4 /*yield*/, promise]; case 2: result = _a.sent(); return [4 /*yield*/, addTemplateToAllTemplatess(result)]; case 3: _a.sent(); return [2 /*return*/]; } }); }); } exports.generateTemplate = generateTemplate; function addTemplateToAllTemplatess(result) { return tslib_1.__awaiter(this, void 0, void 0, function () { var templateJsonPath, templateJson; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: templateJsonPath = templateFile_1.generateTemplatePath('.templates.json'); return [4 /*yield*/, getAllTemplates()]; case 1: templateJson = _a.sent(); templateJson[result.templateName] = result.templatePath; return [4 /*yield*/, fs.writeFile(templateJsonPath, JSON.stringify(templateJson))]; case 2: _a.sent(); return [2 /*return*/]; } }); }); } exports.addTemplateToAllTemplatess = addTemplateToAllTemplatess; function getAllTemplates() { return tslib_1.__awaiter(this, void 0, void 0, function () { var templateJsonPath, templateJsonStr, templateJson, error_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: templateJsonPath = templateFile_1.generateTemplatePath('.templates.json'); templateJsonStr = '{}'; templateJson = {}; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, fs.readFile(templateJsonPath, 'utf-8')]; case 2: templateJsonStr = _a.sent(); templateJson = JSON.parse(templateJsonStr); return [3 /*break*/, 4]; case 3: error_1 = _a.sent(); console.log(error_1); return [3 /*break*/, 4]; case 4: return [2 /*return*/, templateJson]; } }); }); } exports.getAllTemplates = getAllTemplates; function showAllTemplate() { return tslib_1.__awaiter(this, void 0, void 0, function () { var templateJson, keys; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, getAllTemplates()]; case 1: templateJson = _a.sent(); keys = Object.keys(templateJson); if (!keys.length) { console.log('no list'); } keys.forEach(function (key) { console.log("" + chalk_1.default.yellowBright(key)); console.log(" " + chalk_1.default.gray(templateJson[key])); }); return [2 /*return*/]; } }); }); } exports.showAllTemplate = showAllTemplate; /** * 下载并创建在线模板文件 * @param templateName */ function createOnlineTemplate(templateName) { return tslib_1.__awaiter(this, void 0, void 0, function () { var tmp, answers, templateRepo, useClone; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: tmp = templateFile_1.generateTemplatePath("template-" + templateFile_1.md5(templateName)); console.log(chalk_1.default.gray('you can find [template repository] info on https://github.com/flipxfx/download-git-repo')); return [4 /*yield*/, makeQuestionAsync([ { type: 'input', name: 'templateRepo', message: 'template repository' }, { type: 'confirm', name: 'useClone', message: 'use git clone the repo?', default: true } ])]; case 1: answers = _a.sent(); templateRepo = answers.templateRepo, useClone = answers.useClone; console.log("> cached template at " + chalk_1.default.yellow(tmp)); return [4 /*yield*/, templateFile_1.downloadAndGenerate(templateRepo, tmp, useClone)]; case 2: _a.sent(); console.log(chalk_1.default.gray("download repository " + templateRepo + " success")); console.log('you can use command:'); console.log(chalk_1.default.yellow(" jgb create " + templateName + " folder-name")); return [2 /*return*/, { templateName: templateName, templatePath: tmp }]; } }); }); } exports.createOnlineTemplate = createOnlineTemplate; function createInlineTemplate(templateName) { return tslib_1.__awaiter(this, void 0, void 0, function () { var tmp, files, result, tasks; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: tmp = templateFile_1.generateTemplatePath("template-" + templateFile_1.md5(templateName)); return [4 /*yield*/, makeQuestionAsync([ { type: 'checkbox', message: 'pleace select choice for create template files', name: 'files', choices: ['js', 'wxss', 'json', 'wxml'].map(function (name) { return { name: name, checked: true }; }) } ])]; case 1: files = (_a.sent()).files; return [4 /*yield*/, createInlineFile(files)]; case 2: result = _a.sent(); console.log("> template at " + chalk_1.default.yellow(tmp)); fs.ensureDirSync(tmp); tasks = result.map(function (_a) { var code = _a.code, filePath = _a.filePath; var fpath = path.join(tmp, filePath); var dir = path.parse(fpath).dir; fs.ensureDirSync(dir); return fs.writeFile(fpath, code); }); return [4 /*yield*/, Promise.all(tasks)]; case 3: _a.sent(); return [2 /*return*/, { templateName: templateName, templatePath: tmp }]; } }); }); } exports.createInlineTemplate = createInlineTemplate; function createInlineFile(files) { return tslib_1.__awaiter(this, void 0, void 0, function () { var pageDir, pageQuestions, componentDir, componentQuestions, result, keys, results; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: pageDir = 'page'; pageQuestions = files.map(function (ext) { var filePath = pageDir + "/index." + ext; return { ext: ext, filePath: filePath, type: 'editor', name: pageDir + "-" + ext, message: filePath + " :" }; }); componentDir = 'component'; componentQuestions = files.map(function (ext) { var filePath = componentDir + "/index." + ext; return { ext: ext, filePath: filePath, type: 'editor', name: componentDir + "-" + ext, message: filePath + " :" }; }); return [4 /*yield*/, makeQuestionAsync(pageQuestions.concat(componentQuestions).reduce(function (arr, question) { var name = question.name + "-filePath"; var ext = question.ext; var q = { name: name, type: 'input', message: 'are you sure this file path ?', default: question.filePath, when: function (answers) { var code = answers[question.name]; var beautifyCode = autoBeautify(code, ext); console.log(chalk_1.default.grey(beautifyCode)); console.log("> will write file: " + chalk_1.default.yellow(question.filePath)); return true; } }; return arr.concat([question, q]); }, []))]; case 1: result = _a.sent(); keys = Object.keys(result); results = keys.reduce(function (arr, key, idx) { var carr = (idx % 2 === 0 ? [] : arr[arr.length - 1]) || []; carr.push(key); if (carr.length === 1) { arr.push(carr); } return arr; }, []); return [2 /*return*/, results.map(function (r) { var _a = tslib_1.__read(r, 2), codeKey = _a[0], filePathKey = _a[1]; var code = result[codeKey]; var filePath = result[filePathKey]; return { code: code, filePath: filePath }; })]; } }); }); } exports.createInlineFile = createInlineFile; function autoBeautify(code, ext) { if (ext === void 0) { ext = 'js'; } try { switch (ext) { case 'css': return beautify.css(code); case 'wxml': return beautify.html(code); case 'json': return JSON.stringify(JSON.parse(code || '{}'), null, 2); case 'js': default: return beautify(code); } } catch (error) { return code; } } function getTemplateMode() { return makeQuestionAsync([ { type: 'list', message: 'pleace select choice for create template mode', name: 'onlineOrinline', choices: ['inline', 'online'] } ]).then(function (res) { return res.onlineOrinline; }); } function makeQuestionAsync(questions) { return inquirer.prompt(questions); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmQvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUEwQjtBQUMxQixnQ0FBa0M7QUFDbEMsNkJBQStCO0FBQy9CLG1DQUFxQztBQUNyQyxnREFBK0M7QUFDL0Msc0NBQXlDO0FBQ3pDLDJCQUE2QjtBQUM3QixvQ0FBeUM7QUFFekMsOENBQXNEO0FBQ3RELHNEQUkrQjtBQUUvQixTQUE4QixNQUFNLENBQ2xDLFlBQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLE9BQWlCO0lBQWpCLHdCQUFBLEVBQUEsWUFBaUI7Ozs7O3dCQUVGLHFCQUFNLHFCQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFBOztvQkFBM0MsTUFBTSxHQUFHLFNBQWtDO3lCQUU3QyxPQUFPLENBQUMsSUFBSSxFQUFaLHdCQUFZO29CQUNkLHFCQUFNLGVBQWUsRUFBRSxFQUFBOztvQkFBdkIsU0FBdUIsQ0FBQztvQkFDeEIsc0JBQU87O29CQUdULElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ2pCLHNCQUFPLGVBQU0sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsRUFBQztxQkFDdkQ7b0JBR0ssZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7eUJBRXhDLGdCQUFnQixFQUFoQix3QkFBZ0I7b0JBQ2xCLHFCQUFNLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFBOztvQkFBcEMsU0FBb0MsQ0FBQztvQkFDckMsc0JBQU87O29CQUdULElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ1gsZUFBTSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO3dCQUNoRCxzQkFBTztxQkFDUjtvQkFHSyxHQUFHLEdBQUcsbUNBQW9CLENBQUMsY0FBWSxrQkFBRyxDQUFDLFlBQVksQ0FBRyxDQUFDLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxFQUFFLENBQUMs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