wrangler 0.0.0-e3a458e → 0.0.0-e3c036d7

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 (361) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +47 -14
  3. package/bin/wrangler.js +181 -29
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +6368 -0
  6. package/package.json +193 -142
  7. package/src/__tests__/access.test.ts +25 -0
  8. package/src/__tests__/api-dev.test.ts +238 -0
  9. package/src/__tests__/api-devregistry.test.js +64 -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 +42 -0
  13. package/src/__tests__/configuration.test.ts +4454 -2590
  14. package/src/__tests__/d1/d1.test.ts +82 -0
  15. package/src/__tests__/d1/execute.test.ts +64 -0
  16. package/src/__tests__/d1/migrate.test.ts +155 -0
  17. package/src/__tests__/d1/splitter.test.ts +255 -0
  18. package/src/__tests__/delete.test.ts +266 -0
  19. package/src/__tests__/deployments.test.ts +129 -0
  20. package/src/__tests__/dev.test.tsx +1589 -432
  21. package/src/__tests__/generate.test.ts +238 -0
  22. package/src/__tests__/get-host-from-url.test.ts +16 -0
  23. package/src/__tests__/guess-worker-format.test.ts +113 -51
  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 +68 -32
  30. package/src/__tests__/helpers/mock-dialogs.ts +107 -33
  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 +46 -0
  34. package/src/__tests__/helpers/mock-istty.ts +74 -0
  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 +263 -0
  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 +93 -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 +50 -0
  52. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  53. package/src/__tests__/helpers/run-in-tmp.ts +28 -22
  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 +8 -0
  60. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  61. package/src/__tests__/helpers/write-worker-source.ts +31 -0
  62. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  63. package/src/__tests__/https-options.test.ts +144 -108
  64. package/src/__tests__/index.test.ts +258 -975
  65. package/src/__tests__/init.test.ts +3165 -0
  66. package/src/__tests__/jest.setup.ts +154 -48
  67. package/src/__tests__/kv.test.ts +1789 -1372
  68. package/src/__tests__/logger.test.ts +141 -0
  69. package/src/__tests__/logout.test.ts +36 -41
  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 +585 -0
  74. package/src/__tests__/package-manager.test.ts +312 -165
  75. package/src/__tests__/pages/deployment-list.test.ts +78 -0
  76. package/src/__tests__/pages/functions-build.test.ts +453 -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 +108 -0
  80. package/src/__tests__/pages/project-upload.test.ts +481 -0
  81. package/src/__tests__/pages/publish.test.ts +2745 -0
  82. package/src/__tests__/pages-deployment-tail.test.ts +955 -0
  83. package/src/__tests__/parse.test.ts +359 -245
  84. package/src/__tests__/paths.test.ts +39 -0
  85. package/src/__tests__/publish.test.ts +8209 -2558
  86. package/src/__tests__/pubsub.test.ts +493 -0
  87. package/src/__tests__/queues.test.ts +529 -0
  88. package/src/__tests__/r2.test.ts +369 -193
  89. package/src/__tests__/route.test.ts +22 -22
  90. package/src/__tests__/secret.test.ts +683 -415
  91. package/src/__tests__/tail.test.ts +838 -444
  92. package/src/__tests__/test-old-node-version.js +31 -0
  93. package/src/__tests__/tsconfig-sanity.ts +12 -0
  94. package/src/__tests__/tsconfig.json +8 -0
  95. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  96. package/src/__tests__/type-generation.test.ts +234 -0
  97. package/src/__tests__/user.test.ts +118 -0
  98. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  99. package/src/__tests__/validate-dev-props.test.ts +56 -0
  100. package/src/__tests__/version.test.ts +35 -0
  101. package/src/__tests__/whoami.test.tsx +166 -94
  102. package/src/__tests__/worker-namespace.test.ts +339 -0
  103. package/src/abort.d.ts +3 -0
  104. package/src/api/dev.ts +327 -0
  105. package/src/api/index.ts +11 -0
  106. package/src/api/mtls-certificate.ts +148 -0
  107. package/src/api/pages/create-worker-bundle-contents.ts +75 -0
  108. package/src/api/pages/index.ts +5 -0
  109. package/src/api/pages/publish.tsx +375 -0
  110. package/src/bundle-reporter.ts +68 -0
  111. package/src/bundle.ts +858 -110
  112. package/src/cfetch/index.ts +123 -69
  113. package/src/cfetch/internal.ts +217 -98
  114. package/src/cli.ts +23 -14
  115. package/src/config/README.md +7 -7
  116. package/src/config/config.ts +232 -229
  117. package/src/config/diagnostics.ts +61 -61
  118. package/src/config/environment.ts +542 -256
  119. package/src/config/index.ts +367 -34
  120. package/src/config/validation-helpers.ts +415 -286
  121. package/src/config/validation.ts +2137 -942
  122. package/src/config-cache.ts +85 -0
  123. package/src/create-worker-preview.ts +251 -124
  124. package/src/create-worker-upload-form.ts +326 -201
  125. package/src/d1/backups.tsx +215 -0
  126. package/src/d1/constants.ts +2 -0
  127. package/src/d1/create.tsx +64 -0
  128. package/src/d1/delete.ts +53 -0
  129. package/src/d1/execute.tsx +354 -0
  130. package/src/d1/formatTimeAgo.ts +14 -0
  131. package/src/d1/index.ts +100 -0
  132. package/src/d1/list.tsx +60 -0
  133. package/src/d1/migrations/apply.tsx +206 -0
  134. package/src/d1/migrations/create.tsx +76 -0
  135. package/src/d1/migrations/helpers.ts +172 -0
  136. package/src/d1/migrations/index.ts +3 -0
  137. package/src/d1/migrations/list.tsx +92 -0
  138. package/src/d1/migrations/options.ts +23 -0
  139. package/src/d1/options.ts +22 -0
  140. package/src/d1/splitter.ts +161 -0
  141. package/src/d1/types.ts +25 -0
  142. package/src/d1/utils.ts +49 -0
  143. package/src/delete.ts +100 -0
  144. package/src/deployments.ts +116 -0
  145. package/src/deprecated/index.ts +144 -0
  146. package/src/dev/dev-vars.ts +39 -0
  147. package/src/dev/dev.tsx +544 -306
  148. package/src/dev/get-local-persistence-path.ts +31 -0
  149. package/src/dev/local.tsx +906 -233
  150. package/src/dev/remote.tsx +621 -192
  151. package/src/dev/start-server.ts +540 -0
  152. package/src/dev/use-esbuild.ts +189 -80
  153. package/src/dev/validate-dev-props.ts +40 -0
  154. package/src/dev-registry.ts +201 -0
  155. package/src/dev.tsx +928 -0
  156. package/src/dialogs.ts +136 -0
  157. package/src/dispatch-namespace.ts +211 -0
  158. package/src/docs/index.ts +97 -0
  159. package/src/durable.ts +102 -0
  160. package/src/entry.ts +277 -109
  161. package/src/environment-variables/factory.ts +88 -0
  162. package/src/environment-variables/misc-variables.ts +30 -0
  163. package/src/errors.ts +11 -0
  164. package/src/generate/index.ts +298 -0
  165. package/src/git-client.ts +135 -0
  166. package/src/global-wrangler-config-path.ts +26 -0
  167. package/src/https-options.ts +85 -80
  168. package/src/index.ts +705 -0
  169. package/src/init.ts +1023 -0
  170. package/src/inspect.ts +722 -557
  171. package/src/intl-polyfill.d.ts +139 -0
  172. package/src/is-ci.ts +14 -0
  173. package/src/is-interactive.ts +16 -0
  174. package/src/jest.d.ts +4 -0
  175. package/src/kv/helpers.ts +430 -0
  176. package/src/kv/index.ts +594 -0
  177. package/src/logger.ts +104 -0
  178. package/src/metrics/index.ts +5 -0
  179. package/src/metrics/metrics-config.ts +239 -0
  180. package/src/metrics/metrics-dispatcher.ts +96 -0
  181. package/src/metrics/metrics-usage-headers.ts +24 -0
  182. package/src/metrics/send-event.ts +98 -0
  183. package/src/miniflare-cli/README.md +30 -0
  184. package/src/miniflare-cli/assets.ts +251 -0
  185. package/src/miniflare-cli/index.ts +210 -0
  186. package/src/miniflare-cli/request-context.ts +40 -0
  187. package/src/miniflare-cli/tsconfig.json +9 -0
  188. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  189. package/src/miniflare-cli/types.ts +11 -0
  190. package/src/module-collection.ts +241 -227
  191. package/src/mtls-certificate/cli.ts +155 -0
  192. package/src/open-in-browser.ts +8 -16
  193. package/src/package-manager.ts +183 -90
  194. package/src/pages/build.ts +252 -0
  195. package/src/pages/buildFunctions.ts +133 -0
  196. package/src/pages/constants.ts +18 -0
  197. package/src/pages/deployment-tails.ts +281 -0
  198. package/src/pages/deployments.tsx +86 -0
  199. package/src/pages/dev.ts +726 -0
  200. package/src/pages/errors.ts +66 -0
  201. package/src/pages/functions/buildPlugin.ts +97 -0
  202. package/src/pages/functions/buildWorker.ts +294 -0
  203. package/src/pages/functions/filepath-routing.test.ts +234 -0
  204. package/src/pages/functions/filepath-routing.ts +189 -0
  205. package/src/pages/functions/identifiers.ts +78 -0
  206. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  207. package/src/pages/functions/routes-consolidation.ts +73 -0
  208. package/src/pages/functions/routes-transformation.test.ts +282 -0
  209. package/src/pages/functions/routes-transformation.ts +115 -0
  210. package/src/pages/functions/routes-validation.test.ts +403 -0
  211. package/src/pages/functions/routes-validation.ts +202 -0
  212. package/src/pages/functions/routes.ts +151 -0
  213. package/src/pages/functions/tsconfig.json +8 -0
  214. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  215. package/src/pages/functions.ts +86 -0
  216. package/src/pages/hash.ts +13 -0
  217. package/src/pages/index.ts +102 -0
  218. package/src/pages/projects.tsx +162 -0
  219. package/src/pages/prompt-select-project.tsx +31 -0
  220. package/src/pages/publish.tsx +276 -0
  221. package/src/pages/types.ts +46 -0
  222. package/src/pages/upload.tsx +449 -0
  223. package/src/pages/utils.ts +23 -0
  224. package/src/parse.ts +247 -122
  225. package/src/paths.ts +53 -8
  226. package/src/proxy.ts +629 -375
  227. package/src/publish/index.ts +274 -0
  228. package/src/publish/publish.ts +1076 -0
  229. package/src/pubsub/index.ts +286 -0
  230. package/src/pubsub/pubsub-commands.ts +623 -0
  231. package/src/queues/cli/commands/consumer/add.ts +65 -0
  232. package/src/queues/cli/commands/consumer/index.ts +19 -0
  233. package/src/queues/cli/commands/consumer/remove.ts +31 -0
  234. package/src/queues/cli/commands/create.ts +25 -0
  235. package/src/queues/cli/commands/delete.ts +26 -0
  236. package/src/queues/cli/commands/index.ts +35 -0
  237. package/src/queues/cli/commands/list.ts +25 -0
  238. package/src/queues/client.ts +135 -0
  239. package/src/queues/utils.ts +18 -0
  240. package/src/r2/constants.ts +4 -0
  241. package/src/r2/helpers.ts +132 -0
  242. package/src/r2/index.ts +289 -0
  243. package/src/routes.ts +140 -0
  244. package/src/secret/index.ts +375 -0
  245. package/src/selfsigned.d.ts +23 -23
  246. package/src/sites.ts +372 -0
  247. package/src/tail/createTail.ts +406 -0
  248. package/src/tail/filters.ts +109 -111
  249. package/src/tail/index.ts +208 -296
  250. package/src/tail/printing.ts +107 -47
  251. package/src/tsconfig-sanity.ts +16 -0
  252. package/src/type-generation.ts +181 -0
  253. package/src/update-check.ts +19 -0
  254. package/src/user/access.ts +68 -0
  255. package/src/user/auth-variables.ts +113 -0
  256. package/src/user/choose-account.tsx +39 -0
  257. package/src/user/generate-auth-url.ts +33 -0
  258. package/src/user/generate-random-state.ts +16 -0
  259. package/src/user/index.ts +2 -0
  260. package/src/user/user.ts +1233 -0
  261. package/src/utils/collectKeyValues.ts +14 -0
  262. package/src/whoami.ts +135 -0
  263. package/src/worker.ts +201 -100
  264. package/src/yargs-types.ts +37 -0
  265. package/src/zones.ts +191 -0
  266. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  267. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  268. package/templates/__tests__/tsconfig.json +8 -0
  269. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  270. package/templates/checked-fetch.js +23 -0
  271. package/templates/d1-beta-facade.js +241 -0
  272. package/templates/facade.d.ts +14 -0
  273. package/templates/first-party-worker-module-facade.ts +19 -0
  274. package/templates/format-dev-errors.ts +34 -0
  275. package/templates/gitignore +172 -0
  276. package/templates/init-tests/test-jest-new-worker.js +23 -0
  277. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  278. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  279. package/templates/middleware/common.ts +62 -0
  280. package/templates/middleware/loader-modules.ts +84 -0
  281. package/templates/middleware/loader-sw.ts +233 -0
  282. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  283. package/templates/middleware/middleware-pretty-error.ts +40 -0
  284. package/templates/middleware/middleware-scheduled.ts +15 -0
  285. package/templates/new-worker-scheduled.js +17 -0
  286. package/templates/new-worker-scheduled.ts +32 -0
  287. package/templates/new-worker.js +3 -3
  288. package/templates/new-worker.ts +21 -3
  289. package/templates/no-op-worker.js +10 -0
  290. package/templates/pages-dev-pipeline.ts +31 -0
  291. package/templates/pages-dev-util.ts +52 -0
  292. package/templates/pages-shim.ts +12 -0
  293. package/templates/pages-template-plugin.ts +180 -0
  294. package/templates/pages-template-worker.ts +189 -0
  295. package/templates/serve-static-assets.ts +66 -0
  296. package/templates/service-bindings-module-facade.js +55 -0
  297. package/templates/service-bindings-sw-facade.js +42 -0
  298. package/templates/tsconfig-sanity.ts +11 -0
  299. package/templates/tsconfig.init.json +106 -0
  300. package/templates/tsconfig.json +6 -103
  301. package/templates/tsconfig.tsbuildinfo +1 -0
  302. package/wrangler-dist/cli.d.ts +1624 -0
  303. package/wrangler-dist/cli.js +139300 -128984
  304. package/wrangler-dist/wasm-sync.wasm +0 -0
  305. package/pages/functions/buildWorker.ts +0 -62
  306. package/pages/functions/filepath-routing.test.ts +0 -223
  307. package/pages/functions/filepath-routing.ts +0 -181
  308. package/pages/functions/identifiers.ts +0 -78
  309. package/pages/functions/routes.ts +0 -151
  310. package/pages/functions/template-worker.ts +0 -130
  311. package/src/__tests__/dev2.test.tsx +0 -154
  312. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  313. package/src/__tests__/helpers/mock-cfetch.ts +0 -207
  314. package/src/__tests__/pages.test.ts +0 -44
  315. package/src/__tests__/sentry.test.ts +0 -146
  316. package/src/dialogs.tsx +0 -77
  317. package/src/environment-variables.ts +0 -33
  318. package/src/index.tsx +0 -2365
  319. package/src/kv.ts +0 -339
  320. package/src/pages.tsx +0 -1045
  321. package/src/publish.ts +0 -354
  322. package/src/r2.ts +0 -50
  323. package/src/reporting.ts +0 -131
  324. package/src/sites.tsx +0 -273
  325. package/src/user.tsx +0 -1118
  326. package/src/whoami.tsx +0 -69
  327. package/templates/static-asset-facade.js +0 -47
  328. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  329. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  330. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  331. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  332. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  333. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  334. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  335. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  336. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  337. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  338. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  339. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  340. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  341. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  342. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  343. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  344. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  345. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  346. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  347. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  348. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  349. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  350. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  351. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  352. package/vendor/wrangler-mime/LICENSE +0 -21
  353. package/vendor/wrangler-mime/Mime.js +0 -97
  354. package/vendor/wrangler-mime/README.md +0 -187
  355. package/vendor/wrangler-mime/cli.js +0 -46
  356. package/vendor/wrangler-mime/index.js +0 -4
  357. package/vendor/wrangler-mime/lite.js +0 -4
  358. package/vendor/wrangler-mime/package.json +0 -52
  359. package/vendor/wrangler-mime/types/other.js +0 -1
  360. package/vendor/wrangler-mime/types/standard.js +0 -1
  361. package/wrangler-dist/cli.js.map +0 -7
