wrangler 0.0.0-e64812e → 0.0.0-e665ccc3

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 (373) hide show
  1. package/README.md +24 -4
  2. package/bin/wrangler.js +170 -62
  3. package/kv-asset-handler.js +1 -0
  4. package/miniflare-dist/index.mjs +1643 -83
  5. package/package.json +198 -152
  6. package/src/__tests__/access.test.ts +25 -0
  7. package/src/__tests__/api-dev.test.ts +238 -0
  8. package/src/__tests__/api-devregistry.test.ts +121 -0
  9. package/src/__tests__/api.test.ts +102 -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 +4506 -3363
  13. package/src/__tests__/constellation.test.ts +371 -0
  14. package/src/__tests__/d1/d1.test.ts +82 -0
  15. package/src/__tests__/d1/execute.test.ts +66 -0
  16. package/src/__tests__/d1/migrate.test.ts +257 -0
  17. package/src/__tests__/d1/splitter.test.ts +255 -0
  18. package/src/__tests__/delete.test.ts +272 -0
  19. package/src/__tests__/deployments.test.ts +369 -0
  20. package/src/__tests__/dev.test.tsx +1589 -952
  21. package/src/__tests__/generate.test.ts +237 -0
  22. package/src/__tests__/get-host-from-url.test.ts +16 -0
  23. package/src/__tests__/guess-worker-format.test.ts +103 -68
  24. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  25. package/src/__tests__/helpers/end-event-loop.ts +6 -0
  26. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  27. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  28. package/src/__tests__/helpers/mock-bin.ts +20 -20
  29. package/src/__tests__/helpers/mock-console.ts +64 -39
  30. package/src/__tests__/helpers/mock-dialogs.ts +88 -79
  31. package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
  32. package/src/__tests__/helpers/mock-get-zone-from-host.ts +11 -0
  33. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  34. package/src/__tests__/helpers/mock-istty.ts +65 -18
  35. package/src/__tests__/helpers/mock-known-routes.ts +12 -0
  36. package/src/__tests__/helpers/mock-kv.ts +41 -28
  37. package/src/__tests__/helpers/mock-oauth-flow.ts +241 -233
  38. package/src/__tests__/helpers/mock-process.ts +34 -0
  39. package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
  40. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  41. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  42. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  43. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  44. package/src/__tests__/helpers/msw/handlers/deployments.ts +160 -0
  45. package/src/__tests__/helpers/msw/handlers/namespaces.ts +81 -0
  46. package/src/__tests__/helpers/msw/handlers/oauth.ts +31 -0
  47. package/src/__tests__/helpers/msw/handlers/r2.ts +60 -0
  48. package/src/__tests__/helpers/msw/handlers/script.ts +56 -0
  49. package/src/__tests__/helpers/msw/handlers/user.ts +52 -0
  50. package/src/__tests__/helpers/msw/handlers/zones.ts +20 -0
  51. package/src/__tests__/helpers/msw/index.ts +52 -0
  52. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  53. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  54. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  55. package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
  56. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  57. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  58. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  59. package/src/__tests__/helpers/worker-scripts/parent-worker.js +11 -0
  60. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  61. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  62. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  63. package/src/__tests__/https-options.test.ts +142 -109
  64. package/src/__tests__/index.test.ts +262 -236
  65. package/src/__tests__/init.test.ts +3167 -1605
  66. package/src/__tests__/jest.setup.ts +152 -50
  67. package/src/__tests__/kv.test.ts +1789 -1471
  68. package/src/__tests__/logger.test.ts +167 -75
  69. package/src/__tests__/logout.test.ts +47 -0
  70. package/src/__tests__/metrics.test.ts +493 -0
  71. package/src/__tests__/middleware.scheduled.test.ts +145 -0
  72. package/src/__tests__/middleware.test.ts +816 -0
  73. package/src/__tests__/mtls-certificates.test.ts +589 -0
  74. package/src/__tests__/package-manager.test.ts +303 -303
  75. package/src/__tests__/pages/deployment-list.test.ts +80 -0
  76. package/src/__tests__/pages/functions-build.test.ts +528 -0
  77. package/src/__tests__/pages/pages.test.ts +81 -0
  78. package/src/__tests__/pages/project-create.test.ts +63 -0
  79. package/src/__tests__/pages/project-list.test.ts +110 -0
  80. package/src/__tests__/pages/project-upload.test.ts +500 -0
  81. package/src/__tests__/pages/publish.test.ts +2864 -0
  82. package/src/__tests__/pages-deployment-tail.test.ts +957 -0
  83. package/src/__tests__/parse.test.ts +358 -252
  84. package/src/__tests__/paths.test.ts +39 -0
  85. package/src/__tests__/publish.test.ts +8736 -5355
  86. package/src/__tests__/pubsub.test.ts +496 -0
  87. package/src/__tests__/queues.test.ts +532 -0
  88. package/src/__tests__/r2.test.ts +369 -228
  89. package/src/__tests__/route.test.ts +18 -18
  90. package/src/__tests__/secret.test.ts +681 -469
  91. package/src/__tests__/tail.test.ts +866 -567
  92. package/src/__tests__/test-old-node-version.js +31 -0
  93. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  94. package/src/__tests__/tsconfig-sanity.ts +12 -0
  95. package/src/__tests__/tsconfig.json +8 -0
  96. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  97. package/src/__tests__/type-generation.test.ts +234 -0
  98. package/src/__tests__/user.test.ts +107 -120
  99. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  100. package/src/__tests__/validate-dev-props.test.ts +56 -0
  101. package/src/__tests__/version.test.ts +35 -0
  102. package/src/__tests__/whoami.test.tsx +165 -98
  103. package/src/__tests__/worker-namespace.test.ts +340 -0
  104. package/src/abort.d.ts +1 -1
  105. package/src/api/dev.ts +321 -0
  106. package/src/api/index.ts +11 -0
  107. package/src/api/mtls-certificate.ts +148 -0
  108. package/src/api/pages/create-worker-bundle-contents.ts +77 -0
  109. package/src/api/pages/index.ts +5 -0
  110. package/src/api/pages/publish.tsx +371 -0
  111. package/src/bundle-reporter.ts +68 -0
  112. package/src/bundle.ts +890 -161
  113. package/src/cfetch/index.ts +120 -83
  114. package/src/cfetch/internal.ts +210 -97
  115. package/src/cli.ts +23 -8
  116. package/src/config/config.ts +244 -196
  117. package/src/config/diagnostics.ts +61 -61
  118. package/src/config/environment.ts +562 -357
  119. package/src/config/index.ts +374 -196
  120. package/src/config/validation-helpers.ts +379 -357
  121. package/src/config/validation.ts +2197 -1367
  122. package/src/config-cache.ts +81 -41
  123. package/src/constellation/createProject.tsx +51 -0
  124. package/src/constellation/deleteProject.ts +51 -0
  125. package/src/constellation/deleteProjectModel.ts +68 -0
  126. package/src/constellation/index.ts +75 -0
  127. package/src/constellation/listCatalog.tsx +35 -0
  128. package/src/constellation/listModel.tsx +41 -0
  129. package/src/constellation/listProject.tsx +28 -0
  130. package/src/constellation/listRuntime.tsx +28 -0
  131. package/src/constellation/options.ts +17 -0
  132. package/src/constellation/types.ts +17 -0
  133. package/src/constellation/uploadModel.tsx +64 -0
  134. package/src/constellation/utils.ts +90 -0
  135. package/src/create-worker-preview.ts +250 -142
  136. package/src/create-worker-upload-form.ts +347 -238
  137. package/src/d1/backups.tsx +219 -0
  138. package/src/d1/constants.ts +2 -0
  139. package/src/d1/create.tsx +70 -0
  140. package/src/d1/delete.ts +53 -0
  141. package/src/d1/execute.tsx +357 -0
  142. package/src/d1/formatTimeAgo.ts +14 -0
  143. package/src/d1/index.ts +100 -0
  144. package/src/d1/list.tsx +62 -0
  145. package/src/d1/migrations/apply.tsx +212 -0
  146. package/src/d1/migrations/create.tsx +79 -0
  147. package/src/d1/migrations/helpers.ts +169 -0
  148. package/src/d1/migrations/index.ts +3 -0
  149. package/src/d1/migrations/list.tsx +95 -0
  150. package/src/d1/migrations/options.ts +23 -0
  151. package/src/d1/options.ts +22 -0
  152. package/src/d1/splitter.ts +161 -0
  153. package/src/d1/types.ts +25 -0
  154. package/src/d1/utils.ts +49 -0
  155. package/src/delete.ts +100 -0
  156. package/src/deployments.ts +368 -0
  157. package/src/deprecated/index.ts +144 -0
  158. package/src/dev/dev-vars.ts +20 -17
  159. package/src/dev/dev.tsx +538 -352
  160. package/src/dev/get-local-persistence-path.ts +31 -0
  161. package/src/dev/local.tsx +932 -298
  162. package/src/dev/remote.tsx +623 -215
  163. package/src/dev/start-server.ts +545 -0
  164. package/src/dev/use-esbuild.ts +194 -97
  165. package/src/dev/validate-dev-props.ts +40 -0
  166. package/src/dev-registry.ts +202 -0
  167. package/src/dev.tsx +934 -0
  168. package/src/dialogs.ts +136 -0
  169. package/src/dispatch-namespace.ts +211 -0
  170. package/src/docs/helpers.ts +50 -0
  171. package/src/docs/index.ts +54 -0
  172. package/src/durable.ts +87 -87
  173. package/src/entry.ts +253 -231
  174. package/src/environment-variables/factory.ts +89 -0
  175. package/src/environment-variables/misc-variables.ts +30 -0
  176. package/src/errors.ts +6 -6
  177. package/src/generate/index.ts +298 -0
  178. package/src/git-client.ts +135 -0
  179. package/src/global-wrangler-config-path.ts +26 -0
  180. package/src/https-options.ts +84 -80
  181. package/src/index.ts +768 -0
  182. package/src/init.ts +1037 -0
  183. package/src/inspect.ts +816 -595
  184. package/src/intl-polyfill.d.ts +123 -123
  185. package/src/is-ci.ts +14 -0
  186. package/src/is-interactive.ts +16 -0
  187. package/src/jest.d.ts +4 -0
  188. package/src/kv/helpers.ts +433 -0
  189. package/src/kv/index.ts +594 -0
  190. package/src/logger.ts +100 -43
  191. package/src/metrics/index.ts +5 -0
  192. package/src/metrics/metrics-config.ts +239 -0
  193. package/src/metrics/metrics-dispatcher.ts +96 -0
  194. package/src/metrics/metrics-usage-headers.ts +24 -0
  195. package/src/metrics/send-event.ts +99 -0
  196. package/src/miniflare-cli/assets.ts +255 -0
  197. package/src/miniflare-cli/index.ts +202 -33
  198. package/src/miniflare-cli/request-context.ts +18 -18
  199. package/src/miniflare-cli/tsconfig.json +9 -0
  200. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  201. package/src/miniflare-cli/types.ts +11 -0
  202. package/src/module-collection.ts +290 -215
  203. package/src/mtls-certificate/cli.ts +155 -0
  204. package/src/open-in-browser.ts +4 -6
  205. package/src/package-manager.ts +173 -128
  206. package/src/pages/build.ts +423 -0
  207. package/src/pages/buildFunctions.ts +140 -0
  208. package/src/pages/constants.ts +18 -0
  209. package/src/pages/deployment-tails.ts +281 -0
  210. package/src/pages/deployments.tsx +84 -0
  211. package/src/pages/dev.ts +734 -0
  212. package/src/pages/errors.ts +67 -0
  213. package/src/pages/functions/buildPlugin.ts +114 -0
  214. package/src/pages/functions/buildWorker.ts +350 -0
  215. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  216. package/src/pages/functions/filepath-routing.ts +189 -0
  217. package/src/pages/functions/identifiers.ts +78 -0
  218. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  219. package/src/pages/functions/routes-consolidation.ts +73 -0
  220. package/src/pages/functions/routes-transformation.test.ts +282 -0
  221. package/src/pages/functions/routes-transformation.ts +115 -0
  222. package/src/pages/functions/routes-validation.test.ts +403 -0
  223. package/src/pages/functions/routes-validation.ts +202 -0
  224. package/src/pages/functions/routes.ts +151 -0
  225. package/src/pages/functions/tsconfig.json +8 -0
  226. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  227. package/src/pages/functions.ts +86 -0
  228. package/src/pages/hash.ts +13 -0
  229. package/src/pages/index.ts +102 -0
  230. package/src/pages/projects.tsx +159 -0
  231. package/src/pages/prompt-select-project.tsx +31 -0
  232. package/src/pages/publish.tsx +267 -0
  233. package/src/pages/types.ts +46 -0
  234. package/src/pages/upload.tsx +469 -0
  235. package/src/pages/utils.ts +23 -0
  236. package/src/parse.ts +232 -126
  237. package/src/paths.ts +53 -8
  238. package/src/proxy.ts +623 -394
  239. package/src/publish/index.ts +274 -0
  240. package/src/publish/publish.ts +1065 -0
  241. package/src/pubsub/index.ts +286 -0
  242. package/src/pubsub/pubsub-commands.ts +623 -0
  243. package/src/queues/cli/commands/consumer/add.ts +71 -0
  244. package/src/queues/cli/commands/consumer/index.ts +19 -0
  245. package/src/queues/cli/commands/consumer/remove.ts +31 -0
  246. package/src/queues/cli/commands/create.ts +25 -0
  247. package/src/queues/cli/commands/delete.ts +26 -0
  248. package/src/queues/cli/commands/index.ts +35 -0
  249. package/src/queues/cli/commands/list.ts +25 -0
  250. package/src/queues/client.ts +136 -0
  251. package/src/queues/utils.ts +18 -0
  252. package/src/r2/constants.ts +4 -0
  253. package/src/r2/helpers.ts +132 -0
  254. package/src/r2/index.ts +289 -0
  255. package/src/routes.ts +140 -0
  256. package/src/secret/index.ts +377 -0
  257. package/src/selfsigned.d.ts +23 -23
  258. package/src/sites.ts +484 -0
  259. package/src/tail/createTail.ts +415 -0
  260. package/src/tail/filters.ts +109 -111
  261. package/src/tail/index.ts +208 -296
  262. package/src/tail/printing.ts +116 -51
  263. package/src/traverse-module-graph.ts +54 -0
  264. package/src/tsconfig-sanity.ts +16 -0
  265. package/src/type-generation.ts +181 -0
  266. package/src/update-check.ts +11 -11
  267. package/src/user/access.ts +68 -0
  268. package/src/user/auth-variables.ts +113 -0
  269. package/src/user/choose-account.tsx +39 -0
  270. package/src/user/generate-auth-url.ts +33 -0
  271. package/src/user/generate-random-state.ts +16 -0
  272. package/src/user/index.ts +2 -0
  273. package/src/user/user.ts +1234 -0
  274. package/src/utils/collectKeyValues.ts +14 -0
  275. package/src/utils/render.ts +93 -0
  276. package/src/whoami.ts +135 -0
  277. package/src/worker.ts +205 -106
  278. package/src/yargs-types.ts +37 -0
  279. package/src/zones.ts +191 -0
  280. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  281. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  282. package/templates/__tests__/tsconfig.json +8 -0
  283. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  284. package/templates/checked-fetch.js +23 -0
  285. package/templates/d1-beta-facade.js +244 -0
  286. package/templates/facade.d.ts +14 -0
  287. package/templates/first-party-worker-module-facade.ts +19 -0
  288. package/templates/format-dev-errors.ts +34 -0
  289. package/templates/gitignore +1 -0
  290. package/templates/init-tests/test-jest-new-worker.js +23 -0
  291. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  292. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  293. package/templates/middleware/common.ts +62 -0
  294. package/templates/middleware/loader-modules.ts +84 -0
  295. package/templates/middleware/loader-sw.ts +233 -0
  296. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  297. package/templates/middleware/middleware-pretty-error.ts +40 -0
  298. package/templates/middleware/middleware-scheduled.ts +15 -0
  299. package/templates/new-worker-scheduled.js +3 -3
  300. package/templates/new-worker-scheduled.ts +15 -15
  301. package/templates/new-worker.js +3 -3
  302. package/templates/new-worker.ts +18 -15
  303. package/templates/no-op-worker.js +10 -0
  304. package/templates/pages-dev-pipeline.ts +31 -0
  305. package/templates/pages-dev-util.ts +52 -0
  306. package/templates/pages-shim.ts +12 -0
  307. package/templates/pages-template-plugin.ts +180 -0
  308. package/templates/pages-template-worker.ts +189 -0
  309. package/templates/serve-static-assets.ts +66 -0
  310. package/templates/service-bindings-module-facade.js +55 -0
  311. package/templates/service-bindings-sw-facade.js +42 -0
  312. package/templates/tsconfig-sanity.ts +11 -0
  313. package/templates/tsconfig.init.json +105 -0
  314. package/templates/tsconfig.json +6 -103
  315. package/templates/tsconfig.tsbuildinfo +1 -0
  316. package/wrangler-dist/cli.d.ts +1652 -0
  317. package/wrangler-dist/cli.js +137978 -110578
  318. package/wrangler-dist/wasm-sync.wasm +0 -0
  319. package/pages/functions/buildPlugin.ts +0 -105
  320. package/pages/functions/buildWorker.ts +0 -151
  321. package/pages/functions/filepath-routing.ts +0 -189
  322. package/pages/functions/identifiers.ts +0 -78
  323. package/pages/functions/routes.ts +0 -156
  324. package/pages/functions/template-plugin.ts +0 -147
  325. package/pages/functions/template-worker.ts +0 -143
  326. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  327. package/src/__tests__/helpers/mock-cfetch.ts +0 -211
  328. package/src/__tests__/pages.test.ts +0 -754
  329. package/src/dialogs.tsx +0 -135
  330. package/src/environment-variables.ts +0 -35
  331. package/src/index.tsx +0 -2864
  332. package/src/kv.ts +0 -408
  333. package/src/miniflare-cli/enum-keys.ts +0 -17
  334. package/src/pages.tsx +0 -2038
  335. package/src/publish.ts +0 -583
  336. package/src/r2.ts +0 -50
  337. package/src/sites.tsx +0 -295
  338. package/src/user.tsx +0 -1203
  339. package/src/whoami.tsx +0 -70
  340. package/templates/static-asset-facade.js +0 -47
  341. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  342. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  343. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  344. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  345. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  346. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  347. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  348. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  349. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  350. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  351. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  352. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  353. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  354. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  355. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  356. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  357. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  358. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  359. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  360. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  361. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  362. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  363. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  364. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  365. package/vendor/wrangler-mime/LICENSE +0 -21
  366. package/vendor/wrangler-mime/Mime.js +0 -97
  367. package/vendor/wrangler-mime/README.md +0 -187
  368. package/vendor/wrangler-mime/cli.js +0 -46
  369. package/vendor/wrangler-mime/index.js +0 -4
  370. package/vendor/wrangler-mime/lite.js +0 -4
  371. package/vendor/wrangler-mime/package.json +0 -52
  372. package/vendor/wrangler-mime/types/other.js +0 -1
  373. package/vendor/wrangler-mime/types/standard.js +0 -1
