create-cloudflare 0.0.0-e7982641 → 0.0.0-e7c7235fd

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.
Files changed (247) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +51828 -52027
  3. package/dist/tsconfig.tsbuildinfo +1 -0
  4. package/package.json +35 -28
  5. package/templates/analog/c3.ts +135 -0
  6. package/templates/analog/snippets/devBindingsModule.ts +7 -0
  7. package/templates/analog/templates/env.d.ts +13 -0
  8. package/templates/analog/templates/src/dev-bindings.ts +18 -0
  9. package/templates/analog/templates/worker-configuration.d.ts +4 -0
  10. package/templates/analog/templates/wrangler.json +5 -0
  11. package/templates/angular/c3.ts +37 -22
  12. package/templates/angular/templates/src/server.ts +15 -0
  13. package/templates/angular/templates/tools/copy-files.mjs +8 -2
  14. package/templates/astro/c3.ts +28 -51
  15. package/templates/astro/templates/js/wrangler.json +8 -0
  16. package/templates/astro/templates/ts/src/env.d.ts +5 -0
  17. package/templates/astro/templates/ts/worker-configuration.d.ts +4 -0
  18. package/templates/astro/templates/ts/wrangler.json +8 -0
  19. package/templates/common/c3.ts +3 -0
  20. package/templates/common/js/.editorconfig +0 -1
  21. package/templates/common/js/package.json +1 -1
  22. package/templates/common/js/wrangler.json +8 -0
  23. package/templates/common/ts/.editorconfig +0 -1
  24. package/templates/common/ts/package.json +4 -3
  25. package/templates/common/ts/src/ab-test.ts +2 -2
  26. package/templates/common/ts/src/index.ts +5 -2
  27. package/templates/common/ts/src/proxy.ts +2 -2
  28. package/templates/common/ts/src/redirect.ts +2 -2
  29. package/templates/common/ts/tsconfig.json +37 -95
  30. package/templates/common/ts/worker-configuration.d.ts +2 -14
  31. package/templates/common/ts/wrangler.json +8 -0
  32. package/templates/docusaurus/c3.ts +7 -6
  33. package/templates/gatsby/c3.ts +8 -5
  34. package/templates/hello-world/c3.ts +5 -1
  35. package/templates/hello-world/js/.editorconfig +0 -1
  36. package/templates/hello-world/js/package.json +5 -2
  37. package/templates/hello-world/js/test/index.spec.js +20 -0
  38. package/templates/hello-world/js/vitest.config.js +11 -0
  39. package/templates/hello-world/js/wrangler.json +8 -0
  40. package/templates/hello-world/py/__dot__gitignore +68 -0
  41. package/templates/hello-world/py/package.json +13 -0
  42. package/templates/hello-world/py/src/entry.py +4 -0
  43. package/templates/hello-world/py/wrangler.json +9 -0
  44. package/templates/hello-world/ts/.editorconfig +0 -1
  45. package/templates/hello-world/ts/package.json +7 -3
  46. package/templates/hello-world/ts/src/index.ts +5 -19
  47. package/templates/hello-world/ts/test/index.spec.ts +25 -0
  48. package/templates/hello-world/ts/test/tsconfig.json +8 -0
  49. package/templates/hello-world/ts/tsconfig.json +39 -96
  50. package/templates/hello-world/ts/vitest.config.mts +11 -0
  51. package/templates/hello-world/ts/worker-configuration.d.ts +4 -0
  52. package/templates/hello-world/ts/wrangler.json +8 -0
  53. package/templates/hello-world-durable-object/c3.ts +3 -1
  54. package/templates/hello-world-durable-object/js/.editorconfig +0 -1
  55. package/templates/hello-world-durable-object/js/package.json +1 -1
  56. package/templates/hello-world-durable-object/js/src/index.js +21 -17
  57. package/templates/hello-world-durable-object/js/wrangler.json +24 -0
  58. package/templates/hello-world-durable-object/ts/.editorconfig +0 -1
  59. package/templates/hello-world-durable-object/ts/package.json +4 -4
  60. package/templates/hello-world-durable-object/ts/src/index.ts +26 -39
  61. package/templates/hello-world-durable-object/ts/tsconfig.json +36 -95
  62. package/templates/hello-world-durable-object/ts/worker-configuration.d.ts +5 -0
  63. package/templates/hello-world-durable-object/ts/wrangler.json +24 -0
  64. package/templates/hono/c3.ts +45 -1
  65. package/templates/hono/snippets/appDeclaration.ts +1 -0
  66. package/templates/hono/templates/worker-configuration.d.ts +4 -0
  67. package/templates/hono/templates/wrangler.json +8 -0
  68. package/templates/next/README.md +15 -6
  69. package/templates/next/app/js/app/api/hello/route.js +5 -5
  70. package/templates/next/app/ts/app/api/hello/route.ts +5 -6
  71. package/templates/next/c3.ts +33 -39
  72. package/templates/next/env.d.ts +3 -5
  73. package/templates/next/pages/js/pages/api/hello.js +1 -1
  74. package/templates/next/pages/ts/pages/api/hello.ts +1 -1
  75. package/templates/next/wrangler.json +8 -0
  76. package/templates/nuxt/c3.ts +55 -21
  77. package/templates/nuxt/templates/env.d.ts +14 -0
  78. package/templates/nuxt/templates/worker-configuration.d.ts +4 -0
  79. package/templates/nuxt/templates/wrangler.json +8 -0
  80. package/templates/openapi/c3.ts +1 -0
  81. package/templates/openapi/ts/README.md +3 -3
  82. package/templates/openapi/ts/package.json +7 -4
  83. package/templates/openapi/ts/src/endpoints/taskCreate.ts +26 -16
  84. package/templates/openapi/ts/src/endpoints/taskDelete.ts +20 -19
  85. package/templates/openapi/ts/src/endpoints/taskFetch.ts +30 -23
  86. package/templates/openapi/ts/src/endpoints/taskList.ts +27 -24
  87. package/templates/openapi/ts/src/index.ts +14 -20
  88. package/templates/openapi/ts/src/types.ts +9 -8
  89. package/templates/openapi/ts/worker-configuration.d.ts +4 -0
  90. package/templates/openapi/ts/wrangler.json +8 -0
  91. package/templates/pre-existing/c3.ts +37 -18
  92. package/templates/pre-existing/js/.editorconfig +0 -1
  93. package/templates/pre-existing/js/package.json +1 -1
  94. package/templates/pre-existing/js/wrangler.json +5 -0
  95. package/templates/queues/c3.ts +2 -0
  96. package/templates/queues/js/.editorconfig +0 -1
  97. package/templates/queues/js/package.json +1 -1
  98. package/templates/queues/js/wrangler.json +21 -0
  99. package/templates/queues/ts/.editorconfig +0 -1
  100. package/templates/queues/ts/package.json +4 -3
  101. package/templates/queues/ts/src/index.ts +6 -8
  102. package/templates/queues/ts/tsconfig.json +36 -95
  103. package/templates/queues/ts/worker-configuration.d.ts +5 -0
  104. package/templates/queues/ts/wrangler.json +21 -0
  105. package/templates/qwik/c3.ts +16 -14
  106. package/templates/qwik/templates/worker-configuration.d.ts +4 -3
  107. package/templates/qwik/templates/wrangler.json +8 -0
  108. package/templates/react/c3.ts +38 -6
  109. package/templates/remix/c3.ts +7 -7
  110. package/templates/remix/templates/worker-configuration.d.ts +4 -3
  111. package/templates/remix/templates/wrangler.json +5 -0
  112. package/templates/scheduled/c3.ts +2 -0
  113. package/templates/scheduled/js/.editorconfig +0 -1
  114. package/templates/scheduled/js/package.json +3 -3
  115. package/templates/scheduled/js/src/index.js +9 -2
  116. package/templates/scheduled/js/wrangler.json +13 -0
  117. package/templates/scheduled/ts/.editorconfig +0 -1
  118. package/templates/scheduled/ts/package.json +5 -4
  119. package/templates/scheduled/ts/src/index.ts +8 -25
  120. package/templates/scheduled/ts/tsconfig.json +36 -95
  121. package/templates/scheduled/ts/worker-configuration.d.ts +4 -0
  122. package/templates/scheduled/ts/wrangler.json +13 -0
  123. package/templates/solid/c3.ts +62 -14
  124. package/templates/solid/templates/wrangler.json +8 -0
  125. package/templates/svelte/c3.ts +46 -17
  126. package/templates/svelte/templates/wrangler.json +5 -0
  127. package/templates/vue/c3.ts +8 -6
  128. package/templates-experimental/angular/c3.ts +112 -0
  129. package/templates-experimental/angular/templates/src/server.ts +15 -0
  130. package/templates-experimental/angular/templates/wrangler.json +12 -0
  131. package/templates-experimental/astro/c3.ts +98 -0
  132. package/templates-experimental/astro/templates/js/public/.assetsignore +4 -0
  133. package/templates-experimental/astro/templates/js/wrangler.json +15 -0
  134. package/templates-experimental/astro/templates/ts/public/.assetsignore +4 -0
  135. package/templates-experimental/astro/templates/ts/src/env.d.ts +5 -0
  136. package/templates-experimental/astro/templates/ts/worker-configuration.d.ts +4 -0
  137. package/templates-experimental/astro/templates/ts/wrangler.json +15 -0
  138. package/templates-experimental/docusaurus/c3.ts +32 -0
  139. package/templates-experimental/docusaurus/templates/wrangler.json +10 -0
  140. package/templates-experimental/gatsby/c3.ts +53 -0
  141. package/templates-experimental/gatsby/templates/wrangler.json +10 -0
  142. package/templates-experimental/hello-world-assets-only/c3.ts +15 -0
  143. package/templates-experimental/hello-world-assets-only/templates/package.json +13 -0
  144. package/templates-experimental/hello-world-assets-only/templates/public/index.html +11 -0
  145. package/templates-experimental/hello-world-assets-only/templates/wrangler.json +10 -0
  146. package/templates-experimental/hello-world-durable-object-with-assets/c3.ts +23 -0
  147. package/templates-experimental/hello-world-durable-object-with-assets/js/.editorconfig +12 -0
  148. package/templates-experimental/hello-world-durable-object-with-assets/js/.prettierrc +6 -0
  149. package/templates-experimental/hello-world-durable-object-with-assets/js/__dot__gitignore +172 -0
  150. package/templates-experimental/hello-world-durable-object-with-assets/js/package.json +13 -0
  151. package/templates-experimental/hello-world-durable-object-with-assets/js/public/index.html +19 -0
  152. package/templates-experimental/hello-world-durable-object-with-assets/js/src/index.js +69 -0
  153. package/templates-experimental/hello-world-durable-object-with-assets/js/wrangler.json +28 -0
  154. package/templates-experimental/hello-world-durable-object-with-assets/ts/.editorconfig +12 -0
  155. package/templates-experimental/hello-world-durable-object-with-assets/ts/.prettierrc +6 -0
  156. package/templates-experimental/hello-world-durable-object-with-assets/ts/__dot__gitignore +172 -0
  157. package/templates-experimental/hello-world-durable-object-with-assets/ts/package.json +15 -0
  158. package/templates-experimental/hello-world-durable-object-with-assets/ts/public/index.html +19 -0
  159. package/templates-experimental/hello-world-durable-object-with-assets/ts/src/index.ts +66 -0
  160. package/templates-experimental/hello-world-durable-object-with-assets/ts/tsconfig.json +42 -0
  161. package/templates-experimental/hello-world-durable-object-with-assets/ts/worker-configuration.d.ts +5 -0
  162. package/templates-experimental/hello-world-durable-object-with-assets/ts/wrangler.json +28 -0
  163. package/templates-experimental/hello-world-with-assets/c3.ts +22 -0
  164. package/templates-experimental/hello-world-with-assets/js/.editorconfig +12 -0
  165. package/templates-experimental/hello-world-with-assets/js/.prettierrc +6 -0
  166. package/templates-experimental/hello-world-with-assets/js/__dot__gitignore +172 -0
  167. package/templates-experimental/hello-world-with-assets/js/package.json +16 -0
  168. package/templates-experimental/hello-world-with-assets/js/public/index.html +31 -0
  169. package/templates-experimental/hello-world-with-assets/js/src/index.js +23 -0
  170. package/templates-experimental/hello-world-with-assets/js/test/index.spec.js +41 -0
  171. package/templates-experimental/hello-world-with-assets/js/vitest.config.js +11 -0
  172. package/templates-experimental/hello-world-with-assets/js/wrangler.json +15 -0
  173. package/templates-experimental/hello-world-with-assets/py/__dot__gitignore +68 -0
  174. package/templates-experimental/hello-world-with-assets/py/package.json +13 -0
  175. package/templates-experimental/hello-world-with-assets/py/public/index.html +31 -0
  176. package/templates-experimental/hello-world-with-assets/py/src/entry.py +9 -0
  177. package/templates-experimental/hello-world-with-assets/py/wrangler.json +15 -0
  178. package/templates-experimental/hello-world-with-assets/ts/.editorconfig +12 -0
  179. package/templates-experimental/hello-world-with-assets/ts/.prettierrc +6 -0
  180. package/templates-experimental/hello-world-with-assets/ts/__dot__gitignore +172 -0
  181. package/templates-experimental/hello-world-with-assets/ts/package.json +18 -0
  182. package/templates-experimental/hello-world-with-assets/ts/public/index.html +31 -0
  183. package/templates-experimental/hello-world-with-assets/ts/src/index.ts +26 -0
  184. package/templates-experimental/hello-world-with-assets/ts/test/index.spec.ts +41 -0
  185. package/templates-experimental/hello-world-with-assets/ts/test/tsconfig.json +8 -0
  186. package/templates-experimental/hello-world-with-assets/ts/tsconfig.json +44 -0
  187. package/templates-experimental/hello-world-with-assets/ts/vitest.config.mts +11 -0
  188. package/templates-experimental/hello-world-with-assets/ts/worker-configuration.d.ts +4 -0
  189. package/templates-experimental/hello-world-with-assets/ts/wrangler.json +15 -0
  190. package/templates-experimental/hono/c3.ts +43 -0
  191. package/templates-experimental/hono/templates/public/index.html +19 -0
  192. package/templates-experimental/hono/templates/src/index.ts +9 -0
  193. package/templates-experimental/hono/templates/worker-configuration.d.ts +4 -0
  194. package/templates-experimental/hono/templates/wrangler.json +9 -0
  195. package/templates-experimental/next/c3.ts +59 -0
  196. package/templates-experimental/next/templates/.dev.vars +2 -0
  197. package/templates-experimental/next/templates/__dot__gitignore +39 -0
  198. package/templates-experimental/next/templates/cloudflare-env.d.ts +5 -0
  199. package/templates-experimental/next/templates/open-next.config.ts +28 -0
  200. package/templates-experimental/next/templates/wrangler.json +13 -0
  201. package/templates-experimental/nuxt/c3.ts +135 -0
  202. package/templates-experimental/nuxt/templates/env.d.ts +14 -0
  203. package/templates-experimental/nuxt/templates/worker-configuration.d.ts +4 -0
  204. package/templates-experimental/nuxt/templates/wrangler.json +12 -0
  205. package/templates-experimental/qwik/c3.ts +153 -0
  206. package/templates-experimental/qwik/snippets/getPlatformProxy.ts +6 -0
  207. package/templates-experimental/qwik/templates/public/.assetsignore +4 -0
  208. package/templates-experimental/qwik/templates/worker-configuration.d.ts +4 -0
  209. package/templates-experimental/qwik/templates/wrangler.json +15 -0
  210. package/templates-experimental/remix/c3.ts +52 -0
  211. package/templates-experimental/remix/templates/public/.assetsignore +0 -0
  212. package/templates-experimental/remix/templates/worker-configuration.d.ts +4 -0
  213. package/templates-experimental/remix/templates/wrangler.toml +11 -0
  214. package/templates-experimental/solid/c3.ts +94 -0
  215. package/templates-experimental/solid/templates/wrangler.json +15 -0
  216. package/templates-experimental/svelte/c3.ts +129 -0
  217. package/templates-experimental/svelte/templates/static/.assetsignore +4 -0
  218. package/templates-experimental/svelte/templates/wrangler.json +12 -0
  219. package/templates-experimental/vue/c3.ts +33 -0
  220. package/templates-experimental/vue/templates/wrangler.json +10 -0
  221. package/templates/angular/templates/server.ts +0 -34
  222. package/templates/angular/templates/tools/alter-polyfills.mjs +0 -27
  223. package/templates/angular/templates/tools/paths.mjs +0 -9
  224. package/templates/astro/snippets/runtimeDeclaration.ts +0 -4
  225. package/templates/astro/templates/wrangler.toml +0 -50
  226. package/templates/common/js/wrangler.toml +0 -51
  227. package/templates/common/ts/wrangler.toml +0 -51
  228. package/templates/hello-world/js/wrangler.toml +0 -51
  229. package/templates/hello-world/ts/wrangler.toml +0 -51
  230. package/templates/hello-world-durable-object/js/wrangler.toml +0 -51
  231. package/templates/hello-world-durable-object/ts/wrangler.toml +0 -51
  232. package/templates/next/wrangler.toml +0 -57
  233. package/templates/nuxt/templates/wrangler.toml +0 -50
  234. package/templates/openapi/ts/wrangler.toml +0 -3
  235. package/templates/pre-existing/js/wrangler.toml +0 -3
  236. package/templates/queues/js/wrangler.toml +0 -19
  237. package/templates/queues/ts/wrangler.toml +0 -19
  238. package/templates/qwik/templates/wrangler.toml +0 -50
  239. package/templates/remix/templates/wrangler.toml +0 -50
  240. package/templates/scheduled/js/wrangler.toml +0 -9
  241. package/templates/scheduled/ts/wrangler.toml +0 -9
  242. package/templates/solid/js/vite.config.js +0 -12
  243. package/templates/solid/ts/vite.config.ts +0 -12
  244. package/templates/svelte/js/src/hooks.server.js +0 -25
  245. package/templates/svelte/js/wrangler.toml +0 -50
  246. package/templates/svelte/ts/src/hooks.server.ts +0 -24
  247. package/templates/svelte/ts/wrangler.toml +0 -50
