create-cloudflare 0.0.0-e8a2a1d9 → 0.0.0-e8aaa3930

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 (249) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +47562 -32110
  3. package/dist/tsconfig.tsbuildinfo +1 -0
  4. package/package.json +40 -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 +114 -0
  12. package/templates/angular/templates/src/server.ts +15 -0
  13. package/templates/angular/templates/tools/copy-files.mjs +15 -0
  14. package/templates/astro/c3.ts +97 -0
  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 +19 -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 +28 -0
  33. package/templates/gatsby/c3.ts +49 -0
  34. package/templates/hello-world/c3.ts +20 -0
  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 +18 -0
  54. package/templates/hello-world-durable-object/js/.editorconfig +12 -0
  55. package/templates/hello-world-durable-object/js/.prettierrc +6 -0
  56. package/templates/hello-world-durable-object/js/__dot__gitignore +172 -0
  57. package/templates/hello-world-durable-object/js/package.json +13 -0
  58. package/templates/hello-world-durable-object/js/src/index.js +69 -0
  59. package/templates/hello-world-durable-object/js/wrangler.json +24 -0
  60. package/templates/hello-world-durable-object/ts/.editorconfig +12 -0
  61. package/templates/hello-world-durable-object/ts/.prettierrc +6 -0
  62. package/templates/hello-world-durable-object/ts/__dot__gitignore +172 -0
  63. package/templates/hello-world-durable-object/ts/package.json +15 -0
  64. package/templates/hello-world-durable-object/ts/src/index.ts +65 -0
  65. package/templates/hello-world-durable-object/ts/tsconfig.json +42 -0
  66. package/templates/hello-world-durable-object/ts/worker-configuration.d.ts +5 -0
  67. package/templates/hello-world-durable-object/ts/wrangler.json +24 -0
  68. package/templates/hono/c3.ts +69 -0
  69. package/templates/hono/snippets/appDeclaration.ts +1 -0
  70. package/templates/hono/templates/worker-configuration.d.ts +4 -0
  71. package/templates/hono/templates/wrangler.json +8 -0
  72. package/templates/next/README.md +68 -0
  73. package/templates/next/app/js/app/api/hello/route.js +21 -0
  74. package/templates/next/app/js/app/not-found.js +58 -0
  75. package/templates/next/app/ts/app/api/hello/route.ts +21 -0
  76. package/templates/next/app/ts/app/not-found.tsx +58 -0
  77. package/templates/next/c3.ts +238 -0
  78. package/templates/next/env.d.ts +5 -0
  79. package/templates/next/pages/js/pages/api/hello.js +23 -0
  80. package/templates/next/pages/ts/pages/api/hello.ts +24 -0
  81. package/templates/next/wrangler.json +8 -0
  82. package/templates/nuxt/c3.ts +134 -0
  83. package/templates/nuxt/templates/env.d.ts +14 -0
  84. package/templates/nuxt/templates/worker-configuration.d.ts +4 -0
  85. package/templates/nuxt/templates/wrangler.json +8 -0
  86. package/templates/openapi/c3.ts +10 -0
  87. package/templates/openapi/ts/README.md +3 -3
  88. package/templates/openapi/ts/package.json +7 -4
  89. package/templates/openapi/ts/src/endpoints/taskCreate.ts +26 -16
  90. package/templates/openapi/ts/src/endpoints/taskDelete.ts +20 -19
  91. package/templates/openapi/ts/src/endpoints/taskFetch.ts +30 -23
  92. package/templates/openapi/ts/src/endpoints/taskList.ts +27 -24
  93. package/templates/openapi/ts/src/index.ts +16 -22
  94. package/templates/openapi/ts/src/types.ts +9 -8
  95. package/templates/openapi/ts/worker-configuration.d.ts +4 -0
  96. package/templates/openapi/ts/wrangler.json +8 -0
  97. package/templates/pre-existing/c3.ts +102 -0
  98. package/templates/pre-existing/js/.editorconfig +12 -0
  99. package/templates/pre-existing/js/.prettierrc +6 -0
  100. package/templates/pre-existing/js/__dot__gitignore +172 -0
  101. package/templates/pre-existing/js/package.json +13 -0
  102. package/templates/pre-existing/js/wrangler.json +5 -0
  103. package/templates/queues/c3.ts +28 -0
  104. package/templates/queues/js/.editorconfig +0 -1
  105. package/templates/queues/js/package.json +1 -1
  106. package/templates/queues/js/wrangler.json +21 -0
  107. package/templates/queues/ts/.editorconfig +0 -1
  108. package/templates/queues/ts/package.json +4 -3
  109. package/templates/queues/ts/src/index.ts +6 -8
  110. package/templates/queues/ts/tsconfig.json +36 -95
  111. package/templates/queues/ts/worker-configuration.d.ts +5 -0
  112. package/templates/queues/ts/wrangler.json +21 -0
  113. package/templates/qwik/c3.ts +147 -0
  114. package/templates/qwik/snippets/getPlatformProxy.ts +6 -0
  115. package/templates/qwik/templates/worker-configuration.d.ts +4 -0
  116. package/templates/qwik/templates/wrangler.json +8 -0
  117. package/templates/react/c3.ts +61 -0
  118. package/templates/remix/c3.ts +67 -0
  119. package/templates/remix/templates/worker-configuration.d.ts +4 -0
  120. package/templates/remix/templates/wrangler.json +5 -0
  121. package/templates/scheduled/c3.ts +18 -0
  122. package/templates/scheduled/js/.editorconfig +0 -1
  123. package/templates/scheduled/js/package.json +3 -3
  124. package/templates/scheduled/js/src/index.js +8 -1
  125. package/templates/scheduled/js/wrangler.json +13 -0
  126. package/templates/scheduled/ts/.editorconfig +0 -1
  127. package/templates/scheduled/ts/package.json +5 -4
  128. package/templates/scheduled/ts/src/index.ts +6 -23
  129. package/templates/scheduled/ts/tsconfig.json +36 -95
  130. package/templates/scheduled/ts/worker-configuration.d.ts +4 -0
  131. package/templates/scheduled/ts/wrangler.json +13 -0
  132. package/templates/solid/c3.ts +87 -0
  133. package/templates/solid/templates/wrangler.json +8 -0
  134. package/templates/svelte/c3.ts +158 -0
  135. package/templates/svelte/templates/wrangler.json +5 -0
  136. package/templates/vue/c3.ts +29 -0
  137. package/templates-experimental/angular/c3.ts +112 -0
  138. package/templates-experimental/angular/templates/src/server.ts +15 -0
  139. package/templates-experimental/angular/templates/wrangler.json +12 -0
  140. package/templates-experimental/astro/c3.ts +98 -0
  141. package/templates-experimental/astro/templates/js/public/.assetsignore +4 -0
  142. package/templates-experimental/astro/templates/js/wrangler.json +15 -0
  143. package/templates-experimental/astro/templates/ts/public/.assetsignore +4 -0
  144. package/templates-experimental/astro/templates/ts/src/env.d.ts +5 -0
  145. package/templates-experimental/astro/templates/ts/worker-configuration.d.ts +4 -0
  146. package/templates-experimental/astro/templates/ts/wrangler.json +15 -0
  147. package/templates-experimental/docusaurus/c3.ts +32 -0
  148. package/templates-experimental/docusaurus/templates/wrangler.json +10 -0
  149. package/templates-experimental/gatsby/c3.ts +53 -0
  150. package/templates-experimental/gatsby/templates/wrangler.json +10 -0
  151. package/templates-experimental/hello-world-assets-only/c3.ts +15 -0
  152. package/templates-experimental/hello-world-assets-only/templates/package.json +13 -0
  153. package/templates-experimental/hello-world-assets-only/templates/public/index.html +11 -0
  154. package/templates-experimental/hello-world-assets-only/templates/wrangler.json +10 -0
  155. package/templates-experimental/hello-world-durable-object-with-assets/c3.ts +23 -0
  156. package/templates-experimental/hello-world-durable-object-with-assets/js/.editorconfig +12 -0
  157. package/templates-experimental/hello-world-durable-object-with-assets/js/.prettierrc +6 -0
  158. package/{templates/chatgptPlugin/ts → templates-experimental/hello-world-durable-object-with-assets/js}/__dot__gitignore +1 -0
  159. package/templates-experimental/hello-world-durable-object-with-assets/js/package.json +13 -0
  160. package/templates-experimental/hello-world-durable-object-with-assets/js/public/index.html +19 -0
  161. package/templates-experimental/hello-world-durable-object-with-assets/js/src/index.js +69 -0
  162. package/templates-experimental/hello-world-durable-object-with-assets/js/wrangler.json +28 -0
  163. package/templates-experimental/hello-world-durable-object-with-assets/ts/.editorconfig +12 -0
  164. package/templates-experimental/hello-world-durable-object-with-assets/ts/.prettierrc +6 -0
  165. package/templates-experimental/hello-world-durable-object-with-assets/ts/__dot__gitignore +172 -0
  166. package/templates-experimental/hello-world-durable-object-with-assets/ts/package.json +15 -0
  167. package/templates-experimental/hello-world-durable-object-with-assets/ts/public/index.html +19 -0
  168. package/templates-experimental/hello-world-durable-object-with-assets/ts/src/index.ts +66 -0
  169. package/templates-experimental/hello-world-durable-object-with-assets/ts/tsconfig.json +42 -0
  170. package/templates-experimental/hello-world-durable-object-with-assets/ts/worker-configuration.d.ts +5 -0
  171. package/templates-experimental/hello-world-durable-object-with-assets/ts/wrangler.json +28 -0
  172. package/templates-experimental/hello-world-with-assets/c3.ts +22 -0
  173. package/templates-experimental/hello-world-with-assets/js/.editorconfig +12 -0
  174. package/templates-experimental/hello-world-with-assets/js/.prettierrc +6 -0
  175. package/templates-experimental/hello-world-with-assets/js/__dot__gitignore +172 -0
  176. package/templates-experimental/hello-world-with-assets/js/package.json +16 -0
  177. package/templates-experimental/hello-world-with-assets/js/public/index.html +31 -0
  178. package/templates-experimental/hello-world-with-assets/js/src/index.js +23 -0
  179. package/templates-experimental/hello-world-with-assets/js/test/index.spec.js +41 -0
  180. package/templates-experimental/hello-world-with-assets/js/vitest.config.js +11 -0
  181. package/templates-experimental/hello-world-with-assets/js/wrangler.json +15 -0
  182. package/templates-experimental/hello-world-with-assets/py/__dot__gitignore +68 -0
  183. package/templates-experimental/hello-world-with-assets/py/package.json +13 -0
  184. package/templates-experimental/hello-world-with-assets/py/public/index.html +31 -0
  185. package/templates-experimental/hello-world-with-assets/py/src/entry.py +9 -0
  186. package/templates-experimental/hello-world-with-assets/py/wrangler.json +15 -0
  187. package/templates-experimental/hello-world-with-assets/ts/.editorconfig +12 -0
  188. package/templates-experimental/hello-world-with-assets/ts/.prettierrc +6 -0
  189. package/templates-experimental/hello-world-with-assets/ts/__dot__gitignore +172 -0
  190. package/templates-experimental/hello-world-with-assets/ts/package.json +18 -0
  191. package/templates-experimental/hello-world-with-assets/ts/public/index.html +31 -0
  192. package/templates-experimental/hello-world-with-assets/ts/src/index.ts +26 -0
  193. package/templates-experimental/hello-world-with-assets/ts/test/index.spec.ts +41 -0
  194. package/templates-experimental/hello-world-with-assets/ts/test/tsconfig.json +8 -0
  195. package/templates-experimental/hello-world-with-assets/ts/tsconfig.json +44 -0
  196. package/templates-experimental/hello-world-with-assets/ts/vitest.config.mts +11 -0
  197. package/templates-experimental/hello-world-with-assets/ts/worker-configuration.d.ts +4 -0
  198. package/templates-experimental/hello-world-with-assets/ts/wrangler.json +15 -0
  199. package/templates-experimental/hono/c3.ts +43 -0
  200. package/templates-experimental/hono/templates/public/index.html +19 -0
  201. package/templates-experimental/hono/templates/src/index.ts +9 -0
  202. package/templates-experimental/hono/templates/worker-configuration.d.ts +4 -0
  203. package/templates-experimental/hono/templates/wrangler.json +9 -0
  204. package/templates-experimental/next/c3.ts +59 -0
  205. package/templates-experimental/next/templates/.dev.vars +2 -0
  206. package/templates-experimental/next/templates/__dot__gitignore +39 -0
  207. package/templates-experimental/next/templates/cloudflare-env.d.ts +5 -0
  208. package/templates-experimental/next/templates/open-next.config.ts +28 -0
  209. package/templates-experimental/next/templates/wrangler.json +13 -0
  210. package/templates-experimental/nuxt/c3.ts +135 -0
  211. package/templates-experimental/nuxt/templates/env.d.ts +14 -0
  212. package/templates-experimental/nuxt/templates/worker-configuration.d.ts +4 -0
  213. package/templates-experimental/nuxt/templates/wrangler.json +12 -0
  214. package/templates-experimental/qwik/c3.ts +153 -0
  215. package/templates-experimental/qwik/snippets/getPlatformProxy.ts +6 -0
  216. package/templates-experimental/qwik/templates/public/.assetsignore +4 -0
  217. package/templates-experimental/qwik/templates/worker-configuration.d.ts +4 -0
  218. package/templates-experimental/qwik/templates/wrangler.json +15 -0
  219. package/templates-experimental/remix/c3.ts +52 -0
  220. package/templates-experimental/remix/templates/public/.assetsignore +0 -0
  221. package/templates-experimental/remix/templates/worker-configuration.d.ts +4 -0
  222. package/templates-experimental/remix/templates/wrangler.toml +11 -0
  223. package/templates-experimental/solid/c3.ts +94 -0
  224. package/templates-experimental/solid/templates/wrangler.json +15 -0
  225. package/templates-experimental/svelte/c3.ts +129 -0
  226. package/templates-experimental/svelte/templates/static/.assetsignore +4 -0
  227. package/templates-experimental/svelte/templates/wrangler.json +12 -0
  228. package/templates-experimental/vue/c3.ts +33 -0
  229. package/templates-experimental/vue/templates/wrangler.json +10 -0
  230. package/dist/angular/templates/server.ts +0 -34
  231. package/dist/angular/templates/tools/alter-polyfills.mjs +0 -27
  232. package/dist/angular/templates/tools/copy-files.mjs +0 -9
  233. package/dist/angular/templates/tools/paths.mjs +0 -9
  234. package/templates/chatgptPlugin/ts/.assets/example.png +0 -0
  235. package/templates/chatgptPlugin/ts/README.md +0 -25
  236. package/templates/chatgptPlugin/ts/package.json +0 -16
  237. package/templates/chatgptPlugin/ts/src/index.ts +0 -33
  238. package/templates/chatgptPlugin/ts/src/search.ts +0 -59
  239. package/templates/chatgptPlugin/ts/wrangler.toml +0 -3
  240. package/templates/common/js/wrangler.toml +0 -51
  241. package/templates/common/ts/wrangler.toml +0 -51
  242. package/templates/hello-world/js/wrangler.toml +0 -51
  243. package/templates/hello-world/ts/wrangler.toml +0 -51
  244. package/templates/openapi/ts/wrangler.toml +0 -3
  245. package/templates/queues/js/wrangler.toml +0 -19
  246. package/templates/queues/ts/wrangler.toml +0 -19
  247. package/templates/scheduled/js/wrangler.toml +0 -9
  248. package/templates/scheduled/ts/wrangler.toml +0 -9
  249. /package/{dist → templates}/angular/templates/src/_routes.json +0 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Welcome to Cloudflare Workers! This is your first worker.
