wrangler 0.0.0-e2f9bb2 → 0.0.0-e30d1013

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 (295) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +26 -4
  3. package/bin/wrangler.js +154 -34
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +1451 -21
  6. package/package.json +191 -148
  7. package/src/__tests__/access.test.ts +25 -0
  8. package/src/__tests__/api-dev.test.ts +209 -0
  9. package/src/__tests__/api-devregistry.test.js +56 -0
  10. package/src/__tests__/api.test.ts +80 -0
  11. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  12. package/src/__tests__/config-cache.test.ts +30 -24
  13. package/src/__tests__/configuration.test.ts +3970 -3114
  14. package/src/__tests__/d1.test.ts +74 -0
  15. package/src/__tests__/delete.test.ts +230 -0
  16. package/src/__tests__/deployments.test.ts +91 -0
  17. package/src/__tests__/dev.test.tsx +1484 -737
  18. package/src/__tests__/dialogs.test.tsx +40 -0
  19. package/src/__tests__/generate.test.ts +235 -0
  20. package/src/__tests__/get-host-from-url.test.ts +16 -0
  21. package/src/__tests__/guess-worker-format.test.ts +68 -68
  22. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  23. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  24. package/src/__tests__/helpers/mock-bin.ts +20 -20
  25. package/src/__tests__/helpers/mock-cfetch.ts +216 -94
  26. package/src/__tests__/helpers/mock-console.ts +58 -39
  27. package/src/__tests__/helpers/mock-dialogs.ts +115 -51
  28. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  29. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  30. package/src/__tests__/helpers/mock-istty.ts +65 -18
  31. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  32. package/src/__tests__/helpers/mock-kv.ts +27 -27
  33. package/src/__tests__/helpers/mock-oauth-flow.ts +225 -228
  34. package/src/__tests__/helpers/mock-process.ts +39 -0
  35. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  36. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  37. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  38. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  39. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  40. package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
  41. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  42. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  43. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  44. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  45. package/src/__tests__/helpers/msw/index.ts +21 -0
  46. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  47. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  48. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  49. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  50. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  51. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  52. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  53. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  54. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  55. package/src/__tests__/https-options.test.ts +142 -109
  56. package/src/__tests__/index.test.ts +244 -231
  57. package/src/__tests__/init.test.ts +2872 -1014
  58. package/src/__tests__/jest.setup.ts +163 -30
  59. package/src/__tests__/kv.test.ts +1660 -1439
  60. package/src/__tests__/logger.test.ts +100 -74
  61. package/src/__tests__/metrics.test.ts +450 -0
  62. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  63. package/src/__tests__/middleware.test.ts +726 -0
  64. package/src/__tests__/package-manager.test.ts +312 -165
  65. package/src/__tests__/pages.test.ts +2380 -322
  66. package/src/__tests__/parse.test.ts +253 -245
  67. package/src/__tests__/paths.test.ts +39 -0
  68. package/src/__tests__/publish.test.ts +7536 -4778
  69. package/src/__tests__/pubsub.test.ts +370 -0
  70. package/src/__tests__/queues.test.ts +371 -0
  71. package/src/__tests__/r2.test.ts +388 -209
  72. package/src/__tests__/route.test.ts +18 -18
  73. package/src/__tests__/secret.test.ts +624 -426
  74. package/src/__tests__/tail.test.ts +677 -567
  75. package/src/__tests__/test-old-node-version.js +31 -0
  76. package/src/__tests__/type-generation.test.ts +225 -0
  77. package/src/__tests__/user.test.ts +140 -116
  78. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  79. package/src/__tests__/validate-dev-props.test.ts +56 -0
  80. package/src/__tests__/version.test.ts +35 -0
  81. package/src/__tests__/whoami.test.tsx +264 -91
  82. package/src/__tests__/worker-namespace.test.ts +326 -0
  83. package/src/abort.d.ts +3 -0
  84. package/src/api/dev.ts +208 -0
  85. package/src/api/index.ts +2 -0
  86. package/src/bundle-reporter.tsx +68 -0
  87. package/src/bundle.ts +781 -135
  88. package/src/cfetch/index.ts +123 -67
  89. package/src/cfetch/internal.ts +216 -90
  90. package/src/cli.ts +23 -8
  91. package/src/config/config.ts +236 -195
  92. package/src/config/diagnostics.ts +61 -61
  93. package/src/config/environment.ts +506 -339
  94. package/src/config/index.ts +309 -38
  95. package/src/config/validation-helpers.ts +379 -357
  96. package/src/config/validation.ts +1942 -1263
  97. package/src/config-cache.ts +81 -41
  98. package/src/create-worker-preview.ts +239 -132
  99. package/src/create-worker-upload-form.ts +300 -224
  100. package/src/d1/backups.tsx +218 -0
  101. package/src/d1/constants.ts +2 -0
  102. package/src/d1/create.tsx +63 -0
  103. package/src/d1/delete.tsx +56 -0
  104. package/src/d1/execute.tsx +344 -0
  105. package/src/d1/formatTimeAgo.ts +14 -0
  106. package/src/d1/index.ts +99 -0
  107. package/src/d1/list.tsx +48 -0
  108. package/src/d1/migrations.tsx +446 -0
  109. package/src/d1/options.ts +22 -0
  110. package/src/d1/types.tsx +24 -0
  111. package/src/d1/utils.ts +48 -0
  112. package/src/delete.ts +108 -0
  113. package/src/deployments.ts +77 -0
  114. package/src/deprecated/index.ts +438 -0
  115. package/src/dev/dev-vars.ts +20 -17
  116. package/src/dev/dev.tsx +522 -353
  117. package/src/dev/get-local-persistence-path.tsx +31 -0
  118. package/src/dev/local.tsx +726 -292
  119. package/src/dev/remote.tsx +591 -201
  120. package/src/dev/start-server.ts +519 -0
  121. package/src/dev/use-esbuild.ts +183 -97
  122. package/src/dev/validate-dev-props.ts +31 -0
  123. package/src/dev-registry.tsx +201 -0
  124. package/src/dev.tsx +868 -0
  125. package/src/dialogs.tsx +147 -65
  126. package/src/dispatch-namespace.ts +207 -0
  127. package/src/durable.ts +102 -0
  128. package/src/entry.ts +248 -186
  129. package/src/environment-variables.ts +38 -23
  130. package/src/errors.ts +6 -6
  131. package/src/git-client.ts +124 -0
  132. package/src/global-wrangler-config-path.ts +26 -0
  133. package/src/https-options.ts +84 -80
  134. package/src/index.tsx +632 -2564
  135. package/src/init.ts +970 -0
  136. package/src/inspect.ts +706 -562
  137. package/src/intl-polyfill.d.ts +123 -123
  138. package/src/is-ci.ts +14 -0
  139. package/src/is-interactive.ts +16 -0
  140. package/src/kv/helpers.ts +430 -0
  141. package/src/kv/index.ts +596 -0
  142. package/src/logger.ts +67 -41
  143. package/src/metrics/index.ts +5 -0
  144. package/src/metrics/metrics-config.ts +239 -0
  145. package/src/metrics/metrics-dispatcher.ts +96 -0
  146. package/src/metrics/metrics-usage-headers.ts +24 -0
  147. package/src/metrics/send-event.ts +94 -0
  148. package/src/miniflare-cli/assets.ts +215 -0
  149. package/src/miniflare-cli/index.ts +205 -33
  150. package/src/miniflare-cli/request-context.ts +18 -18
  151. package/src/module-collection.ts +221 -212
  152. package/src/open-in-browser.ts +5 -14
  153. package/src/package-manager.ts +182 -90
  154. package/src/pages/build.tsx +270 -0
  155. package/src/pages/constants.ts +18 -0
  156. package/src/pages/deployments.tsx +106 -0
  157. package/src/pages/dev.tsx +708 -0
  158. package/src/pages/errors.ts +66 -0
  159. package/src/pages/functions/buildPlugin.ts +106 -0
  160. package/src/pages/functions/buildWorker.ts +165 -0
  161. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  162. package/src/pages/functions/filepath-routing.ts +189 -0
  163. package/src/pages/functions/identifiers.ts +78 -0
  164. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  165. package/src/pages/functions/routes-consolidation.ts +73 -0
  166. package/src/pages/functions/routes-transformation.test.ts +282 -0
  167. package/src/pages/functions/routes-transformation.ts +115 -0
  168. package/src/pages/functions/routes-validation.test.ts +403 -0
  169. package/src/pages/functions/routes-validation.ts +202 -0
  170. package/src/pages/functions/routes.ts +151 -0
  171. package/src/pages/functions.tsx +82 -0
  172. package/src/pages/hash.tsx +13 -0
  173. package/src/pages/index.tsx +94 -0
  174. package/src/pages/projects.tsx +169 -0
  175. package/src/pages/publish.tsx +446 -0
  176. package/src/pages/types.ts +49 -0
  177. package/src/pages/upload.tsx +425 -0
  178. package/src/pages/utils.ts +12 -0
  179. package/src/parse.ts +223 -120
  180. package/src/paths.ts +53 -8
  181. package/src/proxy.ts +623 -388
  182. package/src/publish/index.ts +270 -0
  183. package/src/publish/publish.ts +1035 -0
  184. package/src/pubsub/index.ts +286 -0
  185. package/src/pubsub/pubsub-commands.tsx +624 -0
  186. package/src/queues/cli/commands/consumer/add.ts +71 -0
  187. package/src/queues/cli/commands/consumer/index.ts +22 -0
  188. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  189. package/src/queues/cli/commands/create.ts +25 -0
  190. package/src/queues/cli/commands/delete.ts +26 -0
  191. package/src/queues/cli/commands/index.ts +33 -0
  192. package/src/queues/cli/commands/list.ts +25 -0
  193. package/src/queues/client.ts +135 -0
  194. package/src/r2/constants.ts +4 -0
  195. package/src/r2/helpers.ts +131 -0
  196. package/src/r2/index.ts +289 -0
  197. package/src/routes.ts +140 -0
  198. package/src/secret/index.ts +378 -0
  199. package/src/selfsigned.d.ts +23 -23
  200. package/src/sites.tsx +281 -202
  201. package/src/tail/createTail.ts +315 -0
  202. package/src/tail/filters.ts +108 -110
  203. package/src/tail/index.ts +211 -296
  204. package/src/tail/printing.ts +86 -46
  205. package/src/type-generation.ts +173 -0
  206. package/src/update-check.ts +11 -11
  207. package/src/user/access.ts +69 -0
  208. package/src/user/choose-account.tsx +69 -0
  209. package/src/user/env-vars.ts +46 -0
  210. package/src/user/generate-auth-url.ts +33 -0
  211. package/src/user/generate-random-state.ts +16 -0
  212. package/src/user/index.ts +3 -0
  213. package/src/user/user.tsx +1192 -0
  214. package/src/utils/collectKeyValues.ts +14 -0
  215. package/src/whoami.tsx +141 -42
  216. package/src/worker.ts +174 -101
  217. package/src/yargs-types.ts +20 -0
  218. package/src/zones.ts +191 -0
  219. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  220. package/templates/checked-fetch.js +17 -0
  221. package/templates/d1-beta-facade.js +196 -0
  222. package/templates/experimental-local-cache-stubs.js +27 -0
  223. package/templates/first-party-worker-module-facade.ts +18 -0
  224. package/templates/format-dev-errors.ts +32 -0
  225. package/templates/init-tests/test-jest-new-worker.js +25 -0
  226. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  227. package/templates/middleware/common.ts +62 -0
  228. package/templates/middleware/loader-modules.ts +84 -0
  229. package/templates/middleware/loader-sw.ts +213 -0
  230. package/templates/middleware/middleware-pretty-error.ts +40 -0
  231. package/templates/middleware/middleware-scheduled.ts +15 -0
  232. package/templates/new-worker-scheduled.js +17 -0
  233. package/templates/new-worker-scheduled.ts +32 -0
  234. package/templates/new-worker.js +3 -3
  235. package/templates/new-worker.ts +18 -3
  236. package/templates/no-op-worker.js +10 -0
  237. package/templates/pages-dev-pipeline.ts +28 -0
  238. package/templates/pages-dev-util.ts +52 -0
  239. package/templates/pages-shim.ts +9 -0
  240. package/templates/pages-template-plugin.ts +171 -0
  241. package/templates/pages-template-worker.ts +189 -0
  242. package/templates/serve-static-assets.ts +63 -0
  243. package/templates/service-bindings-module-facade.js +54 -0
  244. package/templates/service-bindings-sw-facade.js +42 -0
  245. package/templates/tsconfig.json +96 -95
  246. package/wrangler-dist/cli.d.ts +891 -0
  247. package/wrangler-dist/cli.js +101091 -50509
  248. package/pages/functions/buildPlugin.ts +0 -92
  249. package/pages/functions/buildWorker.ts +0 -138
  250. package/pages/functions/filepath-routing.ts +0 -189
  251. package/pages/functions/identifiers.ts +0 -78
  252. package/pages/functions/routes.ts +0 -156
  253. package/pages/functions/template-plugin.ts +0 -146
  254. package/pages/functions/template-worker.ts +0 -143
  255. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  256. package/src/kv.ts +0 -319
  257. package/src/miniflare-cli/enum-keys.ts +0 -17
  258. package/src/pages.tsx +0 -1866
  259. package/src/publish.ts +0 -469
  260. package/src/r2.ts +0 -50
  261. package/src/user.tsx +0 -1193
  262. package/templates/static-asset-facade.js +0 -47
  263. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  264. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  265. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  266. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  267. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  268. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  269. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  270. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  271. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  272. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  273. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  274. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  275. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  276. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  277. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  278. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  279. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  280. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  281. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  282. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  283. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  284. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  285. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  286. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  287. package/vendor/wrangler-mime/LICENSE +0 -21
  288. package/vendor/wrangler-mime/Mime.js +0 -97
  289. package/vendor/wrangler-mime/README.md +0 -187
  290. package/vendor/wrangler-mime/cli.js +0 -46
  291. package/vendor/wrangler-mime/index.js +0 -4
  292. package/vendor/wrangler-mime/lite.js +0 -4
  293. package/vendor/wrangler-mime/package.json +0 -52
  294. package/vendor/wrangler-mime/types/other.js +0 -1
  295. package/vendor/wrangler-mime/types/standard.js +0 -1
