UNPKG

create-prpc-app

Version:

Create brand new pRPC app within seconds

129 lines (128 loc) 5.79 kB
"use strict"; 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;