create-jd-app
Version:
Create modern type safed Solid web application within seconds
162 lines (161 loc) • 6.78 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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.getCtxWithInstallers = void 0;
const ora_1 = __importDefault(require("ora"));
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const inquirer_1 = __importDefault(require("inquirer"));
const files_1 = require("../utils/files");
const helpers_1 = require("../utils/helpers");
const chalk_1 = __importDefault(require("chalk"));
exports.default = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
let normalDeps = {};
let devModeDeps = {};
let scripts = {};
let env = [
{
key: "NODE_ENV",
type: "enum(['development', 'production', 'test']).default('development')",
ignore: true,
kind: "server",
},
{
key: "MODE",
type: "enum(['development', 'production', 'test']).default('development')",
ignore: true,
kind: "client",
},
];
let commands = [];
const execInstaller = (cfg) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
if (cfg.pkgs) {
normalDeps = Object.assign(Object.assign({}, normalDeps), cfg.pkgs[0]);
devModeDeps = Object.assign(Object.assign({}, devModeDeps), cfg.pkgs[1]);
}
if (cfg.scripts) {
scripts = Object.assign(Object.assign({}, scripts), cfg.scripts);
}
if ((_a = cfg.files) === null || _a === void 0 ? void 0 : _a.length) {
yield (0, files_1.execFiles)(cfg.files, ctx);
}
if (cfg.commands) {
if (Array.isArray(cfg.commands)) {
commands = [...cfg.commands, ...commands];
}
else {
commands.unshift(cfg.commands);
}
}
if ((_b = cfg.env) === null || _b === void 0 ? void 0 : _b.length) {
env = [...env, ...cfg.env];
}
});
const resp = yield Promise.all(ctx.installers.map((pkg) => {
var _a;
return (_a = `../installers/${pkg}/index`, Promise.resolve().then(() => __importStar(require(_a)))).then((installer) => typeof installer.default === "function"
? installer.default(ctx)
: installer.default);
}));
console.log();
const spinner = (0, ora_1.default)("Initializing installers").start();
if (resp.length) {
try {
for (const installer of resp) {
yield execInstaller(installer);
}
spinner.succeed(`Initialized ${resp.length} installers`);
}
catch (e) {
spinner.fail(`Couldn't initialize installers: ${(0, helpers_1.formatError)(e)}`);
process.exit(1);
}
}
else {
spinner.succeed("No installers to initialize");
}
return [scripts, [normalDeps, devModeDeps], env, commands];
});
function getCtxWithInstallers(ctx, curr) {
return __awaiter(this, void 0, void 0, function* () {
let installers = [];
let pkgs = [];
const skip = curr.includes("skip");
try {
installers = yield fs_extra_1.default.readdir(path_1.default.join(__dirname, "../installers"));
}
catch (_a) {
// do nothing
}
if (installers.length) {
const validInstallers = curr.length
? installers.filter((i) => curr.some((c) => c === i.toLowerCase()))
: [];
if (validInstallers.length) {
console.log(`${chalk_1.default.green("√")} Using installers: ${validInstallers
.map((installer) => chalk_1.default.blue(installer))
.join(", ")}`);
}
if (!skip) {
let optInstallers = installers.filter((pkg) => !validInstallers.includes(pkg));
const newPkgs = (yield inquirer_1.default.prompt({
name: "pkgs",
type: "checkbox",
message: "What should we use for this app?",
choices: optInstallers,
validate: (ans) => {
// for (const opt of opts) {
// if (opt.every((o) => ans.includes(o))) {
// return `You can't use both ${opt
// .map((o) => chalk.blue(o))
// .join(" and ")} at the same time`;
// }
// }
return true;
},
})).pkgs;
pkgs = [...validInstallers, ...newPkgs];
}
else {
pkgs = validInstallers;
}
}
return Object.assign(Object.assign({}, ctx), { installers: pkgs });
});
}
exports.getCtxWithInstallers = getCtxWithInstallers;