@@ -1,240 +1,316 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { FormData, File } from "undici";
3
3
  import type {
4
- CfWorkerInit,
5
- CfModuleType,
6
- CfDurableObjectMigrations,
4
+ CfWorkerInit,
5
+ CfModuleType,
6
+ CfDurableObjectMigrations,
7
7
  } from "./worker.js";
8
8
 
9
9
  export function toMimeType(type: CfModuleType): string {
10
- switch (type) {
11
- case "esm":
12
- return "application/javascript+module";
13
- case "commonjs":
14
- return "application/javascript";
15
- case "compiled-wasm":
16
- return "application/wasm";
17
- case "buffer":
18
- return "application/octet-stream";
19
- case "text":
20
- return "text/plain";
21
- default:
22
- throw new TypeError("Unsupported module: " + type);
23
- }
10
+ switch (type) {
11
+ case "esm":
12
+ return "application/javascript+module";
13
+ case "commonjs":
14
+ return "application/javascript";
15
+ case "compiled-wasm":
16
+ return "application/wasm";
17
+ case "buffer":
18
+ return "application/octet-stream";
19
+ case "text":
20
+ return "text/plain";
21
+ default:
22
+ throw new TypeError("Unsupported module: " + type);
23
+ }
24
24
  }
25
25
 
