wrangler 0.0.0-e928f94 → 0.0.0-e93063e9

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