package/src/api/dev.ts ADDED
@@ -0,0 +1,321 @@
1
+ import { fetch, Request } from "undici";
2
+ import { startApiDev, startDev } from "../dev";
3
+ import { logger } from "../logger";
4
+
5
+ import type { Environment } from "../config";
6
+ import type { Rule } from "../config/environment";
7
+ import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli/types";
8
+ import type { RequestInit, Response, RequestInfo } from "undici";
9
+
10
+ export interface UnstableDevOptions {
11
+ config?: string; // Path to .toml configuration file, relative to cwd
12
+ env?: string; // Environment to use for operations and .env files
13
+ ip?: string; // IP address to listen on
14
+ port?: number; // Port to listen on
15
+ bundle?: boolean; // Set to false to skip internal build steps and directly publish script
16
+ inspectorPort?: number; // Port for devtools to connect to
17
+ localProtocol?: "http" | "https"; // Protocol to listen to requests on, defaults to http.
18
+ assets?: string; // Static assets to be served
19
+ site?: string; // Root folder of static assets for Workers Sites
20
+ siteInclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
21
+ siteExclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
22
+ nodeCompat?: boolean; // Enable Node.js compatibility
23
+ compatibilityDate?: string; // Date to use for compatibility checks
24
+ compatibilityFlags?: string[]; // Flags to use for compatibility checks
25
+ persist?: boolean; // Enable persistence for local mode, using default path: .wrangler/state
26
+ persistTo?: string; // Specify directory to use for local persistence (implies --persist)
27
+ vars?: {
28
+ [key: string]: unknown;
29
+ };
30
+ kv?: {
31
+ binding: string;
32
+ id: string;
33
+ preview_id?: string;
34
+ }[];
35
+ durableObjects?: {
36
+ name: string;
37
+ class_name: string;
38
+ script_name?: string | undefined;
39
+ environment?: string | undefined;
40
+ }[];
41
+ r2?: {
42
+ binding: string;
43
+ bucket_name: string;
44
+ preview_bucket_name?: string;
45
+ }[];
46
+ processEntrypoint?: boolean;
47
+ moduleRoot?: string;
48
+ rules?: Rule[];
49
+ logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug"; // Specify logging level [choices: "debug", "info", "log", "warn", "error", "none"] [default: "log"]
50
+ inspect?: boolean;
51
+ local?: boolean;
52
+ accountId?: string;
53
+ experimental?: {
54
+ d1Databases?: Environment["d1_databases"];
55
+ disableExperimentalWarning?: boolean; // Disables wrangler's warning when unstable APIs are used.
56
+ disableDevRegistry?: boolean; // Disables wrangler's support multi-worker setups. May reduce flakiness when used in tests in CI.
57
+ enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
58
+ experimentalLocal?: boolean; // Use Miniflare 3 instead of Miniflare 2
59
+ experimentalLocalRemoteKv?: boolean;
60
+ forceLocal?: boolean;
61
+ liveReload?: boolean; // Auto reload HTML pages when change is detected in local mode
62
+ showInteractiveDevSession?: boolean;
63
+ testMode?: boolean; // This option shouldn't be used - We plan on removing it eventually
64
+ testScheduled?: boolean; // Test scheduled events by visiting /__scheduled in browser
65
+ watch?: boolean; // unstable_dev doesn't support watch-mode yet in testMode
66
+ };
67
+ }
68
+
69
+ export interface UnstableDevWorker {
70
+ port: number;
71
+ address: string;
72
+ stop: () => Promise<void>;
73
+ fetch: (input?: RequestInfo, init?: RequestInit) => Promise<Response>;
74
+ waitUntilExit: () => Promise<void>;
75
+ }
76
+ /**
77
+ * unstable_dev starts a wrangler dev server, and returns a promise that resolves with utility functions to interact with it.
78
+ */
79
+ export async function unstable_dev(
80
+ script: string,
81
+ options?: UnstableDevOptions,
82
+ apiOptions?: unknown
83
+ ): Promise<UnstableDevWorker> {
84
+ // Note that not every experimental option is passed directly through to the underlying dev API - experimental options can be used here in unstable_dev. Otherwise we could just pass experimental down to dev blindly.
85
+
86
+ const experimentalOptions = {
87
+ // Defaults for "experimental" options
88
+ disableDevRegistry: false,
89
+ disableExperimentalWarning: false,
90
+ showInteractiveDevSession: false,
91
+ testMode: true,
92
+ // Override all options, including overwriting with "undefined"
93
+ ...options?.experimental,
94
+ };
95
+
96
+ const {
97
+ // there are two types of "experimental" options:
98
+ // 1. options to unstable_dev that we're still testing or are unsure of
99
+ disableDevRegistry,
100
+ disableExperimentalWarning,
101
+ forceLocal,
102
+ liveReload,
103
+ showInteractiveDevSession,
104
+ testMode,
105
+ testScheduled,
106
+ // 2. options for alpha/beta products/libs
107
+ d1Databases,
108
+ experimentalLocal,
109
+ experimentalLocalRemoteKv,
110
+ enablePagesAssetsServiceBinding,
111
+ } = experimentalOptions;
112
+
113
+ if (apiOptions) {
114
+ logger.error(
115
+ "unstable_dev's third argument (apiOptions) has been deprecated in favor of an `experimental` property within the second argument (options).\nPlease update your code from:\n`await unstable_dev('...', {...}, {...});`\nto:\n`await unstable_dev('...', {..., experimental: {...}});`"
116
+ );
117
+ }
118
+
119
+ if (!disableExperimentalWarning) {
120
+ logger.warn(
121
+ `unstable_dev() is experimental\nunstable_dev()'s behaviour will likely change in future releases`
122
+ );
123
+ }
124
+ let readyPort: number;
125
+ let readyAddress: string;
126
+ //due to Pages adoption of unstable_dev, we can't *just* disable rebuilds and watching. instead, we'll have two versions of startDev, which will converge.
127
+ if (testMode) {
128
+ //in testMode, we can run multiple wranglers in parallel, but rebuilds might not work out of the box
129
+ return new Promise<UnstableDevWorker>((resolve) => {
130
+ //lmao
131
+ return new Promise<Awaited<ReturnType<typeof startApiDev>>>((ready) => {
132
+ // once the devServer is ready for requests, we resolve the inner promise
133
+ // (where we've named the resolve function "ready")
134
+ const devServer = startApiDev({
135
+ script: script,
136
+ inspect: false,
137
+ logLevel: "none",
138
+ _: [],
139
+ $0: "",
140
+ port: options?.port ?? 0,
141
+ local: true,
142
+ d1Databases,
143
+ disableDevRegistry,
144
+ testScheduled: testScheduled ?? false,
145
+ experimentalLocal: experimentalLocal ?? false,
146
+ experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
147
+ enablePagesAssetsServiceBinding,
148
+ liveReload,
149
+ showInteractiveDevSession,
150
+ onReady: (address, port) => {
151
+ readyPort = port;
152
+ readyAddress = address;
153
+ ready(devServer);
154
+ },
155
+ config: options?.config,
156
+ env: options?.env,
157
+ processEntrypoint: !!options?.processEntrypoint,
158
+ bundle: options?.bundle,
159
+ compatibilityDate: options?.compatibilityDate,
160
+ compatibilityFlags: options?.compatibilityFlags,
161
+ ip: options?.ip,
162
+ inspectorPort: options?.inspectorPort,
163
+ v: undefined,
164
+ localProtocol: options?.localProtocol,
165
+ assets: options?.assets,
166
+ site: options?.site, // Root folder of static assets for Workers Sites
167
+ siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
168
+ siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
169
+ nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
170
+ persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
171
+ persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
172
+ experimentalJsonConfig: undefined,
173
+ name: undefined,
174
+ noBundle: false,
175
+ format: undefined,
176
+ latest: false,
177
+ routes: undefined,
178
+ host: undefined,
179
+ localUpstream: undefined,
180
+ experimentalPublic: undefined,
181
+ upstreamProtocol: undefined,
182
+ var: undefined,
183
+ define: undefined,
184
+ jsxFactory: undefined,
185
+ jsxFragment: undefined,
186
+ tsconfig: undefined,
187
+ minify: undefined,
188
+ experimentalEnableLocalPersistence: undefined,
189
+ legacyEnv: undefined,
190
+ public: undefined,
191
+ ...options,
192
+ });
193
+ }).then((devServer) => {
194
+ // now that the inner promise has resolved, we can resolve the outer promise
195
+ // with an object that lets you fetch and stop the dev server
196
+ resolve({
197
+ port: readyPort,
198
+ address: readyAddress,
199
+ stop: devServer.stop,
200
+ fetch: async (input?: RequestInfo, init?: RequestInit) => {
201
+ return await fetch(
202
+ ...parseRequestInput(
203
+ readyAddress,
204
+ readyPort,
205
+ input,
206
+ init,
207
+ options?.localProtocol
208
+ )
209
+ );
210
+ },
211
+ //no-op, does nothing in tests
212
+ waitUntilExit: async () => {
213
+ return;
214
+ },
215
+ });
216
+ });
217
+ });
218
+ } else {
219
+ //outside of test mode, rebuilds work fine, but only one instance of wrangler will work at a time
220
+
221
+ return new Promise<UnstableDevWorker>((resolve) => {
222
+ //lmao
223
+ return new Promise<Awaited<ReturnType<typeof startDev>>>((ready) => {
224
+ const devServer = startDev({
225
+ script: script,
226
+ inspect: false,
227
+ _: [],
228
+ $0: "",
229
+ logLevel: options?.logLevel ?? "log",
230
+ port: options?.port ?? 0,
231
+ local: true,
232
+ showInteractiveDevSession,
233
+ d1Databases,
234
+ disableDevRegistry,
235
+ testScheduled: testScheduled ?? false,
236
+ experimentalLocal: experimentalLocal ?? false,
237
+ experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
238
+ enablePagesAssetsServiceBinding,
239
+ forceLocal,
240
+ liveReload,
241
+ onReady: (address, port) => {
242
+ readyPort = port;
243
+ readyAddress = address;
244
+ ready(devServer);
245
+ },
246
+ config: options?.config,
247
+ env: options?.env,
248
+ bundle: options?.bundle,
249
+ compatibilityDate: options?.compatibilityDate,
250
+ compatibilityFlags: options?.compatibilityFlags,
251
+ ip: options?.ip,
252
+ inspectorPort: options?.inspectorPort,
253
+ v: undefined,
254
+ localProtocol: options?.localProtocol,
255
+ assets: options?.assets,
256
+ site: options?.site, // Root folder of static assets for Workers Sites
257
+ siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
258
+ siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
259
+ nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
260
+ persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
261
+ persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
262
+ experimentalJsonConfig: undefined,
263
+ name: undefined,
264
+ noBundle: false,
265
+ format: undefined,
266
+ latest: false,
267
+ routes: undefined,
268
+ host: undefined,
269
+ localUpstream: undefined,
270
+ experimentalPublic: undefined,
271
+ upstreamProtocol: undefined,
272
+ var: undefined,
273
+ define: undefined,
274
+ jsxFactory: undefined,
275
+ jsxFragment: undefined,
276
+ tsconfig: undefined,
277
+ minify: undefined,
278
+ experimentalEnableLocalPersistence: undefined,
279
+ legacyEnv: undefined,
280
+ public: undefined,
281
+ ...options,
282
+ });
283
+ }).then((devServer) => {
284
+ resolve({
285
+ port: readyPort,
286
+ address: readyAddress,
287
+ stop: devServer.stop,
288
+ fetch: async (input?: RequestInfo, init?: RequestInit) => {
289
+ return await fetch(
290
+ ...parseRequestInput(
291
+ readyAddress,
292
+ readyPort,
293
+ input,
294
+ init,
295
+ options?.localProtocol
296
+ )
297
+ );
298
+ },
299
+ waitUntilExit: devServer.devReactElement.waitUntilExit,
300
+ });
301
+ });
302
+ });
303
+ }
304
+ }
305
+
306
+ export function parseRequestInput(
307
+ readyAddress: string,
308
+ readyPort: number,
309
+ input: RequestInfo = "/",
310
+ init?: RequestInit,
311
+ protocol: "http" | "https" = "http"
312
+ ): [RequestInfo, RequestInit | undefined] {
313
+ if (input instanceof Request) {
314
+ return [input, undefined];
315
+ }
316
+ const url = new URL(`${input}`, `${protocol}://${readyAddress}:${readyPort}`);
317
+ url.protocol = protocol;
318
+ url.hostname = readyAddress;
319
+ url.port = readyPort.toString();
320
+ return [url, init];
321
+ }
@@ -0,0 +1,11 @@
1
+ export { unstable_dev } from "./dev";
2
+ export type { UnstableDevWorker, UnstableDevOptions } from "./dev";
3
+ export { unstable_pages } from "./pages";
4
+ export {
5
+ uploadMTlsCertificate,
6
+ uploadMTlsCertificateFromFs,
7
+ listMTlsCertificates,
8
+ getMTlsCertificate,
9
+ getMTlsCertificateByName,
10
+ deleteMTlsCertificate,
11
+ } from "./mtls-certificate";
@@ -0,0 +1,148 @@
1
+ import { fetchResult } from "../cfetch";
2
+ import { readFileSync } from "../parse";
3
+
4
+ /**
5
+ * the representation of an mTLS certificate in the account certificate store
6
+ */
7
+ export interface MTlsCertificateResponse {
8
+ id: string;
9
+ name?: string;
10
+ ca: boolean;
11
+ certificates: string;
12
+ expires_on: string;
13
+ issuer: string;
14
+ serial_number: string;
15
+ signature: string;
16
+ uploaded_on: string;
17
+ }
18
+
19
+ /**
20
+ * details for uploading an mTLS certificate from disk
21
+ */
22
+ export interface MTlsCertificateUploadDetails {
23
+ certificateChainFilename: string;
24
+ privateKeyFilename: string;
25
+ name?: string;
26
+ }
27
+
28
+ /**
29
+ * details for uploading an mTLS certificate via the ssl api
30
+ */
31
+ export interface MTlsCertificateBody {
32
+ certificateChain: string;
33
+ privateKey: string;
34
+ name?: string;
35
+ }
36
+
37
+ /**
38
+ * supported filters for listing mTLS certificates via the ssl api
39
+ */
40
+ export interface MTlsCertificateListFilter {
41
+ name?: string;
42
+ }
43
+
44
+ /**
45
+ * indicates that looking up a certificate by name failed due to zero matching results
46
+ */
47
+ export class ErrorMTlsCertificateNameNotFound extends Error {}
48
+
49
+ /**
50
+ * indicates that looking up a certificate by name failed due to more than one matching results
51
+ */
52
+ export class ErrorMTlsCertificateManyNamesMatch extends Error {}
53
+
54
+ /**
55
+ * reads an mTLS certificate and private key pair from disk and uploads it to the account mTLS certificate store
56
+ */
57
+ export async function uploadMTlsCertificateFromFs(
58
+ accountId: string,
59
+ details: MTlsCertificateUploadDetails
60
+ ): Promise<MTlsCertificateResponse> {
61
+ return await uploadMTlsCertificate(accountId, {
62
+ certificateChain: readFileSync(details.certificateChainFilename),
63
+ privateKey: readFileSync(details.privateKeyFilename),
64
+ name: details.name,
65
+ });
66
+ }
67
+
68
+ /**
69
+ * uploads an mTLS certificate and private key pair to the account mTLS certificate store
70
+ */
71
+ export async function uploadMTlsCertificate(
72
+ accountId: string,
73
+ body: MTlsCertificateBody
74
+ ): Promise<MTlsCertificateResponse> {
75
+ return await fetchResult(`/accounts/${accountId}/mtls_certificates`, {
76
+ method: "POST",
77
+ body: JSON.stringify({
78
+ name: body.name,
79
+ certificates: body.certificateChain,
80
+ private_key: body.privateKey,
81
+ ca: false,
82
+ }),
83
+ });
84
+ }
85
+
86
+ /**
87
+ * fetches an mTLS certificate from the account mTLS certificate store by ID
88
+ */
89
+ export async function getMTlsCertificate(
90
+ accountId: string,
91
+ id: string
92
+ ): Promise<MTlsCertificateResponse> {
93
+ return await fetchResult(
94
+ `/accounts/${accountId}/mtls_certificates/${id}`,
95
+ {}
96
+ );
97
+ }
98
+
99
+ /**
100
+ * lists mTLS certificates for an account. filtering by name is supported
101
+ */
102
+ export async function listMTlsCertificates(
103
+ accountId: string,
104
+ filter: MTlsCertificateListFilter
105
+ ): Promise<MTlsCertificateResponse[]> {
106
+ const params = new URLSearchParams();
107
+ params.append("ca", "false");
108
+ if (filter.name) {
109
+ params.append("name", filter.name);
110
+ }
111
+ return await fetchResult(
112
+ `/accounts/${accountId}/mtls_certificates`,
113
+ {},
114
+ params
115
+ );
116
+ }
117
+
118
+ /**
119
+ * fetches an mTLS certificate from the account mTLS certificate store by name. will throw an error if no certificates are found, or multiple are found with that name
120
+ */
121
+ export async function getMTlsCertificateByName(
122
+ accountId: string,
123
+ name: string
124
+ ): Promise<MTlsCertificateResponse> {
125
+ const certificates = await listMTlsCertificates(accountId, { name });
126
+ if (certificates.length === 0) {
127
+ throw new ErrorMTlsCertificateNameNotFound(
128
+ `certificate not found with name "${name}"`
129
+ );
130
+ }
131
+ if (certificates.length > 1) {
132
+ throw new ErrorMTlsCertificateManyNamesMatch(
133
+ `multiple certificates found with name "${name}"`
134
+ );
135
+ }
136
+ const certificate = certificates[0];
137
+ return certificate;
138
+ }
139
+
140
+ export async function deleteMTlsCertificate(
141
+ accountId: string,
142
+ certificateId: string
143
+ ) {
144
+ return await fetchResult(
145
+ `/accounts/${accountId}/mtls_certificates/${certificateId}`,
146
+ { method: "DELETE" }
147
+ );
148
+ }
@@ -0,0 +1,77 @@
1
+ import { readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { Response } from "undici";
4
+ import { createWorkerUploadForm } from "../../create-worker-upload-form";
5
+ import type { BundleResult } from "../../bundle";
6
+ import type { CfWorkerInit } from "../../worker";
7
+ import type { Blob } from "node:buffer";
8
+ import type { FormData } from "undici";
9
+
10
+ /**
11
+ * Takes a Worker bundle - `BundleResult` - and generates the _worker.bundle
12
+ * contents
13
+ */
14
+ export async function createUploadWorkerBundleContents(
15
+ workerBundle: BundleResult
16
+ ): Promise<Blob> {
17
+ const workerBundleFormData = createWorkerBundleFormData(workerBundle);
18
+ const metadata = JSON.parse(workerBundleFormData.get("metadata") as string);
19
+
20
+ /**
21
+ * Pages doesn't need the metadata bindings returned by
22
+ * `createWorkerBundleFormData`. Let's strip them out and return only
23
+ * the contents we need
24
+ */
25
+ workerBundleFormData.set(
26
+ "metadata",
27
+ JSON.stringify({ main_module: metadata.main_module })
28
+ );
29
+
30
+ return await new Response(workerBundleFormData).blob();
31
+ }
32
+
33
+ /**
34
+ * Creates a `FormData` upload from a `BundleResult`
35
+ */
36
+ function createWorkerBundleFormData(workerBundle: BundleResult): FormData {
37
+ const mainModule = {
38
+ name: path.basename(workerBundle.resolvedEntryPointPath),
39
+ content: readFileSync(workerBundle.resolvedEntryPointPath, {
40
+ encoding: "utf-8",
41
+ }),
42
+ type: workerBundle.bundleType || "esm",
43
+ };
44
+
45
+ const worker: CfWorkerInit = {
46
+ name: mainModule.name,
47
+ main: mainModule,
48
+ modules: workerBundle.modules,
49
+ bindings: {
50
+ vars: undefined,
51
+ kv_namespaces: undefined,
52
+ send_email: undefined,
53
+ wasm_modules: undefined,
54
+ text_blobs: undefined,
55
+ data_blobs: undefined,
56
+ durable_objects: undefined,
57
+ queues: undefined,
58
+ r2_buckets: undefined,
59
+ d1_databases: undefined,
60
+ services: undefined,
61
+ analytics_engine_datasets: undefined,
62
+ dispatch_namespaces: undefined,
63
+ mtls_certificates: undefined,
64
+ logfwdr: undefined,
65
+ unsafe: undefined,
66
+ },
67
+ migrations: undefined,
68
+ compatibility_date: undefined,
69
+ compatibility_flags: undefined,
70
+ usage_model: undefined,
71
+ keepVars: undefined,
72
+ logpush: undefined,
73
+ placement: undefined,
74
+ };
75
+
76
+ return createWorkerUploadForm(worker);
77
+ }
@@ -0,0 +1,5 @@
1
+ import { publish } from "./publish";
2
+
3
+ export const unstable_pages = {
4
+ publish,
5
+ };