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 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.2";
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
- await runFrameworkGenerator(ctx, [ctx.project.name]);
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
- path: "./templates"
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
- path: "templates-experimental/vue",
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 configure9 = async (ctx) => {
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: configure9,
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 configure10 = async (ctx) => {
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: configure10,
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 configure11 = async () => {
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: configure11,
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 configure12 = async (ctx) => {
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: configure12,
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 configure13 = async (ctx) => {
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: configure13,
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 configure14 = async (ctx) => {
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: configure14,
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 configure21(ctx) {
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 configure15 = async (ctx) => {
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: configure15,
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 configure16 = async (ctx) => {
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
- updateTsconfigJson();
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 updateTsconfigJson() {
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: configure16,
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 configure17 = async () => {
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: configure17,
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 configure18 = async (ctx) => {
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: configure18,
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 configure19 = async (ctx) => {
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: configure19,
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.113.0";
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 configure20(ctx);
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 configure20 = async (ctx) => {
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.2",
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/workers-tsconfig": "0.0.0",
74
+ "@cloudflare/cli": "1.1.1",
76
75
  "@cloudflare/eslint-config-worker": "1.1.0",
77
- "wrangler": "3.113.0",
78
- "@cloudflare/vite-plugin": "0.1.9"
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"
@@ -9,8 +9,8 @@
9
9
  "test": "vitest"
10
10
  },
11
11
  "devDependencies": {
12
- "@cloudflare/vitest-pool-workers": "^0.6.4",
12
+ "@cloudflare/vitest-pool-workers": "^0.7.5",
13
13
  "wrangler": "^3.101.0",
14
- "vitest": "~2.1.9"
14
+ "vitest": "~3.0.7"
15
15
  }
16
16
  }
@@ -10,9 +10,9 @@
10
10
  "cf-typegen": "wrangler types"
11
11
  },
12
12
  "devDependencies": {
13
- "@cloudflare/vitest-pool-workers": "^0.6.4",
13
+ "@cloudflare/vitest-pool-workers": "^0.7.5",
14
14
  "typescript": "^5.5.2",
15
- "vitest": "~2.1.9",
15
+ "vitest": "~3.0.7",
16
16
  "wrangler": "^3.101.0"
17
17
  }
18
18
  }
@@ -9,8 +9,8 @@
9
9
  "test": "vitest"
10
10
  },
11
11
  "devDependencies": {
12
- "@cloudflare/vitest-pool-workers": "^0.6.4",
12
+ "@cloudflare/vitest-pool-workers": "^0.7.5",
13
13
  "wrangler": "^3.101.0",
14
- "vitest": "~2.1.9"
14
+ "vitest": "~3.0.7"
15
15
  }
16
16
  }
@@ -10,9 +10,9 @@
10
10
  "cf-typegen": "wrangler types"
11
11
  },
12
12
  "devDependencies": {
13
- "@cloudflare/vitest-pool-workers": "^0.6.4",
13
+ "@cloudflare/vitest-pool-workers": "^0.7.5",
14
14
  "typescript": "^5.5.2",
15
- "vitest": "~2.1.9",
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
- await runFrameworkGenerator(ctx, [ctx.project.name]);
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
- path: "./templates",
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
- path: "templates-experimental/vue",
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,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
+ };
@@ -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,12 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "compatibility_date": "<TBD>",
4
+ "main": "server/index.ts",
5
+ "assets": {
6
+ "not_found_handling": "single-page-application",
7
+ "binding": "ASSETS"
8
+ },
9
+ "observability": {
10
+ "enabled": true
11
+ }
12
+ }
@@ -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,8 @@
1
+ {
2
+ "extends": "./tsconfig.node.json",
3
+ "compilerOptions": {
4
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.worker.tsbuildinfo",
5
+ "types": ["@cloudflare/workers-types/2023-07-01", "./worker-configuration.d.ts","vite/client"],
6
+ },
7
+ "include": ["server"],
8
+ }
@@ -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,6 @@
1
+ // Generated by Wrangler by running `wrangler types`
2
+ // After adding bindings to `wrangler.jsonc`, regenerate this interface via `npm run cf-typegen`
3
+
4
+ interface Env {
5
+ ASSETS: Fetcher;
6
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "compatibility_date": "<TBD>",
4
+ "main": "server/index.ts",
5
+ "assets": {
6
+ "not_found_handling": "single-page-application",
7
+ "binding": "ASSETS"
8
+ },
9
+ "observability": {
10
+ "enabled": true
11
+ }
12
+ }
@@ -1,10 +0,0 @@
1
- {
2
- "name": "<TBD>",
3
- "compatibility_date": "<TBD>",
4
- "assets": {
5
- "directory": "./dist"
6
- },
7
- "observability": {
8
- "enabled": true
9
- }
10
- }