UNPKG

create-jd-app

Version:

Create modern type safed Solid web application within seconds

190 lines (189 loc) 8.23 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.runCommands = 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 solid_1 = __importDefault(require("../helpers/solid")); const inquirer_1 = __importDefault(require("inquirer")); const chalk_1 = __importDefault(require("chalk")); const files_1 = require("./files"); const helpers_1 = require("./helpers"); const env_1 = require("../helpers/env"); const config_1 = require("../helpers/config"); 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 getTempVercel = () => { var _a, _b; const temp = (_b = (_a = args .find((o) => o.startsWith("vercel="))) === null || _a === void 0 ? void 0 : _a.split("vercel=").pop()) === null || _b === void 0 ? void 0 : _b.toLowerCase(); const ve = temp ? temp === "Cli" || temp === "Dashboard" ? temp : temp === "none" ? null : "Cli" : undefined; if (ve) { console.log(`Using Vercel ${chalk_1.default.blue(ve)} for deployment`); } return ve; }; let vercel; if (args.includes("skip")) { const temp = getTempVercel(); vercel = temp !== null && temp !== void 0 ? temp : undefined; } else { const temp = getTempVercel(); if (temp !== undefined) { vercel = temp !== null && temp !== void 0 ? temp : undefined; } else { const temp = (yield inquirer_1.default.prompt({ name: "vercel", type: "list", choices: ["Cli", "Dashboard", "None"], message: "Will you deploy this project to vercel? If so, how", })).vercel; vercel = temp === "None" ? undefined : temp; } } const pkgManager = (0, helpers_1.getUserPackageManager)(); return { appName, userDir, vercel, pkgManager, templateDir: path_1.default.join(__dirname, "../../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(); const templateDir = path_1.default.join(__dirname, "../..", "template"); try { yield fs_extra_1.default.copy(path_1.default.join(templateDir, "base"), path_1.default.join(appContext.userDir)); yield Promise.all([ 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, pkgs, scripts, env) { return __awaiter(this, void 0, void 0, function* () { const spinner = (0, ora_1.default)("Modifying project").start(); try { yield Promise.all([ (0, solid_1.default)(ctx, env), (0, env_1.updateEnv)(ctx.userDir, env), (0, helpers_1.solidUpdateJSON)(ctx, scripts, pkgs), (0, config_1.modifyConfigIfNeeded)(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) { console.error(e); spinner.fail(`Cann't install dependencies: ${(0, helpers_1.formatError)(e)}`); process.exit(1); } }); } exports.installDeps = installDeps; function runCommands(ctx, commands) { return __awaiter(this, void 0, void 0, function* () { const spinner = (0, ora_1.default)("Running queued commands").start(); try { for (const cmd of commands) { yield (0, helpers_1.execa)(cmd, { cwd: ctx.userDir, }); } spinner.succeed("Ran queued commands"); } catch (e) { spinner.fail(`Couldn't run queued commands: ${(0, helpers_1.formatError)(e)}`); process.exit(1); } }); } exports.runCommands = runCommands; function finished(ctx) { console.log(`\n\t${chalk_1.default.green(`cd ${ctx.appName}`)}`); const withRun = ctx.pkgManager === "pnpm" ? "" : " run"; ctx.installers.includes("Prisma") && console.log(`${chalk_1.default.yellow(`\t${ctx.pkgManager}${withRun} push`)}\t${chalk_1.default.gray("// pushes db to Prisma")}`); console.log(chalk_1.default.bold(chalk_1.default.blue(`\t${ctx.pkgManager}${withRun} dev`))); console.log(); process.exit(0); } exports.finished = finished; //