@notadd/cli
Version:
notadd core none dependence
91 lines (90 loc) • 4.52 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.InitCommand = void 0;
const tslib_1 = require("tslib");
const path_1 = require("path");
const fs_1 = require("fs");
const child_process_1 = require("child_process");
const readline_sync_1 = require("readline-sync");
const path = require("path");
const fs = require("fs");
const cli_core_1 = require("@notadd/cli-core");
const shelljs_1 = tslib_1.__importDefault(require("shelljs"));
const core_1 = require("@notadd/core");
let InitCommand = class InitCommand {
async init(gdbc) {
const { green, yellow } = require("colorette");
let projectName = readline_sync_1.question(yellow('Please enter project name :'), { charlist: '$<a-z>' }).trim();
projectName = this.specialCharacte(projectName);
console.log(`init ${projectName} ing...`);
let notGenerateFile = ['.git', 'node_modules', '.gitignore', 'init.ts', 'undefined.log', 'yarn.lock', 'init.js', 'package.json', '.vscode'];
shelljs_1.default.exec(`mkdir ${projectName}`);
let filePath = path_1.join(__dirname, gdbc ? "../init_template_v2" : "../init_template");
let writeFilePath = path_1.join(process.cwd(), `/${projectName}`);
fileDisplay(filePath, writeFilePath, projectName);
const value = ['npm i', 'yarn'];
const index = readline_sync_1.keyInSelect(value, yellow('Please choose :'));
if (index > -1) {
console.log("Dependencies downloading ...");
child_process_1.execSync(`cd ${projectName}/ && ${value[index]} `);
console.log(green('Initialization successful! '));
console.log(green('Start command: yarn start '));
}
function fileDisplay(filePath, writeFilePath, projectName) {
const files = fs_1.readdirSync(filePath);
files.filter(it => !notGenerateFile.includes(it)).forEach(function (filename) {
var fileDir = path.join(filePath, filename);
var writeFileDir = path.join(writeFilePath, filename);
const stats = fs.statSync(fileDir);
let isFile = stats.isFile();
let isDir = stats.isDirectory();
if (isFile) {
console.log(`${green(writeFilePath.replace(path_1.join(__dirname, "/"), "") + '/' + filename)}`);
const data = fs_1.readFileSync(fileDir);
let dataStr = data.toString();
let name = projectName.toLowerCase().charAt(0).toUpperCase() + projectName.slice(1);
dataStr = dataStr.replace(new RegExp("initDemo", 'g'), projectName).replace(new RegExp("InitDemo", 'g'), name);
writeFileDir = writeFileDir.replace(new RegExp("initDemo", 'g'), projectName);
console.log(writeFileDir);
if (filename === "package.md") {
writeFileDir = writeFileDir.replace('package.md', 'package.json');
}
if (filename === "env.md") {
writeFileDir = writeFileDir.replace('env.md', '.env');
}
fs_1.writeFileSync(writeFileDir, dataStr);
}
if (isDir) {
if (filename === "initDemo") {
writeFileDir = writeFileDir.replace(new RegExp("initDemo", 'g'), projectName);
}
fs_1.mkdirSync(writeFileDir);
fileDisplay(fileDir, writeFileDir, projectName);
}
});
}
}
/* 特殊字符 */
specialCharacte(str) {
var reg = " .*[`~!@#$%^&*()+=|{}_'--:;'_,\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?\\\\]+.*";
for (let i = 0; i < str.length && i < 15; i++) {
let index = reg.lastIndexOf(str[i]);
if (index !== -1) {
str = str.replace(str[i], "");
i = i - 1;
}
}
return str.toLowerCase().substring(0, 15);
}
};
tslib_1.__decorate([
cli_core_1.Command('init'),
tslib_1.__param(0, core_1.Args('gdbc')),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [Boolean]),
tslib_1.__metadata("design:returntype", Promise)
], InitCommand.prototype, "init", null);
InitCommand = tslib_1.__decorate([
core_1.Controller()
], InitCommand);
exports.InitCommand = InitCommand;
;