@@ -1,7 +1,10 @@
1
- import { logRaw } from "@cloudflare/cli";
2
- import { runFrameworkGenerator } from "helpers/command";
3
- import { compatDateFlag } from "helpers/files";
4
- import { detectPackageManager } from "helpers/packages";
1
+ import { logRaw, updateStatus } from "@cloudflare/cli";
2
+ import { blue } from "@cloudflare/cli/colors";
3
+ import { runFrameworkGenerator } from "frameworks/index";
4
+ import { mergeObjectProperties, transformFile } from "helpers/codemod";
5
+ import { usesTypescript } from "helpers/files";
6
+ import { detectPackageManager } from "helpers/packageManagers";
7
+ import * as recast from "recast";
5
8
  import type { TemplateConfig } from "../../src/templates";
6
9
  import type { C3Context } from "types";
7
10
 
@@ -9,31 +12,76 @@ const { npm } = detectPackageManager();
9
12
 
10
13
  const generate = async (ctx: C3Context) => {
11
14
  // Run the create-solid command
12
- await runFrameworkGenerator(ctx, [ctx.project.name]);
15
+ // -s flag forces solid-start
16
+ await runFrameworkGenerator(ctx, ["-p", ctx.project.name, "-s"]);
13
17
 
14
18
  logRaw("");
15
19
  };