3
+ *
4
+ * - Run `npm run dev` in your terminal to start a development server
5
+ * - Open a browser tab at http://localhost:8787/ to see your worker in action
6
+ * - Run `npm run deploy` to publish your worker
7
+ *
8
+ * Bind resources to your worker in `wrangler.toml`. After adding bindings, a type definition for the
9
+ * `Env` object can be regenerated with `npm run cf-typegen`.
10
+ *
11
+ * Learn more at https://developers.cloudflare.com/workers/
12
+ */
13
+
14
+ export default {
15
+ async fetch(request, env, ctx): Promise<Response> {
16
+ const url = new URL(request.url);
17
+ switch (url.pathname) {
18
+ case '/message':
19
+ return new Response('Hello, World!');
20
+ case '/random':
21
+ return new Response(crypto.randomUUID());
22
+ default:
23
+ return new Response('Not Found', { status: 404 });
24
+ }
25
+ },
26
+ } satisfies ExportedHandler<Env>;
@@ -0,0 +1,41 @@
1
+ import { env, createExecutionContext, waitOnExecutionContext, SELF } from 'cloudflare:test';
2
+ import { describe, it, expect } from 'vitest';
3
+ import worker from '../src';
4
+
5
+ describe('Hello World user worker', () => {
6
+ describe('request for /message', () => {
7
+ it('/ responds with "Hello, World!" (unit style)', async () => {
8
+ const request = new Request<unknown, IncomingRequestCfProperties>('http://example.com/message');
9
+ // Create an empty context to pass to `worker.fetch()`.
10
+ const ctx = createExecutionContext();
11
+ const response = await worker.fetch(request, env, ctx);
12
+ // Wait for all `Promise`s passed to `ctx.waitUntil()` to settle before running test assertions
13
+ await waitOnExecutionContext(ctx);
14
+ expect(await response.text()).toMatchInlineSnapshot(`"Hello, World!"`);
15
+ });
16
+
17
+ it('responds with "Hello, World!" (integration style)', async () => {
18
+ const request = new Request('http://example.com/message');
19
+ const response = await SELF.fetch(request);
20
+ expect(await response.text()).toMatchInlineSnapshot(`"Hello, World!"`);
21
+ });
22
+ });
23
+
24
+ describe('request for /random', () => {
25
+ it('/ responds with a random UUID (unit style)', async () => {
26
+ const request = new Request<unknown, IncomingRequestCfProperties>('http://example.com/random');
27
+ // Create an empty context to pass to `worker.fetch()`.
28
+ const ctx = createExecutionContext();
29
+ const response = await worker.fetch(request, env, ctx);
30
+ // Wait for all `Promise`s passed to `ctx.waitUntil()` to settle before running test assertions
31
+ await waitOnExecutionContext(ctx);
32
+ expect(await response.text()).toMatch(/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/);
33
+ });
34
+
35
+ it('responds with a random UUID (integration style)', async () => {
36
+ const request = new Request('http://example.com/random');
37
+ const response = await SELF.fetch(request);
38
+ expect(await response.text()).toMatch(/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/);
39
+ });
40
+ });
41
+ });
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ "compilerOptions": {
4
+ "types": ["@cloudflare/workers-types/experimental", "@cloudflare/vitest-pool-workers"]
5
+ },
6
+ "include": ["./**/*.ts", "../src/env.d.ts"],
7
+ "exclude": []
8
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "compilerOptions": {
3
+ /* Visit https://aka.ms/tsconfig.json to read more about this file */
4
+
5
+ /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
6
+ "target": "es2021",
7
+ /* Specify a set of bundled library declaration files that describe the target runtime environment. */
8
+ "lib": ["es2021"],
9
+ /* Specify what JSX code is generated. */
10
+ "jsx": "react-jsx",
11
+
12
+ /* Specify what module code is generated. */
13
+ "module": "es2022",
14
+ /* Specify how TypeScript looks up a file from a given module specifier. */
15
+ "moduleResolution": "Bundler",
16
+ /* Specify type package names to be included without being referenced in a source file. */
17
+ "types": ["@cloudflare/workers-types"],
18
+ /* Enable importing .json files */
19
+ "resolveJsonModule": true,
20
+
21
+ /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
22
+ "allowJs": true,
23
+ /* Enable error reporting in type-checked JavaScript files. */
24
+ "checkJs": false,
25
+
26
+ /* Disable emitting files from a compilation. */
27
+ "noEmit": true,
28
+
29
+ /* Ensure that each file can be safely transpiled without relying on other imports. */
30
+ "isolatedModules": true,
31
+ /* Allow 'import x from y' when a module doesn't have a default export. */
32
+ "allowSyntheticDefaultImports": true,
33
+ /* Ensure that casing is correct in imports. */
34
+ "forceConsistentCasingInFileNames": true,
35
+
36
+ /* Enable all strict type-checking options. */
37
+ "strict": true,
38
+
39
+ /* Skip type checking all .d.ts files. */
40
+ "skipLibCheck": true
41
+ },
42
+ "exclude": ["test"],
43
+ "include": ["worker-configuration.d.ts", "src/**/*.ts"]
44
+ }
@@ -0,0 +1,11 @@
1
+ import { defineWorkersConfig } from '@cloudflare/vitest-pool-workers/config';
2
+
3
+ export default defineWorkersConfig({
4
+ test: {
5
+ poolOptions: {
6
+ workers: {
7
+ wrangler: { configPath: './wrangler.toml' },
8
+ },
9
+ },
10
+ },
11
+ });
@@ -0,0 +1,4 @@
1
+ // Generated by Wrangler
2
+ // After adding bindings to `wrangler.toml`, regenerate this interface via `npm run cf-typegen`
3
+ interface Env {
4
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "main": "src/index.ts",
4
+ "compatibility_date": "<TBD>",
5
+ "compatibility_flags": [
6
+ "nodejs_compat"
7
+ ],
8
+ "assets": {
9
+ "binding": "ASSETS",
10
+ "directory": "./public"
11
+ },
12
+ "observability": {
13
+ "enabled": true
14
+ }
15
+ }
@@ -0,0 +1,43 @@
1
+ import { logRaw } from "@cloudflare/cli";
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 generate = async (ctx: C3Context) => {
8
+ const { name: pm } = detectPackageManager();
9
+
10
+ await runFrameworkGenerator(ctx, [
11
+ ctx.project.name,
12
+ "--template",
13
+ "cloudflare-workers",
14
+ "--install",
15
+ "--pm",
16
+ pm,
17
+ ]);
18
+
19
+ logRaw(""); // newline
20
+ };
21
+
22
+ const config: TemplateConfig = {
23
+ configVersion: 1,
24
+ id: "hono",
25
+ frameworkCli: "create-hono",
26
+ displayName: "Hono",
27
+ copyFiles: {
28
+ path: "./templates",
29
+ },
30
+ platform: "workers",
31
+ path: "templates-experimental/hono",
32
+ generate,
33
+ transformPackageJson: async () => ({
34
+ scripts: {
35
+ dev: "wrangler dev",
36
+ deploy: "wrangler deploy --minify",
37
+ "cf-typegen": "wrangler types --env-interface CloudflareBindings",
38
+ },
39
+ }),
40
+ devScript: "dev",
41
+ deployScript: "deploy",
42
+ };
43
+ export default config;
@@ -0,0 +1,19 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Hello, World!</title>
7
+ </head>
8
+ <body>
9
+ <h1 id="heading"></h1>
10
+ <script>
11
+ fetch('/message')
12
+ .then((resp) => resp.text())
13
+ .then((text) => {
14
+ const h1 = document.getElementById('heading');
15
+ h1.textContent = text;
16
+ });
17
+ </script>
18
+ </body>
19
+ </html>
@@ -0,0 +1,9 @@
1
+ import { Hono } from "hono";
2
+
3
+ const app = new Hono<{ Bindings: CloudflareBindings }>();
4
+
5
+ app.get("/message", (c) => {
6
+ return c.text("Hello Hono!");
7
+ });
8
+
9
+ export default app;
@@ -0,0 +1,4 @@
1
+ // Generated by Wrangler
2
+ // After adding bindings to `wrangler.toml`, regenerate this interface via `npm run cf-typegen`
3
+ interface CloudflareBindings {
4
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "main": "src/index.ts",
4
+ "compatibility_date": "<TBD>",
5
+ "assets": {
6
+ "binding": "ASSETS",
7
+ "directory": "./public"
8
+ }
9
+ }
@@ -0,0 +1,59 @@
1
+ import { brandColor, dim } from "@cloudflare/cli/colors";
2
+ import { runFrameworkGenerator } from "frameworks/index";
3
+ import { installPackages } from "helpers/packages";
4
+ import type { TemplateConfig } from "../../src/templates";
5
+ import type { C3Context } from "types";
6
+
7
+ const generate = async (ctx: C3Context) => {
8
+ await runFrameworkGenerator(ctx, [
9
+ ctx.project.name,
10
+ "--ts",
11
+ "--tailwind",
12
+ "--eslint",
13
+ "--app",
14
+ "--import-alias",
15
+ "@/*",
16
+ "--src-dir",
17
+ ]);
18
+ };
19
+
20
+ const configure = async () => {
21
+ const packages = [
22
+ "@opennextjs/cloudflare@0.3.x",
23
+ "@cloudflare/workers-types",
24
+ ];
25
+ await installPackages(packages, {
26
+ dev: true,
27
+ startText: "Adding the Cloudflare adapter",
28
+ doneText: `${brandColor(`installed`)} ${dim(packages.join(", "))}`,
29
+ });
30
+ };
31
+
32
+ export default {
33
+ configVersion: 1,
34
+ id: "next",
35
+ frameworkCli: "create-next-app",
36
+ // TODO: here we need to specify a version of create-next-app which is different from the
37
+ // standard one used in the stable Next.js template, that's because our open-next adapter
38
+ // is not yet fully ready for Next.js 15, once it is we should remove the following
39
+ frameworkCliPinnedVersion: "^14.2.23",
40
+ platform: "workers",
41
+ displayName: "Next.js (using Node.js compat + Workers Assets)",
42
+ path: "templates-experimental/next",
43
+ copyFiles: {
44
+ path: "./templates",
45
+ },
46
+ generate,
47
+ configure,
48
+ transformPackageJson: async () => ({
49
+ scripts: {
50
+ deploy: `opennextjs-cloudflare && wrangler deploy`,
51
+ preview: `opennextjs-cloudflare && wrangler dev`,
52
+ "cf-typegen": `wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts`,
53
+ },
54
+ }),
55
+ devScript: "dev",
56
+ previewScript: "preview",
57
+ deployScript: "deploy",
58
+ compatibilityFlags: ["nodejs_compat"],
59
+ } as TemplateConfig;
@@ -0,0 +1,2 @@
1
+ # Load .env.development* files when running `wrangler dev`
2
+ NEXTJS_ENV=development
@@ -0,0 +1,39 @@
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.js
7
+ .yarn/install-state.gz
8
+
9
+ # testing
10
+ /coverage
11
+
12
+ # next.js
13
+ /.next/
14
+ /out/
15
+
16
+ # production
17
+ /build
18
+
19
+ # misc
20
+ .DS_Store
21
+ *.pem
22
+
23
+ # debug
24
+ npm-debug.log*
25
+ yarn-debug.log*
26
+ yarn-error.log*
27
+
28
+ # local env files
29
+ .env*.local
30
+
31
+ # vercel
32
+ .vercel
33
+
34
+ # typescript
35
+ *.tsbuildinfo
36
+ next-env.d.ts
37
+
38
+ # OpenNext
39
+ /.open-next
@@ -0,0 +1,5 @@
1
+ // Generated by Wrangler
2
+ // by running `wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts`
3
+
4
+ interface CloudflareEnv {
5
+ }
@@ -0,0 +1,28 @@
1
+ import cache from "@opennextjs/cloudflare/kvCache";
2
+
3
+ const config = {
4
+ default: {
5
+ override: {
6
+ wrapper: "cloudflare-node",
7
+ converter: "edge",
8
+ incrementalCache: async () => cache,
9
+ tagCache: "dummy",
10
+ queue: "dummy",
11
+ },
12
+ },
13
+
14
+ middleware: {
15
+ external: true,
16
+ override: {
17
+ wrapper: "cloudflare-edge",
18
+ converter: "edge",
19
+ proxyExternalRequest: "fetch",
20
+ },
21
+ },
22
+
23
+ dangerous: {
24
+ enableCacheInterception: false,
25
+ },
26
+ };
27
+
28
+ export default config;
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "<app-name>",
3
+ "main": ".open-next/worker.js",
4
+ "compatibility_date": "2024-09-26",
5
+ "compatibility_flags": [
6
+ "nodejs_compat"
7
+ ],
8
+ "minify": true,
9
+ "assets": {
10
+ "binding": "ASSETS",
11
+ "directory": ".open-next/assets"
12
+ }
13
+ }
@@ -0,0 +1,135 @@
1
+ import { logRaw } from "@cloudflare/cli";
2
+ import { brandColor, dim } from "@cloudflare/cli/colors";
3
+ import { spinner } from "@cloudflare/cli/interactive";
4
+ import { runFrameworkGenerator } from "frameworks/index";
5
+ import { mergeObjectProperties, transformFile } from "helpers/codemod";
6
+ import { getLatestTypesEntrypoint } from "helpers/compatDate";
7
+ import { readFile, writeFile } from "helpers/files";
8
+ import { detectPackageManager } from "helpers/packageManagers";
9
+ import { installPackages } from "helpers/packages";
10
+ import * as recast from "recast";
11
+ import type { TemplateConfig } from "../../src/templates";
12
+ import type { C3Context } from "types";
13
+
14
+ const { npm, name: pm } = detectPackageManager();
15
+
16
+ const generate = async (ctx: C3Context) => {
17
+ const gitFlag = ctx.args.git ? `--gitInit` : `--no-gitInit`;
18
+
19
+ await runFrameworkGenerator(ctx, [
20
+ "init",
21
+ ctx.project.name,
22
+ "--packageManager",
23
+ npm,
24
+ gitFlag,
25
+ ]);
26
+
27
+ writeFile("./.node-version", "18");
28
+
29
+ logRaw(""); // newline
30
+ };
31
+
32
+ const configure = async (ctx: C3Context) => {
33
+ const packages = ["nitro-cloudflare-dev", "nitropack"];
34
+
35
+ // When using pnpm, explicitly add h3 package so the H3Event type declaration can be updated.
36
+ // Package managers other than pnpm will hoist the dependency, as will pnpm with `--shamefully-hoist`
37
+ if (pm === "pnpm") {
38
+ packages.push("h3");
39
+ }
40
+
41
+ await installPackages(packages, {
42
+ dev: true,
43
+ startText: "Installing nitro module `nitro-cloudflare-dev`",
44
+ doneText: `${brandColor("installed")} ${dim(`via \`${npm} install\``)}`,
45
+ });
46
+ updateNuxtConfig();
47
+
48
+ updateEnvTypes(ctx);
49
+ };
50
+
51
+ const updateEnvTypes = (ctx: C3Context) => {
52
+ const filepath = "env.d.ts";
53
+
54
+ const s = spinner();
55
+ s.start(`Updating ${filepath}`);
56
+
57
+ let file = readFile(filepath);
58
+
59
+ let typesEntrypoint = `@cloudflare/workers-types`;
60
+ const latestEntrypoint = getLatestTypesEntrypoint(ctx);
61
+ if (latestEntrypoint) {
62
+ typesEntrypoint += `/${latestEntrypoint}`;
63
+ }
64
+
65
+ // Replace placeholder with actual types entrypoint
66
+ file = file.replace("WORKERS_TYPES_ENTRYPOINT", typesEntrypoint);
67
+ writeFile("env.d.ts", file);
68
+
69
+ s.stop(`${brandColor(`updated`)} ${dim(`\`${filepath}\``)}`);
70
+ };
71
+
72
+ const updateNuxtConfig = () => {
73
+ const s = spinner();
74
+
75
+ const configFile = "nuxt.config.ts";
76
+ s.start(`Updating \`${configFile}\``);
77
+
78
+ const b = recast.types.builders;
79
+
80
+ const presetDef = b.objectProperty(
81
+ b.identifier("nitro"),
82
+ b.objectExpression([
83
+ b.objectProperty(
84
+ b.identifier("preset"),
85
+ b.stringLiteral("cloudflare_module"),
86
+ ),
87
+ ]),
88
+ );
89
+
90
+ const moduleDef = b.objectProperty(
91
+ b.identifier("modules"),
92
+ b.arrayExpression([b.stringLiteral("nitro-cloudflare-dev")]),
93
+ );
94
+
95
+ transformFile(configFile, {
96
+ visitCallExpression: function (n) {
97
+ const callee = n.node.callee as recast.types.namedTypes.Identifier;
98
+ if (callee.name === "defineNuxtConfig") {
99
+ mergeObjectProperties(
100
+ n.node.arguments[0] as recast.types.namedTypes.ObjectExpression,
101
+ [presetDef, moduleDef],
102
+ );
103
+ }
104
+
105
+ return this.traverse(n);
106
+ },
107
+ });
108
+
109
+ s.stop(`${brandColor(`updated`)} ${dim(`\`${configFile}\``)}`);
110
+ };
111
+
112
+ const config: TemplateConfig = {
113
+ configVersion: 1,
114
+ id: "nuxt",
115
+ frameworkCli: "nuxi",
116
+ platform: "workers",
117
+ displayName: "Nuxt",
118
+ copyFiles: {
119
+ path: "./templates",
120
+ },
121
+ path: "templates-experimental/nuxt",
122
+ generate,
123
+ configure,
124
+ transformPackageJson: async () => ({
125
+ scripts: {
126
+ deploy: `${npm} run build && wrangler deploy`,
127
+ preview: `${npm} run build && wrangler dev`,
128
+ "cf-typegen": `wrangler types`,
129
+ },
130
+ }),
131
+ devScript: "dev",
132
+ deployScript: "deploy",
133
+ previewScript: "preview",
134
+ };
135
+ export default config;
@@ -0,0 +1,14 @@
1
+ /// <reference types="WORKERS_TYPES_ENTRYPOINT" />
2
+
3
+ declare module "h3" {
4
+ interface H3EventContext {
5
+ cf: CfProperties;
6
+ cloudflare: {
7
+ request: Request;
8
+ env: Env;
9
+ context: ExecutionContext;
10
+ };
11
+ }
12
+ }
13
+
14
+ export {};
@@ -0,0 +1,4 @@
1
+ // Generated by Wrangler
2
+ // After adding bindings to `wrangler.toml`, regenerate this interface via `npm run cf-typegen`
3
+ interface Env {
4
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "<TBD>",
3
+ "main": "./.output/server/index.mjs",
4
+ "compatibility_date": "<TBD>",
5
+ "assets": {
6
+ "binding": "ASSETS",
7
+ "directory": "./.output/public/"
8
+ },
9
+ "observability": {
10
+ "enabled": true
11
+ }
12
+ }