@@ -2,18 +2,28 @@ import crypto from "node:crypto";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import globToRegExp from "glob-to-regexp";
5
+ import { logger } from "./logger";
5
6
  import type { Config, ConfigModuleRuleType } from "./config";
6
7
  import type { CfModule, CfModuleType, CfScriptFormat } from "./worker";
7
8
  import type esbuild from "esbuild";
8
9
 
10
+ function flipObject<
11
+ K extends string | number | symbol,
12
+ V extends string | number | symbol
13
+ >(obj: Record<K, V>): Record<V, K> {
14
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [v, k]));
15
+ }
16
+
9
17
  const RuleTypeToModuleType: Record<ConfigModuleRuleType, CfModuleType> = {
10
- ESModule: "esm",
11
- CommonJS: "commonjs",
12
- CompiledWasm: "compiled-wasm",
13
- Data: "buffer",
14
- Text: "text",
18
+ ESModule: "esm",
19
+ CommonJS: "commonjs",
20
+ CompiledWasm: "compiled-wasm",
21
+ Data: "buffer",
22
+ Text: "text",
15
23
  };
16
24
 
25
+ export const ModuleTypeToRuleType = flipObject(RuleTypeToModuleType);
26
+
17
27
  // This is a combination of an esbuild plugin and a mutable array
