wrangler 0.0.0-e64812e → 0.0.0-e7a0cd5b

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