mirror of
https://github.com/CompeyDev/create-guilded-bot.git
synced 2024-12-12 20:50:36 +00:00
103 lines
3.9 KiB
TypeScript
103 lines
3.9 KiB
TypeScript
|
import fs, { createWriteStream, mkdir, readdir, readdirSync } from "fs";
|
||
|
import { copySync, removeSync } from "fs-extra";
|
||
|
import * as inquirer from "inquirer";
|
||
|
import getPackageManager from "../lib/getPackageManager";
|
||
|
import install from "../lib/installDependencies";
|
||
|
import * as logger from "../utils/logger";
|
||
|
import constants from "../utils/constants";
|
||
|
import getConstant from "../utils/constants";
|
||
|
import stream from "got";
|
||
|
import unzip from "unzip-stream";
|
||
|
import validateClient from "../lib/validateClient";
|
||
|
|
||
|
export default function main(shouldInstall: boolean) {
|
||
|
const welcomeASCII = getConstant("welcomeMessage");
|
||
|
console.log(welcomeASCII);
|
||
|
|
||
|
inquirer
|
||
|
.prompt([
|
||
|
{
|
||
|
type: "input",
|
||
|
name: "location",
|
||
|
message: "Where should the project be initialized?",
|
||
|
},
|
||
|
{
|
||
|
type: "list",
|
||
|
name: "flavor",
|
||
|
message: "Which flavor?",
|
||
|
choices: ["TypeScript", "JavaScript"],
|
||
|
filter(val) {
|
||
|
return val.toLowerCase();
|
||
|
},
|
||
|
},
|
||
|
])
|
||
|
.then((answers) => {
|
||
|
validateClient();
|
||
|
mkdir(answers.location, (e) => {
|
||
|
if (e && e.code != "EEXIST") {
|
||
|
logger.error("Failed to create project directory.");
|
||
|
process.exit(1);
|
||
|
}
|
||
|
|
||
|
if (e) {
|
||
|
if (e.code == "EEXIST") {
|
||
|
readdir(answers.location, (_, files) => {
|
||
|
if (files.length) {
|
||
|
logger.error("Directory not empty.");
|
||
|
process.exit(1);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
let packageManager = getPackageManager();
|
||
|
|
||
|
const start = async (TEMPLATE_DOWNLOAD_URL: string) => {
|
||
|
const download = stream(TEMPLATE_DOWNLOAD_URL, { isStream: true }).pipe(
|
||
|
createWriteStream(`${answers.location}/create-guilded-bot_ts.zip`)
|
||
|
);
|
||
|
download.on("finish", () => {
|
||
|
fs.createReadStream(`${answers.location}/create-guilded-bot_ts.zip`)
|
||
|
.pipe(unzip.Extract({ path: `${answers.location}` }))
|
||
|
.on("finish", () => {
|
||
|
removeSync(`${answers.location}/create-guilded-bot_ts.zip`);
|
||
|
logger.success("🚀 Let's get started.");
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
if (answers.flavor == "typescript") {
|
||
|
const TEMPLATE_DOWNLOAD_URL =
|
||
|
"https://files.devcomp.xyz/r/create-guilded-bot_ts.zip";
|
||
|
|
||
|
start(TEMPLATE_DOWNLOAD_URL).then(() => {
|
||
|
if (shouldInstall) {
|
||
|
install(
|
||
|
packageManager as "npm" | "pnpm" | "yarn" | null,
|
||
|
answers.location
|
||
|
);
|
||
|
} else if (!shouldInstall) {
|
||
|
logger.custom(packageManager, "Skipping installation step.")
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (answers.flavor == "javascript") {
|
||
|
const TEMPLATE_DOWNLOAD_URL =
|
||
|
"https://files.devcomp.xyz/r/create-guilded-bot_js.zip";
|
||
|
|
||
|
start(TEMPLATE_DOWNLOAD_URL).then(() => {
|
||
|
if (shouldInstall) {
|
||
|
install(
|
||
|
packageManager as "npm" | "pnpm" | "yarn" | null,
|
||
|
answers.location
|
||
|
);
|
||
|
} else if (!shouldInstall) {
|
||
|
logger.custom(packageManager, "Skipping installation step.")
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|