wrangler 0.0.0-e6733a3 → 0.0.0-e6c9c5c0

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 (346) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +47 -14
  3. package/bin/wrangler.js +180 -28
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +6364 -0
  6. package/package.json +193 -124
  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 +4163 -0
  14. package/src/__tests__/d1/d1.test.ts +127 -0
  15. package/src/__tests__/d1/splitter.test.ts +255 -0
  16. package/src/__tests__/delete.test.ts +266 -0
  17. package/src/__tests__/deployments.test.ts +105 -0
  18. package/src/__tests__/dev.test.tsx +1582 -62
  19. package/src/__tests__/generate.test.ts +238 -0
  20. package/src/__tests__/get-host-from-url.test.ts +16 -0
  21. package/src/__tests__/guess-worker-format.test.ts +85 -0
  22. package/src/__tests__/{clipboardy-mock.js → helpers/clipboardy-mock.js} +0 -0
  23. package/src/__tests__/helpers/cmd-shim.d.ts +11 -0
  24. package/src/__tests__/helpers/mock-account-id.ts +48 -0
  25. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  26. package/src/__tests__/helpers/mock-bin.ts +36 -0
  27. package/src/__tests__/helpers/mock-console.ts +106 -0
  28. package/src/__tests__/helpers/mock-dialogs.ts +139 -0
  29. package/src/__tests__/helpers/mock-get-zone-from-host.ts +11 -0
  30. package/src/__tests__/helpers/mock-http-server.ts +46 -0
  31. package/src/__tests__/helpers/mock-istty.ts +74 -0
  32. package/src/__tests__/helpers/mock-known-routes.ts +12 -0
  33. package/src/__tests__/helpers/mock-kv.ts +46 -0
  34. package/src/__tests__/helpers/mock-oauth-flow.ts +263 -0
  35. package/src/__tests__/helpers/mock-process.ts +34 -0
  36. package/src/__tests__/helpers/mock-stdin.ts +108 -0
  37. package/src/__tests__/helpers/mock-web-socket.ts +29 -0
  38. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  39. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  40. package/src/__tests__/helpers/msw/handlers/deployments.ts +69 -0
  41. package/src/__tests__/helpers/msw/handlers/namespaces.ts +81 -0
  42. package/src/__tests__/helpers/msw/handlers/oauth.ts +31 -0
  43. package/src/__tests__/helpers/msw/handlers/r2.ts +60 -0
  44. package/src/__tests__/helpers/msw/handlers/script.ts +56 -0
  45. package/src/__tests__/helpers/msw/handlers/user.ts +52 -0
  46. package/src/__tests__/helpers/msw/handlers/zones.ts +20 -0
  47. package/src/__tests__/helpers/msw/index.ts +50 -0
  48. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  49. package/src/__tests__/helpers/run-in-tmp.ts +38 -0
  50. package/src/__tests__/helpers/run-wrangler.ts +16 -0
  51. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  52. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  53. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  54. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  55. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  56. package/src/__tests__/helpers/write-worker-source.ts +31 -0
  57. package/src/__tests__/helpers/write-wrangler-toml.ts +17 -0
  58. package/src/__tests__/https-options.test.ts +163 -0
  59. package/src/__tests__/index.test.ts +265 -284
  60. package/src/__tests__/init.test.ts +3164 -0
  61. package/src/__tests__/jest.setup.ts +169 -16
  62. package/src/__tests__/kv.test.ts +1783 -1093
  63. package/src/__tests__/logger.test.ts +141 -0
  64. package/src/__tests__/logout.test.ts +47 -0
  65. package/src/__tests__/metrics.test.ts +493 -0
  66. package/src/__tests__/middleware.scheduled.test.ts +145 -0
  67. package/src/__tests__/middleware.test.ts +750 -0
  68. package/src/__tests__/package-manager.test.ts +353 -0
  69. package/src/__tests__/pages-deployment-tail.test.ts +955 -0
  70. package/src/__tests__/pages.test.ts +2898 -0
  71. package/src/__tests__/parse.test.ts +330 -0
  72. package/src/__tests__/paths.test.ts +39 -0
  73. package/src/__tests__/publish.test.ts +8117 -0
  74. package/src/__tests__/pubsub.test.ts +490 -0
  75. package/src/__tests__/queues.test.ts +522 -0
  76. package/src/__tests__/r2.test.ts +369 -0
  77. package/src/__tests__/route.test.ts +45 -0
  78. package/src/__tests__/secret.test.ts +693 -0
  79. package/src/__tests__/tail.test.ts +958 -0
  80. package/src/__tests__/test-old-node-version.js +31 -0
  81. package/src/__tests__/tsconfig-sanity.ts +12 -0
  82. package/src/__tests__/tsconfig.json +8 -0
  83. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  84. package/src/__tests__/type-generation.test.ts +233 -0
  85. package/src/__tests__/user.test.ts +118 -0
  86. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  87. package/src/__tests__/validate-dev-props.test.ts +56 -0
  88. package/src/__tests__/version.test.ts +35 -0
  89. package/src/__tests__/whoami.test.tsx +172 -0
  90. package/src/__tests__/worker-namespace.test.ts +334 -0
  91. package/src/abort.d.ts +3 -0
  92. package/src/api/dev.ts +259 -0
  93. package/src/api/index.ts +3 -0
  94. package/src/api/pages/index.ts +5 -0
  95. package/src/api/pages/publish.tsx +321 -0
  96. package/src/bundle-reporter.ts +68 -0
  97. package/src/bundle.ts +875 -0
  98. package/src/cfetch/index.ts +127 -71
  99. package/src/cfetch/internal.ts +235 -46
  100. package/src/cli.ts +25 -6
  101. package/src/config/README.md +107 -0
  102. package/src/config/config.ts +275 -0
  103. package/src/config/diagnostics.ts +80 -0
  104. package/src/config/environment.ts +579 -0
  105. package/src/config/index.ts +358 -0
  106. package/src/config/validation-helpers.ts +597 -0
  107. package/src/config/validation.ts +2151 -0
  108. package/src/config-cache.ts +85 -0
  109. package/src/create-worker-preview.ts +282 -0
  110. package/src/create-worker-upload-form.ts +325 -0
  111. package/src/d1/backups.tsx +219 -0
  112. package/src/d1/constants.ts +2 -0
  113. package/src/d1/create.tsx +63 -0
  114. package/src/d1/delete.ts +56 -0
  115. package/src/d1/execute.tsx +323 -0
  116. package/src/d1/formatTimeAgo.ts +14 -0
  117. package/src/d1/index.ts +101 -0
  118. package/src/d1/list.tsx +48 -0
  119. package/src/d1/migrations/apply.tsx +197 -0
  120. package/src/d1/migrations/create.tsx +77 -0
  121. package/src/d1/migrations/helpers.ts +147 -0
  122. package/src/d1/migrations/index.ts +3 -0
  123. package/src/d1/migrations/list.tsx +79 -0
  124. package/src/d1/migrations/options.ts +18 -0
  125. package/src/d1/options.ts +22 -0
  126. package/src/d1/splitter.ts +161 -0
  127. package/src/d1/types.ts +24 -0
  128. package/src/d1/utils.ts +48 -0
  129. package/src/delete.ts +103 -0
  130. package/src/deployments.ts +93 -0
  131. package/src/deprecated/index.ts +145 -0
  132. package/src/dev/dev-vars.ts +39 -0
  133. package/src/dev/dev.tsx +614 -0
  134. package/src/dev/get-local-persistence-path.ts +31 -0
  135. package/src/dev/local.tsx +923 -0
  136. package/src/dev/remote.tsx +632 -0
  137. package/src/dev/start-server.ts +538 -0
  138. package/src/dev/use-esbuild.ts +205 -0
  139. package/src/dev/validate-dev-props.ts +31 -0
  140. package/src/dev-registry.ts +201 -0
  141. package/src/dev.tsx +928 -750
  142. package/src/dialogs.ts +136 -0
  143. package/src/dispatch-namespace.ts +207 -0
  144. package/src/docs/index.ts +98 -0
  145. package/src/durable.ts +102 -0
  146. package/src/entry.ts +328 -0
  147. package/src/environment-variables/factory.ts +88 -0
  148. package/src/environment-variables/misc-variables.ts +30 -0
  149. package/src/errors.ts +11 -0
  150. package/src/generate/index.ts +300 -0
  151. package/src/git-client.ts +135 -0
  152. package/src/global-wrangler-config-path.ts +26 -0
  153. package/src/https-options.ts +127 -0
  154. package/src/index.ts +694 -0
  155. package/src/init.ts +1024 -0
  156. package/src/inspect.ts +720 -477
  157. package/src/intl-polyfill.d.ts +139 -0
  158. package/src/is-ci.ts +14 -0
  159. package/src/is-interactive.ts +16 -0
  160. package/src/jest.d.ts +4 -0
  161. package/src/kv/helpers.ts +430 -0
  162. package/src/kv/index.ts +596 -0
  163. package/src/logger.ts +104 -0
  164. package/src/metrics/index.ts +5 -0
  165. package/src/metrics/metrics-config.ts +239 -0
  166. package/src/metrics/metrics-dispatcher.ts +96 -0
  167. package/src/metrics/metrics-usage-headers.ts +24 -0
  168. package/src/metrics/send-event.ts +98 -0
  169. package/src/miniflare-cli/README.md +30 -0
  170. package/src/miniflare-cli/assets.ts +250 -0
  171. package/src/miniflare-cli/index.ts +210 -0
  172. package/src/miniflare-cli/request-context.ts +40 -0
  173. package/src/miniflare-cli/tsconfig.json +9 -0
  174. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  175. package/src/miniflare-cli/types.ts +11 -0
  176. package/src/module-collection.ts +256 -53
  177. package/src/open-in-browser.ts +17 -0
  178. package/src/package-manager.ts +219 -0
  179. package/src/pages/build.ts +150 -0
  180. package/src/pages/buildFunctions.ts +129 -0
  181. package/src/pages/constants.ts +18 -0
  182. package/src/pages/deployment-tails.ts +284 -0
  183. package/src/pages/deployments.tsx +84 -0
  184. package/src/pages/dev.ts +716 -0
  185. package/src/pages/errors.ts +66 -0
  186. package/src/pages/functions/buildPlugin.ts +90 -0
  187. package/src/pages/functions/buildWorker.ts +288 -0
  188. package/src/pages/functions/filepath-routing.test.ts +234 -0
  189. package/src/pages/functions/filepath-routing.ts +189 -0
  190. package/src/pages/functions/identifiers.ts +78 -0
  191. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  192. package/src/pages/functions/routes-consolidation.ts +73 -0
  193. package/src/pages/functions/routes-transformation.test.ts +282 -0
  194. package/src/pages/functions/routes-transformation.ts +115 -0
  195. package/src/pages/functions/routes-validation.test.ts +403 -0
  196. package/src/pages/functions/routes-validation.ts +202 -0
  197. package/src/pages/functions/routes.ts +151 -0
  198. package/src/pages/functions/tsconfig.json +8 -0
  199. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  200. package/src/pages/functions.ts +82 -0
  201. package/src/pages/hash.ts +13 -0
  202. package/src/pages/index.ts +102 -0
  203. package/src/pages/projects.tsx +167 -0
  204. package/src/pages/prompt-select-project.tsx +31 -0
  205. package/src/pages/publish.tsx +263 -0
  206. package/src/pages/types.ts +41 -0
  207. package/src/pages/upload.tsx +447 -0
  208. package/src/pages/utils.ts +23 -0
  209. package/src/parse.ts +286 -0
  210. package/src/paths.ts +71 -0
  211. package/src/proxy.ts +652 -252
  212. package/src/publish/index.ts +270 -0
  213. package/src/publish/publish.ts +1064 -0
  214. package/src/pubsub/index.ts +286 -0
  215. package/src/pubsub/pubsub-commands.ts +624 -0
  216. package/src/queues/cli/commands/consumer/add.ts +71 -0
  217. package/src/queues/cli/commands/consumer/index.ts +22 -0
  218. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  219. package/src/queues/cli/commands/create.ts +25 -0
  220. package/src/queues/cli/commands/delete.ts +26 -0
  221. package/src/queues/cli/commands/index.ts +36 -0
  222. package/src/queues/cli/commands/list.ts +25 -0
  223. package/src/queues/client.ts +135 -0
  224. package/src/queues/utils.ts +18 -0
  225. package/src/r2/constants.ts +4 -0
  226. package/src/r2/helpers.ts +131 -0
  227. package/src/r2/index.ts +289 -0
  228. package/src/routes.ts +140 -0
  229. package/src/secret/index.ts +379 -0
  230. package/src/selfsigned.d.ts +29 -0
  231. package/src/sites.ts +372 -0
  232. package/src/tail/createTail.ts +406 -0
  233. package/src/tail/filters.ts +277 -0
  234. package/src/tail/index.ts +213 -0
  235. package/src/tail/printing.ts +122 -0
  236. package/src/tsconfig-sanity.ts +16 -0
  237. package/src/type-generation.ts +181 -0
  238. package/src/update-check.ts +19 -0
  239. package/src/user/access.ts +68 -0
  240. package/src/user/auth-variables.ts +113 -0
  241. package/src/user/choose-account.tsx +39 -0
  242. package/src/user/generate-auth-url.ts +33 -0
  243. package/src/user/generate-random-state.ts +16 -0
  244. package/src/user/index.ts +2 -0
  245. package/src/user/user.ts +1232 -0
  246. package/src/utils/collectKeyValues.ts +14 -0
  247. package/src/whoami.ts +135 -0
  248. package/src/worker.ts +251 -0
  249. package/src/yargs-types.ts +24 -0
  250. package/src/zones.ts +191 -0
  251. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  252. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  253. package/templates/__tests__/tsconfig.json +8 -0
  254. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  255. package/templates/checked-fetch.js +15 -0
  256. package/templates/d1-beta-facade.js +241 -0
  257. package/templates/facade.d.ts +14 -0
  258. package/templates/first-party-worker-module-facade.ts +19 -0
  259. package/templates/format-dev-errors.ts +33 -0
  260. package/templates/gitignore +171 -0
  261. package/templates/init-tests/test-jest-new-worker.js +23 -0
  262. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  263. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  264. package/templates/middleware/common.ts +62 -0
  265. package/templates/middleware/loader-modules.ts +84 -0
  266. package/templates/middleware/loader-sw.ts +233 -0
  267. package/templates/middleware/middleware-miniflare3-json-error.ts +20 -0
  268. package/templates/middleware/middleware-pretty-error.ts +40 -0
  269. package/templates/middleware/middleware-scheduled.ts +15 -0
  270. package/templates/new-worker-scheduled.js +17 -0
  271. package/templates/new-worker-scheduled.ts +32 -0
  272. package/templates/new-worker.js +15 -0
  273. package/templates/new-worker.ts +30 -0
  274. package/templates/no-op-worker.js +10 -0
  275. package/templates/pages-dev-pipeline.ts +31 -0
  276. package/templates/pages-dev-util.ts +52 -0
  277. package/templates/pages-shim.ts +12 -0
  278. package/templates/pages-template-plugin.ts +176 -0
  279. package/templates/pages-template-worker.ts +189 -0
  280. package/templates/serve-static-assets.ts +65 -0
  281. package/templates/service-bindings-module-facade.js +54 -0
  282. package/templates/service-bindings-sw-facade.js +42 -0
  283. package/templates/tsconfig-sanity.ts +11 -0
  284. package/templates/tsconfig.init.json +106 -0
  285. package/templates/tsconfig.json +8 -0
  286. package/templates/tsconfig.tsbuildinfo +1 -0
  287. package/wrangler-dist/cli.d.ts +1028 -0
  288. package/wrangler-dist/cli.js +135288 -114542
  289. package/wrangler-dist/wasm-sync.wasm +0 -0
  290. package/pages/functions/buildWorker.ts +0 -62
  291. package/pages/functions/filepath-routing.test.ts +0 -39
  292. package/pages/functions/filepath-routing.ts +0 -221
  293. package/pages/functions/identifiers.ts +0 -78
  294. package/pages/functions/routes.ts +0 -158
  295. package/pages/functions/template-worker.ts +0 -144
  296. package/src/__tests__/mock-cfetch.ts +0 -171
  297. package/src/__tests__/mock-dialogs.ts +0 -65
  298. package/src/__tests__/run-in-tmp.ts +0 -19
  299. package/src/__tests__/run-wrangler.ts +0 -32
  300. package/src/api/form_data.ts +0 -131
  301. package/src/api/preview.ts +0 -128
  302. package/src/api/worker.ts +0 -155
  303. package/src/config.ts +0 -487
  304. package/src/dialogs.tsx +0 -77
  305. package/src/index.tsx +0 -1974
  306. package/src/kv.tsx +0 -267
  307. package/src/pages.tsx +0 -1031
  308. package/src/publish.ts +0 -358
  309. package/src/sites.tsx +0 -114
  310. package/src/tail.tsx +0 -73
  311. package/src/user.tsx +0 -1025
  312. package/static-asset-facade.js +0 -47
  313. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  314. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  315. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  316. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  317. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  318. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  319. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  320. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  321. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  322. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  323. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  324. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  325. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  326. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  327. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  328. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  329. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  330. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  331. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  332. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  333. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  334. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  335. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  336. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  337. package/vendor/wrangler-mime/LICENSE +0 -21
  338. package/vendor/wrangler-mime/Mime.js +0 -97
  339. package/vendor/wrangler-mime/README.md +0 -187
  340. package/vendor/wrangler-mime/cli.js +0 -46
  341. package/vendor/wrangler-mime/index.js +0 -4
  342. package/vendor/wrangler-mime/lite.js +0 -4
  343. package/vendor/wrangler-mime/package.json +0 -52
  344. package/vendor/wrangler-mime/types/other.js +0 -1
  345. package/vendor/wrangler-mime/types/standard.js +0 -1
  346. package/wrangler-dist/cli.js.map +0 -7
