typecccccccccccc
Version:
p align="center" > <img src="https://xord.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F283b98b7-fdae-4e5a-acaf-248242084e4a%2FICON.png?table=block&id=5306223c-a4f7-45d1-9f54-b9a5f4004cd6&spaceId=49976899-64a1-40f
143 lines • 6.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.init = void 0;
const chalk_1 = __importDefault(require("chalk"));
const enquirer_1 = __importDefault(require("enquirer"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const child_process_1 = require("child_process");
const ora_1 = __importDefault(require("ora"));
const error_1 = require("../../../utils/error");
const utils_1 = require("../../../utils/utils");
const packageInfo_1 = require("../../../utils/packageInfo");
const logger_1 = require("../../../utils/logger");
const { prompt } = enquirer_1.default;
const init = async () => {
try {
let projectName = "";
let projectPath = "";
let type = "";
await prompt([
{
type: "input",
name: "folderName",
message: "Please enter the name of project?",
initial: "shield-demo",
onSubmit: async (name, value) => {
value = value.trim();
if (value &&
/^[^\s^\x00-\x1f\\?:"";<>|\/.][^\x00-\x1f\\?:"";<>|\/][^\s^\x00-\x1f\\?:"";<>|\/.]+$/.test(value)) {
await (0, utils_1.getEmptyDir)(value.trim());
projectName = value.trim();
return true;
}
else {
(0, error_1.printNameValidationError)();
process.exit(1);
}
},
},
{
type: "select",
name: "projectType",
message: "What do you want to do?.",
choices: [
{
name: "Javascript",
message: "Create a Javascript project?",
value: "type",
},
{
name: "Typescript",
message: "Create a Typescript project?",
value: "type",
},
{
name: "Empty",
message: "Create an empty shield.config.js?",
value: "type",
},
{
name: "Quit",
message: "Quit",
value: "type",
},
],
result: async (value) => {
type = value;
if (type === "Quit") {
process.exit(1);
}
else if (type === "Empty") {
const src = `${(0, packageInfo_1.getPackageRoot)()}/template/config`;
const dest = `${process.cwd()}/${projectName}`;
projectPath = dest;
await fs_extra_1.default.copy(src, dest);
(0, logger_1.log)("Successfully generated the config file.", "success");
process.exit(1);
}
return value;
},
},
{
type: "select",
name: "proofSystem",
message: "Please select the proof system for project.",
choices: ["Groth16", "Plonk"],
result: async (value) => {
const src = `${(0, packageInfo_1.getPackageRoot)()}/template/${type.toLowerCase()}/${value.toLowerCase()}`;
const dest = `${process.cwd()}/${projectName}`;
projectPath = dest;
await fs_extra_1.default.copy(src, dest);
await (0, utils_1.updateCopyProjectName)(projectName, projectPath);
(0, logger_1.log)("Successfully generated the code.", "success");
return dest;
},
},
{
type: "select",
name: "package",
message: "Please select the package manager for project.",
choices: ["npm", "yarn"],
result: (val) => {
const spinner = (0, ora_1.default)(chalk_1.default.greenBright("Installing Dependencies...")).start();
const OS = /^win/.test(process.platform) ? "win" : "linux";
const command = val === "npm"
? OS === "win"
? "npm.cmd"
: "npm"
: OS === "win"
? "yarn.cmd"
: "yarn";
const args = val === "npm" ? ["install"] : [];
const dependencies = (0, child_process_1.spawn)(command, args, { cwd: projectPath });
dependencies.stdout.on("data", (data) => {
(0, logger_1.log)(data.toString(), "info");
});
dependencies.stderr.once("data", () => {
spinner.stopAndPersist();
});
dependencies.stderr.on("data", (data) => {
(0, logger_1.log)(data.toString(), "info");
});
dependencies.stdout.once("close", () => {
spinner.succeed(chalk_1.default.greenBright("Dependencies succesfully installed."));
(0, logger_1.log)("\nHappy Coding :)", "success");
});
return "Happy coding :)";
},
},
]);
}
catch (error) {
let errorMessage = "Aborted.";
if (error instanceof Error) {
errorMessage = error.message;
}
(0, logger_1.log)(errorMessage, "error");
}
};
exports.init = init;
//# sourceMappingURL=init.js.map