26
+ type WorkerMetadataBinding =
27
+ // If you add any new binding types here, also add it to safeBindings
28
+ // under validateUnsafeBinding in config/validation.ts
29
+ | { type: "plain_text"; name: string; text: string }
30
+ | { type: "json"; name: string; json: unknown }
31
+ | { type: "wasm_module"; name: string; part: string }
32
+ | { type: "text_blob"; name: string; part: string }
33
+ | { type: "data_blob"; name: string; part: string }
34
+ | { type: "kv_namespace"; name: string; namespace_id: string }
35
+ | {
36
+ type: "durable_object_namespace";
37
+ name: string;
38
+ class_name: string;
39
+ script_name?: string;
40
+ environment?: string;
41
+ }
42
+ | { type: "queue"; name: string; queue_name: string }
43
+ | { type: "r2_bucket"; name: string; bucket_name: string }
44
+ | { type: "d1"; name: string; id: string; internalEnv?: string }
45
+ | { type: "service"; name: string; service: string; environment?: string }
46
+ | { type: "namespace"; name: string; namespace: string }
47
+ | {
48
+ type: "logfwdr";
49
+ name: string;
50
+ destination: string;
51
+ };
52
+
26
53
  export interface WorkerMetadata {
27
- /** The name of the entry point module. Only exists when the worker is in the ES module format */
28
- main_module?: string;
29
- /** The name of the entry point module. Only exists when the worker is in the service-worker format */
30
- body_part?: string;
31
- compatibility_date?: string;
32
- compatibility_flags?: string[];
33
- usage_model?: "bundled" | "unbound";
34
- migrations?: CfDurableObjectMigrations;
35
- bindings: (
36
- | { type: "kv_namespace"; name: string; namespace_id: string }
37
- | { type: "plain_text"; name: string; text: string }
38
- | { type: "json"; name: string; json: unknown }
39
- | { type: "wasm_module"; name: string; part: string }
40
- | { type: "text_blob"; name: string; part: string }
41
- | { type: "data_blob"; name: string; part: string }
42
- | {
43
- type: "durable_object_namespace";
44
- name: string;
45
- class_name: string;
46
- script_name?: string;
47
- }
48
- | { type: "r2_bucket"; name: string; bucket_name: string }
49
- )[];
54
+ /** The name of the entry point module. Only exists when the worker is in the ES module format */
55
+ main_module?: string;
56
+ /** The name of the entry point module. Only exists when the worker is in the service-worker format */
57
+ body_part?: string;
58
+ compatibility_date?: string;
59
+ compatibility_flags?: string[];
60
+ usage_model?: "bundled" | "unbound";
61
+ migrations?: CfDurableObjectMigrations;
62
+ capnp_schema?: string;
63
+ bindings: WorkerMetadataBinding[];
64
+ keep_bindings?: WorkerMetadataBinding["type"][];
65
+ logpush?: boolean;
50
66
  }
