@omni-door/cli
Version:
A tool set for set up the standard JS project
780 lines (779 loc) • 45.6 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var fs_1 = __importDefault(require("fs"));
var path_1 = __importStar(require("path"));
var util_1 = require("util");
var child_process_1 = require("child_process");
var fs_extra_1 = __importDefault(require("fs-extra"));
var chalk_1 = __importDefault(require("chalk"));
var figlet_1 = __importDefault(require("figlet"));
var inquirer_1 = __importDefault(require("inquirer"));
var initial_preset_1 = __importDefault(require("./initial_preset"));
var utils_1 = require("@omni-door/utils");
var utils_2 = require("../../utils");
var ProjectDict = {
'spa-react': 'spa-react (React单页应用)',
'spa-react (React单页应用)': 'spa-react',
'spa-react-pc': 'spa-react-pc (React中后台应用)',
'spa-react-pc (React中后台应用)': 'spa-react-pc',
'spa-vue': 'spa-vue (Vue单页应用)',
'spa-vue (Vue单页应用)': 'spa-vue',
'ssr-react': 'ssr-react (React服务端渲染应用)',
'ssr-react (React服务端渲染应用)': 'ssr-react',
'component-react': 'component-react (React组件库)',
'component-react (React组件库)': 'component-react',
'component-vue': 'component-vue (Vue组件库)',
'component-vue (Vue组件库)': 'component-vue',
'toolkit': 'toolkit (工具库)',
'toolkit (工具库)': 'toolkit'
};
var ServerTypes = {
ssr: {
'next-app(recommend)': 'next-app',
'next-pages': 'next-pages',
},
cpLib: {
'storybook(recommend)': 'storybook',
}
};
var LayoutDict = {
viewport: 'viewport(vw/vh)',
'viewport(vw/vh)': 'viewport',
rem: 'rem',
px: 'px'
};
var stat = util_1.promisify(fs_1.default.stat);
function isDir(dirName) {
return __awaiter(this, void 0, void 0, function () {
var dirPath, stats, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dirPath = path_1.default.resolve(process.cwd(), dirName);
if (!fs_1.default.existsSync(dirPath)) return [3 /*break*/, 4];
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, stat(dirPath)];
case 2:
stats = _a.sent();
if (stats.isDirectory()) {
return [2 /*return*/, true];
}
return [3 /*break*/, 4];
case 3:
e_1 = _a.sent();
return [3 /*break*/, 4];
case 4: return [2 /*return*/, false];
}
});
});
}
function checkPkgTool(pkgtool) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
// install tool precheck
return [2 /*return*/, new Promise(function (resolve, reject) {
var hasTool = true;
try {
child_process_1.execSync(pkgtool + " -v", { stdio: 'ignore' });
}
catch (e) {
hasTool = false;
}
if (!hasTool) {
if (pkgtool === 'npm') {
utils_1.spinner.state('warn', 'Cannot found the npm package management tool(没有找到 npm 包管理工具,请自行安装)!');
process.exit(0);
}
else {
utils_1.spinner.state('info', "Missing package management tool " + pkgtool + "(\u7F3A\u5C11\u5305\u7BA1\u7406\u5DE5\u5177 " + pkgtool + ")!");
inquirer_1.default.prompt([{
name: 'install',
type: 'confirm',
message: utils_2.logo() + "Automatic install the " + pkgtool + " in the global environment(\u81EA\u52A8\u5B89\u88C5 " + pkgtool + " \u5230\u5168\u5C40\u73AF\u5883)?",
default: true
}]).then(function (answers) {
var install = answers.install;
if (!install) {
reject(false);
return process.exit(0);
}
try {
child_process_1.execSync("npm i -g " + pkgtool, { stdio: 'ignore' });
resolve(true);
}
catch (e) {
try {
child_process_1.execSync("sudo npm i -g " + pkgtool, { stdio: 'inherit' });
resolve(true);
}
catch (err) {
utils_1.logWarn(err);
utils_1.logWarn("The setup " + pkgtool + " failed, please try it by yourself");
utils_1.logWarn(pkgtool + " \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u81EA\u884C\u5B89\u88C5\u540E\u518D\u8BD5");
process.exit(0);
}
}
});
}
}
else {
resolve(true);
}
})];
});
});
}
function mkdir(dirPath) {
dirPath && fs_extra_1.default.ensureDirSync(dirPath, { mode: 1535 });
}
function presetTpl(type) {
var cli, pkj = '';
switch (type) {
case 'react_basic':
cli = initial_preset_1.default.cli_basic_react;
pkj = '@omni-door/tpl-spa-react';
break;
case 'react_standard':
cli = initial_preset_1.default.cli_standard_react;
pkj = '@omni-door/tpl-spa-react';
break;
case 'react_entire':
cli = initial_preset_1.default.cli_entire_react;
pkj = '@omni-door/tpl-spa-react';
break;
case 'react_pc':
cli = initial_preset_1.default.cli_pc_react;
pkj = '@omni-door/tpl-spa-react-pc';
break;
case 'vue_basic':
cli = initial_preset_1.default.cli_basic_vue;
pkj = '@omni-door/tpl-spa-vue';
break;
case 'vue_standard':
cli = initial_preset_1.default.cli_standard_vue;
pkj = '@omni-door/tpl-spa-vue';
break;
case 'vue_entire':
cli = initial_preset_1.default.cli_entire_vue;
pkj = '@omni-door/tpl-spa-vue';
break;
case 'react_ssr':
cli = initial_preset_1.default.cli_ssr_react;
pkj = '@omni-door/tpl-ssr-react';
break;
case 'react_components':
cli = initial_preset_1.default.cli_components_react;
pkj = '@omni-door/tpl-component-react';
break;
case 'vue_components':
cli = initial_preset_1.default.cli_components_vue;
pkj = '@omni-door/tpl-component-vue';
break;
case 'toolkit':
cli = initial_preset_1.default.cli_toolkit;
pkj = '@omni-door/tpl-toolkit';
break;
}
return { cli: cli, pkj: pkj };
}
function default_1(strategy, _a, option) {
var _b;
var react_basic = _a.react_basic, react_standard = _a.react_standard, react_entire = _a.react_entire, react_pc = _a.react_pc, vue_basic = _a.vue_basic, vue_standard = _a.vue_standard, vue_entire = _a.vue_entire, react_ssr = _a.react_ssr, react_components = _a.react_components, vue_components = _a.vue_components, toolkit = _a.toolkit, install = _a.install;
return __awaiter(this, void 0, void 0, function () {
var e_2, configFileExist, tplPackage, versionsPromise, _c, before, after, tplPkj, tplPkjTag, _d, tplPkjParams, _e, pkjFieldName, _f, configFileName, customInitPath, tplParams, configPath, CWD, realCWD, ppkj, ppkjPath, defaultName, presetType, projectName, types, k, type, item, _g, cli, pkj, k, currStep_1, totalStep_1, getProjectType_1, questions_1, beforeRes, _h, _j, create_dir, dir_name, stdout, isSilent, dirName_1, initPath, _k, templatePackageTag_1, matchVer, versions, _l, firstNum, secondNum, regexp_1, thirdNum, err_1;
var _this = this;
return __generator(this, function (_m) {
switch (_m.label) {
case 0:
_m.trys.push([0, 2, , 3]);
// node version pre-check
return [4 /*yield*/, utils_1.nodeVersionCheck('10.13.0')];
case 1:
// node version pre-check
_m.sent();
return [3 /*break*/, 3];
case 2:
e_2 = _m.sent();
utils_1.logWarn(e_2);
return [3 /*break*/, 3];
case 3:
// bind exit signals
utils_2.signal();
configFileExist = false;
// reset illegal strategy
strategy = (strategy === 'stable' || strategy === 'latest') ? strategy : 'stable';
_c = option || {}, before = _c.before, after = _c.after, tplPkj = _c.tplPkj, tplPkjTag = _c.tplPkjTag, _d = _c.tplPkjParams, tplPkjParams = _d === void 0 ? [] : _d, _e = _c.pkjFieldName, pkjFieldName = _e === void 0 ? 'omni' : _e, _f = _c.configFileName, configFileName = _f === void 0 ? 'omni.config.js' : _f, customInitPath = _c.initPath;
tplParams = ["install=" + install];
configPath = path_1.default.resolve(configFileName);
CWD = process.cwd();
realCWD = customInitPath || CWD;
try {
ppkj = void 0;
ppkjPath = path_1.default.resolve(realCWD, 'package.json');
if (fs_1.default.existsSync(ppkjPath))
ppkj = require(ppkjPath);
configPath = path_1.default.resolve(realCWD, (ppkj && ppkj[pkjFieldName] && ppkj[pkjFieldName]['filePath']) || configFileName);
}
catch (e) {
utils_1.logWarn(e);
}
defaultName = path_1.parse(realCWD).name;
presetType = '';
projectName = defaultName;
types = {
react_basic: react_basic,
react_standard: react_standard,
react_entire: react_entire,
react_pc: react_pc,
vue_basic: vue_basic,
vue_standard: vue_standard,
vue_entire: vue_entire,
react_ssr: react_ssr,
react_components: react_components,
vue_components: vue_components,
toolkit: toolkit
};
for (k in types) {
type = k;
item = types[type];
if (item) {
presetType = type;
typeof item === 'string' && (projectName = item);
break;
}
}
_m.label = 4;
case 4:
_m.trys.push([4, 19, , 20]);
utils_1.spinner.color('green');
utils_1.spinner.prefix('arrow3');
if (!presetType) return [3 /*break*/, 8];
utils_1.pkgNameCheck(projectName);
if (!fs_1.default.existsSync(configPath)) return [3 /*break*/, 6];
configFileExist = true;
// double confirmation
return [4 /*yield*/, new Promise(function (resolve) {
inquirer_1.default.prompt([{
name: 'overwrite',
type: 'confirm',
message: utils_2.logo() + "Are you sure to overwrite the \"" + configFileName + "\"(\u786E\u5B9A\u8981\u8986\u76D6\u5DF2\u7ECF\u5B58\u5728\u7684 \"" + configFileName + "\" \u6587\u4EF6)?",
default: false
}]).then(function (answers) {
var overwrite = answers.overwrite;
if (!overwrite)
return process.exit(0);
resolve(void 0);
});
}).catch(function (err) {
utils_1.logErr(err);
utils_1.spinner.state('fail', 'The initializing occurred some accidents(项目初始化发生错误)!');
process.exit(1);
})];
case 5:
// double confirmation
_m.sent();
_m.label = 6;
case 6:
_g = presetTpl(presetType), cli = _g.cli, pkj = _g.pkj;
return [4 /*yield*/, checkPkgTool(cli ? cli.pkgtool : 'pnpm')];
case 7:
_m.sent();
tplPackage = pkj;
if (tplPkjTag) {
versionsPromise = utils_1.getNpmVersions(tplPkj || tplPackage);
}
tplParams.push("strategy=" + strategy);
for (k in cli) {
tplParams.push(k + "=" + cli[k]);
}
return [3 /*break*/, 10];
case 8:
currStep_1 = 1;
totalStep_1 = '?';
getProjectType_1 = function (answer) {
return ProjectDict[answer.project_type];
};
questions_1 = [
{
name: 'overwrite',
type: 'confirm',
message: utils_2.logo() + "Are you sure to overwrite this project (\u786E\u5B9A\u8986\u76D6\u8BE5\u9879\u76EE)?",
default: false
}, {
name: 'project_type',
type: 'list',
choices: [
ProjectDict['spa-react'],
ProjectDict['spa-react-pc'],
ProjectDict['spa-vue'],
ProjectDict['component-react'],
ProjectDict['component-vue'],
ProjectDict['ssr-react'],
ProjectDict['toolkit']
],
message: utils_2.logo() + "[" + currStep_1 + "/" + totalStep_1 + "] Please choose the type of project (\u8BF7\u9009\u62E9\u9879\u76EE\u7C7B\u578B):",
when: function (answer) {
if (answer.overwrite === false) {
return process.exit(0);
}
return true;
}
}, {
name: 'name',
type: 'input',
message: function (answer) {
var projectType = getProjectType_1(answer);
switch (projectType) {
case 'spa-react':
case 'spa-vue':
totalStep_1 = 7;
break;
case 'ssr-react':
case 'spa-react-pc':
totalStep_1 = 6;
break;
case 'component-react':
case 'component-vue':
totalStep_1 = 4;
break;
default:
totalStep_1 = 3;
}
install && totalStep_1++;
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] Please enter your project name (\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0):";
},
validate: function (input) {
return __awaiter(this, void 0, void 0, function () {
var isValidName, isExisted;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
isValidName = utils_1.pkgNameCheck(input, true);
return [4 /*yield*/, isDir(input)];
case 1:
isExisted = _a.sent();
if (isValidName && !isExisted)
return [2 /*return*/, true];
if (isExisted) {
utils_1.logWarn("The \"" + input + "\" directory had been existed (\"" + input + "\" \u6587\u4EF6\u5939\u5DF2\u7ECF\u5B58\u5728)");
}
return [2 /*return*/, isExisted ? "The \"" + input + "\" directory had been existed (\"" + input + "\" \u6587\u4EF6\u5939\u5DF2\u7ECF\u5B58\u5728)" : 'Please re-input your project name (请重新输入项目名称)'];
}
});
});
},
default: defaultName
},
{
name: 'server',
type: 'list',
choices: function (answer) {
var projectType = getProjectType_1(answer);
if (projectType === 'ssr-react') {
return Object.keys(ServerTypes.ssr);
}
return Object.keys(ServerTypes.cpLib);
},
default: function (answer) {
var projectType = getProjectType_1(answer);
if (projectType === 'ssr-react') {
return Object.keys(ServerTypes.ssr)[0];
}
return Object.keys(ServerTypes.cpLib)[0];
},
message: function (answer) {
var projectType = getProjectType_1(answer);
var msg = projectType === 'ssr-react' ? 'Please chioce the SSR server type (请选择SSR服务类型)' : 'Please chioce the component-library demonstration frame (请选择组件库Demo框架)';
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] " + msg + "\uFF1A";
},
when: function (answer) {
return __awaiter(this, void 0, void 0, function () {
var projectType;
return __generator(this, function (_a) {
projectType = getProjectType_1(answer);
return [2 /*return*/, projectType === 'ssr-react'];
});
});
}
},
{
name: 'ts',
type: 'confirm',
message: function (answer) {
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] Apply typescript(\u4F7F\u7528typescript)?";
},
default: true,
when: function (answer) {
var projectType = getProjectType_1(answer);
if (projectType === 'spa-react' || projectType === 'spa-react-pc' || projectType === 'spa-vue' || projectType === 'ssr-react') {
return true;
}
return false;
}
},
{
name: 'test',
type: 'confirm',
message: function (answer) {
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] Apply unit-test(\u5F00\u542F\u5355\u5143\u6D4B\u8BD5)?";
},
default: function (answer) { return getProjectType_1(answer) !== 'spa-react' && getProjectType_1(answer) !== 'spa-react-pc' && getProjectType_1(answer) !== 'spa-vue' && getProjectType_1(answer) !== 'ssr-react'; },
when: function (answer) {
var projectType = getProjectType_1(answer);
if (projectType === 'spa-react' || projectType === 'spa-react-pc' || projectType === 'spa-vue' || projectType === 'ssr-react') {
return true;
}
return false;
}
},
{
name: 'style',
type: 'checkbox',
choices: ['css', 'less', 'scss'],
message: function (answer) {
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] Select the stylesheets(\u9009\u62E9\u6837\u5F0F\u6587\u4EF6):";
},
default: ['css'],
when: function (answer) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (getProjectType_1(answer) === 'toolkit' || getProjectType_1(answer) === 'ssr-react') {
return [2 /*return*/, false];
}
return [4 /*yield*/, utils_1.nodeVersionCheck('12')];
case 1:
_a.sent();
return [2 /*return*/, true];
}
});
});
}
},
{
name: 'layout',
type: 'list',
when: function (answer) {
var _a;
var projectType = getProjectType_1(answer);
if (projectType === 'spa-react' || projectType === 'spa-vue')
return true;
if (((_a = answer === null || answer === void 0 ? void 0 : answer.style) === null || _a === void 0 ? void 0 : _a.length) === 0) {
++currStep_1;
return false;
}
return false;
},
choices: [LayoutDict.px, LayoutDict.viewport, LayoutDict.rem],
message: function (answer) {
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] Select layout plan(\u9009\u62E9\u5E03\u5C40\u9002\u914D\u65B9\u6848):";
}
},
{
name: 'lint',
type: 'checkbox',
choices: function (answer) {
var _a;
var lintArr = ['eslint', 'prettier', 'commitlint', 'stylelint'];
(((_a = answer === null || answer === void 0 ? void 0 : answer.style) === null || _a === void 0 ? void 0 : _a.length) === 0 || getProjectType_1(answer) === 'toolkit') && lintArr.pop();
return lintArr;
},
message: function (answer) {
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] Select the lint tools(\u9009\u62E9lint\u5DE5\u5177):";
},
default: ['eslint']
},
{
name: 'pkgtool',
type: 'list',
choices: ['pnpm', 'yarn', 'npm'],
when: function () {
if (!install)
return false;
return true;
},
message: function (answer) {
return utils_2.logo() + "[" + ++currStep_1 + "/" + totalStep_1 + "] Select the package install tool(\u8BF7\u9009\u62E9\u5305\u5B89\u88C5\u5DE5\u5177):";
},
default: 'pnpm'
}
];
// if the config file non-existence,cancel double confirmation
if (!fs_1.default.existsSync(configPath)) {
questions_1.shift();
}
else {
configFileExist = true;
}
return [4 /*yield*/, new Promise(function (resolve) {
inquirer_1.default.prompt(questions_1)
.then(function (answers) { return __awaiter(_this, void 0, void 0, function () {
var project_type, name, _a, _server, _b, ts, _c, test, _d, style, _e, layout, _f, lint, _g, pkgtool, server, eslint, prettier, commitlint, stylelint, stylesheet, projectType;
return __generator(this, function (_h) {
switch (_h.label) {
case 0:
project_type = answers.project_type, name = answers.name, _a = answers.server, _server = _a === void 0 ? '' : _a, _b = answers.ts, ts = _b === void 0 ? true : _b, _c = answers.test, test = _c === void 0 ? true : _c, _d = answers.style, style = _d === void 0 ? [] : _d, _e = answers.layout, layout = _e === void 0 ? 'px' : _e, _f = answers.lint, lint = _f === void 0 ? [] : _f, _g = answers.pkgtool, pkgtool = _g === void 0 ? 'pnpm' : _g;
return [4 /*yield*/, checkPkgTool(pkgtool)];
case 1:
_h.sent();
server = '';
Object.keys(ServerTypes).some(function (t) {
var _a;
var list = ServerTypes[t];
server = (_a = list[_server]) !== null && _a !== void 0 ? _a : '';
return !!server;
});
eslint = !!~lint.indexOf('eslint');
prettier = !!~lint.indexOf('prettier');
commitlint = !!~lint.indexOf('commitlint');
stylelint = !!~lint.indexOf('stylelint');
stylesheet = style.length === 0
? ''
: style.includes('less') && style.includes('scss')
? 'all'
: style.includes('less')
? 'less'
: style.includes('scss')
? 'scss'
: 'css';
projectType = ProjectDict[project_type];
projectName = name;
tplParams.push("strategy=" + strategy, "project_type=" + projectType, "pkgtool=" + pkgtool, "ts=" + ts, "test=" + test, "eslint=" + eslint, "prettier=" + prettier, "commitlint=" + commitlint, "style=" + stylesheet, "layout=" + LayoutDict[layout], "stylelint=" + stylelint, "devServer=" + server, "spaServer=" + server, "ssrServer=" + server, "componentServer=" + server);
switch (projectType) {
case 'spa-react':
tplPackage = '@omni-door/tpl-spa-react';
break;
case 'spa-react-pc':
tplPackage = '@omni-door/tpl-spa-react-pc';
break;
case 'spa-vue':
tplPackage = '@omni-door/tpl-spa-vue';
break;
case 'ssr-react':
tplPackage = '@omni-door/tpl-ssr-react';
break;
case 'component-react':
tplPackage = '@omni-door/tpl-component-react';
break;
case 'component-vue':
tplPackage = '@omni-door/tpl-component-vue';
break;
case 'toolkit':
tplPackage = '@omni-door/tpl-toolkit';
break;
}
if (tplPkjTag) {
versionsPromise = utils_1.getNpmVersions(tplPkj || tplPackage);
}
resolve(void 0);
return [2 /*return*/];
}
});
}); });
}).catch(function (err) {
utils_1.logErr(err);
utils_1.spinner.state('fail', 'The initializing occurred some accidents(项目初始化发生错误)!');
process.exit(1);
})];
case 9:
_m.sent();
_m.label = 10;
case 10:
_h = typeof before === 'function';
if (!_h) return [3 /*break*/, 12];
return [4 /*yield*/, before(projectName)];
case 11:
_h = (_m.sent());
_m.label = 12;
case 12:
beforeRes = _h;
_j = beforeRes || {}, create_dir = _j.create_dir, dir_name = _j.dir_name, stdout = _j.stdout;
isSilent = typeof stdout === 'boolean' ? !stdout : false;
dirName_1 = dir_name || projectName;
initPath = customInitPath || path_1.default.resolve(CWD, configFileExist ? '' : dirName_1);
_k = !configFileExist;
if (!_k) return [3 /*break*/, 14];
return [4 /*yield*/, isDir(dirName_1)];
case 13:
_k = (_m.sent());
_m.label = 14;
case 14:
if (!_k) return [3 /*break*/, 16];
return [4 /*yield*/, new Promise(function (resolve) {
inquirer_1.default.prompt([{
name: 'overwrite_dir',
type: 'confirm',
message: utils_2.logo() + " Overwrite the \"" + dirName_1 + "\" directory, please confirm again(\u8BF7\u518D\u6B21\u786E\u8BA4\u8986\u76D6 \"" + dirName_1 + "\" \u6587\u4EF6\u5939)!",
default: true
}]).then(function (answers) {
var overwrite_dir = answers.overwrite_dir;
if (!overwrite_dir)
return process.exit(0);
resolve(void 0);
});
}).catch(function (err) {
utils_1.logErr(err);
utils_1.spinner.state('fail', 'The initializing occurred some accidents(项目初始化发生错误)!');
process.exit(1);
})];
case 15:
_m.sent();
_m.label = 16;
case 16:
tplParams.push("projectName=" + (dir_name || projectName), "initPath=" + initPath, "isSilent=" + isSilent);
// loading start display
utils_1.spinner.state('start', 'Initializing, please wait patiently(项目初始化中)');
// create the folder
!configFileExist && create_dir !== false && mkdir(initPath);
templatePackageTag_1 = tplPkjTag || 'latest';
if (!(tplPkjTag && versionsPromise)) return [3 /*break*/, 18];
matchVer = (_b = tplPkjTag.match(/\d+.\d+/)) === null || _b === void 0 ? void 0 : _b[0];
if (!matchVer) return [3 /*break*/, 18];
return [4 /*yield*/, versionsPromise];
case 17:
versions = _m.sent();
_l = matchVer.split('.'), firstNum = _l[0], secondNum = _l[1];
regexp_1 = new RegExp("^" + firstNum + "{1}." + secondNum + "{1}.\\d+$");
thirdNum = Math.max.apply(Math, versions.filter(function (v) { return regexp_1.test(v); }).map(function (v) { var _a, _b; return +((_b = (_a = v.split('.')) === null || _a === void 0 ? void 0 : _a[2]) !== null && _b !== void 0 ? _b : 0); }));
templatePackageTag_1 = firstNum + "." + secondNum + "." + thirdNum;
_m.label = 18;
case 18: return [2 /*return*/, figlet_1.default(utils_1.getBrand(), function (err, data) {
var _a, _b;
if (err) {
utils_1.logErr(err.message);
utils_1.spinner.state('fail', 'Something about figlet is wrong(figlet 出现了问题)!');
}
var commitlint = !!~tplParams.indexOf('commitlint=true');
var execPath = (_b = (_a = tplParams.find(function (param) { return param.startsWith('initPath='); })) === null || _a === void 0 ? void 0 : _a.split('=')) === null || _b === void 0 ? void 0 : _b[1];
var initCmd = "npx " + (tplPkj || tplPackage) + "@" + templatePackageTag_1 + " init " + utils_1.arr2str(__spreadArrays(tplParams, tplPkjParams));
utils_1.logInfo("Exec: " + initCmd);
return utils_1.exec([initCmd], function () {
return __awaiter(this, void 0, void 0, function () {
var afterRes, _a, _b, success, msg;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = typeof after === 'function';
if (!_a) return [3 /*break*/, 2];
return [4 /*yield*/, after()];
case 1:
_a = (_c.sent());
_c.label = 2;
case 2:
afterRes = _a;
_b = afterRes || {}, success = _b.success, msg = _b.msg;
if (success && commitlint && execPath) {
try {
utils_1.logInfo("git and husky init: " + execPath);
child_process_1.execSync('git init', { cwd: execPath, stdio: 'inherit' });
child_process_1.execSync('npm run prepare', { cwd: execPath, stdio: 'inherit' });
}
catch (e) {
success = false;
// @ts-ignore
msg = (e === null || e === void 0 ? void 0 : e.message) || e;
}
}
if (success === false) {
utils_1.spinner.state('fail', msg || 'Initialize project failed(初始化项目失败)!');
}
else {
utils_1.spinner.state('succeed', msg || 'Initialize project success(初始化项目完成)!');
}
data && console.info(chalk_1.default.yellow(data));
process.exit(0);
return [2 /*return*/];
}
});
});
}, function (err) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
utils_1.logErr(err);
utils_1.spinner.state('fail', 'Initialize project failed(初始化项目失败)!');
process.exit(1);
return [2 /*return*/];
});
});
});
})];
case 19:
err_1 = _m.sent();
utils_1.logErr(err_1);
utils_1.spinner.state('fail', 'The initializing occurred some accidents(项目初始化发生错误)!');
process.exit(1);
return [3 /*break*/, 20];
case 20: return [2 /*return*/];
}
});
});
}
exports.default = default_1;