16
20
 
21
+ const configure = async (ctx: C3Context) => {
22
+ usesTypescript(ctx);
23
+ const filePath = `app.config.${usesTypescript(ctx) ? "ts" : "js"}`;
24
+
25
+ updateStatus(`Updating configuration in ${blue(filePath)}`);
26
+
27
+ transformFile(filePath, {
28
+ visitCallExpression: function (n) {
29
+ const callee = n.node.callee as recast.types.namedTypes.Identifier;
30
+ if (callee.name !== "defineConfig") {
31
+ return this.traverse(n);
32
+ }
33
+
34
+ const b = recast.types.builders;
35
+
36
+ mergeObjectProperties(
37
+ n.node.arguments[0] as recast.types.namedTypes.ObjectExpression,
38
+ [
39
+ b.objectProperty(
40
+ b.identifier("server"),
41
+ b.objectExpression([
42
+ b.objectProperty(
43
+ b.identifier("preset"),
44
+ b.stringLiteral("cloudflare-pages"),
45
+ ),
46
+ b.objectProperty(
47
+ b.identifier("rollupConfig"),
48
+ b.objectExpression([
49
+ b.objectProperty(
50
+ b.identifier("external"),
51
+ b.arrayExpression([b.stringLiteral("node:async_hooks")]),
52
+ ),
53
+ ]),
54
+ ),
55
+ ]),
56
+ ),
57
+ ],
58
+ );
59
+
60
+ return false;
61
+ },
62
+ });
63
+ };
64
+
17
65
  const config: TemplateConfig = {
18
66
  configVersion: 1,
19
67
  id: "solid",
20
- displayName: "Solid",
68
+ frameworkCli: "create-solid",
69
+ displayName: "SolidStart",
21
70
  platform: "pages",
22
71
  copyFiles: {
23
- variants: {
24
- js: { path: "./js" },
25
- ts: { path: "./ts" },
26
- },
72
+ path: "./templates",
27
73
  },
28
74
  generate,
75
+ configure,
29
76
  transformPackageJson: async () => ({
30
77
  scripts: {
31
- "pages:preview": `${npm} run build && npx wrangler pages dev dist ${await compatDateFlag()} --compatibility-flag nodejs_compat`,
32
- "pages:deploy": `${npm} run build && wrangler pages deploy ./dist`,
78
+ preview: `${npm} run build && npx wrangler pages dev`,
79
+ deploy: `${npm} run build && wrangler pages deploy`,
33
80
  },
34
81
  }),
35
- devScript: "dev",
36
- previewScript: "pages:preview",
37
82
  compatibilityFlags: ["nodejs_compat"],
83
+ devScript: "dev",
84
+ deployScript: "deploy",
85
+ previewScript: "preview",
38
86
  };