51
67
 
52
68
  /**
53
69
  * Creates a `FormData` upload from a `CfWorkerInit`.
54
70
  */
55
71
  export function createWorkerUploadForm(worker: CfWorkerInit): FormData {
56
- const formData = new FormData();
57
- const {
58
- main,
59
- bindings,
60
- migrations,
61
- usage_model,
62
- compatibility_date,
63
- compatibility_flags,
64
- } = worker;
65
-
66
- let { modules } = worker;
67
-
68
- const metadataBindings: WorkerMetadata["bindings"] = [];
69
-
70
- bindings.kv_namespaces?.forEach(({ id, binding }) => {
71
- metadataBindings.push({
72
- name: binding,
73
- type: "kv_namespace",
74
- namespace_id: id,
75
- });
76
- });
77
-
78
- bindings.durable_objects?.bindings.forEach(
79
- ({ name, class_name, script_name }) => {
80
- metadataBindings.push({
81
- name,
82
- type: "durable_object_namespace",
83
- class_name: class_name,
84
- ...(script_name && { script_name }),
85
- });
86
- }
87
- );
88
-
89
- bindings.r2_buckets?.forEach(({ binding, bucket_name }) => {
90
- metadataBindings.push({
91
- name: binding,
92
- type: "r2_bucket",
93
- bucket_name,
94
- });
95
- });
96
-
97
- Object.entries(bindings.vars || {})?.forEach(([key, value]) => {
98
- if (typeof value === "string") {
99
- metadataBindings.push({ name: key, type: "plain_text", text: value });
100
- } else {
101
- metadataBindings.push({ name: key, type: "json", json: value });
102
- }
103
- });
104
-
105
- for (const [name, filePath] of Object.entries(bindings.wasm_modules || {})) {
106
- metadataBindings.push({
107
- name,
108
- type: "wasm_module",
109
- part: name,
110
- });
111
-
112
- formData.set(
113
- name,
114
- new File([readFileSync(filePath)], filePath, {
115
- type: "application/wasm",
116
- })
117
- );
118
- }
119
-
120
- for (const [name, filePath] of Object.entries(bindings.text_blobs || {})) {
121
- metadataBindings.push({
122
- name,
123
- type: "text_blob",
124
- part: name,
125
- });
126
-
127
- if (name !== "__STATIC_CONTENT_MANIFEST") {
128
- formData.set(
129
- name,
130
- new File([readFileSync(filePath)], filePath, {
131
- type: "text/plain",
132
- })
133
- );
134
- }
135
- }
136
-
137
- for (const [name, filePath] of Object.entries(bindings.data_blobs || {})) {
138
- metadataBindings.push({
139
- name,
140
- type: "data_blob",
141
- part: name,
142
- });
143
-
144
- formData.set(
145
- name,
146
- new File([readFileSync(filePath)], filePath, {
147
- type: "application/octet-stream",
148
- })
149
- );
150
- }
151
-
152
- if (main.type === "commonjs") {
153
- // This is a service-worker format worker.
154
- for (const module of Object.values([...(modules || [])])) {
155
- if (module.name === "__STATIC_CONTENT_MANIFEST") {
156
- // Add the manifest to the form data.
157
- formData.set(
158
- module.name,
159
- new File([module.content], module.name, {
160
- type: "text/plain",
161
- })
162
- );
163
- // And then remove it from the modules collection
164
- modules = modules?.filter((m) => m !== module);
165
- } else if (
166
- module.type === "compiled-wasm" ||
167
- module.type === "text" ||
168
- module.type === "buffer"
169
- ) {
170
- // Convert all wasm/text/data modules into `wasm_module`/`text_blob`/`data_blob` bindings.
171
- // The "name" of the module is a file path. We use it
172
- // to instead be a "part" of the body, and a reference
173
- // that we can use inside our source. This identifier has to be a valid
174
- // JS identifier, so we replace all non alphanumeric characters
175
- // with an underscore.
176
- const name = module.name.replace(/[^a-zA-Z0-9_$]/g, "_");
177
- metadataBindings.push({
178
- name,
179
- type:
180
- module.type === "compiled-wasm"
181
- ? "wasm_module"
182
- : module.type === "text"
183
- ? "text_blob"
184
- : "data_blob",
185
- part: name,
186
- });
187
-
188
- // Add the module to the form data.
189
- formData.set(
190
- name,
191
- new File([module.content], module.name, {
192
- type:
193
- module.type === "compiled-wasm"
194
- ? "application/wasm"
195
- : module.type === "text"
196
- ? "text/plain"
197
- : "application/octet-stream",
198
- })
199
- );
200
- // And then remove it from the modules collection
201
- modules = modules?.filter((m) => m !== module);
202
- }
203
- }
204
- }
205
-
206
- if (bindings.unsafe) {
207
- // @ts-expect-error unsafe bindings don't need to match a specific type here
208
- metadataBindings.push(...bindings.unsafe);
209
- }
210
-
211
- const metadata: WorkerMetadata = {
212
- ...(main.type !== "commonjs"
213
- ? { main_module: main.name }
214
- : { body_part: main.name }),
215
- bindings: metadataBindings,
216
- ...(compatibility_date && { compatibility_date }),
217
- ...(compatibility_flags && { compatibility_flags }),
218
- ...(usage_model && { usage_model }),
219
- ...(migrations && { migrations }),
220
- };
221
-
222
- formData.set("metadata", JSON.stringify(metadata));
223
-
224
- if (main.type === "commonjs" && modules && modules.length > 0) {
225
- throw new TypeError(
226
- "More than one module can only be specified when type = 'esm'"
227
- );
228
- }
229
-
230
- for (const module of [main].concat(modules || [])) {
231
- formData.set(
232
- module.name,
233
- new File([module.content], module.name, {
234
- type: toMimeType(module.type ?? main.type ?? "esm"),
235
- })
236
- );
237
- }
238
-
239
- return formData;
72
+ const formData = new FormData();
73
+ const {
74
+ main,
75
+ bindings,
76
+ migrations,
77
+ usage_model,
78
+ compatibility_date,
79
+ compatibility_flags,
80
+ keepVars,
81
+ logpush,
82
+ } = worker;
83
+
84
+ let { modules } = worker;
85
+
86
+ const metadataBindings: WorkerMetadata["bindings"] = [];
87
+
88
+ Object.entries(bindings.vars || {})?.forEach(([key, value]) => {
89
+ if (typeof value === "string") {
90
+ metadataBindings.push({ name: key, type: "plain_text", text: value });
91
+ } else {
92
+ metadataBindings.push({ name: key, type: "json", json: value });
93
+ }
94
+ });
95
+
96
+ bindings.kv_namespaces?.forEach(({ id, binding }) => {
97
+ metadataBindings.push({
98
+ name: binding,
99
+ type: "kv_namespace",
100
+ namespace_id: id,
101
+ });
102
+ });
103
+
104
+ bindings.durable_objects?.bindings.forEach(
105
+ ({ name, class_name, script_name, environment }) => {
106
+ metadataBindings.push({
107
+ name,
108
+ type: "durable_object_namespace",
109
+ class_name: class_name,
110
+ ...(script_name && { script_name }),
111
+ ...(environment && { environment }),
112
+ });
113
+ }
114
+ );
115
+
116
+ bindings.queues?.forEach(({ binding, queue_name }) => {
117
+ metadataBindings.push({
118
+ type: "queue",
119
+ name: binding,
120
+ queue_name,
121
+ });
122
+ });
123
+
124
+ bindings.r2_buckets?.forEach(({ binding, bucket_name }) => {
125
+ metadataBindings.push({
126
+ name: binding,
127
+ type: "r2_bucket",
128
+ bucket_name,
129
+ });
130
+ });
131
+
132
+ bindings.d1_databases?.forEach(
133
+ ({ binding, database_id, database_internal_env }) => {
134
+ metadataBindings.push({
135
+ name: binding,
136
+ type: "d1",
137
+ id: database_id,
138
+ internalEnv: database_internal_env,
139
+ });
140
+ }
141
+ );
142
+
143
+ bindings.services?.forEach(({ binding, service, environment }) => {
144
+ metadataBindings.push({
145
+ name: binding,
146
+ type: "service",
147
+ service,
148
+ ...(environment && { environment }),
149
+ });
150
+ });
151
+
152
+ bindings.dispatch_namespaces?.forEach(({ binding, namespace }) => {
153
+ metadataBindings.push({
154
+ name: binding,
155
+ type: "namespace",
156
+ namespace,
157
+ });
158
+ });
159
+
160
+ bindings.logfwdr?.bindings.forEach(({ name, destination }) => {
161
+ metadataBindings.push({
162
+ name: name,
163
+ type: "logfwdr",
164
+ destination,
165
+ });
166
+ });
167
+
168
+ for (const [name, filePath] of Object.entries(bindings.wasm_modules || {})) {
169
+ metadataBindings.push({
170
+ name,
171
+ type: "wasm_module",
172
+ part: name,
173
+ });
174
+
175
+ formData.set(
176
+ name,
177
+ new File([readFileSync(filePath)], filePath, {
178
+ type: "application/wasm",
179
+ })
180
+ );
181
+ }
182
+
183
+ for (const [name, filePath] of Object.entries(bindings.text_blobs || {})) {
184
+ metadataBindings.push({
185
+ name,
186
+ type: "text_blob",
187
+ part: name,
188
+ });
189
+
190
+ if (name !== "__STATIC_CONTENT_MANIFEST") {
191
+ formData.set(
192
+ name,
193
+ new File([readFileSync(filePath)], filePath, {
194
+ type: "text/plain",
195
+ })
196
+ );
197
+ }
198
+ }
199
+
200
+ for (const [name, filePath] of Object.entries(bindings.data_blobs || {})) {
201
+ metadataBindings.push({
202
+ name,
203
+ type: "data_blob",
204
+ part: name,
205
+ });
206
+
207
+ formData.set(
208
+ name,
209
+ new File([readFileSync(filePath)], filePath, {
210
+ type: "application/octet-stream",
211
+ })
212
+ );
213
+ }
214
+
215
+ if (main.type === "commonjs") {
216
+ // This is a service-worker format worker.
217
+ for (const module of Object.values([...(modules || [])])) {
218
+ if (module.name === "__STATIC_CONTENT_MANIFEST") {
219
+ // Add the manifest to the form data.
220
+ formData.set(
221
+ module.name,
222
+ new File([module.content], module.name, {
223
+ type: "text/plain",
224
+ })
225
+ );
226
+ // And then remove it from the modules collection
227
+ modules = modules?.filter((m) => m !== module);
228
+ } else if (
229
+ module.type === "compiled-wasm" ||
230
+ module.type === "text" ||
231
+ module.type === "buffer"
232
+ ) {
233
+ // Convert all wasm/text/data modules into `wasm_module`/`text_blob`/`data_blob` bindings.
234
+ // The "name" of the module is a file path. We use it
235
+ // to instead be a "part" of the body, and a reference
236
+ // that we can use inside our source. This identifier has to be a valid
237
+ // JS identifier, so we replace all non alphanumeric characters
238
+ // with an underscore.
239
+ const name = module.name.replace(/[^a-zA-Z0-9_$]/g, "_");
240
+ metadataBindings.push({
241
+ name,
242
+ type:
243
+ module.type === "compiled-wasm"
244
+ ? "wasm_module"
245
+ : module.type === "text"
246
+ ? "text_blob"
247
+ : "data_blob",
248
+ part: name,
249
+ });
250
+
251
+ // Add the module to the form data.
252
+ formData.set(
253
+ name,
254
+ new File([module.content], module.name, {
255
+ type:
256
+ module.type === "compiled-wasm"
257
+ ? "application/wasm"
258
+ : module.type === "text"
259
+ ? "text/plain"
260
+ : "application/octet-stream",
261
+ })
262
+ );
263
+ // And then remove it from the modules collection
264
+ modules = modules?.filter((m) => m !== module);
265
+ }
266
+ }
267
+ }
268
+
269
+ if (bindings.unsafe) {
270
+ // @ts-expect-error unsafe bindings don't need to match a specific type here
271
+ metadataBindings.push(...bindings.unsafe);
272
+ }
273
+
274
+ const metadata: WorkerMetadata = {
275
+ ...(main.type !== "commonjs"
276
+ ? { main_module: main.name }
277
+ : { body_part: main.name }),
278
+ bindings: metadataBindings,
279
+ ...(compatibility_date && { compatibility_date }),
280
+ ...(compatibility_flags && { compatibility_flags }),
281
+ ...(usage_model && { usage_model }),
282
+ ...(migrations && { migrations }),
283
+ capnp_schema: bindings.logfwdr?.schema,
284
+ ...(keepVars && { keep_bindings: ["plain_text", "json"] }),
285
+ ...(logpush !== undefined && { logpush }),
286
+ };
287
+
288
+ formData.set("metadata", JSON.stringify(metadata));
289
+
290
+ if (main.type === "commonjs" && modules && modules.length > 0) {
291
+ throw new TypeError(
292
+ "More than one module can only be specified when type = 'esm'"
293
+ );
294
+ }
295
+
296
+ for (const module of [main].concat(modules || [])) {
297
+ formData.set(
298
+ module.name,
299
+ new File([module.content], module.name, {
300
+ type: toMimeType(module.type ?? main.type ?? "esm"),
301
+ })
302
+ );
303
+ }
304
+
305
+ if (bindings.logfwdr && bindings.logfwdr.schema) {
306
+ const filePath = bindings.logfwdr.schema;
307
+ formData.set(
308
+ filePath,
309
+ new File([readFileSync(filePath)], filePath, {
310
+ type: "application/octet-stream",
311
+ })
312
+ );
313
+ }
314
+
315
+ return formData;
240
316
  }