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
@@ -0,0 +1,281 @@
1
+ import { setTimeout } from "node:timers/promises";
2
+ import onExit from "signal-exit";
3
+ import { printWranglerBanner } from "..";
4
+ import { fetchResult } from "../cfetch";
5
+ import { readConfig } from "../config";
6
+ import { getConfigCache } from "../config-cache";
7
+ import { FatalError } from "../errors";
8
+ import isInteractive from "../is-interactive";
9
+ import { logger } from "../logger";
10
+ import * as metrics from "../metrics";
11
+ import {
12
+ jsonPrintLogs,
13
+ prettyPrintLogs,
14
+ createPagesTail,
15
+ } from "../tail/createTail";
16
+ import { translateCLICommandToFilterMessage } from "../tail/filters";
17
+ import { requireAuth } from "../user";
18
+ import { PAGES_CONFIG_CACHE_FILENAME } from "./constants";
19
+ import { promptSelectProject } from "./prompt-select-project";
20
+ import { isUrl } from "./utils";
21
+ import type {
22
+ CommonYargsArgv,
23
+ StrictYargsOptionsToInterface,
24
+ } from "../yargs-types";
25
+ import type { Deployment, PagesConfigCache } from "./types";
26
+
27
+ const statusChoices = ["ok", "error", "canceled"] as const;
28
+ type StatusChoice = typeof statusChoices[number];
29
+ const isStatusChoiceList = (
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ data?: any[]
32
+ ): data is StatusChoice[] =>
33
+ data?.every((d) => statusChoices.includes(d)) ?? false;
34
+
35
+ export function Options(yargs: CommonYargsArgv) {
36
+ return (
37
+ yargs
38
+ .positional("deployment", {
39
+ type: "string",
40
+ description:
41
+ "(Optional) ID or URL of the deployment to tail. " +
42
+ "Specify by environment if deployment ID is unknown.",
43
+ })
44
+ .options({
45
+ "project-name": {
46
+ type: "string",
47
+ description: "The name of the project you would like to tail",
48
+ },
49
+ environment: {
50
+ type: "string",
51
+ choices: ["production", "preview"],
52
+ default: "production",
53
+ description:
54
+ "When not providing a specific deployment ID, " +
55
+ "specifying environment will grab the latest production or " +
56
+ "preview deployment",
57
+ },
58
+ })
59
+ .option("format", {
60
+ default: process.stdout.isTTY ? "pretty" : "json",
61
+ choices: ["json", "pretty"],
62
+ describe: "The format of log entries",
63
+ })
64
+ .option("debug", {
65
+ type: "boolean",
66
+ hidden: true,
67
+ default: false,
68
+ describe:
69
+ "If a log would have been filtered out, send it through " +
70
+ "anyway alongside the filter which would have blocked it.",
71
+ })
72
+ // Tail filters;
73
+ .option("status", {
74
+ choices: statusChoices,
75
+ describe: "Filter by invocation status",
76
+ array: true,
77
+ })
78
+ .option("header", {
79
+ type: "string",
80
+ requiresArg: true,
81
+ describe: "Filter by HTTP header",
82
+ })
83
+ .option("method", {
84
+ type: "string",
85
+ requiresArg: true,
86
+ describe: "Filter by HTTP method",
87
+ array: true,
88
+ })
89
+ .option("search", {
90
+ type: "string",
91
+ requiresArg: true,
92
+ describe: "Filter by a text match in console.log messages",
93
+ })
94
+ .option("sampling-rate", {
95
+ type: "number",
96
+ describe: "Adds a percentage of requests to log sampling rate",
97
+ })
98
+ .option("ip", {
99
+ type: "string",
100
+ requiresArg: true,
101
+ describe:
102
+ "Filter by the IP address the request originates from. Use " +
103
+ '"self" to filter for your own IP',
104
+ array: true,
105
+ })
106
+ );
107
+ }
108
+
109
+ export async function Handler({
110
+ deployment,
111
+ projectName,
112
+ environment,
113
+ header,
114
+ ip: clientIp,
115
+ method,
116
+ samplingRate,
117
+ search,
118
+ status,
119
+ format = "pretty",
120
+ debug,
121
+ ...args
122
+ }: StrictYargsOptionsToInterface<typeof Options>) {
123
+ if (status && !isStatusChoiceList(status)) {
124
+ throw new FatalError(
125
+ "Invalid value for `--status`. Valid options: " + statusChoices.join(", ")
126
+ );
127
+ }
128
+
129
+ if (format === "pretty") {
130
+ await printWranglerBanner();
131
+ }
132
+
133
+ const config = readConfig(args.config, args);
134
+ const pagesConfig = getConfigCache<PagesConfigCache>(
135
+ PAGES_CONFIG_CACHE_FILENAME
136
+ );
137
+ const accountId = await requireAuth(pagesConfig);
138
+ let deploymentId = deployment;
139
+
140
+ if (!isInteractive()) {
141
+ if (!deploymentId) {
142
+ throw new FatalError(
143
+ "Must specify a deployment in non-interactive mode.",
144
+ 1
145
+ );
146
+ }
147
+
148
+ if (!projectName) {
149
+ throw new FatalError(
150
+ "Must specify a project name in non-interactive mode.",
151
+ 1
152
+ );
153
+ }
154
+ }
155
+
156
+ if (!projectName && isInteractive()) {
157
+ projectName = await promptSelectProject({ accountId });
158
+ }
159
+
160
+ if (!deployment && !projectName) {
161
+ throw new FatalError("Must specify a project name or deployment.", 1);
162
+ }
163
+
164
+ const deployments: Array<Deployment> = await fetchResult(
165
+ `/accounts/${accountId}/pages/projects/${projectName}/deployments`
166
+ );
167
+
168
+ const envDeployments = deployments.filter(
169
+ (d) => d.environment === environment
170
+ );
171
+
172
+ // Deployment is URL
173
+ if (isUrl(deployment)) {
174
+ const { hostname: deploymentHostname } = new URL(deployment);
175
+ const targetDeployment = envDeployments.find(
176
+ (d) => new URL(d.url).hostname === deploymentHostname
177
+ );
178
+
179
+ if (!targetDeployment) {
180
+ throw new FatalError(
181
+ "Could not find deployment match url: " + deployment,
182
+ 1
183
+ );
184
+ }
185
+
186
+ deploymentId = targetDeployment.id;
187
+ } else if (!deployment) {
188
+ if (envDeployments.length === 0) {
189
+ throw new FatalError("No deployments for environment: " + environment, 1);
190
+ }
191
+
192
+ if (format === "pretty") {
193
+ logger.log(
194
+ "No deployment specified. Using latest deployment for",
195
+ environment,
196
+ "environment."
197
+ );
198
+ }
199
+
200
+ const latestDeployment = envDeployments
201
+ .map((d) => ({ id: d.id, created_on: new Date(d.created_on) }))
202
+ .sort((a, b) => +b.created_on - +a.created_on)[0];
203
+
204
+ deploymentId = latestDeployment.id;
205
+ }
206
+
207
+ if (!deploymentId || !projectName) {
208
+ throw new FatalError("An unknown error occurred.", 1);
209
+ }
210
+
211
+ const filters = translateCLICommandToFilterMessage({
212
+ header,
213
+ clientIp,
214
+ method,
215
+ samplingRate,
216
+ search,
217
+ status,
218
+ });
219
+
220
+ await metrics.sendMetricsEvent("begin pages log stream", {
221
+ sendMetrics: config.send_metrics,
222
+ });
223
+
224
+ const { tail, deleteTail } = await createPagesTail({
225
+ accountId,
226
+ projectName,
227
+ deploymentId,
228
+ filters,
229
+ debug,
230
+ });
231
+
232
+ const onCloseTail = (() => {
233
+ let didTerminate = false;
234
+
235
+ return async () => {
236
+ if (didTerminate) return;
237
+
238
+ tail.terminate();
239
+ await deleteTail();
240
+ await metrics.sendMetricsEvent("end pages log stream", {
241
+ sendMetrics: config.send_metrics,
242
+ });
243
+
244
+ didTerminate = true;
245
+ };
246
+ })();
247
+
248
+ onExit(onCloseTail);
249
+
250
+ tail.on("message", (data) => {
251
+ if (format === "pretty") {
252
+ prettyPrintLogs(data);
253
+ } else {
254
+ jsonPrintLogs(data);
255
+ }
256
+ });
257
+
258
+ tail.on("close", onCloseTail);
259
+
260
+ while (tail.readyState !== tail.OPEN) {
261
+ switch (tail.readyState) {
262
+ case tail.CONNECTING:
263
+ await setTimeout(100);
264
+ break;
265
+ case tail.CLOSING:
266
+ await setTimeout(100);
267
+ break;
268
+ case tail.CLOSED:
269
+ await metrics.sendMetricsEvent("end log stream", {
270
+ sendMetrics: config.send_metrics,
271
+ });
272
+ throw new Error(
273
+ `Connection to deployment ${deploymentId} closed unexpectedly.`
274
+ );
275
+ }
276
+ }
277
+
278
+ if (format === "pretty") {
279
+ logger.log(`Connected to deployment ${deploymentId}, waiting for logs...`);
280
+ }
281
+ }
@@ -0,0 +1,84 @@
1
+ import Table from "ink-table";
2
+ import React from "react";
3
+ import { format as timeagoFormat } from "timeago.js";
4
+ import { fetchResult } from "../cfetch";
5
+ import { getConfigCache, saveToConfigCache } from "../config-cache";
6
+ import { FatalError } from "../errors";
7
+ import { logger } from "../logger";
8
+ import * as metrics from "../metrics";
9
+ import { requireAuth } from "../user";
10
+ import { renderToString } from "../utils/render";
11
+ import { PAGES_CONFIG_CACHE_FILENAME } from "./constants";
12
+ import { promptSelectProject } from "./prompt-select-project";
13
+ import { pagesBetaWarning } from "./utils";
14
+ import type {
15
+ CommonYargsArgv,
16
+ StrictYargsOptionsToInterface,
17
+ } from "../yargs-types";
18
+ import type { Deployment, PagesConfigCache } from "./types";
19
+
20
+ type ListArgs = StrictYargsOptionsToInterface<typeof ListOptions>;
21
+
22
+ export function ListOptions(yargs: CommonYargsArgv) {
23
+ return yargs
24
+ .options({
25
+ "project-name": {
26
+ type: "string",
27
+ description:
28
+ "The name of the project you would like to list deployments for",
29
+ },
30
+ })
31
+ .epilogue(pagesBetaWarning);
32
+ }
33
+
34
+ export async function ListHandler({ projectName }: ListArgs) {
35
+ const config = getConfigCache<PagesConfigCache>(PAGES_CONFIG_CACHE_FILENAME);
36
+ const accountId = await requireAuth(config);
37
+
38
+ projectName ??= config.project_name;
39
+
40
+ const isInteractive = process.stdin.isTTY;
41
+ if (!projectName && isInteractive) {
42
+ projectName = await promptSelectProject({ accountId });
43
+ }
44
+
45
+ if (!projectName) {
46
+ throw new FatalError("Must specify a project name.", 1);
47
+ }
48
+
49
+ const deployments: Array<Deployment> = await fetchResult(
50
+ `/accounts/${accountId}/pages/projects/${projectName}/deployments`
51
+ );
52
+
53
+ const titleCase = (word: string) =>
54
+ word.charAt(0).toUpperCase() + word.slice(1);
55
+
56
+ const shortSha = (sha: string) => sha.slice(0, 7);
57
+
58
+ const getStatus = (deployment: Deployment) => {
59
+ // Return a pretty time since timestamp if successful otherwise the status
60
+ if (deployment.latest_stage.status === `success`) {
61
+ return timeagoFormat(deployment.latest_stage.ended_on);
62
+ }
63
+ return titleCase(deployment.latest_stage.status);
64
+ };
65
+
66
+ const data = deployments.map((deployment) => {
67
+ return {
68
+ Environment: titleCase(deployment.environment),
69
+ Branch: deployment.deployment_trigger.metadata.branch,
70
+ Source: shortSha(deployment.deployment_trigger.metadata.commit_hash),
71
+ Deployment: deployment.url,
72
+ Status: getStatus(deployment),
73
+ // TODO: Use a url shortener
74
+ Build: `https://dash.cloudflare.com/${accountId}/pages/view/${deployment.project_name}/${deployment.id}`,
75
+ };
76
+ });
77
+
78
+ saveToConfigCache<PagesConfigCache>(PAGES_CONFIG_CACHE_FILENAME, {
79
+ account_id: accountId,
80
+ });
81
+
82
+ logger.log(renderToString(<Table data={data}></Table>));
83
+ await metrics.sendMetricsEvent("list pages deployments");
84
+ }