39
87
  export default config;
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "compatibility_date": "<TBD>",
4
+ "compatibility_flags": [
5
+ "nodejs_compat"
6
+ ],
7
+ "pages_build_output_dir": "./dist"
8
+ }
@@ -1,10 +1,12 @@
1
+ import { existsSync } from "node:fs";
1
2
  import { platform } from "node:os";
2
3
  import { logRaw, updateStatus } from "@cloudflare/cli";
3
4
  import { blue, brandColor, dim } from "@cloudflare/cli/colors";
5
+ import { runFrameworkGenerator } from "frameworks/index";
4
6
  import { transformFile } from "helpers/codemod";
5
- import { installPackages, runFrameworkGenerator } from "helpers/command";
6
7
  import { usesTypescript } from "helpers/files";
7
- import { detectPackageManager } from "helpers/packages";
8
+ import { detectPackageManager } from "helpers/packageManagers";
9
+ import { installPackages } from "helpers/packages";
8
10
  import * as recast from "recast";
9
11
  import type { TemplateConfig } from "../../src/templates";
10
12
  import type { C3Context, PackageJson } from "types";
@@ -12,7 +14,7 @@ import type { C3Context, PackageJson } from "types";
12
14
  const { npm } = detectPackageManager();
13
15
 
14
16
  const generate = async (ctx: C3Context) => {
15
- await runFrameworkGenerator(ctx, [ctx.project.name]);
17
+ await runFrameworkGenerator(ctx, ["create", ctx.project.name]);
16
18
 
17
19
  logRaw("");
18
20
  };
