@semo/cli
Version:
A command line tools dispatcher
125 lines • 5.36 kB
JavaScript
;
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 __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = exports.builder = exports.aliases = exports.desc = exports.command = exports.plugin = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const yaml_1 = __importDefault(require("yaml"));
const inquirer_1 = __importDefault(require("inquirer"));
const core_1 = require("@semo/core");
exports.plugin = 'semo';
exports.command = 'init';
exports.desc = 'Init basic config file and directories';
exports.aliases = 'i';
const builder = function (yargs) {
yargs.option('plugin', {
alias: 'P',
describe: 'Plugin mode',
});
yargs.option('force', {
alias: 'f',
describe: 'Force init!',
});
yargs.option('add', {
default: false,
alias: 'A',
describe: 'Add npm package to package.json dependencies',
});
yargs.option('add-dev', {
default: false,
alias: 'D',
describe: 'Add npm package to package.json devDependencies',
});
yargs.option('typescript', {
alias: 'ts',
describe: 'Generate typescript style code',
});
};
exports.builder = builder;
const handler = function (argv) {
return __awaiter(this, void 0, void 0, function* () {
argv.yarn = core_1.Utils.fileExistsSyncCache('yarn.lock');
if (argv.yarn) {
core_1.Utils.info('yarn.lock found, use yarn for package management.');
}
let defaultRc = argv.plugin
? core_1.Utils._.pickBy({
typescript: argv.typescript ? true : null,
commandDir: 'src/commands',
extendDir: 'src/extends',
hookDir: 'src/hooks',
})
: core_1.Utils._.pickBy({
typescript: argv.typescript ? true : null,
commandDir: `bin/${argv.scriptName}/commands`,
pluginDir: `bin/${argv.scriptName}/plugins`,
extendDir: `bin/${argv.scriptName}/extends`,
scriptDir: `bin/${argv.scriptName}/scripts`,
hookDir: `bin/${argv.scriptName}/hooks`,
});
let currentPath = path_1.default.resolve(process.cwd());
try {
const configPath = `${currentPath}/.${argv.scriptName}rc.yml`;
const { override } = core_1.Utils.fileExistsSyncCache(configPath) && !argv.force
? yield inquirer_1.default.prompt([
{
type: 'confirm',
name: 'override',
message: `.${argv.scriptName}rc.yml exists, override?`,
default: false,
},
])
: { override: true };
if (override === false) {
console.log(core_1.Utils.warn('User aborted!'));
return;
}
fs_1.default.writeFileSync(configPath, yaml_1.default.stringify(defaultRc, {}));
console.log(core_1.Utils.info(`Default .${argv.scriptName}rc created!`));
const dirs = Object.keys(defaultRc).filter(item => item.indexOf('Dir') > -1);
dirs.forEach(dir => {
// @ts-ignore
const loc = defaultRc[dir];
if (!core_1.Utils.fileExistsSyncCache(`${currentPath}/${loc}`)) {
core_1.Utils.exec(`mkdir -p ${currentPath}/${loc}`);
console.log(core_1.Utils.info(`${currentPath}/${loc} created!`));
}
});
// add packages
const addPackage = core_1.Utils.parsePackageNames(argv.add);
const addPackageDev = core_1.Utils.parsePackageNames(argv.addDev);
if (addPackage.length > 0) {
if (argv.yarn) {
core_1.Utils.exec(`yarn add ${addPackage.join(' ')}`);
}
else {
core_1.Utils.exec(`npm install ${addPackage.join(' ')}`);
}
}
if (addPackageDev.length > 0) {
if (argv.yarn) {
core_1.Utils.exec(`yarn add ${addPackageDev.join(' ')} -D`);
}
else {
core_1.Utils.exec(`npm install ${addPackageDev.join(' ')} --save-dev`);
}
}
}
catch (e) {
return core_1.Utils.error(e.stack);
}
});
};
exports.handler = handler;
//# sourceMappingURL=init.js.map