18
28
  // that we use to collect module references from source code.
19
29
  // There will be modules that _shouldn't_ be inlined directly into
@@ -23,231 +33,235 @@ const RuleTypeToModuleType: Record<ConfigModuleRuleType, CfModuleType> = {
23
33
  // them correctly in the bundle, and add them to the form upload.
24
34
 
25
35
  export const DEFAULT_MODULE_RULES: Config["rules"] = [
26
- { type: "Text", globs: ["**/*.txt", "**/*.html"] },
27
- { type: "Data", globs: ["**/*.bin"] },
28
- { type: "CompiledWasm", globs: ["**/*.wasm"] },
36
+ { type: "Text", globs: ["**/*.txt", "**/*.html"] },
37
+ { type: "Data", globs: ["**/*.bin"] },
38
+ { type: "CompiledWasm", globs: ["**/*.wasm"] },
29
39
  ];
30
40
 
31
41
  export default function createModuleCollector(props: {
32
- format: CfScriptFormat;
33
- rules?: Config["rules"];
34
- // a collection of "legacy" style module references, which are just file names
35
- // we will eventually deprecate this functionality, hence the verbose greppable name
36
- wrangler1xlegacyModuleReferences: {
37
- rootDirectory: string;
38
- fileNames: Set<string>;
39
- };
42
+ format: CfScriptFormat;
43
+ rules?: Config["rules"];
44
+ // a collection of "legacy" style module references, which are just file names
45
+ // we will eventually deprecate this functionality, hence the verbose greppable name
46
+ wrangler1xlegacyModuleReferences: {
47
+ rootDirectory: string;
48
+ fileNames: Set<string>;
49
+ };
40
50
  }): {
41
- modules: CfModule[];
42
- plugin: esbuild.Plugin;
51
+ modules: CfModule[];
52
+ plugin: esbuild.Plugin;
43
53
  } {
44
- const rules: Config["rules"] = [
45
- ...(props.rules || []),
46
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
47
- ...DEFAULT_MODULE_RULES!,
48
- ];
49
-
50
- // First, we want to add some validations to the module rules
51
- // We want to warn if rules are accidentally configured in such a way that
52
- // subsequent rules will never match because `fallthrough` hasn't been set
53
-
54
- const completedRuleLocations: Record<string, number> = {};
55
- let index = 0;
56
- const rulesToRemove: Config["rules"] = [];
57
- for (const rule of rules) {
58
- if (rule.type in completedRuleLocations) {
59
- if (rules[completedRuleLocations[rule.type]].fallthrough !== false) {
60
- if (index < (props.rules || []).length) {
61
- console.warn(
62
- `The module rule at position ${index} (${JSON.stringify(
63
- rule
64
- )}) has the same type as a previous rule (at position ${
65
- completedRuleLocations[rule.type]
66
- }, ${JSON.stringify(
67
- rules[completedRuleLocations[rule.type]]
68
- )}). This rule will be ignored. To the previous rule, add \`fallthrough = true\` to allow this one to also be used, or \`fallthrough = false\` to silence this warning.`
69
- );
70
- } else {
71
- console.warn(
72
- `The default module rule ${JSON.stringify(
73
- rule
74
- )} has the same type as a previous rule (at position ${
75
- completedRuleLocations[rule.type]
76
- }, ${JSON.stringify(
77
- rules[completedRuleLocations[rule.type]]
78
- )}). This rule will be ignored. To the previous rule, add \`fallthrough = true\` to allow the default one to also be used, or \`fallthrough = false\` to silence this warning.`
79
- );
80
- }
81
- }
82
-
83
- rulesToRemove.push(rule);
84
- }
85
- if (!(rule.type in completedRuleLocations) && rule.fallthrough !== true) {
86
- completedRuleLocations[rule.type] = index;
87
- }
88
- index++;
89
- }
90
-
91
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
92
- rulesToRemove.forEach((rule) => rules!.splice(rules!.indexOf(rule), 1));
93
-
94
- const modules: CfModule[] = [];
95
- return {
96
- modules,
97
- plugin: {
98
- name: "wrangler-module-collector",
99
- setup(build) {
100
- build.onStart(() => {
101
- // reset the module collection array
102
- modules.splice(0);
103
- });
104
-
105
- // ~ start legacy module specifier support ~
106
-
107
- // This section detects usage of "legacy" 1.x style module specifiers
108
- // and modifies them so they "work" in wrangler v2, but with a warning
109
-
110
- const rulesMatchers = rules.flatMap((rule) => {
111
- return rule.globs.map((glob) => {
112
- const regex = globToRegExp(glob);
113
- return {
114
- regex,
115
- rule,
116
- };
117
- });
118
- });
119
-
120
- build.onResolve(
121
- {
122
- filter: new RegExp(
123
- [...props.wrangler1xlegacyModuleReferences.fileNames]
124
- .map((fileName) => `^${fileName}$`)
125
- .join("|")
126
- ),
127
- },
128
- async (args: esbuild.OnResolveArgs) => {
129
- if (
130
- args.kind !== "import-statement" &&
131
- args.kind !== "require-call"
132
- ) {
133
- return;
134
- }
135
- // In the future, this will simply throw an error
136
- console.warn(
137
- `Deprecation warning: detected a legacy module import in "./${path.relative(
138
- process.cwd(),
139
- args.importer
140
- )}". This will stop working in the future. Replace references to "${
141
- args.path
142
- }" with "./${args.path}";`
143
- );
144
-
145
- // take the file and massage it to a
146
- // transportable/manageable format
147
- const filePath = path.join(
148
- props.wrangler1xlegacyModuleReferences.rootDirectory,
149
- args.path
150
- );
151
- const fileContent = await readFile(filePath);
152
- const fileHash = crypto
153
- .createHash("sha1")
154
- .update(fileContent)
155
- .digest("hex");
156
- const fileName = `./${fileHash}-${path.basename(args.path)}`;
157
-
158
- const { rule } =
159
- rulesMatchers.find(({ regex }) => regex.test(fileName)) || {};
160
- if (rule) {
161
- // add the module to the array
162
- modules.push({
163
- name: fileName,
164
- content: fileContent,
165
- type: RuleTypeToModuleType[rule.type],
166
- });
167
- return {
168
- path: fileName, // change the reference to the changed module
169
- external: props.format === "modules", // mark it as external in the bundle
170
- namespace: `wrangler-module-${rule.type}`, // just a tag, this isn't strictly necessary
171
- watchFiles: [filePath], // we also add the file to esbuild's watch list
172
- };
173
- }
174
- }
175
- );
176
- // ~ end legacy module specifier support ~
177
-
178
- rules?.forEach((rule) => {
179
- if (rule.type === "ESModule" || rule.type === "CommonJS") return; // TODO: we should treat these as js files, and use the jsx loader
180
-
181
- rule.globs.forEach((glob) => {
182
- build.onResolve(
183
- { filter: globToRegExp(glob) },
184
- async (args: esbuild.OnResolveArgs) => {
185
- // take the file and massage it to a
186
- // transportable/manageable format
187
-
188
- const filePath = path.join(args.resolveDir, args.path);
189
- const fileContent = await readFile(filePath);
190
- const fileHash = crypto
191
- .createHash("sha1")
192
- .update(fileContent)
193
- .digest("hex");
194
- const fileName = `./${fileHash}-${path.basename(args.path)}`;
195
-
196
- // add the module to the array
197
- modules.push({
198
- name: fileName,
199
- content: fileContent,
200
- type: RuleTypeToModuleType[rule.type],
201
- });
202
-
203
- return {
204
- path: fileName, // change the reference to the changed module
205
- external: props.format === "modules", // mark it as external in the bundle
206
- namespace: `wrangler-module-${rule.type}`, // just a tag, this isn't strictly necessary
207
- watchFiles: [filePath], // we also add the file to esbuild's watch list
208
- };
209
- }
210
- );
211
-
212
- if (props.format === "service-worker") {
213
- build.onLoad(
214
- { filter: globToRegExp(glob) },
215
- async (args: esbuild.OnLoadArgs) => {
216
- return {
217
- // We replace the the module with an identifier
218
- // that we'll separately add to the form upload
219
- // as part of [wasm_modules]/[text_blobs]. This identifier has to be a valid
220
- // JS identifier, so we replace all non alphanumeric characters
221
- // with an underscore.
222
- // TODO: what of "Data"?
223
- contents: `export default ${args.path.replace(
224
- /[^a-zA-Z0-9_$]/g,
225
- "_"
226
- )};`,
227
- };
228
- }
229
- );
230
- }
231
- });
232
- });
233
-
234
- rulesToRemove.forEach((rule) => {
235
- rule.globs.forEach((glob) => {
236
- build.onResolve(
237
- { filter: globToRegExp(glob) },
238
- async (args: esbuild.OnResolveArgs) => {
239
- throw new Error(
240
- `The file ${
241
- args.path
242
- } matched a module rule in your configuration (${JSON.stringify(
243
- rule
244
- )}), but was ignored because a previous rule with the same type was not marked as \`fallthrough = true\`.`
245
- );
246
- }
247
- );
248
- });
249
- });
250
- },
251
- },
252
- };
54
+ const rules: Config["rules"] = [
55
+ ...(props.rules || []),
56
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
57
+ ...DEFAULT_MODULE_RULES!,
58
+ ];
59
+
60
+ // First, we want to add some validations to the module rules
61
+ // We want to warn if rules are accidentally configured in such a way that
62
+ // subsequent rules will never match because `fallthrough` hasn't been set
63
+
64
+ const completedRuleLocations: Record<string, number> = {};
65
+ let index = 0;
66
+ const rulesToRemove: Config["rules"] = [];
67
+ for (const rule of rules) {
68
+ if (rule.type in completedRuleLocations) {
69
+ if (rules[completedRuleLocations[rule.type]].fallthrough !== false) {
70
+ if (index < (props.rules || []).length) {
71
+ logger.warn(
72
+ `The module rule at position ${index} (${JSON.stringify(
73
+ rule
74
+ )}) has the same type as a previous rule (at position ${
75
+ completedRuleLocations[rule.type]
76
+ }, ${JSON.stringify(
77
+ rules[completedRuleLocations[rule.type]]
78
+ )}). This rule will be ignored. To the previous rule, add \`fallthrough = true\` to allow this one to also be used, or \`fallthrough = false\` to silence this warning.`
79
+ );
80
+ } else {
81
+ logger.warn(
82
+ `The default module rule ${JSON.stringify(
83
+ rule
84
+ )} has the same type as a previous rule (at position ${
85
+ completedRuleLocations[rule.type]
86
+ }, ${JSON.stringify(
87
+ rules[completedRuleLocations[rule.type]]
88
+ )}). This rule will be ignored. To the previous rule, add \`fallthrough = true\` to allow the default one to also be used, or \`fallthrough = false\` to silence this warning.`
89
+ );
90
+ }
91
+ }
92
+
93
+ rulesToRemove.push(rule);
94
+ }
95
+ if (!(rule.type in completedRuleLocations) && rule.fallthrough !== true) {
96
+ completedRuleLocations[rule.type] = index;
97
+ }
98
+ index++;
99
+ }
100
+
101
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
102
+ rulesToRemove.forEach((rule) => rules!.splice(rules!.indexOf(rule), 1));
103
+
104
+ const modules: CfModule[] = [];
105
+ return {
106
+ modules,
107
+ plugin: {
108
+ name: "wrangler-module-collector",
109
+ setup(build) {
110
+ build.onStart(() => {
111
+ // reset the module collection array
112
+ modules.splice(0);
113
+ });
114
+
115
+ // ~ start legacy module specifier support ~
116
+
117
+ // This section detects usage of "legacy" 1.x style module specifiers
118
+ // and modifies them so they "work" in wrangler v2, but with a warning
119
+
120
+ const rulesMatchers = rules.flatMap((rule) => {
121
+ return rule.globs.map((glob) => {
122
+ const regex = globToRegExp(glob);
123
+ return {
124
+ regex,
125
+ rule,
126
+ };
127
+ });
128
+ });
129
+
130
+ if (props.wrangler1xlegacyModuleReferences.fileNames.size > 0) {
131
+ build.onResolve(
132
+ {
133
+ filter: new RegExp(
134
+ "^(" +
135
+ [...props.wrangler1xlegacyModuleReferences.fileNames]
136
+ .map((name) => name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))
137
+ .join("|") +
138
+ ")$"
139
+ ),
140
+ },
141
+ async (args: esbuild.OnResolveArgs) => {
142
+ if (
143
+ args.kind !== "import-statement" &&
144
+ args.kind !== "require-call"
145
+ ) {
146
+ return;
147
+ }
148
+ // In the future, this will simply throw an error
149
+ logger.warn(
150
+ `Deprecation: detected a legacy module import in "./${path.relative(
151
+ process.cwd(),
152
+ args.importer
153
+ )}". This will stop working in the future. Replace references to "${
154
+ args.path
155
+ }" with "./${args.path}";`
156
+ );
157
+
158
+ // take the file and massage it to a
159
+ // transportable/manageable format
160
+ const filePath = path.join(
161
+ props.wrangler1xlegacyModuleReferences.rootDirectory,
162
+ args.path
163
+ );
164
+ const fileContent = await readFile(filePath);
165
+ const fileHash = crypto
166
+ .createHash("sha1")
167
+ .update(fileContent)
168
+ .digest("hex");
169
+ const fileName = `./${fileHash}-${path.basename(args.path)}`;
170
+
171
+ const { rule } =
172
+ rulesMatchers.find(({ regex }) => regex.test(fileName)) || {};
173
+ if (rule) {
174
+ // add the module to the array
175
+ modules.push({
176
+ name: fileName,
177
+ content: fileContent,
178
+ type: RuleTypeToModuleType[rule.type],
179
+ });
180
+ return {
181
+ path: fileName, // change the reference to the changed module
182
+ external: props.format === "modules", // mark it as external in the bundle
183
+ namespace: `wrangler-module-${rule.type}`, // just a tag, this isn't strictly necessary
184
+ watchFiles: [filePath], // we also add the file to esbuild's watch list
185
+ };
186
+ }
187
+ }
188
+ );
189
+ }
190
+
191
+ // ~ end legacy module specifier support ~
192
+
193
+ rules?.forEach((rule) => {
194
+ if (rule.type === "ESModule" || rule.type === "CommonJS") return; // TODO: we should treat these as js files, and use the jsx loader
195
+
196
+ rule.globs.forEach((glob) => {
197
+ build.onResolve(
198
+ { filter: globToRegExp(glob) },
199
+ async (args: esbuild.OnResolveArgs) => {
200
+ // take the file and massage it to a
201
+ // transportable/manageable format
202
+
203
+ const filePath = path.join(args.resolveDir, args.path);
204
+ const fileContent = await readFile(filePath);
205
+ const fileHash = crypto
206
+ .createHash("sha1")
207
+ .update(fileContent)
208
+ .digest("hex");
209
+ const fileName = `./${fileHash}-${path.basename(args.path)}`;
210
+
211
+ // add the module to the array
212
+ modules.push({
213
+ name: fileName,
214
+ content: fileContent,
215
+ type: RuleTypeToModuleType[rule.type],
216
+ });
217
+
218
+ return {
219
+ path: fileName, // change the reference to the changed module
220
+ external: props.format === "modules", // mark it as external in the bundle
221
+ namespace: `wrangler-module-${rule.type}`, // just a tag, this isn't strictly necessary
222
+ watchFiles: [filePath], // we also add the file to esbuild's watch list
223
+ };
224
+ }
225
+ );
226
+
227
+ if (props.format === "service-worker") {
228
+ build.onLoad(
229
+ { filter: globToRegExp(glob) },
230
+ async (args: esbuild.OnLoadArgs) => {
231
+ return {
232
+ // We replace the the module with an identifier
233
+ // that we'll separately add to the form upload
234
+ // as part of [wasm_modules]/[text_blobs]/[data_blobs]. This identifier has to be a valid
235
+ // JS identifier, so we replace all non alphanumeric characters
236
+ // with an underscore.
237
+ contents: `export default ${args.path.replace(
238
+ /[^a-zA-Z0-9_$]/g,
239
+ "_"
240
+ )};`,
241
+ };
242
+ }
243
+ );
244
+ }
245
+ });
246
+ });
247
+
248
+ rulesToRemove.forEach((rule) => {
249
+ rule.globs.forEach((glob) => {
250
+ build.onResolve(
251
+ { filter: globToRegExp(glob) },
252
+ async (args: esbuild.OnResolveArgs) => {
253
+ throw new Error(
254
+ `The file ${
255
+ args.path
256
+ } matched a module rule in your configuration (${JSON.stringify(
257
+ rule
258
+ )}), but was ignored because a previous rule with the same type was not marked as \`fallthrough = true\`.`
259
+ );
260
+ }
261
+ );
262
+ });
263
+ });
264
+ },
265
+ },
266
+ };
253
267
  }
