create-prpc-app
Version:
Create brand new pRPC app within seconds
129 lines (128 loc) • 5.79 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.finished = exports.installDeps = exports.modifyProject = exports.copyTemplate = exports.initApp = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const ora_1 = __importDefault(require("ora"));
const inquirer_1 = __importDefault(require("inquirer"));
const chalk_1 = __importDefault(require("chalk"));
const files_1 = require("./files");
const helpers_1 = require("./helpers");
function initApp(args) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
console.log();
let pName = (_a = args
.find((o) => o.startsWith('pname='))) === null || _a === void 0 ? void 0 : _a.split('pname=').pop();
if (pName && !(0, helpers_1.validateName)(pName)) {
pName = undefined;
}
const appName = pName ||
(yield inquirer_1.default.prompt({
name: 'appName',
type: 'input',
message: 'What is the name of the app?',
validate: helpers_1.validateName,
default: 'my-app',
})).appName;
const useCurrentDir = args.includes('current');
const userDir = path_1.default.resolve(process.cwd(), useCurrentDir ? '' : appName);
const exists = yield (0, files_1.existsOrCreate)(userDir);
if (exists && !useCurrentDir) {
if ((yield inquirer_1.default.prompt({
name: 'overWrite',
type: 'confirm',
message: `Do you want to overwrite this directory?`,
})).overWrite) {
yield (0, files_1.overWriteFile)(userDir);
}
else {
console.log(chalk_1.default.red('Aborting...'));
process.exit(1);
}
}
const templateDir = path_1.default.join(__dirname, '../../templates');
const possibleTemplates = yield fs_extra_1.default.readdir(templateDir);
const { template } = yield inquirer_1.default.prompt({
type: 'list',
choices: possibleTemplates,
name: 'template',
message: 'What template do you want to use?',
});
const pkgManager = (0, helpers_1.getUserPackageManager)();
return {
appName,
userDir,
pkgManager,
templateDir,
template,
};
});
}
exports.initApp = initApp;
function copyTemplate(appContext) {
return __awaiter(this, void 0, void 0, function* () {
console.log();
const spinner = (0, ora_1.default)('Copying template files').start();
try {
yield fs_extra_1.default.copy(path_1.default.join(appContext.templateDir, appContext.template), path_1.default.join(appContext.userDir));
yield fs_extra_1.default.rename(path_1.default.join(appContext.userDir, '_gitignore'), path_1.default.join(appContext.userDir, '.gitignore'));
spinner.succeed(`Copied template files to ${appContext.userDir}`);
}
catch (e) {
spinner.fail(`Couldn't copy template files: ${(0, helpers_1.formatError)(e)}`);
process.exit(1);
}
});
}
exports.copyTemplate = copyTemplate;
function modifyProject(ctx) {
return __awaiter(this, void 0, void 0, function* () {
const spinner = (0, ora_1.default)('Modifying project').start();
try {
yield Promise.all([(0, helpers_1.updateJson)(ctx)]);
spinner.succeed('Modified project');
}
catch (e) {
spinner.fail(`Couldn't modify project: ${(0, helpers_1.formatError)(e)}`);
process.exit(1);
}
});
}
exports.modifyProject = modifyProject;
function installDeps(ctx) {
return __awaiter(this, void 0, void 0, function* () {
console.log(`\n${chalk_1.default.blue('Using')} ${chalk_1.default.bold(chalk_1.default.yellow(ctx.pkgManager.toUpperCase()))} ${chalk_1.default.bold(chalk_1.default.blue('as package manager'))}`);
const spinner = (0, ora_1.default)('Installing dependencies').start();
try {
const flags = ctx.pkgManager === 'npm' ? ' --legacy-peer-deps' : '';
yield (0, helpers_1.execa)(`${ctx.pkgManager} install${flags}`, { cwd: ctx.userDir });
spinner.succeed('Installed dependencies');
}
catch (e) {
spinner.fail(`Couldn't install dependencies: ${(0, helpers_1.formatError)(e)}`);
process.exit(1);
}
});
}
exports.installDeps = installDeps;
function finished(ctx) {
console.log(`\n\t${chalk_1.default.green(`cd ${ctx.appName}`)}`);
const withRun = ctx.pkgManager === 'pnpm' ? '' : ' run';
console.log(chalk_1.default.bold(chalk_1.default.blue(`\t${ctx.pkgManager}${withRun} dev`)));
console.log();
process.exit(0);
}
exports.finished = finished;