@@ -27,6 +29,7 @@ const configure = async (ctx: C3Context) => {
27
29
  });
28
30
 
29
31
  updateSvelteConfig();
32
+ updatePlaywrightConfig(usesTypescript(ctx));
30
33
  updateTypeDefinitions(ctx);
31
34
  };
32
35
 
@@ -48,6 +51,34 @@ const updateSvelteConfig = () => {
48
51
  });
49
52
  };
50
53
 
54
+ const updatePlaywrightConfig = (shouldUseTypescript: boolean) => {
55
+ const filePath = `playwright.config.${shouldUseTypescript ? "ts" : "js"}`;
56
+ if (!existsSync(filePath)) {
57
+ return;
58
+ }
59
+
60
+ updateStatus(`Changing webServer port in ${blue(filePath)}`);
61
+
62
+ transformFile(filePath, {
63
+ visitObjectExpression: function (n) {
64
+ const portProp = n.node.properties.find((prop) => {
65
+ if (!("key" in prop) || !("name" in prop.key)) {
66
+ return false;
67
+ }
68
+
69
+ return prop.key.name === "port";
70
+ });
71
+
72
+ if (!portProp || !("value" in portProp) || !("value" in portProp.value)) {
73
+ return this.traverse(n);
74
+ }
75
+
76
+ portProp.value.value = 8788;
77
+ return false;
78
+ },
79
+ });
80
+ };
81
+
51
82
  const updateTypeDefinitions = (ctx: C3Context) => {
52
83
  if (!usesTypescript(ctx)) {
53
84
  return;
@@ -68,21 +99,21 @@ const updateTypeDefinitions = (ctx: C3Context) => {
68
99
  b.tsInterfaceBody([
69
100
  b.tsPropertySignature(
70
101
  b.identifier("env"),
71
- b.tsTypeAnnotation(b.tsTypeReference(b.identifier("Env")))
102
+ b.tsTypeAnnotation(b.tsTypeReference(b.identifier("Env"))),
72
103
  ),
73
104
  b.tsPropertySignature(
74
105
  b.identifier("cf"),
75
106
  b.tsTypeAnnotation(
76
- b.tsTypeReference(b.identifier("CfProperties"))
77
- )
107
+ b.tsTypeReference(b.identifier("CfProperties")),
108
+ ),
78
109
  ),
79
110
  b.tsPropertySignature(
80
111
  b.identifier("ctx"),
81
112
  b.tsTypeAnnotation(
82
- b.tsTypeReference(b.identifier("ExecutionContext"))
83
- )
113
+ b.tsTypeReference(b.identifier("ExecutionContext")),
114
+ ),
84
115
  ),
85
- ])
116
+ ]),
86
117
  );
87
118
 
88
119
  moduleBlock.body.unshift(platformInterface);
