wrangler 0.0.0-e64812e → 0.0.0-e7a0cd5b

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 (291) hide show
  1. package/README.md +23 -3
  2. package/bin/wrangler.js +150 -62
  3. package/kv-asset-handler.js +1 -0
  4. package/miniflare-dist/index.mjs +1451 -21
  5. package/package.json +190 -152
  6. package/src/__tests__/access.test.ts +25 -0
  7. package/src/__tests__/api-dev.test.ts +209 -0
  8. package/src/__tests__/api-devregistry.test.js +57 -0
  9. package/src/__tests__/api.test.ts +80 -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 +4017 -3363
  13. package/src/__tests__/d1.test.ts +72 -0
  14. package/src/__tests__/delete.test.ts +230 -0
  15. package/src/__tests__/deployments.test.ts +95 -0
  16. package/src/__tests__/dev.test.tsx +1480 -951
  17. package/src/__tests__/dialogs.test.tsx +40 -0
  18. package/src/__tests__/generate.test.ts +235 -0
  19. package/src/__tests__/get-host-from-url.test.ts +16 -0
  20. package/src/__tests__/guess-worker-format.test.ts +68 -68
  21. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  22. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  23. package/src/__tests__/helpers/mock-bin.ts +20 -20
  24. package/src/__tests__/helpers/mock-cfetch.ts +216 -94
  25. package/src/__tests__/helpers/mock-console.ts +58 -39
  26. package/src/__tests__/helpers/mock-dialogs.ts +94 -71
  27. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  28. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  29. package/src/__tests__/helpers/mock-istty.ts +65 -18
  30. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  31. package/src/__tests__/helpers/mock-kv.ts +27 -27
  32. package/src/__tests__/helpers/mock-oauth-flow.ts +225 -228
  33. package/src/__tests__/helpers/mock-process.ts +39 -0
  34. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  35. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  36. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  37. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  38. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  39. package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
  40. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  41. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  42. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  43. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  44. package/src/__tests__/helpers/msw/index.ts +21 -0
  45. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  46. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  47. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  48. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  49. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  50. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  51. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  52. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  53. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  54. package/src/__tests__/https-options.test.ts +142 -109
  55. package/src/__tests__/index.test.ts +239 -233
  56. package/src/__tests__/init.test.ts +2869 -1603
  57. package/src/__tests__/jest.setup.ts +159 -34
  58. package/src/__tests__/kv.test.ts +1660 -1466
  59. package/src/__tests__/logger.test.ts +100 -74
  60. package/src/__tests__/metrics.test.ts +450 -0
  61. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  62. package/src/__tests__/middleware.test.ts +726 -0
  63. package/src/__tests__/package-manager.test.ts +303 -303
  64. package/src/__tests__/pages.test.ts +2204 -735
  65. package/src/__tests__/parse.test.ts +252 -252
  66. package/src/__tests__/paths.test.ts +39 -0
  67. package/src/__tests__/publish.test.ts +7543 -5351
  68. package/src/__tests__/pubsub.test.ts +370 -0
  69. package/src/__tests__/queues.test.ts +371 -0
  70. package/src/__tests__/r2.test.ts +371 -228
  71. package/src/__tests__/route.test.ts +18 -18
  72. package/src/__tests__/secret.test.ts +622 -459
  73. package/src/__tests__/tail.test.ts +677 -567
  74. package/src/__tests__/test-old-node-version.js +31 -0
  75. package/src/__tests__/type-generation.test.ts +217 -0
  76. package/src/__tests__/user.test.ts +140 -116
  77. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  78. package/src/__tests__/validate-dev-props.test.ts +56 -0
  79. package/src/__tests__/version.test.ts +35 -0
  80. package/src/__tests__/whoami.test.tsx +264 -91
  81. package/src/__tests__/worker-namespace.test.ts +326 -0
  82. package/src/abort.d.ts +1 -1
  83. package/src/api/dev.ts +208 -0
  84. package/src/api/index.ts +2 -0
  85. package/src/bundle-reporter.tsx +68 -0
  86. package/src/bundle.ts +746 -161
  87. package/src/cfetch/index.ts +120 -81
  88. package/src/cfetch/internal.ts +209 -91
  89. package/src/cli.ts +23 -8
  90. package/src/config/config.ts +236 -195
  91. package/src/config/diagnostics.ts +61 -61
  92. package/src/config/environment.ts +500 -357
  93. package/src/config/index.ts +310 -193
  94. package/src/config/validation-helpers.ts +379 -357
  95. package/src/config/validation.ts +1941 -1367
  96. package/src/config-cache.ts +81 -41
  97. package/src/create-worker-preview.ts +239 -142
  98. package/src/create-worker-upload-form.ts +305 -238
  99. package/src/d1/backups.tsx +218 -0
  100. package/src/d1/create.tsx +54 -0
  101. package/src/d1/delete.tsx +56 -0
  102. package/src/d1/execute.tsx +299 -0
  103. package/src/d1/formatTimeAgo.ts +14 -0
  104. package/src/d1/index.ts +76 -0
  105. package/src/d1/list.tsx +48 -0
  106. package/src/d1/options.ts +12 -0
  107. package/src/d1/types.tsx +14 -0
  108. package/src/d1/utils.ts +39 -0
  109. package/src/delete.ts +108 -0
  110. package/src/deployments.ts +74 -0
  111. package/src/deprecated/index.ts +438 -0
  112. package/src/dev/dev-vars.ts +20 -17
  113. package/src/dev/dev.tsx +520 -352
  114. package/src/dev/get-local-persistence-path.tsx +31 -0
  115. package/src/dev/local.tsx +697 -298
  116. package/src/dev/remote.tsx +591 -215
  117. package/src/dev/start-server.ts +513 -0
  118. package/src/dev/use-esbuild.ts +183 -97
  119. package/src/dev/validate-dev-props.ts +31 -0
  120. package/src/dev-registry.tsx +201 -0
  121. package/src/dev.tsx +869 -0
  122. package/src/dialogs.tsx +126 -98
  123. package/src/dispatch-namespace.ts +207 -0
  124. package/src/durable.ts +87 -87
  125. package/src/entry.ts +235 -228
  126. package/src/environment-variables.ts +38 -23
  127. package/src/errors.ts +6 -6
  128. package/src/git-client.ts +124 -0
  129. package/src/global-wrangler-config-path.ts +26 -0
  130. package/src/https-options.ts +84 -80
  131. package/src/index.tsx +627 -2807
  132. package/src/init.ts +970 -0
  133. package/src/inspect.ts +698 -593
  134. package/src/intl-polyfill.d.ts +123 -123
  135. package/src/is-ci.ts +14 -0
  136. package/src/is-interactive.ts +16 -0
  137. package/src/kv/helpers.ts +430 -0
  138. package/src/kv/index.ts +596 -0
  139. package/src/logger.ts +67 -41
  140. package/src/metrics/index.ts +5 -0
  141. package/src/metrics/metrics-config.ts +239 -0
  142. package/src/metrics/metrics-dispatcher.ts +96 -0
  143. package/src/metrics/metrics-usage-headers.ts +24 -0
  144. package/src/metrics/send-event.ts +94 -0
  145. package/src/miniflare-cli/assets.ts +215 -0
  146. package/src/miniflare-cli/index.ts +205 -33
  147. package/src/miniflare-cli/request-context.ts +18 -18
  148. package/src/module-collection.ts +221 -212
  149. package/src/open-in-browser.ts +4 -6
  150. package/src/package-manager.ts +173 -128
  151. package/src/pages/build.tsx +238 -0
  152. package/src/pages/constants.ts +18 -0
  153. package/src/pages/deployments.tsx +106 -0
  154. package/src/pages/dev.tsx +693 -0
  155. package/src/pages/errors.ts +66 -0
  156. package/src/pages/functions/buildPlugin.ts +110 -0
  157. package/src/pages/functions/buildWorker.ts +156 -0
  158. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  159. package/src/pages/functions/filepath-routing.ts +189 -0
  160. package/src/pages/functions/identifiers.ts +78 -0
  161. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  162. package/src/pages/functions/routes-consolidation.ts +73 -0
  163. package/src/pages/functions/routes-transformation.test.ts +282 -0
  164. package/src/pages/functions/routes-transformation.ts +115 -0
  165. package/src/pages/functions/routes-validation.test.ts +403 -0
  166. package/src/pages/functions/routes-validation.ts +202 -0
  167. package/src/pages/functions/routes.ts +151 -0
  168. package/src/pages/functions.tsx +82 -0
  169. package/src/pages/hash.tsx +13 -0
  170. package/src/pages/index.tsx +94 -0
  171. package/src/pages/projects.tsx +169 -0
  172. package/src/pages/publish.tsx +436 -0
  173. package/src/pages/types.ts +49 -0
  174. package/src/pages/upload.tsx +425 -0
  175. package/src/pages/utils.ts +12 -0
  176. package/src/parse.ts +209 -125
  177. package/src/paths.ts +53 -8
  178. package/src/proxy.ts +618 -394
  179. package/src/publish/index.ts +270 -0
  180. package/src/publish/publish.ts +1035 -0
  181. package/src/pubsub/index.ts +286 -0
  182. package/src/pubsub/pubsub-commands.tsx +624 -0
  183. package/src/queues/cli/commands/consumer/add.ts +71 -0
  184. package/src/queues/cli/commands/consumer/index.ts +22 -0
  185. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  186. package/src/queues/cli/commands/create.ts +25 -0
  187. package/src/queues/cli/commands/delete.ts +26 -0
  188. package/src/queues/cli/commands/index.ts +33 -0
  189. package/src/queues/cli/commands/list.ts +25 -0
  190. package/src/queues/client.ts +135 -0
  191. package/src/r2/helpers.ts +131 -0
  192. package/src/r2/index.ts +277 -0
  193. package/src/routes.ts +140 -0
  194. package/src/secret/index.ts +379 -0
  195. package/src/selfsigned.d.ts +23 -23
  196. package/src/sites.tsx +280 -203
  197. package/src/tail/createTail.ts +315 -0
  198. package/src/tail/filters.ts +108 -110
  199. package/src/tail/index.ts +211 -296
  200. package/src/tail/printing.ts +86 -46
  201. package/src/type-generation.ts +159 -0
  202. package/src/update-check.ts +11 -11
  203. package/src/user/access.ts +69 -0
  204. package/src/user/choose-account.tsx +69 -0
  205. package/src/user/env-vars.ts +46 -0
  206. package/src/user/generate-auth-url.ts +33 -0
  207. package/src/user/generate-random-state.ts +16 -0
  208. package/src/user/index.ts +3 -0
  209. package/src/user/user.tsx +1192 -0
  210. package/src/utils/collectKeyValues.ts +14 -0
  211. package/src/whoami.tsx +141 -42
  212. package/src/worker.ts +168 -106
  213. package/src/yargs-types.ts +20 -0
  214. package/src/zones.ts +191 -0
  215. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  216. package/templates/checked-fetch.js +17 -0
  217. package/templates/d1-beta-facade.js +174 -0
  218. package/templates/experimental-local-cache-stubs.js +27 -0
  219. package/templates/first-party-worker-module-facade.ts +18 -0
  220. package/templates/format-dev-errors.ts +32 -0
  221. package/templates/init-tests/test-jest-new-worker.js +25 -0
  222. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  223. package/templates/middleware/common.ts +62 -0
  224. package/templates/middleware/loader-modules.ts +84 -0
  225. package/templates/middleware/loader-sw.ts +213 -0
  226. package/templates/middleware/middleware-pretty-error.ts +40 -0
  227. package/templates/middleware/middleware-scheduled.ts +15 -0
  228. package/templates/new-worker-scheduled.js +3 -3
  229. package/templates/new-worker-scheduled.ts +15 -15
  230. package/templates/new-worker.js +3 -3
  231. package/templates/new-worker.ts +15 -15
  232. package/templates/no-op-worker.js +10 -0
  233. package/templates/pages-dev-pipeline.ts +28 -0
  234. package/templates/pages-dev-util.ts +52 -0
  235. package/templates/pages-shim.ts +9 -0
  236. package/templates/pages-template-plugin.ts +171 -0
  237. package/templates/pages-template-worker.ts +189 -0
  238. package/templates/serve-static-assets.ts +63 -0
  239. package/templates/service-bindings-module-facade.js +54 -0
  240. package/templates/service-bindings-sw-facade.js +42 -0
  241. package/templates/tsconfig.json +96 -95
  242. package/wrangler-dist/cli.d.ts +892 -0
  243. package/wrangler-dist/cli.js +145674 -108957
  244. package/pages/functions/buildPlugin.ts +0 -105
  245. package/pages/functions/buildWorker.ts +0 -151
  246. package/pages/functions/filepath-routing.ts +0 -189
  247. package/pages/functions/identifiers.ts +0 -78
  248. package/pages/functions/routes.ts +0 -156
  249. package/pages/functions/template-plugin.ts +0 -147
  250. package/pages/functions/template-worker.ts +0 -143
  251. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  252. package/src/kv.ts +0 -408
  253. package/src/miniflare-cli/enum-keys.ts +0 -17
  254. package/src/pages.tsx +0 -2038
  255. package/src/publish.ts +0 -583
  256. package/src/r2.ts +0 -50
  257. package/src/user.tsx +0 -1203
  258. package/templates/static-asset-facade.js +0 -47
  259. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  260. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  261. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  262. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  263. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  264. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  265. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  266. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  267. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  268. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  269. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  270. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  271. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  272. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  273. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  274. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  275. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  276. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  277. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  278. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  279. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  280. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  281. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  282. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  283. package/vendor/wrangler-mime/LICENSE +0 -21
  284. package/vendor/wrangler-mime/Mime.js +0 -97
  285. package/vendor/wrangler-mime/README.md +0 -187
  286. package/vendor/wrangler-mime/cli.js +0 -46
  287. package/vendor/wrangler-mime/index.js +0 -4
  288. package/vendor/wrangler-mime/lite.js +0 -4
  289. package/vendor/wrangler-mime/package.json +0 -52
  290. package/vendor/wrangler-mime/types/other.js +0 -1
  291. package/vendor/wrangler-mime/types/standard.js +0 -1
