create-cloudflare
Version:
A CLI for creating and deploying new applications to Cloudflare.
66 lines (59 loc) • 1.54 kB
text/typescript
import { logRaw } from "@cloudflare/cli";
import { inputPrompt } from "@cloudflare/cli/interactive";
import { runFrameworkGenerator } from "frameworks/index";
import { detectPackageManager } from "helpers/packageManagers";
import type { TemplateConfig } from "../../../src/templates";
import type { C3Context } from "types";
const { npm } = detectPackageManager();
const generate = async (ctx: C3Context) => {
const variant = await inputPrompt({
type: "select",
question: "Select a variant:",
label: "variant",
options: variantsOptions,
defaultValue: variantsOptions[0].value,
});
await runFrameworkGenerator(ctx, [ctx.project.name, "--template", variant]);
logRaw("");
};
const variantsOptions = [
{
value: "react-ts",
label: "TypeScript",
},
{
value: "react-swc-ts",
label: "TypeScript + SWC",
},
{
value: "react",
label: "JavaScript",
},
{
value: "react-swc",
label: "JavaScript + SWC",
},
];
const config: TemplateConfig = {
configVersion: 1,
id: "react",
// React's documentation now recommends using create-vite.
frameworkCli: "create-vite",
displayName: "React",
platform: "pages",
hidden: true,
path: "templates/react/pages",
copyFiles: { path: "./templates" },
generate,
transformPackageJson: async () => ({
scripts: {
deploy: `${npm} run build && wrangler pages deploy`,
preview: `${npm} run build && wrangler pages dev`,
"cf-typegen": `wrangler types`,
},
}),
devScript: "dev",
deployScript: "deploy",
previewScript: "preview",
};
export default config;