package/src/publish.ts DELETED
@@ -1,358 +0,0 @@
1
- import assert from "node:assert";
2
- import path from "node:path";
3
- import { readFile } from "node:fs/promises";
4
- import esbuild from "esbuild";
5
- import { execa } from "execa";
6
- import tmp from "tmp-promise";
7
- import type { CfWorkerInit } from "./api/worker";
8
- import { toFormData } from "./api/form_data";
9
- import { fetchResult } from "./cfetch";
10
- import type { Config } from "./config";
11
- import makeModuleCollector from "./module-collection";
12
- import { syncAssets } from "./sites";
13
-
14
- type CfScriptFormat = undefined | "modules" | "service-worker";
15
-
16
- type Props = {
17
- config: Config;
18
- format?: CfScriptFormat;
19
- script?: string;
20
- name?: string;
21
- env?: string;
22
- compatibilityDate?: string;
23
- compatibilityFlags?: string[];
24
- public?: string;
25
- site?: string;
26
- triggers?: (string | number)[];
27
- routes?: (string | number)[];
28
- legacyEnv?: boolean;
29
- jsxFactory: undefined | string;
30
- jsxFragment: undefined | string;
31
- };
32
-
33
- function sleep(ms: number) {
34
- return new Promise((resolve) => setTimeout(resolve, ms));
35
- }
36
-
37
- export default async function publish(props: Props): Promise<void> {
38
- if (props.public && props.format === "service-worker") {
39
- // TODO: check config too
40
- throw new Error(
41
- "You cannot use the service worker format with a public directory."
42
- );
43
- }
44
- // TODO: warn if git/hg has uncommitted changes
45
- const { config } = props;
46
- const {
47
- account_id: accountId,
48
- build,
49
- // @ts-expect-error hidden
50
- __path__,
51
- } = config;
52
-
53
- const envRootObj = props.env ? config.env[props.env] || {} : config;
54
-
55
- assert(
56
- envRootObj.compatibility_date || props["compatibility-date"],
57
- "A compatibility_date is required when publishing. Add one to your wrangler.toml file, or pass it in your terminal as --compatibility_date. See https://developers.cloudflare.com/workers/platform/compatibility-dates for more information."
58
- );
59
-
60
- const triggers = props.triggers || config.triggers?.crons;
61
- const routes = props.routes || config.routes;
62
-
63
- const jsxFactory = props.jsxFactory || config.jsx_factory;
64
- const jsxFragment = props.jsxFragment || config.jsx_fragment;
65
-
66
- assert(config.account_id, "missing account id");
67
-
68
- let scriptName = props.name || config.name;
69
- assert(
70
- scriptName,
71
- 'You need to provide a name when publishing a worker. Either pass it as a cli arg with `--name <name>` or in your config file as `name = "<name>"`'
72
- );
73
-
74
- let file: string;
75
- if (props.script) {
76
- file = props.script;
77
- } else {
78
- assert(build?.upload?.main, "missing main file");
79
- file = path.join(path.dirname(__path__), build.upload.main);
80
- }
81
-
82
- if (props.legacyEnv) {
83
- scriptName += props.env ? `-${props.env}` : "";
84
- }
85
- const envName = props.env ?? "production";
86
-
87
- const destination = await tmp.dir({ unsafeCleanup: true });
88
-
89
- if (props.config.build?.command) {
90
- // TODO: add a deprecation message here?
91
- console.log("running:", props.config.build.command);
92
- const buildCommandPieces = props.config.build.command.split(" ");
93
- await execa(buildCommandPieces[0], buildCommandPieces.slice(1), {
94
- stdout: "inherit",
95
- stderr: "inherit",
96
- ...(props.config.build?.cwd && { cwd: props.config.build.cwd }),
97
- });
98
- }
99
-
100
- const moduleCollector = makeModuleCollector();
101
- const result = await esbuild.build({
102
- ...(props.public
103
- ? {
104
- stdin: {
105
- contents: (
106
- await readFile(
107
- path.join(__dirname, "../static-asset-facade.js"),
108
- "utf8"
109
- )
110
- ).replace("__ENTRY_POINT__", path.join(process.cwd(), file)),
111
- sourcefile: "static-asset-facade.js",
112
- resolveDir: path.dirname(file),
113
- },
114
- }
115
- : { entryPoints: [file] }),
116
- bundle: true,
117
- nodePaths: props.public ? [path.join(__dirname, "../vendor")] : undefined,
118
- outdir: destination.path,
119
- external: ["__STATIC_CONTENT_MANIFEST"],
120
- format: "esm",
121
- sourcemap: true,
122
- metafile: true,
123
- conditions: ["worker", "browser"],
124
- loader: {
125
- ".js": "jsx",
126
- },
127
- plugins: [moduleCollector.plugin],
128
- ...(jsxFactory && { jsxFactory }),
129
- ...(jsxFragment && { jsxFragment }),
130
- });
131
-
132
- const chunks = Object.entries(result.metafile.outputs).find(
133
- ([_path, { entryPoint }]) =>
134
- entryPoint ===
135
- (props.public
136
- ? path.join(path.dirname(file), "static-asset-facade.js")
137
- : Object.keys(result.metafile.inputs)[0])
138
- );
139
-
140
- const { format } = props;
141
- const bundle = {
142
- type: chunks[1].exports.length > 0 ? "esm" : "commonjs",
143
- exports: chunks[1].exports,
144
- };
145
-
146
- // TODO: instead of bundling the facade with the worker, we should just bundle the worker and expose it as a module.
147
- // That way we'll be able to accurately tell if this is a service worker or not.
148
-
149
- if (format === "modules" && bundle.type === "commonjs") {
150
- console.error("⎔ Cannot use modules with a commonjs bundle.");
151
- // TODO: a much better error message here, with what to do next
152
- return;
153
- }
154
- if (format === "service-worker" && bundle.type !== "esm") {
155
- console.error("⎔ Cannot use service-worker with a esm bundle.");
156
- // TODO: a much better error message here, with what to do next
157
- return;
158
- }
159
-
160
- const content = await readFile(chunks[0], { encoding: "utf-8" });
161
- await destination.cleanup();
162
-
163
- // if config.migrations
164
- // get current migration tag
165
- let migrations;
166
- if ("migrations" in config) {
167
- const scripts = await fetchResult<{ id: string; migration_tag: string }[]>(
168
- `/accounts/${accountId}/workers/scripts`
169
- );
170
- const script = scripts.find(({ id }) => id === scriptName);
171
- if (script?.migration_tag) {
172
- // was already published once
173
- const foundIndex = config.migrations.findIndex(
174
- (migration) => migration.tag === script.migration_tag
175
- );
176
- if (foundIndex === -1) {
177
- console.warn(
178
- `The published script ${scriptName} has a migration tag "${script.migration_tag}, which was not found in wrangler.toml. You may have already deleted it. Applying all available migrations to the script...`
179
- );
180
- migrations = {
181
- old_tag: script.migration_tag,
182
- new_tag: config.migrations[config.migrations.length - 1].tag,
183
- steps: config.migrations.map(({ tag: _tag, ...rest }) => rest),
184
- };
185
- } else {
186
- migrations = {
187
- old_tag: script.migration_tag,
188
- new_tag: config.migrations[config.migrations.length - 1].tag,
189
- steps: config.migrations
190
- .slice(foundIndex + 1)
191
- .map(({ tag: _tag, ...rest }) => rest),
192
- };
193
- }
194
- } else {
195
- migrations = {
196
- new_tag: config.migrations[config.migrations.length - 1].tag,
197
- steps: config.migrations.map(({ tag: _tag, ...rest }) => rest),
198
- };
199
- }
200
- }
201
-
202
- const assets =
203
- props.public || props.site || props.config.site?.bucket // TODO: allow both
204
- ? await syncAssets(
205
- accountId,
206
- scriptName,
207
- props.public || props.site || props.config.site?.bucket,
208
- false
209
- )
210
- : { manifest: undefined, namespace: undefined };
211
-
212
- const bindings: CfWorkerInit["bindings"] = {
213
- kv_namespaces: envRootObj.kv_namespaces?.concat(
214
- assets.namespace
215
- ? { binding: "__STATIC_CONTENT", id: assets.namespace }
216
- : []
217
- ),
218
- vars: envRootObj.vars,
219
- durable_objects: envRootObj.durable_objects,
220
- services: envRootObj.experimental_services,
221
- };
222
-
223
- const worker: CfWorkerInit = {
224
- name: scriptName,
225
- main: {
226
- name: path.basename(chunks[0]),
227
- content: content,
228
- type: bundle.type === "esm" ? "esm" : "commonjs",
229
- },
230
- bindings,
231
- ...(migrations && { migrations }),
232
- modules: moduleCollector.modules.concat(
233
- assets.manifest
234
- ? {
235
- name: "__STATIC_CONTENT_MANIFEST",
236
- content: JSON.stringify(assets.manifest),
237
- type: "text",
238
- }
239
- : []
240
- ),
241
- compatibility_date: config.compatibility_date,
242
- compatibility_flags: config.compatibility_flags,
243
- usage_model: config.usage_model,
244
- };
245
-
246
- const start = Date.now();
247
- function formatTime(duration: number) {
248
- return `(${(duration / 1000).toFixed(2)} sec)`;
249
- }
250
-
251
- const notProd = !props.legacyEnv && props.env;
252
- const workerName = notProd ? `${scriptName} (${envName})` : scriptName;
253
- const workerUrl = notProd
254
- ? `/accounts/${accountId}/workers/services/${scriptName}/environments/${envName}`
255
- : `/accounts/${accountId}/workers/scripts/${scriptName}`;
256
-
257
- // Upload the script so it has time to propagate.
258
- const { available_on_subdomain } = await fetchResult(
259
- `${workerUrl}?available_on_subdomain=true`,
260
- {
261
- method: "PUT",
262
- // @ts-expect-error: TODO: fix this type error!
263
- body: toFormData(worker),
264
- }
265
- );
266
-
267
- const uploadMs = Date.now() - start;
268
- console.log("Uploaded", workerName, formatTime(uploadMs));
269
- const deployments: Promise<string[]>[] = [];
270
-
271
- const userSubdomain = (
272
- await fetchResult<{ subdomain: string }>(
273
- `/accounts/${accountId}/workers/subdomain`
274
- )
275
- ).subdomain;
276
-
277
- const scriptURL =
278
- props.legacyEnv || !props.env
279
- ? `${scriptName}.${userSubdomain}.workers.dev`
280
- : `${envName}.${scriptName}.${userSubdomain}.workers.dev`;
281
-
282
- // Enable the `workers.dev` subdomain.
283
- // TODO: Make this configurable.
284
- if (!available_on_subdomain) {
285
- deployments.push(
286
- fetchResult(`${workerUrl}/subdomain`, {
287
- method: "POST",
288
- body: JSON.stringify({ enabled: true }),
289
- headers: {
290
- "Content-Type": "application/json",
291
- },
292
- })
293
- .then(() => [scriptURL])
294
- // Add a delay when the subdomain is first created.
295
- // This is to prevent an issue where a negative cache-hit
296
- // causes the subdomain to be unavailable for 30 seconds.
297
- // This is a temporary measure until we fix this on the edge.
298
- .then(async (url) => {
299
- await sleep(3000);
300
- return url;
301
- })
302
- );
303
- } else {
304
- deployments.push(Promise.resolve([scriptURL]));
305
- }
306
-
307
- // Update routing table for the script.
308
- if (routes && routes.length) {
309
- deployments.push(
310
- fetchResult(`${workerUrl}/routes`, {
311
- // TODO: PATCH will not delete previous routes on this script,
312
- // whereas PUT will. We need to decide on the default behaviour
313
- // and how to configure it.
314
- method: "PUT",
315
- body: JSON.stringify(routes.map((pattern) => ({ pattern }))),
316
- headers: {
317
- "Content-Type": "application/json",
318
- },
319
- }).then(() => {
320
- if (routes.length > 10) {
321
- return routes
322
- .slice(0, 9)
323
- .map(String)
324
- .concat([`...and ${routes.length - 10} more routes`]);
325
- }
326
- return routes.map(String);
327
- })
328
- );
329
- }
330
-
331
- // Configure any schedules for the script.
332
- // TODO: rename this to `schedules`?
333
- if (triggers && triggers.length) {
334
- deployments.push(
335
- fetchResult(`${workerUrl}/schedules`, {
336
- // TODO: Unlike routes, this endpoint does not support PATCH.
337
- // So technically, this will override any previous schedules.
338
- // We should change the endpoint to support PATCH.
339
- method: "PUT",
340
- body: JSON.stringify(triggers.map((cron) => ({ cron }))),
341
- headers: {
342
- "Content-Type": "application/json",
343
- },
344
- }).then(() => triggers.map(String))
345
- );
346
- }
347
-
348
- if (!deployments.length) {
349
- return;
350
- }
351
-
352
- const targets = await Promise.all(deployments);
353
- const deployMs = Date.now() - start - uploadMs;
354
- console.log("Deployed", workerName, formatTime(deployMs));
355
- for (const target of targets.flat()) {
356
- console.log(" ", target);
357
- }
358
- }
package/src/sites.tsx DELETED
@@ -1,114 +0,0 @@
1
- import crypto from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
- import * as path from "node:path";
4
- import { readdir, readFile } from "node:fs/promises";
5
- import { fetchResult } from "./cfetch";
6
- import { listNamespaceKeys, listNamespaces, putBulkKeyValue } from "./kv";
7
-
8
- async function* getFilesInFolder(dirPath: string): AsyncIterable<string> {
9
- const files = await readdir(dirPath, { withFileTypes: true });
10
- for (const file of files) {
11
- if (file.isDirectory()) {
12
- yield* await getFilesInFolder(path.join(dirPath, file.name));
13
- } else {
14
- yield path.join(dirPath, file.name);
15
- }
16
- }
17
- }
18
-
19
- async function hashFileContent(filePath: string): Promise<string> {
20
- return new Promise((resolve, reject) => {
21
- const hash = crypto.createHash("sha1");
22
- const rs = createReadStream(filePath);
23
- rs.on("error", reject);
24
- rs.on("data", (chunk) => hash.update(chunk));
25
- rs.on("end", () => resolve(hash.digest("hex")));
26
- });
27
- }
28
-
29
- async function hashFile(filePath: string): Promise<{
30
- filePath: string;
31
- hash: string;
32
- }> {
33
- const extName = path.extname(filePath);
34
- const baseName = path.basename(filePath, extName);
35
- const hash = await hashFileContent(filePath);
36
- return {
37
- filePath: `${baseName}.${hash}${extName || ""}`,
38
- hash,
39
- };
40
- }
41
-
42
- async function createKVNamespaceIfNotAlreadyExisting(
43
- title: string,
44
- accountId: string
45
- ) {
46
- // check if it already exists
47
- // TODO: this is super inefficient, should be made better
48
- const namespaces = await listNamespaces(accountId);
49
- const found = namespaces.find((x) => x.title === title);
50
- if (found) {
51
- return { created: false, id: found.id };
52
- }
53
-
54
- // else we make the namespace
55
- // TODO: use an export from ./kv
56
- const json = await fetchResult<{ id: string }>(
57
- `/accounts/${accountId}/storage/kv/namespaces`,
58
- {
59
- method: "POST",
60
- headers: {
61
- "Content-Type": "application/json",
62
- },
63
- body: JSON.stringify({ title }),
64
- }
65
- );
66
-
67
- return {
68
- created: true,
69
- id: json.id,
70
- };
71
- }
72
-
73
- export async function syncAssets(
74
- accountId: string,
75
- scriptName: string,
76
- dirPath: string,
77
- preview: boolean,
78
- _env?: string
79
- ) {
80
- const title = `__${scriptName}_sites_assets${preview ? "_preview" : ""}`;
81
- const { id: namespace } = await createKVNamespaceIfNotAlreadyExisting(
82
- title,
83
- accountId
84
- );
85
-
86
- // let's get all the keys in this namespace
87
- const keys = new Set(
88
- (await listNamespaceKeys(accountId, namespace)).map((x) => x.name)
89
- );
90
-
91
- const manifest = {};
92
- const upload = [];
93
- // TODO: this can be more efficient by parallelising
94
- for await (const file of getFilesInFolder(dirPath)) {
95
- // TODO: "exclude:" config
96
- const { filePath } = await hashFile(file);
97
- // now put each of the files into kv
98
- if (!keys.has(filePath)) {
99
- console.log(`uploading ${file}...`);
100
- const content = await readFile(file, "base64");
101
- if (content.length > 25 * 1024 * 1024) {
102
- throw new Error(`File ${file} is too big, it should be under 25 mb.`);
103
- }
104
- upload.push({
105
- key: filePath,
106
- value: content,
107
- base64: true,
108
- });
109
- }
110
- manifest[path.relative(dirPath, file)] = filePath;
111
- }
112
- await putBulkKeyValue(accountId, namespace, JSON.stringify(upload));
113
- return { manifest, namespace };
114
- }
package/src/tail.tsx DELETED
@@ -1,73 +0,0 @@
1
- import WebSocket from "ws";
2
- import { version as packageVersion } from "../package.json";
3
- import { fetchResult } from "./cfetch";
4
-
5
- export type TailApiResponse = {
6
- id: string;
7
- url: string;
8
- expires_at: Date;
9
- };
10
-
11
- function makeCreateTailUrl(accountId: string, workerName: string): string {
12
- return `/accounts/${accountId}/workers/scripts/${workerName}/tails`;
13
- }
14
-
15
- function makeDeleteTailUrl(
16
- accountId: string,
17
- workerName: string,
18
- tailId: string
19
- ): string {
20
- return `/accounts/${accountId}/workers/scripts/${workerName}/tails/${tailId}`;
21
- }
22
-
23
- /// Creates a tail, but doesn't connect to it.
24
- async function createTailButDontConnect(
25
- accountId: string,
26
- workerName: string
27
- ): Promise<TailApiResponse> {
28
- const createTailUrl = makeCreateTailUrl(accountId, workerName);
29
- /// https://api.cloudflare.com/#worker-tail-logs-start-tail
30
- return await fetchResult<TailApiResponse>(createTailUrl, {
31
- method: "POST",
32
- });
33
- }
34
-
35
- export async function createTail(
36
- accountId: string,
37
- workerName: string,
38
- _filters: Filters
39
- ): Promise<{
40
- tail: WebSocket;
41
- expiration: Date;
42
- deleteTail: () => Promise<void>;
43
- }> {
44
- const {
45
- id: tailId,
46
- url: websocketUrl,
47
- expires_at: expiration,
48
- } = await createTailButDontConnect(accountId, workerName);
49
- const deleteUrl = makeDeleteTailUrl(accountId, workerName, tailId);
50
-
51
- // deletes the tail
52
- async function deleteTail() {
53
- await fetchResult(deleteUrl, { method: "DELETE" });
54
- }
55
-
56
- const tail = new WebSocket(websocketUrl, "trace-v1", {
57
- headers: {
58
- "Sec-WebSocket-Protocol": "trace-v1", // needs to be `trace-v1` to be accepted
59
- "User-Agent": `wrangler-js/${packageVersion}`,
60
- },
61
- });
62
-
63
- // TODO: send filters as well
64
- return { tail, expiration, deleteTail };
65
- }
66
-
67
- export type Filters = {
68
- status?: "ok" | "error" | "canceled";
69
- header?: string;
70
- method?: string;
71
- "sampling-rate"?: number;
72
- search?: string;
73
- };