@selemondev/create-react-next
Version:
The Next Generation React Scaffolding Tool ✨
63 lines (48 loc) • 1.75 kB
text/typescript
import fs from "fs-extra";
import path from "node:path";
import options from "../../../core/utils/react/options";
import { ejsRender } from "../../../utils/ejsRender";
import termColors from "../../../utils/colors";
import { templateFilesMap } from "../../../core/utils/react/templateFile";
import { getFilterFile } from "../../../filter/filterFiles";
import { fileURLToPath } from "node:url";
import { dirname } from "node:path";
import ora from "ora";
async function copyTemplate() {
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const spinner = ora("Copying template...").start();
const language = options.useTypeScript ? "react-ts" : "react-js";
options.src = path.resolve(__dirname, `../template/${language}`);
const dest = options.name && path.resolve(process.cwd(), options.name);
options.dest = dest;
const templatePath = path.resolve(
__dirname,
`../../../../template/${language}`,
);
options.templatePath = templatePath;
const filterFileFn = getFilterFile();
async function copy() {
const targetDirectory = path.resolve(__dirname, "../");
if (!dest) {
return;
}
await fs.copy(`${targetDirectory}/template/${language}`, dest);
}
await copy();
filterFileFn && (await filterFileFn());
options.dest &&
(await fs.move(
path.resolve(options.dest, ".gitignore.ejs"),
path.resolve(options.dest, ".gitignore"),
{ overwrite: true },
));
await Promise.all(
templateFilesMap
.get("react")()
.map((file: string) => options.name && ejsRender(file, options.name)),
);
spinner.text = termColors.green("Template successfully copied!");
spinner.succeed();
}
export default copyTemplate;