create-cloudflare 2.40.2 → 2.40.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +81 -34
- package/package.json +5 -5
- package/templates/hello-world/js/package.json +2 -2
- package/templates/hello-world/ts/package.json +2 -2
- package/templates-experimental/hello-world-with-assets/js/package.json +2 -2
- package/templates-experimental/hello-world-with-assets/ts/package.json +2 -2
- package/templates-experimental/vue/c3.ts +69 -4
- package/templates-experimental/vue/js/server/index.js +13 -0
- package/templates-experimental/vue/js/src/App.vue +107 -0
- package/templates-experimental/vue/js/src/components/HelloWorld.vue +47 -0
- package/templates-experimental/vue/js/vite.config.js +21 -0
- package/templates-experimental/vue/js/wrangler.jsonc +12 -0
- package/templates-experimental/vue/ts/server/index.ts +13 -0
- package/templates-experimental/vue/ts/src/App.vue +107 -0
- package/templates-experimental/vue/ts/src/components/HelloWorld.vue +44 -0
- package/templates-experimental/vue/ts/tsconfig.worker.json +8 -0
- package/templates-experimental/vue/ts/vite.config.ts +21 -0
- package/templates-experimental/vue/ts/worker-configuration.d.ts +6 -0
- package/templates-experimental/vue/ts/wrangler.jsonc +12 -0
- package/templates-experimental/vue/templates/wrangler.jsonc +0 -10
package/dist/cli.js
CHANGED
|
@@ -74977,7 +74977,7 @@ var Yargs = YargsFactory(esm_default);
|
|
|
74977
74977
|
var yargs_default = Yargs;
|
|
74978
74978
|
|
|
74979
74979
|
// package.json
|
|
74980
|
-
var version = "2.40.
|
|
74980
|
+
var version = "2.40.3";
|
|
74981
74981
|
|
|
74982
74982
|
// src/metrics.ts
|
|
74983
74983
|
var import_node_async_hooks = require("node:async_hooks");
|
|
@@ -76692,23 +76692,70 @@ var c3_default13 = config11;
|
|
|
76692
76692
|
// templates-experimental/vue/c3.ts
|
|
76693
76693
|
var { npm: npm8 } = detectPackageManager();
|
|
76694
76694
|
var generate11 = async (ctx) => {
|
|
76695
|
-
|
|
76695
|
+
const lang = ctx.args.lang ?? await inputPrompt({
|
|
76696
|
+
type: "select",
|
|
76697
|
+
question: "Would you like to use TypeScript?",
|
|
76698
|
+
label: "Language",
|
|
76699
|
+
options: [
|
|
76700
|
+
{ label: "TypeScript", value: "ts" },
|
|
76701
|
+
{ label: "JavaScript", value: "js" }
|
|
76702
|
+
]
|
|
76703
|
+
});
|
|
76704
|
+
await runFrameworkGenerator(ctx, [
|
|
76705
|
+
ctx.project.name,
|
|
76706
|
+
"--router",
|
|
76707
|
+
lang === "ts" ? "--ts" : ""
|
|
76708
|
+
]);
|
|
76709
|
+
logRaw("");
|
|
76710
|
+
};
|
|
76711
|
+
var configure9 = async (ctx) => {
|
|
76712
|
+
await installPackages(["@cloudflare/vite-plugin"], {
|
|
76713
|
+
dev: true,
|
|
76714
|
+
startText: "Installing the Cloudflare Vite plugin",
|
|
76715
|
+
doneText: `${brandColor(`installed`)} ${dim("@cloudflare/vite-plugin")}`
|
|
76716
|
+
});
|
|
76717
|
+
if (usesTypescript(ctx)) {
|
|
76718
|
+
updateTsconfigJson();
|
|
76719
|
+
}
|
|
76696
76720
|
};
|
|
76721
|
+
function updateTsconfigJson() {
|
|
76722
|
+
const s = spinner();
|
|
76723
|
+
s.start(`Updating tsconfig.json config`);
|
|
76724
|
+
const tsconfig = readJSON("tsconfig.json");
|
|
76725
|
+
if (tsconfig && typeof tsconfig === "object") {
|
|
76726
|
+
tsconfig.references ??= [];
|
|
76727
|
+
tsconfig.references.push({ path: "./tsconfig.worker.json" });
|
|
76728
|
+
}
|
|
76729
|
+
writeJSON("tsconfig.json", tsconfig);
|
|
76730
|
+
s.stop(`${brandColor(`updated`)} ${dim(`\`tsconfig.json\``)}`);
|
|
76731
|
+
}
|
|
76697
76732
|
var config12 = {
|
|
76698
76733
|
configVersion: 1,
|
|
76699
76734
|
id: "vue",
|
|
76700
76735
|
frameworkCli: "create-vue",
|
|
76701
76736
|
platform: "workers",
|
|
76702
76737
|
displayName: "Vue",
|
|
76738
|
+
path: "templates-experimental/vue",
|
|
76703
76739
|
copyFiles: {
|
|
76704
|
-
|
|
76740
|
+
async selectVariant(ctx) {
|
|
76741
|
+
return usesTypescript(ctx) ? "ts" : "js";
|
|
76742
|
+
},
|
|
76743
|
+
variants: {
|
|
76744
|
+
ts: {
|
|
76745
|
+
path: "./ts"
|
|
76746
|
+
},
|
|
76747
|
+
js: {
|
|
76748
|
+
path: "./js"
|
|
76749
|
+
}
|
|
76750
|
+
}
|
|
76705
76751
|
},
|
|
76706
|
-
|
|
76752
|
+
configure: configure9,
|
|
76707
76753
|
generate: generate11,
|
|
76708
|
-
transformPackageJson: async () => ({
|
|
76754
|
+
transformPackageJson: async (_3, ctx) => ({
|
|
76709
76755
|
scripts: {
|
|
76710
76756
|
deploy: `${npm8} run build && wrangler deploy`,
|
|
76711
|
-
preview: `${npm8} run build && wrangler dev
|
|
76757
|
+
preview: `${npm8} run build && wrangler dev`,
|
|
76758
|
+
...usesTypescript(ctx) && { "cf-typegen": `wrangler types` }
|
|
76712
76759
|
}
|
|
76713
76760
|
}),
|
|
76714
76761
|
devScript: "dev",
|
|
@@ -76728,7 +76775,7 @@ var generate12 = async (ctx) => {
|
|
|
76728
76775
|
]);
|
|
76729
76776
|
logRaw("");
|
|
76730
76777
|
};
|
|
76731
|
-
var
|
|
76778
|
+
var configure10 = async (ctx) => {
|
|
76732
76779
|
if (pm2 === "pnpm" || pm2 === "yarn" || pm2 === "bun") {
|
|
76733
76780
|
const packages = [];
|
|
76734
76781
|
packages.push("nitropack");
|
|
@@ -76806,7 +76853,7 @@ var config13 = {
|
|
|
76806
76853
|
path: "./templates"
|
|
76807
76854
|
},
|
|
76808
76855
|
generate: generate12,
|
|
76809
|
-
configure:
|
|
76856
|
+
configure: configure10,
|
|
76810
76857
|
transformPackageJson: async () => ({
|
|
76811
76858
|
scripts: {
|
|
76812
76859
|
preview: `${npm9} run build && wrangler pages dev`,
|
|
@@ -76831,7 +76878,7 @@ var generate13 = async (ctx) => {
|
|
|
76831
76878
|
]);
|
|
76832
76879
|
logRaw("");
|
|
76833
76880
|
};
|
|
76834
|
-
var
|
|
76881
|
+
var configure11 = async (ctx) => {
|
|
76835
76882
|
updateAngularJson2(ctx);
|
|
76836
76883
|
await updateAppCode2();
|
|
76837
76884
|
await installCFWorker2();
|
|
@@ -76895,7 +76942,7 @@ var config14 = {
|
|
|
76895
76942
|
deployScript: "deploy",
|
|
76896
76943
|
previewScript: "start",
|
|
76897
76944
|
generate: generate13,
|
|
76898
|
-
configure:
|
|
76945
|
+
configure: configure11,
|
|
76899
76946
|
transformPackageJson: async () => ({
|
|
76900
76947
|
scripts: {
|
|
76901
76948
|
start: `${npm10} run build && wrangler pages dev dist/cloudflare ${await compatDateFlag()}`,
|
|
@@ -76914,7 +76961,7 @@ var generate14 = async (ctx) => {
|
|
|
76914
76961
|
await runFrameworkGenerator(ctx, [ctx.project.name, "--no-install"]);
|
|
76915
76962
|
logRaw("");
|
|
76916
76963
|
};
|
|
76917
|
-
var
|
|
76964
|
+
var configure12 = async () => {
|
|
76918
76965
|
await runCommand([npx3, "astro", "add", "cloudflare", "-y"], {
|
|
76919
76966
|
silent: true,
|
|
76920
76967
|
startText: "Installing adapter",
|
|
@@ -76971,7 +77018,7 @@ var config15 = {
|
|
|
76971
77018
|
deployScript: "deploy",
|
|
76972
77019
|
previewScript: "preview",
|
|
76973
77020
|
generate: generate14,
|
|
76974
|
-
configure:
|
|
77021
|
+
configure: configure12,
|
|
76975
77022
|
transformPackageJson: async (pkgJson, ctx) => ({
|
|
76976
77023
|
scripts: {
|
|
76977
77024
|
deploy: `astro build && wrangler pages deploy`,
|
|
@@ -77170,7 +77217,7 @@ var generate18 = async (ctx) => {
|
|
|
77170
77217
|
]);
|
|
77171
77218
|
logRaw("");
|
|
77172
77219
|
};
|
|
77173
|
-
var
|
|
77220
|
+
var configure13 = async (ctx) => {
|
|
77174
77221
|
const indexFile = "src/index.ts";
|
|
77175
77222
|
const s = spinner();
|
|
77176
77223
|
s.start(`Updating \`${indexFile}\``);
|
|
@@ -77195,7 +77242,7 @@ var config20 = {
|
|
|
77195
77242
|
},
|
|
77196
77243
|
platform: "workers",
|
|
77197
77244
|
generate: generate18,
|
|
77198
|
-
configure:
|
|
77245
|
+
configure: configure13,
|
|
77199
77246
|
transformPackageJson: async () => ({
|
|
77200
77247
|
scripts: {
|
|
77201
77248
|
dev: "wrangler dev",
|
|
@@ -77237,7 +77284,7 @@ var updateNextConfig2 = (usesTs) => {
|
|
|
77237
77284
|
writeFile2(configFile, updatedConfigFile);
|
|
77238
77285
|
s.stop(`${brandColor(`updated`)} ${dim(`\`${configFile}\``)}`);
|
|
77239
77286
|
};
|
|
77240
|
-
var
|
|
77287
|
+
var configure14 = async (ctx) => {
|
|
77241
77288
|
const projectPath = ctx.project.path;
|
|
77242
77289
|
const path6 = probePaths([
|
|
77243
77290
|
`${projectPath}/pages/api`,
|
|
@@ -77319,7 +77366,7 @@ var c3_default26 = {
|
|
|
77319
77366
|
platform: "pages",
|
|
77320
77367
|
displayName: "Next.js",
|
|
77321
77368
|
generate: generate19,
|
|
77322
|
-
configure:
|
|
77369
|
+
configure: configure14,
|
|
77323
77370
|
copyFiles: {
|
|
77324
77371
|
async selectVariant(ctx) {
|
|
77325
77372
|
const isApp = probePaths([
|
|
@@ -77389,7 +77436,7 @@ var generate20 = async (ctx) => {
|
|
|
77389
77436
|
writeFile2("./.node-version", "18");
|
|
77390
77437
|
logRaw("");
|
|
77391
77438
|
};
|
|
77392
|
-
var
|
|
77439
|
+
var configure15 = async (ctx) => {
|
|
77393
77440
|
const packages = ["nitro-cloudflare-dev"];
|
|
77394
77441
|
if (pm3 === "pnpm") {
|
|
77395
77442
|
packages.push("h3");
|
|
@@ -77458,7 +77505,7 @@ var config21 = {
|
|
|
77458
77505
|
path: "./templates"
|
|
77459
77506
|
},
|
|
77460
77507
|
generate: generate20,
|
|
77461
|
-
configure:
|
|
77508
|
+
configure: configure15,
|
|
77462
77509
|
transformPackageJson: async () => ({
|
|
77463
77510
|
scripts: {
|
|
77464
77511
|
deploy: `${npm15} run build && wrangler pages deploy`,
|
|
@@ -77648,7 +77695,7 @@ var c3_default29 = {
|
|
|
77648
77695
|
})
|
|
77649
77696
|
};
|
|
77650
77697
|
function buildConfigure(params) {
|
|
77651
|
-
return async function
|
|
77698
|
+
return async function configure22(ctx) {
|
|
77652
77699
|
const loginSuccess = await params.login(ctx);
|
|
77653
77700
|
if (!loginSuccess) {
|
|
77654
77701
|
throw new Error("Failed to login to Cloudflare");
|
|
@@ -77694,7 +77741,7 @@ var { npm: npm16, npx: npx5, name: name2 } = detectPackageManager();
|
|
|
77694
77741
|
var generate21 = async (ctx) => {
|
|
77695
77742
|
await runFrameworkGenerator(ctx, ["playground", ctx.project.name]);
|
|
77696
77743
|
};
|
|
77697
|
-
var
|
|
77744
|
+
var configure16 = async (ctx) => {
|
|
77698
77745
|
const cmd = [name2 === "pnpm" ? npm16 : npx5, "qwik", "add", "cloudflare-pages"];
|
|
77699
77746
|
endSection(`Running ${quoteShellArgs(cmd)}`);
|
|
77700
77747
|
await runCommand(cmd);
|
|
@@ -77781,7 +77828,7 @@ var config22 = {
|
|
|
77781
77828
|
path: "./templates"
|
|
77782
77829
|
},
|
|
77783
77830
|
generate: generate21,
|
|
77784
|
-
configure:
|
|
77831
|
+
configure: configure16,
|
|
77785
77832
|
transformPackageJson: async () => ({
|
|
77786
77833
|
scripts: {
|
|
77787
77834
|
deploy: `${npm16} run build && wrangler pages deploy`,
|
|
@@ -77863,7 +77910,7 @@ var generate23 = async (ctx) => {
|
|
|
77863
77910
|
]);
|
|
77864
77911
|
logRaw("");
|
|
77865
77912
|
};
|
|
77866
|
-
var
|
|
77913
|
+
var configure17 = async (ctx) => {
|
|
77867
77914
|
await installPackages(["@cloudflare/vite-plugin"], {
|
|
77868
77915
|
dev: true,
|
|
77869
77916
|
startText: "Installing the Cloudflare Vite plugin",
|
|
@@ -77871,7 +77918,7 @@ var configure16 = async (ctx) => {
|
|
|
77871
77918
|
});
|
|
77872
77919
|
await transformViteConfig(ctx);
|
|
77873
77920
|
if (usesTypescript(ctx)) {
|
|
77874
|
-
|
|
77921
|
+
updateTsconfigJson2();
|
|
77875
77922
|
}
|
|
77876
77923
|
};
|
|
77877
77924
|
function transformViteConfig(ctx) {
|
|
@@ -77908,7 +77955,7 @@ function transformViteConfig(ctx) {
|
|
|
77908
77955
|
function isPluginsProp(prop) {
|
|
77909
77956
|
return (t.Property.check(prop) || t.ObjectProperty.check(prop)) && t.Identifier.check(prop.key) && prop.key.name === "plugins";
|
|
77910
77957
|
}
|
|
77911
|
-
function
|
|
77958
|
+
function updateTsconfigJson2() {
|
|
77912
77959
|
const s = spinner();
|
|
77913
77960
|
s.start(`Updating tsconfig.json config`);
|
|
77914
77961
|
const tsconfig = readJSON("tsconfig.json");
|
|
@@ -77971,7 +78018,7 @@ var config24 = {
|
|
|
77971
78018
|
}
|
|
77972
78019
|
},
|
|
77973
78020
|
generate: generate23,
|
|
77974
|
-
configure:
|
|
78021
|
+
configure: configure17,
|
|
77975
78022
|
transformPackageJson: async (_3, ctx) => ({
|
|
77976
78023
|
scripts: {
|
|
77977
78024
|
deploy: `${npm18} run build && wrangler deploy`,
|
|
@@ -78002,7 +78049,7 @@ var generate24 = async (ctx) => {
|
|
|
78002
78049
|
]);
|
|
78003
78050
|
logRaw("");
|
|
78004
78051
|
};
|
|
78005
|
-
var
|
|
78052
|
+
var configure18 = async () => {
|
|
78006
78053
|
const typeDefsPath = "load-context.ts";
|
|
78007
78054
|
const s = spinner();
|
|
78008
78055
|
s.start(`Updating \`${typeDefsPath}\``);
|
|
@@ -78027,7 +78074,7 @@ var config26 = {
|
|
|
78027
78074
|
path: "./templates"
|
|
78028
78075
|
},
|
|
78029
78076
|
generate: generate24,
|
|
78030
|
-
configure:
|
|
78077
|
+
configure: configure18,
|
|
78031
78078
|
transformPackageJson: async () => ({
|
|
78032
78079
|
scripts: {
|
|
78033
78080
|
deploy: `${npm19} run build && wrangler pages deploy`,
|
|
@@ -78067,7 +78114,7 @@ var generate25 = async (ctx) => {
|
|
|
78067
78114
|
await runFrameworkGenerator(ctx, ["-p", ctx.project.name, "-s"]);
|
|
78068
78115
|
logRaw("");
|
|
78069
78116
|
};
|
|
78070
|
-
var
|
|
78117
|
+
var configure19 = async (ctx) => {
|
|
78071
78118
|
usesTypescript(ctx);
|
|
78072
78119
|
const filePath = `app.config.${usesTypescript(ctx) ? "ts" : "js"}`;
|
|
78073
78120
|
updateStatus(`Updating configuration in ${blue(filePath)}`);
|
|
@@ -78115,7 +78162,7 @@ var config27 = {
|
|
|
78115
78162
|
path: "./templates"
|
|
78116
78163
|
},
|
|
78117
78164
|
generate: generate25,
|
|
78118
|
-
configure:
|
|
78165
|
+
configure: configure19,
|
|
78119
78166
|
transformPackageJson: async () => ({
|
|
78120
78167
|
scripts: {
|
|
78121
78168
|
preview: `${npm20} run build && npx wrangler pages dev`,
|
|
@@ -78138,7 +78185,7 @@ var generate26 = async (ctx) => {
|
|
|
78138
78185
|
await runFrameworkGenerator(ctx, ["create", ctx.project.name]);
|
|
78139
78186
|
logRaw("");
|
|
78140
78187
|
};
|
|
78141
|
-
var
|
|
78188
|
+
var configure20 = async (ctx) => {
|
|
78142
78189
|
const pkg = `@sveltejs/adapter-cloudflare`;
|
|
78143
78190
|
await installPackages([pkg], {
|
|
78144
78191
|
dev: true,
|
|
@@ -78230,7 +78277,7 @@ var config28 = {
|
|
|
78230
78277
|
path: "./templates"
|
|
78231
78278
|
},
|
|
78232
78279
|
generate: generate26,
|
|
78233
|
-
configure:
|
|
78280
|
+
configure: configure20,
|
|
78234
78281
|
transformPackageJson: async (original, ctx) => {
|
|
78235
78282
|
let scripts = {
|
|
78236
78283
|
preview: `${npm21} run build && wrangler pages dev`,
|
|
@@ -78279,7 +78326,7 @@ var c3_default39 = config29;
|
|
|
78279
78326
|
var import_node_assert = __toESM(require("node:assert"));
|
|
78280
78327
|
|
|
78281
78328
|
// ../wrangler/package.json
|
|
78282
|
-
var version2 = "3.
|
|
78329
|
+
var version2 = "3.114.0";
|
|
78283
78330
|
|
|
78284
78331
|
// src/git.ts
|
|
78285
78332
|
var offerGit = async (ctx) => {
|
|
@@ -81755,7 +81802,7 @@ var runCli = async (args) => {
|
|
|
81755
81802
|
printBanner(args);
|
|
81756
81803
|
const ctx = await createContext(args);
|
|
81757
81804
|
await create(ctx);
|
|
81758
|
-
await
|
|
81805
|
+
await configure21(ctx);
|
|
81759
81806
|
await deploy(ctx);
|
|
81760
81807
|
printSummary(ctx);
|
|
81761
81808
|
logRaw("");
|
|
@@ -81783,7 +81830,7 @@ var create = async (ctx) => {
|
|
|
81783
81830
|
await rectifyPmMismatch(ctx);
|
|
81784
81831
|
endSection(`Application created`);
|
|
81785
81832
|
};
|
|
81786
|
-
var
|
|
81833
|
+
var configure21 = async (ctx) => {
|
|
81787
81834
|
startSection("Configuring your application for Cloudflare", "Step 2 of 3");
|
|
81788
81835
|
await installWrangler();
|
|
81789
81836
|
await installWorkersTypes(ctx);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-cloudflare",
|
|
3
|
-
"version": "2.40.
|
|
3
|
+
"version": "2.40.3",
|
|
4
4
|
"description": "A CLI for creating and deploying new applications to Cloudflare.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cloudflare",
|
|
@@ -70,12 +70,12 @@
|
|
|
70
70
|
"wrap-ansi": "^9.0.0",
|
|
71
71
|
"xdg-app-paths": "^8.3.0",
|
|
72
72
|
"yargs": "^17.7.2",
|
|
73
|
-
"@cloudflare/cli": "1.1.1",
|
|
74
73
|
"@cloudflare/mock-npm-registry": "0.0.0",
|
|
75
|
-
"@cloudflare/
|
|
74
|
+
"@cloudflare/cli": "1.1.1",
|
|
76
75
|
"@cloudflare/eslint-config-worker": "1.1.0",
|
|
77
|
-
"
|
|
78
|
-
"@cloudflare/
|
|
76
|
+
"@cloudflare/vite-plugin": "0.1.9",
|
|
77
|
+
"@cloudflare/workers-tsconfig": "0.0.0",
|
|
78
|
+
"wrangler": "3.114.0"
|
|
79
79
|
},
|
|
80
80
|
"engines": {
|
|
81
81
|
"node": ">=18.14.1"
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
"cf-typegen": "wrangler types"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@cloudflare/vitest-pool-workers": "^0.
|
|
13
|
+
"@cloudflare/vitest-pool-workers": "^0.7.5",
|
|
14
14
|
"typescript": "^5.5.2",
|
|
15
|
-
"vitest": "~
|
|
15
|
+
"vitest": "~3.0.7",
|
|
16
16
|
"wrangler": "^3.101.0"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
"cf-typegen": "wrangler types"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@cloudflare/vitest-pool-workers": "^0.
|
|
13
|
+
"@cloudflare/vitest-pool-workers": "^0.7.5",
|
|
14
14
|
"typescript": "^5.5.2",
|
|
15
|
-
"vitest": "~
|
|
15
|
+
"vitest": "~3.0.7",
|
|
16
16
|
"wrangler": "^3.101.0"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -1,29 +1,94 @@
|
|
|
1
|
+
import { logRaw } from "@cloudflare/cli";
|
|
2
|
+
import { brandColor, dim } from "@cloudflare/cli/colors";
|
|
3
|
+
import { inputPrompt, spinner } from "@cloudflare/cli/interactive";
|
|
1
4
|
import { runFrameworkGenerator } from "frameworks/index";
|
|
5
|
+
import { readJSON, usesTypescript, writeJSON } from "helpers/files";
|
|
2
6
|
import { detectPackageManager } from "helpers/packageManagers";
|
|
7
|
+
import { installPackages } from "helpers/packages";
|
|
3
8
|
import type { TemplateConfig } from "../../src/templates";
|
|
4
9
|
import type { C3Context } from "types";
|
|
5
10
|
|
|
6
11
|
const { npm } = detectPackageManager();
|
|
7
12
|
|
|
8
13
|
const generate = async (ctx: C3Context) => {
|
|
9
|
-
|
|
14
|
+
const lang =
|
|
15
|
+
ctx.args.lang ??
|
|
16
|
+
(await inputPrompt({
|
|
17
|
+
type: "select",
|
|
18
|
+
question: "Would you like to use TypeScript?",
|
|
19
|
+
label: "Language",
|
|
20
|
+
options: [
|
|
21
|
+
{ label: "TypeScript", value: "ts" },
|
|
22
|
+
{ label: "JavaScript", value: "js" },
|
|
23
|
+
],
|
|
24
|
+
}));
|
|
25
|
+
await runFrameworkGenerator(ctx, [
|
|
26
|
+
ctx.project.name,
|
|
27
|
+
"--router",
|
|
28
|
+
lang === "ts" ? "--ts" : "",
|
|
29
|
+
]);
|
|
30
|
+
logRaw("");
|
|
10
31
|
};
|
|
11
32
|
|
|
33
|
+
const configure = async (ctx: C3Context) => {
|
|
34
|
+
await installPackages(["@cloudflare/vite-plugin"], {
|
|
35
|
+
dev: true,
|
|
36
|
+
startText: "Installing the Cloudflare Vite plugin",
|
|
37
|
+
doneText: `${brandColor(`installed`)} ${dim("@cloudflare/vite-plugin")}`,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
if (usesTypescript(ctx)) {
|
|
41
|
+
updateTsconfigJson();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
function updateTsconfigJson() {
|
|
46
|
+
const s = spinner();
|
|
47
|
+
s.start(`Updating tsconfig.json config`);
|
|
48
|
+
// Add a reference to the extra tsconfig.worker.json file.
|
|
49
|
+
// ```
|
|
50
|
+
// "references": [ ..., { path: "./tsconfig.worker.json" } ]
|
|
51
|
+
// ```
|
|
52
|
+
const tsconfig = readJSON("tsconfig.json") as { references: object[] };
|
|
53
|
+
if (tsconfig && typeof tsconfig === "object") {
|
|
54
|
+
tsconfig.references ??= [];
|
|
55
|
+
tsconfig.references.push({ path: "./tsconfig.worker.json" });
|
|
56
|
+
}
|
|
57
|
+
writeJSON("tsconfig.json", tsconfig);
|
|
58
|
+
s.stop(`${brandColor(`updated`)} ${dim(`\`tsconfig.json\``)}`);
|
|
59
|
+
}
|
|
60
|
+
|
|
12
61
|
const config: TemplateConfig = {
|
|
13
62
|
configVersion: 1,
|
|
14
63
|
id: "vue",
|
|
15
64
|
frameworkCli: "create-vue",
|
|
16
65
|
platform: "workers",
|
|
17
66
|
displayName: "Vue",
|
|
67
|
+
path: "templates-experimental/vue",
|
|
18
68
|
copyFiles: {
|
|
19
|
-
|
|
69
|
+
async selectVariant(ctx) {
|
|
70
|
+
// Note: this `selectVariant` function should not be needed
|
|
71
|
+
// this is just a quick workaround until
|
|
72
|
+
// https://github.com/cloudflare/workers-sdk/issues/7495
|
|
73
|
+
// is resolved
|
|
74
|
+
return usesTypescript(ctx) ? "ts" : "js";
|
|
75
|
+
},
|
|
76
|
+
variants: {
|
|
77
|
+
ts: {
|
|
78
|
+
path: "./ts",
|
|
79
|
+
},
|
|
80
|
+
js: {
|
|
81
|
+
path: "./js",
|
|
82
|
+
},
|
|
83
|
+
},
|
|
20
84
|
},
|
|
21
|
-
|
|
85
|
+
configure,
|
|
22
86
|
generate,
|
|
23
|
-
transformPackageJson: async () => ({
|
|
87
|
+
transformPackageJson: async (_, ctx) => ({
|
|
24
88
|
scripts: {
|
|
25
89
|
deploy: `${npm} run build && wrangler deploy`,
|
|
26
90
|
preview: `${npm} run build && wrangler dev`,
|
|
91
|
+
...(usesTypescript(ctx) && { "cf-typegen": `wrangler types` }),
|
|
27
92
|
},
|
|
28
93
|
}),
|
|
29
94
|
devScript: "dev",
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { RouterLink, RouterView } from 'vue-router'
|
|
3
|
+
import HelloWorld from './components/HelloWorld.vue'
|
|
4
|
+
import { ref } from 'vue'
|
|
5
|
+
|
|
6
|
+
const name = ref('Unknown')
|
|
7
|
+
|
|
8
|
+
const getName = async () => {
|
|
9
|
+
const res = await fetch('/api/')
|
|
10
|
+
const data = await res.json()
|
|
11
|
+
name.value = data.name
|
|
12
|
+
}
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<header>
|
|
17
|
+
<img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
|
|
18
|
+
|
|
19
|
+
<div class="wrapper">
|
|
20
|
+
<HelloWorld msg="You did it!" />
|
|
21
|
+
<button class="green" @click="getName" aria-label="get name">
|
|
22
|
+
Name from API is: {{ name }}
|
|
23
|
+
</button>
|
|
24
|
+
<p>Edit <code>server/index.js</code> to change what the API gets</p>
|
|
25
|
+
<nav>
|
|
26
|
+
<RouterLink to="/">Home</RouterLink>
|
|
27
|
+
<RouterLink to="/about">About</RouterLink>
|
|
28
|
+
</nav>
|
|
29
|
+
</div>
|
|
30
|
+
</header>
|
|
31
|
+
|
|
32
|
+
<RouterView />
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<style scoped>
|
|
36
|
+
header {
|
|
37
|
+
line-height: 1.5;
|
|
38
|
+
max-height: 100vh;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.logo {
|
|
42
|
+
display: block;
|
|
43
|
+
margin: 0 auto 2rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
nav {
|
|
47
|
+
width: 100%;
|
|
48
|
+
font-size: 12px;
|
|
49
|
+
text-align: center;
|
|
50
|
+
margin-top: 2rem;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
nav a.router-link-exact-active {
|
|
54
|
+
color: var(--color-text);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
nav a.router-link-exact-active:hover {
|
|
58
|
+
background-color: transparent;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
nav a {
|
|
62
|
+
display: inline-block;
|
|
63
|
+
padding: 0 1rem;
|
|
64
|
+
border-left: 1px solid var(--color-border);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
nav a:first-of-type {
|
|
68
|
+
border: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
button {
|
|
72
|
+
background-color: hsla(160, 100%, 37%, 1);
|
|
73
|
+
color: var(--color-background);
|
|
74
|
+
border: 0;
|
|
75
|
+
padding: 0.5rem 1rem;
|
|
76
|
+
border-radius: 0.25rem;
|
|
77
|
+
cursor: pointer;
|
|
78
|
+
margin: 1rem 0 0.5rem 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@media (min-width: 1024px) {
|
|
82
|
+
header {
|
|
83
|
+
display: flex;
|
|
84
|
+
place-items: center;
|
|
85
|
+
padding-right: calc(var(--section-gap) / 2);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.logo {
|
|
89
|
+
margin: 0 2rem 0 0;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
header .wrapper {
|
|
93
|
+
display: flex;
|
|
94
|
+
place-items: flex-start;
|
|
95
|
+
flex-wrap: wrap;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
nav {
|
|
99
|
+
text-align: left;
|
|
100
|
+
margin-left: -1rem;
|
|
101
|
+
font-size: 1rem;
|
|
102
|
+
|
|
103
|
+
padding: 1rem 0;
|
|
104
|
+
margin-top: 1rem;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
</style>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
defineProps({
|
|
3
|
+
msg: {
|
|
4
|
+
type: String,
|
|
5
|
+
required: true,
|
|
6
|
+
},
|
|
7
|
+
})
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div class="greetings">
|
|
12
|
+
<h1 class="green">{{ msg }}</h1>
|
|
13
|
+
<h3>
|
|
14
|
+
You’ve successfully created a project with
|
|
15
|
+
<a href="https://vite.dev/" target="_blank" rel="noopener">Vite</a> +
|
|
16
|
+
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a> +
|
|
17
|
+
<a href="https://developers.cloudflare.com/workers/" target="_blank" rel="noopener"
|
|
18
|
+
>Cloudflare Workers</a
|
|
19
|
+
>. What's next?
|
|
20
|
+
</h3>
|
|
21
|
+
</div>
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<style scoped>
|
|
25
|
+
h1 {
|
|
26
|
+
font-weight: 500;
|
|
27
|
+
font-size: 2.6rem;
|
|
28
|
+
position: relative;
|
|
29
|
+
top: -10px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
h3 {
|
|
33
|
+
font-size: 1.2rem;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.greetings h1,
|
|
37
|
+
.greetings h3 {
|
|
38
|
+
text-align: center;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@media (min-width: 1024px) {
|
|
42
|
+
.greetings h1,
|
|
43
|
+
.greetings h3 {
|
|
44
|
+
text-align: left;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { fileURLToPath, URL } from 'node:url'
|
|
2
|
+
|
|
3
|
+
import { defineConfig } from 'vite'
|
|
4
|
+
import vue from '@vitejs/plugin-vue'
|
|
5
|
+
import vueDevTools from 'vite-plugin-vue-devtools'
|
|
6
|
+
|
|
7
|
+
import { cloudflare } from "@cloudflare/vite-plugin"
|
|
8
|
+
|
|
9
|
+
// https://vite.dev/config/
|
|
10
|
+
export default defineConfig({
|
|
11
|
+
plugins: [
|
|
12
|
+
vue(),
|
|
13
|
+
vueDevTools(),
|
|
14
|
+
cloudflare()
|
|
15
|
+
],
|
|
16
|
+
resolve: {
|
|
17
|
+
alias: {
|
|
18
|
+
'@': fileURLToPath(new URL('./src', import.meta.url))
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
})
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
fetch(request, env) {
|
|
3
|
+
const url = new URL(request.url);
|
|
4
|
+
|
|
5
|
+
if (url.pathname.startsWith("/api/")) {
|
|
6
|
+
return Response.json({
|
|
7
|
+
name: "Cloudflare",
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return env.ASSETS.fetch(request);
|
|
12
|
+
},
|
|
13
|
+
} satisfies ExportedHandler<Env>;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { RouterLink, RouterView } from 'vue-router'
|
|
3
|
+
import HelloWorld from './components/HelloWorld.vue'
|
|
4
|
+
import { ref } from 'vue'
|
|
5
|
+
|
|
6
|
+
const name = ref('Unknown')
|
|
7
|
+
|
|
8
|
+
const getName = async () => {
|
|
9
|
+
const res = await fetch('/api/')
|
|
10
|
+
const data = await res.json()
|
|
11
|
+
name.value = data.name
|
|
12
|
+
}
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<header>
|
|
17
|
+
<img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
|
|
18
|
+
|
|
19
|
+
<div class="wrapper">
|
|
20
|
+
<HelloWorld msg="You did it!" />
|
|
21
|
+
<button class="green" @click="getName" aria-label="get name">
|
|
22
|
+
Name from API is: {{ name }}
|
|
23
|
+
</button>
|
|
24
|
+
<p>Edit <code>server/index.ts</code> to change what the API gets</p>
|
|
25
|
+
<nav>
|
|
26
|
+
<RouterLink to="/">Home</RouterLink>
|
|
27
|
+
<RouterLink to="/about">About</RouterLink>
|
|
28
|
+
</nav>
|
|
29
|
+
</div>
|
|
30
|
+
</header>
|
|
31
|
+
|
|
32
|
+
<RouterView />
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<style scoped>
|
|
36
|
+
header {
|
|
37
|
+
line-height: 1.5;
|
|
38
|
+
max-height: 100vh;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.logo {
|
|
42
|
+
display: block;
|
|
43
|
+
margin: 0 auto 2rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
nav {
|
|
47
|
+
width: 100%;
|
|
48
|
+
font-size: 12px;
|
|
49
|
+
text-align: center;
|
|
50
|
+
margin-top: 2rem;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
nav a.router-link-exact-active {
|
|
54
|
+
color: var(--color-text);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
nav a.router-link-exact-active:hover {
|
|
58
|
+
background-color: transparent;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
nav a {
|
|
62
|
+
display: inline-block;
|
|
63
|
+
padding: 0 1rem;
|
|
64
|
+
border-left: 1px solid var(--color-border);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
nav a:first-of-type {
|
|
68
|
+
border: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
button {
|
|
72
|
+
background-color: hsla(160, 100%, 37%, 1);
|
|
73
|
+
color: var(--color-background);
|
|
74
|
+
border: 0;
|
|
75
|
+
padding: 0.5rem 1rem;
|
|
76
|
+
border-radius: 0.25rem;
|
|
77
|
+
cursor: pointer;
|
|
78
|
+
margin: 1rem 0 0.5rem 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@media (min-width: 1024px) {
|
|
82
|
+
header {
|
|
83
|
+
display: flex;
|
|
84
|
+
place-items: center;
|
|
85
|
+
padding-right: calc(var(--section-gap) / 2);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.logo {
|
|
89
|
+
margin: 0 2rem 0 0;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
header .wrapper {
|
|
93
|
+
display: flex;
|
|
94
|
+
place-items: flex-start;
|
|
95
|
+
flex-wrap: wrap;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
nav {
|
|
99
|
+
text-align: left;
|
|
100
|
+
margin-left: -1rem;
|
|
101
|
+
font-size: 1rem;
|
|
102
|
+
|
|
103
|
+
padding: 1rem 0;
|
|
104
|
+
margin-top: 1rem;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
</style>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
defineProps<{
|
|
3
|
+
msg: string
|
|
4
|
+
}>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<div class="greetings">
|
|
9
|
+
<h1 class="green">{{ msg }}</h1>
|
|
10
|
+
<h3>
|
|
11
|
+
You’ve successfully created a project with
|
|
12
|
+
<a href="https://vite.dev/" target="_blank" rel="noopener">Vite</a> +
|
|
13
|
+
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a> +
|
|
14
|
+
<a href="https://developers.cloudflare.com/workers/" target="_blank" rel="noopener"
|
|
15
|
+
>Cloudflare Workers</a
|
|
16
|
+
>. What's next?
|
|
17
|
+
</h3>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<style scoped>
|
|
22
|
+
h1 {
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
font-size: 2.6rem;
|
|
25
|
+
position: relative;
|
|
26
|
+
top: -10px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
h3 {
|
|
30
|
+
font-size: 1.2rem;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.greetings h1,
|
|
34
|
+
.greetings h3 {
|
|
35
|
+
text-align: center;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@media (min-width: 1024px) {
|
|
39
|
+
.greetings h1,
|
|
40
|
+
.greetings h3 {
|
|
41
|
+
text-align: left;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { fileURLToPath, URL } from 'node:url'
|
|
2
|
+
|
|
3
|
+
import { defineConfig } from 'vite'
|
|
4
|
+
import vue from '@vitejs/plugin-vue'
|
|
5
|
+
import vueDevTools from 'vite-plugin-vue-devtools'
|
|
6
|
+
|
|
7
|
+
import { cloudflare } from "@cloudflare/vite-plugin"
|
|
8
|
+
|
|
9
|
+
// https://vite.dev/config/
|
|
10
|
+
export default defineConfig({
|
|
11
|
+
plugins: [
|
|
12
|
+
vue(),
|
|
13
|
+
vueDevTools(),
|
|
14
|
+
cloudflare()
|
|
15
|
+
],
|
|
16
|
+
resolve: {
|
|
17
|
+
alias: {
|
|
18
|
+
'@': fileURLToPath(new URL('./src', import.meta.url))
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
})
|