create-jd-app
Version:
Create modern type safed Solid web application within seconds
190 lines (189 loc) • 8.23 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.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;
//