create-jd-app
Version:
Create modern type safed Solid web application within seconds
83 lines (82 loc) • 3.82 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.solidUpdateJSON = exports.getUserPackageManager = exports.modifyJSON = exports.validateName = exports.formatError = exports.execa = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const child_process_1 = require("child_process");
const util_1 = require("util");
exports.execa = (0, util_1.promisify)(child_process_1.exec);
const DEFAULT_ERR = "Something Went Wrong";
const errCheck = (message) => (message === null || message === void 0 ? void 0 : message.length) ? message : DEFAULT_ERR;
const formatError = (err) => {
if (typeof err === "string")
return errCheck(err);
else if (typeof err === "object") {
if (Array.isArray(err)) {
if (err.length) {
return (0, exports.formatError)(err.shift());
}
else
return errCheck();
}
else if (err && "message" in err) {
return (0, exports.formatError)(err.message);
}
else if (err && "stack" in err) {
return (0, exports.formatError)(err.stack);
}
}
return errCheck();
};
exports.formatError = formatError;
const validateName = (name) => {
if (!name.length)
return false;
return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(name)
? true
: "This is not a valid name";
};
exports.validateName = validateName;
function modifyJSON(userDir,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
cb) {
return __awaiter(this, void 0, void 0, function* () {
const json = yield fs_extra_1.default.readJSON(path_1.default.join(userDir, "package.json"));
const newJson = yield cb(Object.assign({}, json));
yield fs_extra_1.default.writeFile(path_1.default.join(userDir, "package.json"), JSON.stringify(newJson, null, 2));
return newJson;
});
}
exports.modifyJSON = modifyJSON;
const getUserPackageManager = () => {
const userAgent = process.env.npm_config_user_agent;
if (userAgent === null || userAgent === void 0 ? void 0 : userAgent.startsWith("yarn"))
return "yarn";
if (userAgent === null || userAgent === void 0 ? void 0 : userAgent.startsWith("pnpm"))
return "pnpm";
return "npm";
};
exports.getUserPackageManager = getUserPackageManager;
const solidUpdateJSON = (ctx, scripts, pkgs) => __awaiter(void 0, void 0, void 0, function* () {
const [normalDeps, devModeDeps] = pkgs;
yield modifyJSON(ctx.userDir, (json) => {
json.name = ctx.appName;
json.scripts = Object.assign(Object.assign({}, json.scripts), scripts);
json.dependencies = Object.assign(Object.assign({}, json.dependencies), normalDeps);
json.devDependencies = Object.assign(Object.assign({}, json.devDependencies), devModeDeps);
return json;
});
});
exports.solidUpdateJSON = solidUpdateJSON;