@@ -0,0 +1,155 @@
1
+ import {
2
+ uploadMTlsCertificateFromFs,
3
+ listMTlsCertificates,
4
+ deleteMTlsCertificate,
5
+ getMTlsCertificate,
6
+ getMTlsCertificateByName,
7
+ type MTlsCertificateResponse,
8
+ } from "../api/mtls-certificate";
9
+ import { withConfig } from "../config";
10
+ import { confirm } from "../dialogs";
11
+ import { logger } from "../logger";
12
+ import { requireAuth } from "../user";
13
+ import type {
14
+ CommonYargsOptions,
15
+ CommonYargsArgv,
16
+ StrictYargsOptionsToInterface,
17
+ } from "../yargs-types";
18
+ import type { BuilderCallback } from "yargs";
19
+
20
+ function uploadMTlsCertificateOptions(yargs: CommonYargsArgv) {
21
+ return yargs
22
+ .option("cert", {
23
+ describe:
24
+ "The path to a certificate file (.pem) containing a chain of certificates to upload",
25
+ type: "string",
26
+ demandOption: true,
27
+ })
28
+ .option("key", {
29
+ describe:
30
+ "The path to a file containing the private key for your leaf certificate",
31
+ type: "string",
32
+ demandOption: true,
33
+ })
34
+ .option("name", {
35
+ describe: "The name for the certificate",
36
+ type: "string",
37
+ });
38
+ }
39
+
40
+ const uploadMTlsCertificateHandler = withConfig<
41
+ StrictYargsOptionsToInterface<typeof uploadMTlsCertificateOptions>
42
+ >(async ({ config, cert, key, name }) => {
43
+ const accountId = await requireAuth(config);
44
+ logger.log(
45
+ name
46
+ ? `Uploading mTLS Certificate ${name}...`
47
+ : `Uploading mTLS Certificate...`
48
+ );
49
+ const certResponse = await uploadMTlsCertificateFromFs(accountId, {
50
+ certificateChainFilename: cert,
51
+ privateKeyFilename: key,
52
+ name: name,
53
+ });
54
+ const expiresOn = new Date(certResponse.expires_on).toLocaleDateString();
55
+ logger.log(
56
+ name
57
+ ? `Success! Uploaded mTLS Certificate ${name}`
58
+ : `Success! Uploaded mTLS Certificate`
59
+ );
60
+ logger.log(`ID: ${certResponse.id}`);
61
+ logger.log(`Issuer: ${certResponse.issuer}`);
62
+ logger.log(`Expires on ${expiresOn}`);
63
+ });
64
+
65
+ const listMTlsCertificatesHandler = withConfig(async ({ config }) => {
66
+ const accountId = await requireAuth(config);
67
+ const certificates = await listMTlsCertificates(accountId, {});
68
+ for (const certificate of certificates) {
69
+ logger.log(`ID: ${certificate.id}`);
70
+ if (certificate.name) {
71
+ logger.log(`Name: ${certificate.name}`);
72
+ }
73
+ logger.log(`Issuer: ${certificate.issuer}`);
74
+ logger.log(
75
+ `Created on: ${new Date(certificate.uploaded_on).toLocaleDateString()}`
76
+ );
77
+ logger.log(
78
+ `Expires on: ${new Date(certificate.expires_on).toLocaleDateString()}`
79
+ );
80
+ logger.log("\n");
81
+ }
82
+ });
83
+
84
+ function deleteMTlsCertificateOptions(yargs: CommonYargsArgv) {
85
+ return yargs
86
+ .option("id", {
87
+ describe: "The id of the mTLS certificate to delete",
88
+ type: "string",
89
+ })
90
+ .option("name", {
91
+ describe: "The name of the mTLS certificate record to delete",
92
+ type: "string",
93
+ });
94
+ }
95
+
96
+ const deleteMTlsCertificateHandler = withConfig<
97
+ StrictYargsOptionsToInterface<typeof deleteMTlsCertificateOptions>
98
+ >(async ({ config, id, name }) => {
99
+ const accountId = await requireAuth(config);
100
+ if (id && name) {
101
+ return logger.error(`Error: can't provide both --id and --name.`);
102
+ } else if (!id && !name) {
103
+ return logger.error(`Error: must provide --id or --name.`);
104
+ }
105
+ let certificate: MTlsCertificateResponse;
106
+ if (id) {
107
+ certificate = await getMTlsCertificate(accountId, id);
108
+ } else {
109
+ certificate = await getMTlsCertificateByName(accountId, name as string);
110
+ }
111
+
112
+ const response = await confirm(
113
+ certificate.name
114
+ ? `Are you sure you want to delete certificate ${certificate.id} (${certificate.name})?`
115
+ : `Are you sure you want to delete certificate ${certificate.id}?`
116
+ );
117
+ if (!response) {
118
+ logger.log("Not deleting");
119
+ return;
120
+ }
121
+
122
+ await deleteMTlsCertificate(accountId, certificate.id);
123
+
124
+ logger.log(
125
+ certificate.name
126
+ ? `Deleted certificate ${certificate.id} (${certificate.name}) successfully`
127
+ : `Deleted certificate ${certificate.id} successfully`
128
+ );
129
+ });
130
+
131
+ export const mTlsCertificateCommands: BuilderCallback<
132
+ CommonYargsOptions,
133
+ unknown
134
+ > = (yargs) => {
135
+ yargs.command(
136
+ "upload",
137
+ "Upload an mTLS certificate",
138
+ uploadMTlsCertificateOptions,
139
+ uploadMTlsCertificateHandler
140
+ );
141
+
142
+ yargs.command(
143
+ "list",
144
+ "List uploaded mTLS certificates",
145
+ (a) => a,
146
+ listMTlsCertificatesHandler
147
+ );
148
+
149
+ yargs.command(
150
+ "delete",
151
+ "Delete an mTLS certificate",
152
+ deleteMTlsCertificateOptions,
153
+ deleteMTlsCertificateHandler
154
+ );
155
+ };