@@ -96,27 +127,25 @@ const updateTypeDefinitions = (ctx: C3Context) => {
96
127
  const config: TemplateConfig = {
97
128
  configVersion: 1,
98
129
  id: "svelte",
99
- displayName: "Svelte",
130
+ frameworkCli: "sv",
131
+ displayName: "SvelteKit",
100
132
  platform: "pages",
101
133
  copyFiles: {
102
- variants: {
103
- js: { path: "./js" },
104
- ts: { path: "./ts" },
105
- },
134
+ path: "./templates",
106
135
  },
107
136
  generate,
108
137
  configure,
109
138
  transformPackageJson: async (original: PackageJson, ctx: C3Context) => {
110
139
  let scripts: Record<string, string> = {
111
- preview: `${npm} run build && wrangler pages dev .svelte-kit/cloudflare`,
112
- deploy: `${npm} run build && wrangler pages deploy .svelte-kit/cloudflare`,
140
+ preview: `${npm} run build && wrangler pages dev`,
141
+ deploy: `${npm} run build && wrangler pages deploy`,
113
142
  };
114
143
 
115
144
  if (usesTypescript(ctx)) {
116
145
  const mv = platform() === "win32" ? "move" : "mv";
117
146
  scripts = {
118
147
  ...scripts,
119
- "build-cf-types": `wrangler types && ${mv} worker-configuration.d.ts src/`,
148
+ "cf-typegen": `wrangler types && ${mv} worker-configuration.d.ts src/`,
120
149
  };
121
150
  }
122
151
 
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "compatibility_date": "<TBD>",
4
+ "pages_build_output_dir": ".svelte-kit/cloudflare"
5
+ }
@@ -1,6 +1,5 @@
1
- import { runFrameworkGenerator } from "helpers/command";
2
- import { compatDateFlag } from "helpers/files";
3
- import { detectPackageManager } from "helpers/packages";
1
+ import { runFrameworkGenerator } from "frameworks/index";
2
+ import { detectPackageManager } from "helpers/packageManagers";
4
3
  import type { TemplateConfig } from "../../src/templates";
5
4
  import type { C3Context } from "types";
6
5
 
@@ -13,15 +12,18 @@ const generate = async (ctx: C3Context) => {
13
12
  const config: TemplateConfig = {
14
13
  configVersion: 1,
15
14
  id: "vue",
15
+ frameworkCli: "create-vue",
16
16
  displayName: "Vue",
17
17
  platform: "pages",
18
18
  generate,
19
19
  transformPackageJson: async () => ({
20
20
  scripts: {
21
- "pages:dev": `wrangler pages dev ${await compatDateFlag()} --proxy 5173 -- ${npm} run dev`,
22
- "pages:deploy": `${npm} run build && wrangler pages deploy ./dist`,
21
+ deploy: `${npm} run build && wrangler pages deploy ./dist`,
22
+ preview: `${npm} run build && wrangler pages dev ./dist`,
23
23
  },
24
24
  }),
25
- testFlags: ["--ts"],
25
+ devScript: "dev",
26
+ deployScript: "deploy",
27
+ previewScript: "preview",
26
28
  };
27
29
  export default config;
@@ -0,0 +1,112 @@
1
+ import { resolve } from "node:path";
2
+ import { logRaw } from "@cloudflare/cli";
3
+ import { brandColor, dim } from "@cloudflare/cli/colors";
4
+ import { spinner } from "@cloudflare/cli/interactive";
5
+ import { runFrameworkGenerator } from "frameworks/index";
6
+ import { readFile, readJSON, writeFile } from "helpers/files";
7
+ import { detectPackageManager } from "helpers/packageManagers";
8
+ import { installPackages } from "helpers/packages";
9
+ import type { TemplateConfig } from "../../src/templates";
10
+ import type { C3Context } from "types";
11
+
12
+ const { npm } = detectPackageManager();
13
+
14
+ const generate = async (ctx: C3Context) => {
15
+ await runFrameworkGenerator(ctx, [
16
+ ctx.project.name,
17
+ "--ssr",
18
+ "--server-routing" /** Dev Preview API */,
19
+ ]);
20
+ logRaw("");
21
+ };
22
+
23
+ const configure = async (ctx: C3Context) => {
24
+ updateAngularJson(ctx);
25
+ await updateAppCode();
26
+ await installCFWorker();
27
+ };
28
+
29
+ async function installCFWorker() {
30
+ await installPackages(["xhr2"], {
31
+ dev: true,
32
+ startText: "Installing additional dependencies",
33
+ doneText: `${brandColor("installed")} ${dim(`via \`${npm} install\``)}`,
34
+ });
35
+ }
36
+ async function updateAppCode() {
37
+ const s = spinner();
38
+ s.start(`Updating application code`);
39
+
40
+ // Update an app config file to:
41
+ // - add the `provideHttpClient(withFetch())` call to enable `fetch` usage in `HttpClient`
42
+ const appConfigPath = "src/app/app.config.ts";
43
+ const appConfig = readFile(resolve(appConfigPath));
44
+ const newAppConfig =
45
+ "import { provideHttpClient, withFetch } from '@angular/common/http';\n" +
46
+ appConfig.replace(
47
+ "providers: [",
48
+ "providers: [provideHttpClient(withFetch()), ",
49
+ );
50
+ writeFile(resolve(appConfigPath), newAppConfig);
51
+ s.stop(`${brandColor(`updated`)} ${dim(appConfigPath)}`);
52
+
53
+ // Update an app server routes file to:
54
+ const appServerRoutesPath = "src/app/app.routes.server.ts";
55
+ const appRoutes = readFile(resolve(appServerRoutesPath));
56
+ const newAppRoutes = appRoutes.replace(
57
+ "RenderMode.Prerender",
58
+ "RenderMode.Server",
59
+ );
60
+ writeFile(resolve(appServerRoutesPath), newAppRoutes);
61
+ s.stop(`${brandColor(`updated`)} ${dim(appServerRoutesPath)}`);
62
+
63
+ // Remove unwanted dependencies
64
+ s.start(`Updating package.json`);
65
+ const packageJsonPath = resolve("package.json");
66
+ const packageManifest = readJSON(packageJsonPath);
67
+
68
+ delete packageManifest["dependencies"]["express"];
69
+ delete packageManifest["devDependencies"]["@types/express"];
70
+
71
+ writeFile(packageJsonPath, JSON.stringify(packageManifest, null, 2));
72
+ s.stop(`${brandColor(`updated`)} ${dim(`\`package.json\``)}`);
73
+ }
74
+
75
+ function updateAngularJson(ctx: C3Context) {
76
+ const s = spinner();
77
+ s.start(`Updating angular.json config`);
78
+ const angularJson = readJSON(resolve("angular.json"));
79
+ // Update builder
80
+ const architectSection = angularJson.projects[ctx.project.name].architect;
81
+ architectSection.build.options.outputPath = "dist";
82
+ architectSection.build.options.outputMode = "server";
83
+ architectSection.build.options.ssr.experimentalPlatform = "neutral";
84
+
85
+ writeFile(resolve("angular.json"), JSON.stringify(angularJson, null, 2));
86
+ s.stop(`${brandColor(`updated`)} ${dim(`\`angular.json\``)}`);
87
+ }
88
+
89
+ const config: TemplateConfig = {
90
+ configVersion: 1,
91
+ id: "angular",
92
+ frameworkCli: "@angular/create",
93
+ displayName: "Angular",
94
+ platform: "workers",
95
+ copyFiles: {
96
+ path: "./templates",
97
+ },
98
+ path: "templates-experimental/angular",
99
+ devScript: "start",
100
+ deployScript: "deploy",
101
+ previewScript: "start",
102
+ generate,
103
+ configure,
104
+ transformPackageJson: async () => ({
105
+ scripts: {
106
+ start: `${npm} run build && wrangler dev`,
107
+ build: `ng build`,
108
+ deploy: `${npm} run build && wrangler deploy`,
109
+ },
110
+ }),
111
+ };
112
+ export default config;
@@ -0,0 +1,15 @@
1
+ import { AngularAppEngine, createRequestHandler } from '@angular/ssr';
2
+
3
+ const angularApp = new AngularAppEngine();
4
+
5
+ /**
6
+ * This is a request handler used by the Angular CLI (dev-server and during build).
7
+ */
8
+ export const reqHandler = createRequestHandler(async (req) => {
9
+ const res = await angularApp.handle(req);
10
+
11
+ return res ?? new Response('Page not found.', { status: 404 });
12
+ });
13
+
14
+
15
+ export default { fetch: reqHandler };
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "main": "./dist/server/server.mjs",
4
+ "compatibility_date": "<TBD>",
5
+ "assets": {
6
+ "binding": "ASSETS",
7
+ "directory": "./dist/browser"
8
+ },
9
+ "observability": {
10
+ "enabled": true
11
+ }
12
+ }
@@ -0,0 +1,98 @@
1
+ import { logRaw, updateStatus } from "@cloudflare/cli";
2
+ import { blue, brandColor, dim } from "@cloudflare/cli/colors";
3
+ import { runFrameworkGenerator } from "frameworks/index";
4
+ import { transformFile } from "helpers/codemod";
5
+ import { runCommand } from "helpers/command";
6
+ import { usesTypescript } from "helpers/files";
7
+ import { detectPackageManager } from "helpers/packageManagers";
8
+ import * as recast from "recast";
9
+ import type { TemplateConfig } from "../../src/templates";
10
+ import type { C3Context, PackageJson } from "types";
11
+
12
+ const { npx } = detectPackageManager();
13
+
14
+ const generate = async (ctx: C3Context) => {
15
+ await runFrameworkGenerator(ctx, [ctx.project.name, "--no-install"]);
16
+
17
+ logRaw(""); // newline
18
+ };
19
+
20
+ const configure = async () => {
21
+ await runCommand([npx, "astro", "add", "cloudflare", "-y"], {
22
+ silent: true,
23
+ startText: "Installing adapter",
24
+ doneText: `${brandColor("installed")} ${dim(
25
+ `via \`${npx} astro add cloudflare\``,
26
+ )}`,
27
+ });
28
+
29
+ updateAstroConfig();
30
+ };
31
+
32
+ const updateAstroConfig = () => {
33
+ const filePath = "astro.config.mjs";
34
+
35
+ updateStatus(`Updating configuration in ${blue(filePath)}`);
36
+
37
+ transformFile(filePath, {
38
+ visitCallExpression: function (n) {
39
+ const callee = n.node.callee as recast.types.namedTypes.Identifier;
40
+ if (callee.name !== "cloudflare") {
41
+ return this.traverse(n);
42
+ }
43
+
44
+ const b = recast.types.builders;
45
+ n.node.arguments = [
46
+ b.objectExpression([
47
+ b.objectProperty(
48
+ b.identifier("platformProxy"),
49
+ b.objectExpression([
50
+ b.objectProperty(b.identifier("enabled"), b.booleanLiteral(true)),
51
+ ]),
52
+ ),
53
+ ]),
54
+ ];
55
+
56
+ return false;
57
+ },
58
+ });
59
+ };
60
+
61
+ const config: TemplateConfig = {
62
+ configVersion: 1,
63
+ id: "astro",
64
+ frameworkCli: "create-astro",
65
+ platform: "workers",
66
+ displayName: "Astro",
67
+ copyFiles: {
68
+ async selectVariant(ctx) {
69
+ // Note: this `selectVariant` function should not be needed
70
+ // this is just a quick workaround until
71
+ // https://github.com/cloudflare/workers-sdk/issues/7495
72
+ // is resolved
73
+ return usesTypescript(ctx) ? "ts" : "js";
74
+ },
75
+ variants: {
76
+ js: {
77
+ path: "./templates/js",
78
+ },
79
+ ts: {
80
+ path: "./templates/ts",
81
+ },
82
+ },
83
+ },
84
+ devScript: "dev",
85
+ deployScript: "deploy",
86
+ previewScript: "preview",
87
+ path: "templates-experimental/astro",
88
+ generate,
89
+ configure,
90
+ transformPackageJson: async (pkgJson: PackageJson, ctx: C3Context) => ({
91
+ scripts: {
92
+ deploy: `astro build && wrangler deploy`,
93
+ preview: `astro build && wrangler dev`,
94
+ ...(usesTypescript(ctx) && { "cf-typegen": `wrangler types` }),
95
+ },
96
+ }),
97
+ };
98
+ export default config;
@@ -0,0 +1,4 @@
1
+ _worker.js
2
+ _routes.json
3
+ _headers
4
+ _redirects
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "main": "./dist/_worker.js/index.js",
4
+ "compatibility_date": "<TBD>",
5
+ "compatibility_flags": [
6
+ "nodejs_compat"
7
+ ],
8
+ "assets": {
9
+ "binding": "ASSETS",
10
+ "directory": "./dist"
11
+ },
12
+ "observability": {
13
+ "enabled": true
14
+ }
15
+ }
@@ -0,0 +1,4 @@
1
+ _worker.js
2
+ _routes.json
3
+ _headers
4
+ _redirects
@@ -0,0 +1,5 @@
1
+ type Runtime = import("@astrojs/cloudflare").Runtime<Env>;
2
+
3
+ declare namespace App {
4
+ interface Locals extends Runtime {}
5
+ }
@@ -0,0 +1,4 @@
1
+ // Generated by Wrangler
2
+ // After adding bindings to `wrangler.json`, regenerate this interface via `npm run cf-typegen`
3
+ interface Env {
4
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "main": "./dist/_worker.js/index.js",
4
+ "compatibility_date": "<TBD>",
5
+ "compatibility_flags": [
6
+ "nodejs_compat"
7
+ ],
8
+ "assets": {
9
+ "binding": "ASSETS",
10
+ "directory": "./dist"
11
+ },
12
+ "observability": {
13
+ "enabled": true
14
+ }
15
+ }
@@ -0,0 +1,32 @@
1
+ import { runFrameworkGenerator } from "frameworks/index";
2
+ import { detectPackageManager } from "helpers/packageManagers";
3
+ import type { TemplateConfig } from "../../src/templates";
4
+ import type { C3Context } from "types";
5
+
6
+ const { npm } = detectPackageManager();
7
+
8
+ const generate = async (ctx: C3Context) => {
9
+ await runFrameworkGenerator(ctx, [ctx.project.name, "classic"]);
10
+ };
11
+
12
+ const config: TemplateConfig = {
13
+ configVersion: 1,
14
+ id: "docusaurus",
15
+ frameworkCli: "create-docusaurus",
16
+ platform: "workers",
17
+ displayName: "Docusaurus",
18
+ copyFiles: {
19
+ path: "./templates",
20
+ },
21
+ path: "templates-experimental/docusaurus",
22
+ generate,
23
+ transformPackageJson: async () => ({
24
+ scripts: {
25
+ deploy: `${npm} run build && wrangler deploy`,
26
+ preview: `${npm} run build && wrangler dev`,
27
+ },
28
+ }),
29
+ devScript: "start",
30
+ deployScript: "deploy",
31
+ };
32
+ export default config;
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "compatibility_date": "<TBD>",
4
+ "assets": {
5
+ "directory": "./build"
6
+ },
7
+ "observability": {
8
+ "enabled": true
9
+ }
10
+ }
@@ -0,0 +1,53 @@
1
+ import { inputPrompt } from "@cloudflare/cli/interactive";
2
+ import { runFrameworkGenerator } from "frameworks/index";
3
+ import { detectPackageManager } from "helpers/packageManagers";
4
+ import type { TemplateConfig } from "../../src/templates";
5
+ import type { C3Context } from "types";
6
+
7
+ const { npm } = detectPackageManager();
8
+
9
+ const generate = async (ctx: C3Context) => {
10
+ const defaultTemplate = "https://github.com/gatsbyjs/gatsby-starter-blog";
11
+
12
+ const useTemplate = await inputPrompt({
13
+ type: "confirm",
14
+ question: "Would you like to use a template?",
15
+ label: "template",
16
+ defaultValue: true,
17
+ });
18
+
19
+ let templateUrl = "";
20
+ if (useTemplate) {
21
+ templateUrl = await inputPrompt({
22
+ type: "text",
23
+ question: `Please specify the url of the template you'd like to use`,
24
+ label: "template",
25
+ defaultValue: defaultTemplate,
26
+ });
27
+ }
28
+
29
+ await runFrameworkGenerator(ctx, ["new", ctx.project.name, templateUrl]);
30
+ };
31
+
32
+ const config: TemplateConfig = {
33
+ configVersion: 1,
34
+ id: "gatsby",
35
+ frameworkCli: "gatsby",
36
+ platform: "workers",
37
+ displayName: "Gatsby",
38
+ copyFiles: {
39
+ path: "./templates",
40
+ },
41
+ path: "templates-experimental/gatsby",
42
+ generate,
43
+ transformPackageJson: async () => ({
44
+ scripts: {
45
+ deploy: `${npm} run build && wrangler deploy`,
46
+ preview: `${npm} run build && wrangler dev`,
47
+ },
48
+ }),
49
+ devScript: "develop",
50
+ deployScript: "deploy",
51
+ previewScript: "preview",
52
+ };
53
+ export default config;