package/src/abort.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  declare interface AbortSignal {
2
- addEventListener(event: "abort", handler: () => void);
2
+ addEventListener(event: "abort", handler: () => void);
3
3
  }
package/src/api/dev.ts ADDED
@@ -0,0 +1,208 @@
1
+ import { fetch, Request } from "undici";
2
+ import { startApiDev, startDev } from "../dev";
3
+ import { logger } from "../logger";
4
+
5
+ import type { Environment } from "../config";
6
+ import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli";
7
+ import type { RequestInit, Response, RequestInfo } from "undici";
8
+
9
+ interface DevOptions {
10
+ config?: string;
11
+ env?: string;
12
+ ip?: string;
13
+ port?: number;
14
+ bundle?: boolean;
15
+ inspectorPort?: number;
16
+ localProtocol?: "http" | "https";
17
+ assets?: string;
18
+ site?: string;
19
+ siteInclude?: string[];
20
+ siteExclude?: string[];
21
+ nodeCompat?: boolean;
22
+ compatibilityDate?: string;
23
+ compatibilityFlags?: string[];
24
+ persist?: boolean;
25
+ persistTo?: string;
26
+ liveReload?: boolean;
27
+ watch?: boolean;
28
+ vars?: {
29
+ [key: string]: unknown;
30
+ };
31
+ kv?: {
32
+ binding: string;
33
+ id: string;
34
+ preview_id?: string;
35
+ }[];
36
+ durableObjects?: {
37
+ name: string;
38
+ class_name: string;
39
+ script_name?: string | undefined;
40
+ environment?: string | undefined;
41
+ }[];
42
+ r2?: {
43
+ binding: string;
44
+ bucket_name: string;
45
+ preview_bucket_name?: string;
46
+ }[];
47
+ d1Databases?: Environment["d1_databases"];
48
+ showInteractiveDevSession?: boolean;
49
+ logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug";
50
+ logPrefix?: string;
51
+ inspect?: boolean;
52
+ local?: boolean;
53
+ forceLocal?: boolean;
54
+ enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
55
+ _?: (string | number)[]; //yargs wants this
56
+ $0?: string; //yargs wants this
57
+ testScheduled?: boolean;
58
+ experimentalLocal?: boolean;
59
+ }
60
+
61
+ interface DevApiOptions {
62
+ testMode?: boolean;
63
+ disableExperimentalWarning?: boolean;
64
+ }
65
+
66
+ export interface UnstableDevWorker {
67
+ port: number;
68
+ address: string;
69
+ stop: () => Promise<void>;
70
+ fetch: (input?: RequestInfo, init?: RequestInit) => Promise<Response>;
71
+ waitUntilExit: () => Promise<void>;
72
+ }
73
+ /**
74
+ * unstable_dev starts a wrangler dev server, and returns a promise that resolves with utility functions to interact with it.
75
+ */
76
+ export async function unstable_dev(
77
+ script: string,
78
+ options?: DevOptions,
79
+ apiOptions?: DevApiOptions
80
+ ): Promise<UnstableDevWorker> {
81
+ const { testMode = true, disableExperimentalWarning = false } =
82
+ apiOptions || {};
83
+ if (!disableExperimentalWarning) {
84
+ logger.warn(
85
+ `unstable_dev() is experimental\nunstable_dev()'s behaviour will likely change in future releases`
86
+ );
87
+ }
88
+ let readyPort: number;
89
+ let readyAddress: string;
90
+ //due to Pages adoption of unstable_dev, we can't *just* disable rebuilds and watching. instead, we'll have two versions of startDev, which will converge.
91
+ if (testMode) {
92
+ //in testMode, we can run multiple wranglers in parallel, but rebuilds might not work out of the box
93
+ return new Promise<UnstableDevWorker>((resolve) => {
94
+ //lmao
95
+ return new Promise<Awaited<ReturnType<typeof startApiDev>>>((ready) => {
96
+ // once the devServer is ready for requests, we resolve the inner promise
97
+ // (where we've named the resolve function "ready")
98
+ const devServer = startApiDev({
99
+ script: script,
100
+ inspect: false,
101
+ logLevel: "none",
102
+ showInteractiveDevSession: false,
103
+ _: [],
104
+ $0: "",
105
+ port: options?.port ?? 0,
106
+ local: true,
107
+ ...options,
108
+ onReady: (address, port) => {
109
+ readyPort = port;
110
+ readyAddress = address;
111
+ ready(devServer);
112
+ },
113
+ });
114
+ }).then((devServer) => {
115
+ // now that the inner promise has resolved, we can resolve the outer promise
116
+ // with an object that lets you fetch and stop the dev server
117
+ resolve({
118
+ port: readyPort,
119
+ address: readyAddress,
120
+ stop: devServer.stop,
121
+ fetch: async (input?: RequestInfo, init?: RequestInit) => {
122
+ return await fetch(
123
+ ...parseRequestInput(
124
+ readyAddress,
125
+ readyPort,
126
+ input,
127
+ init,
128
+ options?.localProtocol
129
+ )
130
+ );
131
+ },
132
+ //no-op, does nothing in tests
133
+ waitUntilExit: async () => {
134
+ return;
135
+ },
136
+ });
137
+ });
138
+ });
139
+ } else {
140
+ //outside of test mode, rebuilds work fine, but only one instance of wrangler will work at a time
141
+
142
+ return new Promise<UnstableDevWorker>((resolve) => {
143
+ //lmao
144
+ return new Promise<Awaited<ReturnType<typeof startDev>>>((ready) => {
145
+ const devServer = startDev({
146
+ script: script,
147
+ inspect: false,
148
+ showInteractiveDevSession: false,
149
+ _: [],
150
+ $0: "",
151
+ local: true,
152
+ ...options,
153
+ onReady: (address, port) => {
154
+ readyPort = port;
155
+ readyAddress = address;
156
+ ready(devServer);
157
+ },
158
+ });
159
+ }).then((devServer) => {
160
+ resolve({
161
+ port: readyPort,
162
+ address: readyAddress,
163
+ stop: devServer.stop,
164
+ fetch: async (input?: RequestInfo, init?: RequestInit) => {
165
+ return await fetch(
166
+ ...parseRequestInput(
167
+ readyAddress,
168
+ readyPort,
169
+ input,
170
+ init,
171
+ options?.localProtocol
172
+ )
173
+ );
174
+ },
175
+ waitUntilExit: devServer.devReactElement.waitUntilExit,
176
+ });
177
+ });
178
+ });
179
+ }
180
+ }
181
+
182
+ export function parseRequestInput(
183
+ readyAddress: string,
184
+ readyPort: number,
185
+ input?: RequestInfo,
186
+ init?: RequestInit,
187
+ protocol: "http" | "https" = "http"
188
+ ): [RequestInfo, RequestInit | undefined] {
189
+ if (input instanceof Request) {
190
+ return [input, undefined];
191
+ } else if (input instanceof URL) {
192
+ input = `${protocol}://${readyAddress}:${readyPort}${input.pathname}`;
193
+ } else if (typeof input === "string") {
194
+ try {
195
+ // Want to strip the URL to only get the pathname, but the user could pass in only the pathname
196
+ // Will error if we try and pass "/something" into new URL("/something")
197
+ input = `${protocol}://${readyAddress}:${readyPort}${
198
+ new URL(input).pathname
199
+ }`;
200
+ } catch {
201
+ input = `${protocol}://${readyAddress}:${readyPort}${input}`;
202
+ }
203
+ } else {
204
+ input = `${protocol}://${readyAddress}:${readyPort}`;
205
+ }
206
+
207
+ return [input, init];
208
+ }
@@ -0,0 +1,2 @@
1
+ export { unstable_dev } from "./dev";
2
+ export type { UnstableDevWorker } from "./dev";
@@ -0,0 +1,68 @@
1
+ import { Blob } from "node:buffer";
2
+ import { gzipSync } from "node:zlib";
3
+ import { logger } from "./logger";
4
+ import type { CfModule } from "./worker";
5
+ import type { Metafile } from "esbuild";
6
+
7
+ const ONE_KIB_BYTES = 1024;
8
+ const ONE_MIB_BYTES = ONE_KIB_BYTES * 1024;
9
+
10
+ async function getSize(modules: CfModule[]) {
11
+ const gzipSize = gzipSync(
12
+ await new Blob(modules.map((file) => file.content)).arrayBuffer()
13
+ ).byteLength;
14
+ const aggregateSize = new Blob(modules.map((file) => file.content)).size;
15
+
16
+ return { size: aggregateSize, gzipSize };
17
+ }
18
+
19
+ export async function printBundleSize(
20
+ main: {
21
+ name: string;
22
+ content: string;
23
+ },
24
+ modules: CfModule[]
25
+ ) {
26
+ const { size, gzipSize } = await getSize([...modules, main]);
27
+
28
+ const bundleReport = `${(size / ONE_KIB_BYTES).toFixed(2)} KiB / gzip: ${(
29
+ gzipSize / ONE_KIB_BYTES
30
+ ).toFixed(2)} KiB`;
31
+
32
+ logger.log(`Total Upload: ${bundleReport}`);
33
+
34
+ if (gzipSize > ONE_MIB_BYTES && !process.env.NO_SCRIPT_SIZE_WARNING) {
35
+ logger.warn(
36
+ "We recommend keeping your script less than 1MiB (1024 KiB) after gzip. Exceeding past this can affect cold start time"
37
+ );
38
+ }
39
+ }
40
+
41
+ export function printOffendingDependencies(
42
+ dependencies: Metafile["outputs"][string]["inputs"]
43
+ ) {
44
+ const warning: string[] = [];
45
+
46
+ const dependenciesSorted = Object.entries(dependencies);
47
+ dependenciesSorted.sort(
48
+ ([_adep, aData], [_bdep, bData]) =>
49
+ bData.bytesInOutput - aData.bytesInOutput
50
+ );
51
+ const topLargest = dependenciesSorted.slice(0, 5);
52
+
53
+ if (topLargest.length > 0) {
54
+ warning.push(
55
+ `Here are the ${topLargest.length} largest dependencies included in your script:`
56
+ );
57
+
58
+ for (const [dep, data] of topLargest) {
59
+ warning.push(
60
+ `- ${dep} - ${(data.bytesInOutput / ONE_KIB_BYTES).toFixed(2)} KiB`
61
+ );
62
+ }
63
+
64
+ warning.push("If these are unnecessary, consider removing them");
65
+
66
+ logger.warn(warning.join("\n"));
67
+ }
68
+ }