80 lines
2.8 KiB
JavaScript
80 lines
2.8 KiB
JavaScript
import { o as logLevelArgs, t as cwdArgs } from "./_shared-BCYCnX0T.mjs";
|
|
import { n as logger } from "./logger-B4ge7MhP.mjs";
|
|
import { n as templates, t as templateNames } from "./templates-CCEGPE6-.mjs";
|
|
import { r as relativeToProcess, t as loadKit } from "./kit-4LNqcmNp.mjs";
|
|
import process from "node:process";
|
|
import { defineCommand } from "citty";
|
|
import { colors } from "consola/utils";
|
|
import { cancel, intro, outro } from "@clack/prompts";
|
|
import { dirname, extname, resolve } from "pathe";
|
|
import { existsSync, promises } from "node:fs";
|
|
|
|
//#region ../nuxi/src/commands/add-template.ts
|
|
var add_template_default = defineCommand({
|
|
meta: {
|
|
name: "add-template",
|
|
description: "Create a new template file."
|
|
},
|
|
args: {
|
|
...cwdArgs,
|
|
...logLevelArgs,
|
|
force: {
|
|
type: "boolean",
|
|
description: "Force override file if it already exists",
|
|
default: false
|
|
},
|
|
template: {
|
|
type: "positional",
|
|
required: true,
|
|
valueHint: templateNames.join("|"),
|
|
description: `Specify which template to generate`
|
|
},
|
|
name: {
|
|
type: "positional",
|
|
required: true,
|
|
description: "Specify name of the generated file"
|
|
}
|
|
},
|
|
async run(ctx) {
|
|
const cwd = resolve(ctx.args.cwd);
|
|
intro(colors.cyan("Adding template..."));
|
|
const templateName = ctx.args.template;
|
|
if (!templateNames.includes(templateName)) {
|
|
const templateNames = Object.keys(templates).map((name) => colors.cyan(name));
|
|
const lastTemplateName = templateNames.pop();
|
|
logger.error(`Template ${colors.cyan(templateName)} is not supported.`);
|
|
logger.info(`Possible values are ${templateNames.join(", ")} or ${lastTemplateName}.`);
|
|
process.exit(1);
|
|
}
|
|
const ext = extname(ctx.args.name);
|
|
const name = ext === ".vue" || ext === ".ts" ? ctx.args.name.replace(ext, "") : ctx.args.name;
|
|
if (!name) {
|
|
cancel("name argument is missing!");
|
|
process.exit(1);
|
|
}
|
|
const config = await (await loadKit(cwd)).loadNuxtConfig({ cwd });
|
|
const template = templates[templateName];
|
|
const res = template({
|
|
name,
|
|
args: ctx.args,
|
|
nuxtOptions: config
|
|
});
|
|
if (!ctx.args.force && existsSync(res.path)) {
|
|
logger.error(`File exists at ${colors.cyan(relativeToProcess(res.path))}.`);
|
|
logger.info(`Use ${colors.cyan("--force")} to override or use a different name.`);
|
|
process.exit(1);
|
|
}
|
|
const parentDir = dirname(res.path);
|
|
if (!existsSync(parentDir)) {
|
|
logger.step(`Creating directory ${colors.cyan(relativeToProcess(parentDir))}.`);
|
|
if (templateName === "page") logger.info("This enables vue-router functionality!");
|
|
await promises.mkdir(parentDir, { recursive: true });
|
|
}
|
|
await promises.writeFile(res.path, `${res.contents.trim()}\n`);
|
|
logger.success(`Created ${colors.cyan(relativeToProcess(res.path))}.`);
|
|
outro(`Generated a new ${colors.cyan(templateName)}!`);
|
|
}
|
|
});
|
|
|
|
//#endregion
|
|
export { add_template_default as default }; |