wrangler 0.0.0-e30d1013 → 0.0.0-e311bbbf

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 (236) hide show
  1. package/README.md +3 -3
  2. package/bin/wrangler.js +30 -10
  3. package/miniflare-dist/index.mjs +126 -74
  4. package/package.json +26 -19
  5. package/src/__tests__/api-dev.test.ts +65 -36
  6. package/src/__tests__/api-devregistry.test.ts +121 -0
  7. package/src/__tests__/api.test.ts +27 -5
  8. package/src/__tests__/configuration.test.ts +567 -39
  9. package/src/__tests__/d1/d1.test.ts +82 -0
  10. package/src/__tests__/d1/execute.test.ts +66 -0
  11. package/src/__tests__/d1/migrate.test.ts +157 -0
  12. package/src/__tests__/d1/splitter.test.ts +255 -0
  13. package/src/__tests__/delete.test.ts +91 -49
  14. package/src/__tests__/deployments.test.ts +330 -52
  15. package/src/__tests__/dev.test.tsx +198 -90
  16. package/src/__tests__/generate.test.ts +8 -5
  17. package/src/__tests__/guess-worker-format.test.ts +35 -0
  18. package/src/__tests__/helpers/end-event-loop.ts +6 -0
  19. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  20. package/src/__tests__/helpers/mock-console.ts +6 -0
  21. package/src/__tests__/helpers/mock-dialogs.ts +71 -85
  22. package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
  23. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
  24. package/src/__tests__/helpers/mock-known-routes.ts +7 -2
  25. package/src/__tests__/helpers/mock-kv.ts +29 -16
  26. package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
  27. package/src/__tests__/helpers/mock-process.ts +8 -13
  28. package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
  29. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  30. package/src/__tests__/helpers/msw/handlers/deployments.ts +127 -26
  31. package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
  32. package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
  33. package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
  34. package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
  35. package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
  36. package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
  37. package/src/__tests__/helpers/msw/index.ts +32 -1
  38. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  39. package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
  40. package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
  41. package/src/__tests__/index.test.ts +90 -72
  42. package/src/__tests__/init.test.ts +927 -631
  43. package/src/__tests__/jest.setup.ts +19 -42
  44. package/src/__tests__/kv.test.ts +355 -231
  45. package/src/__tests__/logger.test.ts +68 -2
  46. package/src/__tests__/logout.test.ts +47 -0
  47. package/src/__tests__/metrics.test.ts +94 -51
  48. package/src/__tests__/middleware.scheduled.test.ts +42 -32
  49. package/src/__tests__/middleware.test.ts +212 -122
  50. package/src/__tests__/mtls-certificates.test.ts +588 -0
  51. package/src/__tests__/pages/deployment-list.test.ts +80 -0
  52. package/src/__tests__/pages/functions-build.test.ts +452 -0
  53. package/src/__tests__/pages/pages.test.ts +81 -0
  54. package/src/__tests__/pages/project-create.test.ts +63 -0
  55. package/src/__tests__/pages/project-list.test.ts +110 -0
  56. package/src/__tests__/pages/project-upload.test.ts +500 -0
  57. package/src/__tests__/pages/publish.test.ts +2864 -0
  58. package/src/__tests__/pages-deployment-tail.test.ts +955 -0
  59. package/src/__tests__/parse.test.ts +106 -0
  60. package/src/__tests__/publish.test.ts +1620 -830
  61. package/src/__tests__/pubsub.test.ts +226 -100
  62. package/src/__tests__/queues.test.ts +237 -76
  63. package/src/__tests__/r2.test.ts +37 -56
  64. package/src/__tests__/secret.test.ts +179 -130
  65. package/src/__tests__/tail.test.ts +267 -109
  66. package/src/__tests__/test-old-node-version.js +3 -3
  67. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  68. package/src/__tests__/tsconfig-sanity.ts +12 -0
  69. package/src/__tests__/tsconfig.json +8 -0
  70. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  71. package/src/__tests__/type-generation.test.ts +11 -2
  72. package/src/__tests__/user.test.ts +35 -72
  73. package/src/__tests__/whoami.test.tsx +8 -114
  74. package/src/__tests__/worker-namespace.test.ts +83 -69
  75. package/src/api/dev.ts +168 -60
  76. package/src/api/index.ts +10 -1
  77. package/src/api/mtls-certificate.ts +148 -0
  78. package/src/api/pages/create-worker-bundle-contents.ts +76 -0
  79. package/src/api/pages/index.ts +5 -0
  80. package/src/api/pages/publish.tsx +355 -0
  81. package/src/bundle.ts +221 -128
  82. package/src/cfetch/index.ts +0 -2
  83. package/src/cfetch/internal.ts +16 -21
  84. package/src/cli.ts +4 -4
  85. package/src/config/config.ts +14 -7
  86. package/src/config/environment.ts +73 -16
  87. package/src/config/index.ts +99 -30
  88. package/src/config/validation-helpers.ts +1 -1
  89. package/src/config/validation.ts +248 -9
  90. package/src/create-worker-preview.ts +19 -8
  91. package/src/create-worker-upload-form.ts +48 -5
  92. package/src/d1/backups.tsx +43 -42
  93. package/src/d1/create.tsx +26 -21
  94. package/src/d1/{delete.tsx → delete.ts} +11 -14
  95. package/src/d1/execute.tsx +183 -170
  96. package/src/d1/index.ts +7 -6
  97. package/src/d1/list.tsx +22 -10
  98. package/src/d1/migrations/apply.tsx +212 -0
  99. package/src/d1/migrations/create.tsx +79 -0
  100. package/src/d1/migrations/helpers.ts +172 -0
  101. package/src/d1/migrations/index.ts +3 -0
  102. package/src/d1/migrations/list.tsx +95 -0
  103. package/src/d1/migrations/options.ts +23 -0
  104. package/src/d1/options.ts +3 -3
  105. package/src/d1/splitter.ts +161 -0
  106. package/src/d1/{types.tsx → types.ts} +1 -0
  107. package/src/d1/utils.ts +2 -1
  108. package/src/delete.ts +8 -16
  109. package/src/deployments.ts +333 -42
  110. package/src/deprecated/index.ts +8 -302
  111. package/src/dev/dev.tsx +57 -44
  112. package/src/dev/local.tsx +248 -74
  113. package/src/dev/remote.tsx +32 -3
  114. package/src/dev/start-server.ts +81 -66
  115. package/src/dev/use-esbuild.ts +17 -18
  116. package/src/dev/validate-dev-props.ts +9 -0
  117. package/src/{dev-registry.tsx → dev-registry.ts} +2 -1
  118. package/src/dev.tsx +178 -117
  119. package/src/dialogs.ts +136 -0
  120. package/src/dispatch-namespace.ts +21 -17
  121. package/src/docs/index.ts +97 -0
  122. package/src/entry.ts +19 -11
  123. package/src/environment-variables/factory.ts +88 -0
  124. package/src/environment-variables/misc-variables.ts +30 -0
  125. package/src/generate/index.ts +298 -0
  126. package/src/git-client.ts +15 -4
  127. package/src/{index.tsx → index.ts} +134 -59
  128. package/src/init.ts +249 -187
  129. package/src/inspect.ts +16 -1
  130. package/src/jest.d.ts +4 -0
  131. package/src/kv/index.ts +15 -17
  132. package/src/logger.ts +32 -5
  133. package/src/metrics/metrics-config.ts +3 -3
  134. package/src/metrics/send-event.ts +6 -1
  135. package/src/miniflare-cli/assets.ts +64 -28
  136. package/src/miniflare-cli/index.ts +4 -7
  137. package/src/miniflare-cli/tsconfig.json +9 -0
  138. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  139. package/src/miniflare-cli/types.ts +11 -0
  140. package/src/module-collection.ts +91 -25
  141. package/src/mtls-certificate/cli.ts +155 -0
  142. package/src/pages/build.ts +410 -0
  143. package/src/pages/buildFunctions.ts +140 -0
  144. package/src/pages/deployment-tails.ts +281 -0
  145. package/src/pages/deployments.tsx +11 -33
  146. package/src/pages/{dev.tsx → dev.ts} +147 -139
  147. package/src/pages/errors.ts +1 -0
  148. package/src/pages/functions/buildPlugin.ts +61 -54
  149. package/src/pages/functions/buildWorker.ts +159 -33
  150. package/src/pages/functions/tsconfig.json +8 -0
  151. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  152. package/src/pages/{functions.tsx → functions.ts} +8 -4
  153. package/src/pages/{index.tsx → index.ts} +11 -3
  154. package/src/pages/projects.tsx +12 -22
  155. package/src/pages/prompt-select-project.tsx +31 -0
  156. package/src/pages/publish.tsx +46 -225
  157. package/src/pages/types.ts +6 -9
  158. package/src/pages/upload.tsx +58 -14
  159. package/src/pages/utils.ts +12 -1
  160. package/src/parse.ts +23 -1
  161. package/src/paths.ts +1 -1
  162. package/src/proxy.ts +5 -0
  163. package/src/publish/index.ts +20 -16
  164. package/src/publish/publish.ts +71 -46
  165. package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
  166. package/src/queues/cli/commands/consumer/add.ts +24 -24
  167. package/src/queues/cli/commands/consumer/index.ts +3 -6
  168. package/src/queues/cli/commands/consumer/remove.ts +11 -18
  169. package/src/queues/cli/commands/create.ts +8 -8
  170. package/src/queues/cli/commands/delete.ts +8 -8
  171. package/src/queues/cli/commands/index.ts +6 -4
  172. package/src/queues/cli/commands/list.ts +8 -8
  173. package/src/queues/client.ts +1 -0
  174. package/src/queues/utils.ts +18 -0
  175. package/src/r2/helpers.ts +1 -0
  176. package/src/r2/index.ts +28 -28
  177. package/src/secret/index.ts +14 -16
  178. package/src/{sites.tsx → sites.ts} +1 -1
  179. package/src/tail/createTail.ts +94 -3
  180. package/src/tail/filters.ts +1 -1
  181. package/src/tail/index.ts +8 -11
  182. package/src/tail/printing.ts +15 -0
  183. package/src/traverse-module-graph.ts +53 -0
  184. package/src/tsconfig-sanity.ts +16 -0
  185. package/src/type-generation.ts +28 -20
  186. package/src/user/access.ts +0 -1
  187. package/src/user/auth-variables.ts +113 -0
  188. package/src/user/choose-account.tsx +1 -31
  189. package/src/user/index.ts +0 -1
  190. package/src/user/{user.tsx → user.ts} +123 -82
  191. package/src/utils/render.ts +93 -0
  192. package/src/{whoami.tsx → whoami.ts} +37 -71
  193. package/src/worker.ts +30 -1
  194. package/src/yargs-types.ts +22 -5
  195. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  196. package/templates/__tests__/tsconfig.json +8 -0
  197. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  198. package/templates/checked-fetch.js +9 -3
  199. package/templates/d1-beta-facade.js +51 -3
  200. package/templates/facade.d.ts +14 -0
  201. package/templates/first-party-worker-module-facade.ts +4 -3
  202. package/templates/format-dev-errors.ts +8 -6
  203. package/templates/gitignore +1 -0
  204. package/templates/init-tests/test-jest-new-worker.js +3 -5
  205. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  206. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  207. package/templates/middleware/loader-modules.ts +2 -2
  208. package/templates/middleware/loader-sw.ts +51 -31
  209. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  210. package/templates/new-worker.ts +3 -0
  211. package/templates/pages-dev-pipeline.ts +4 -1
  212. package/templates/pages-shim.ts +4 -1
  213. package/templates/pages-template-plugin.ts +19 -10
  214. package/templates/serve-static-assets.ts +17 -14
  215. package/templates/service-bindings-module-facade.js +1 -0
  216. package/templates/tsconfig-sanity.ts +11 -0
  217. package/templates/tsconfig.init.json +105 -0
  218. package/templates/tsconfig.json +5 -103
  219. package/templates/tsconfig.tsbuildinfo +1 -0
  220. package/wrangler-dist/cli.d.ts +820 -70
  221. package/wrangler-dist/cli.js +68161 -78780
  222. package/wrangler-dist/wasm-sync.wasm +0 -0
  223. package/src/__tests__/api-devregistry.test.js +0 -56
  224. package/src/__tests__/d1.test.ts +0 -74
  225. package/src/__tests__/dialogs.test.tsx +0 -40
  226. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  227. package/src/__tests__/pages.test.ts +0 -2387
  228. package/src/d1/migrations.tsx +0 -446
  229. package/src/dialogs.tsx +0 -169
  230. package/src/environment-variables.ts +0 -50
  231. package/src/pages/build.tsx +0 -270
  232. package/src/user/env-vars.ts +0 -46
  233. package/templates/experimental-local-cache-stubs.js +0 -27
  234. /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
  235. /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
  236. /package/src/pages/{hash.tsx → hash.ts} +0 -0
@@ -1,6 +1,5 @@
1
1
  import { fork } from "node:child_process";
2
2
  import { realpathSync } from "node:fs";
3
- import { writeFile } from "node:fs/promises";
4
3
  import * as path from "node:path";
5
4
  import * as util from "node:util";
6
5
  import onExit from "signal-exit";
@@ -15,17 +14,20 @@ import {
15
14
  import { runCustomBuild } from "../entry";
16
15
  import { logger } from "../logger";
17
16
  import { waitForPortToBeAvailable } from "../proxy";
17
+ import traverseModuleGraph from "../traverse-module-graph";
18
18
  import {
19
19
  setupBindings,
20
- getMiniflare3Constructor,
20
+ getMiniflare3,
21
+ buildMiniflare3Logger,
21
22
  setupMiniflareOptions,
22
23
  setupNodeOptions,
23
- transformLocalOptions,
24
+ transformMf2OptionsToMf3Options,
24
25
  } from "./local";
25
26
  import { startRemoteServer } from "./remote";
26
27
  import { validateDevProps } from "./validate-dev-props";
27
28
 
28
29
  import type { Config } from "../config";
30
+ import type { DurableObjectBindings } from "../config/environment";
29
31
  import type { WorkerRegistry } from "../dev-registry";
30
32
  import type { Entry } from "../entry";
31
33
  import type { DevProps, DirectorySyncResult } from "./dev";
@@ -38,6 +40,7 @@ import type { ChildProcess } from "node:child_process";
38
40
  export async function startDevServer(
39
41
  props: DevProps & {
40
42
  local: boolean;
43
+ disableDevRegistry: boolean;
41
44
  }
42
45
  ) {
43
46
  try {
@@ -61,17 +64,24 @@ export async function startDevServer(
61
64
  }
62
65
 
63
66
  //start the worker registry
64
- startWorkerRegistry().catch((err) => {
65
- logger.error("failed to start worker registry", err);
66
- });
67
- if (props.local) {
68
- const boundRegisteredWorkers = await getBoundRegisteredWorkers({
69
- services: props.bindings.services,
70
- durableObjects: props.bindings.durable_objects,
71
- });
67
+ logger.log("disableDevRegistry: ", props.disableDevRegistry);
68
+ if (!props.disableDevRegistry) {
69
+ try {
70
+ await startWorkerRegistry();
71
+ if (props.local) {
72
+ const boundRegisteredWorkers = await getBoundRegisteredWorkers({
73
+ services: props.bindings.services,
74
+ durableObjects: props.bindings.durable_objects,
75
+ });
72
76
 
73
- if (!util.isDeepStrictEqual(boundRegisteredWorkers, workerDefinitions)) {
74
- workerDefinitions = boundRegisteredWorkers || {};
77
+ if (
78
+ !util.isDeepStrictEqual(boundRegisteredWorkers, workerDefinitions)
79
+ ) {
80
+ workerDefinitions = boundRegisteredWorkers || {};
81
+ }
82
+ }
83
+ } catch (err) {
84
+ logger.error("failed to start worker registry", err);
75
85
  }
76
86
  }
77
87
 
@@ -89,7 +99,8 @@ export async function startDevServer(
89
99
  ),
90
100
  tsconfig: props.tsconfig,
91
101
  minify: props.minify,
92
- nodeCompat: props.nodeCompat,
102
+ legacyNodeCompat: props.legacyNodeCompat,
103
+ nodejsCompat: props.nodejsCompat,
93
104
  define: props.define,
94
105
  noBundle: props.noBundle,
95
106
  assets: props.assetsConfig,
@@ -98,7 +109,9 @@ export async function startDevServer(
98
109
  services: props.bindings.services,
99
110
  firstPartyWorkerDevFacade: props.firstPartyWorker,
100
111
  testScheduled: props.testScheduled,
101
- experimentalLocalStubCache: props.experimentalLocal,
112
+ local: props.local,
113
+ experimentalLocal: props.experimentalLocal,
114
+ doBindings: props.bindings.durable_objects?.bindings ?? [],
102
115
  });
103
116
 
104
117
  if (props.local) {
@@ -110,8 +123,8 @@ export async function startDevServer(
110
123
  compatibilityFlags: props.compatibilityFlags,
111
124
  bindings: props.bindings,
112
125
  assetPaths: props.assetPaths,
113
- port: props.port,
114
- ip: props.ip,
126
+ initialPort: props.initialPort,
127
+ initialIp: props.initialIp,
115
128
  rules: props.rules,
116
129
  inspectorPort: props.inspectorPort,
117
130
  localPersistencePath: props.localPersistencePath,
@@ -120,13 +133,14 @@ export async function startDevServer(
120
133
  queueConsumers: props.queueConsumers,
121
134
  localProtocol: props.localProtocol,
122
135
  localUpstream: props.localUpstream,
123
- logPrefix: props.logPrefix,
124
136
  inspect: props.inspect,
125
137
  onReady: props.onReady,
126
138
  enablePagesAssetsServiceBinding: props.enablePagesAssetsServiceBinding,
127
139
  usageModel: props.usageModel,
128
140
  workerDefinitions,
129
141
  experimentalLocal: props.experimentalLocal,
142
+ accountId: props.accountId,
143
+ experimentalLocalRemoteKv: props.experimentalLocalRemoteKv,
130
144
  });
131
145
 
132
146
  return {
@@ -145,8 +159,8 @@ export async function startDevServer(
145
159
  bindings: props.bindings,
146
160
  assetPaths: props.assetPaths,
147
161
  isWorkersSite: props.isWorkersSite,
148
- port: props.port,
149
- ip: props.ip,
162
+ port: props.initialPort,
163
+ ip: props.initialIp,
150
164
  localProtocol: props.localProtocol,
151
165
  inspectorPort: props.inspectorPort,
152
166
  inspect: props.inspect,
@@ -197,14 +211,17 @@ async function runEsbuild({
197
211
  serveAssetsFromWorker,
198
212
  tsconfig,
199
213
  minify,
200
- nodeCompat,
214
+ legacyNodeCompat,
215
+ nodejsCompat,
201
216
  define,
202
217
  noBundle,
203
218
  workerDefinitions,
204
219
  services,
205
220
  firstPartyWorkerDevFacade,
206
221
  testScheduled,
207
- experimentalLocalStubCache,
222
+ local,
223
+ experimentalLocal,
224
+ doBindings,
208
225
  }: {
209
226
  entry: Entry;
210
227
  destination: string | undefined;
@@ -218,12 +235,15 @@ async function runEsbuild({
218
235
  serveAssetsFromWorker: boolean;
219
236
  tsconfig: string | undefined;
220
237
  minify: boolean | undefined;
221
- nodeCompat: boolean | undefined;
238
+ legacyNodeCompat: boolean | undefined;
239
+ nodejsCompat: boolean | undefined;
222
240
  noBundle: boolean;
223
241
  workerDefinitions: WorkerRegistry;
224
242
  firstPartyWorkerDevFacade: boolean | undefined;
225
243
  testScheduled?: boolean;
226
- experimentalLocalStubCache: boolean | undefined;
244
+ local: boolean;
245
+ experimentalLocal: boolean | undefined;
246
+ doBindings: DurableObjectBindings;
227
247
  }): Promise<EsbuildBundle | undefined> {
228
248
  if (!destination) return;
229
249
 
@@ -234,14 +254,7 @@ async function runEsbuild({
234
254
  dependencies,
235
255
  sourceMapPath,
236
256
  }: Awaited<ReturnType<typeof bundleWorker>> = noBundle
237
- ? {
238
- modules: [],
239
- dependencies: {},
240
- resolvedEntryPointPath: entry.file,
241
- bundleType: entry.format === "modules" ? "esm" : "commonjs",
242
- stop: undefined,
243
- sourceMapPath: undefined,
244
- }
257
+ ? await traverseModuleGraph(entry, rules)
245
258
  : await bundleWorker(entry, destination, {
246
259
  serveAssetsFromWorker,
247
260
  jsxFactory,
@@ -249,7 +262,8 @@ async function runEsbuild({
249
262
  rules,
250
263
  tsconfig,
251
264
  minify,
252
- nodeCompat,
265
+ legacyNodeCompat,
266
+ nodejsCompat,
253
267
  define,
254
268
  checkFetch: true,
255
269
  assets: assets && {
@@ -262,9 +276,10 @@ async function runEsbuild({
262
276
  services,
263
277
  firstPartyWorkerDevFacade,
264
278
  targetConsumer: "dev", // We are starting a dev server
265
- local: true,
266
279
  testScheduled,
267
- experimentalLocalStubCache,
280
+ local,
281
+ experimentalLocal,
282
+ doBindings,
268
283
  });
269
284
 
270
285
  return {
@@ -288,21 +303,22 @@ export async function startLocalServer({
288
303
  bindings,
289
304
  workerDefinitions,
290
305
  assetPaths,
291
- port,
306
+ initialPort,
292
307
  inspectorPort,
293
308
  rules,
294
309
  localPersistencePath,
295
310
  liveReload,
296
- ip,
311
+ initialIp,
297
312
  crons,
298
313
  queueConsumers,
299
314
  localProtocol,
300
315
  localUpstream,
301
316
  inspect,
302
317
  onReady,
303
- logPrefix,
304
318
  enablePagesAssetsServiceBinding,
305
319
  experimentalLocal,
320
+ accountId,
321
+ experimentalLocalRemoteKv,
306
322
  }: LocalProps) {
307
323
  let local: ChildProcess | undefined;
308
324
  let experimentalLocalRef: Miniflare3Type | undefined;
@@ -317,14 +333,11 @@ export async function startLocalServer({
317
333
  if (!bundle || !format) return;
318
334
 
319
335
  // port for the worker
320
-
321
- if (port !== 0) {
322
- await waitForPortToBeAvailable(port, {
323
- retryPeriod: 200,
324
- timeout: 2000,
325
- abortSignal: abortController.signal,
326
- });
327
- }
336
+ await waitForPortToBeAvailable(initialPort, {
337
+ retryPeriod: 200,
338
+ timeout: 2000,
339
+ abortSignal: abortController.signal,
340
+ });
328
341
 
329
342
  if (bindings.services && bindings.services.length > 0) {
330
343
  logger.warn(
@@ -332,15 +345,6 @@ export async function startLocalServer({
332
345
  );
333
346
  }
334
347
 
335
- // In local mode, we want to copy all referenced modules into
336
- // the output bundle directory before starting up
337
- for (const module of bundle.modules) {
338
- await writeFile(
339
- path.join(path.dirname(bundle.path), module.name),
340
- module.content
341
- );
342
- }
343
-
344
348
  const scriptPath = realpathSync(bundle.path);
345
349
 
346
350
  const upstream =
@@ -365,10 +369,10 @@ export async function startLocalServer({
365
369
 
366
370
  const { forkOptions, miniflareCLIPath, options } = setupMiniflareOptions({
367
371
  workerName,
368
- port,
372
+ port: initialPort,
369
373
  scriptPath,
370
374
  localProtocol,
371
- ip,
375
+ ip: initialIp,
372
376
  format,
373
377
  rules,
374
378
  compatibilityDate,
@@ -390,27 +394,38 @@ export async function startLocalServer({
390
394
  dataBlobBindings,
391
395
  crons,
392
396
  upstream,
393
- logPrefix,
394
397
  workerDefinitions,
395
398
  enablePagesAssetsServiceBinding,
396
399
  });
397
400
 
398
401
  if (experimentalLocal) {
399
- const mf3Options = await transformLocalOptions(options, format, bundle);
400
- const Miniflare = await getMiniflare3Constructor();
402
+ const log = await buildMiniflare3Logger();
403
+ const mf3Options = await transformMf2OptionsToMf3Options({
404
+ miniflare2Options: options,
405
+ format,
406
+ bundle,
407
+ log,
408
+ kvNamespaces: bindings?.kv_namespaces,
409
+ r2Buckets: bindings?.r2_buckets,
410
+ d1Databases: bindings?.d1_databases,
411
+ authenticatedAccountId: accountId,
412
+ kvRemote: experimentalLocalRemoteKv,
413
+ inspectorPort,
414
+ });
415
+ const { Miniflare } = await getMiniflare3();
401
416
  const mf = new Miniflare(mf3Options);
402
417
  const runtimeURL = await mf.ready;
403
418
  experimentalLocalRef = mf;
404
419
  removeSignalExitListener = onExit((_code, _signal) => {
405
420
  logger.log("⎔ Shutting down experimental local server.");
406
- mf.dispose();
421
+ void mf.dispose();
407
422
  experimentalLocalRef = undefined;
408
423
  });
409
424
  onReady?.(runtimeURL.hostname, parseInt(runtimeURL.port ?? 8787));
410
425
  return;
411
426
  }
412
427
 
413
- const nodeOptions = setupNodeOptions({ inspect, ip, inspectorPort });
428
+ const nodeOptions = setupNodeOptions({ inspect, inspectorPort });
414
429
  logger.log("⎔ Starting a local server...");
415
430
 
416
431
  const child = (local = fork(miniflareCLIPath, forkOptions, {
@@ -427,21 +442,21 @@ export async function startLocalServer({
427
442
  await registerWorker(workerName, {
428
443
  protocol: localProtocol,
429
444
  mode: "local",
430
- port: message.mfPort,
431
- host: ip,
445
+ port: message.port,
446
+ host: initialIp,
432
447
  durableObjects: internalDurableObjects.map((binding) => ({
433
448
  name: binding.name,
434
449
  className: binding.class_name,
435
450
  })),
436
451
  ...(message.durableObjectsPort
437
452
  ? {
438
- durableObjectsHost: ip,
453
+ durableObjectsHost: initialIp,
439
454
  durableObjectsPort: message.durableObjectsPort,
440
455
  }
441
456
  : {}),
442
457
  });
443
458
  }
444
- onReady?.(ip, message.mfPort);
459
+ onReady?.(initialIp, message.port);
445
460
  }
446
461
  });
447
462
 
@@ -4,6 +4,7 @@ import { useApp } from "ink";
4
4
  import { useState, useEffect } from "react";
5
5
  import { bundleWorker, rewriteNodeCompatBuildFailure } from "../bundle";
6
6
  import { logBuildFailure, logger } from "../logger";
7
+ import traverseModuleGraph from "../traverse-module-graph";
7
8
  import type { Config } from "../config";
8
9
  import type { WorkerRegistry } from "../dev-registry";
9
10
  import type { Entry } from "../entry";
@@ -30,7 +31,8 @@ export function useEsbuild({
30
31
  serveAssetsFromWorker,
31
32
  tsconfig,
32
33
  minify,
33
- nodeCompat,
34
+ legacyNodeCompat,
35
+ nodejsCompat,
34
36
  betaD1Shims,
35
37
  define,
36
38
  noBundle,
@@ -41,7 +43,7 @@ export function useEsbuild({
41
43
  local,
42
44
  targetConsumer,
43
45
  testScheduled,
44
- experimentalLocalStubCache,
46
+ experimentalLocal,
45
47
  }: {
46
48
  entry: Entry;
47
49
  destination: string | undefined;
@@ -54,7 +56,8 @@ export function useEsbuild({
54
56
  serveAssetsFromWorker: boolean;
55
57
  tsconfig: string | undefined;
56
58
  minify: boolean | undefined;
57
- nodeCompat: boolean | undefined;
59
+ legacyNodeCompat: boolean | undefined;
60
+ nodejsCompat: boolean | undefined;
58
61
  betaD1Shims?: string[];
59
62
  noBundle: boolean;
60
63
  workerDefinitions: WorkerRegistry;
@@ -63,7 +66,7 @@ export function useEsbuild({
63
66
  local: boolean;
64
67
  targetConsumer: "dev" | "publish";
65
68
  testScheduled: boolean;
66
- experimentalLocalStubCache: boolean | undefined;
69
+ experimentalLocal: boolean | undefined;
67
70
  }): EsbuildBundle | undefined {
68
71
  const [bundle, setBundle] = useState<EsbuildBundle>();
69
72
  const { exit } = useApp();
@@ -85,7 +88,7 @@ export function useEsbuild({
85
88
  const watchMode: WatchMode = {
86
89
  async onRebuild(error) {
87
90
  if (error !== null) {
88
- if (!nodeCompat) rewriteNodeCompatBuildFailure(error);
91
+ if (!legacyNodeCompat) rewriteNodeCompatBuildFailure(error);
89
92
  logBuildFailure(error);
90
93
  logger.error("Watch build failed:", error.message);
91
94
  } else {
@@ -105,14 +108,7 @@ export function useEsbuild({
105
108
  stop,
106
109
  sourceMapPath,
107
110
  }: Awaited<ReturnType<typeof bundleWorker>> = noBundle
108
- ? {
109
- modules: [],
110
- dependencies: {},
111
- resolvedEntryPointPath: entry.file,
112
- bundleType: entry.format === "modules" ? "esm" : "commonjs",
113
- stop: undefined,
114
- sourceMapPath: undefined,
115
- }
111
+ ? await traverseModuleGraph(entry, rules)
116
112
  : await bundleWorker(entry, destination, {
117
113
  serveAssetsFromWorker,
118
114
  jsxFactory,
@@ -121,8 +117,10 @@ export function useEsbuild({
121
117
  watch: watchMode,
122
118
  tsconfig,
123
119
  minify,
124
- nodeCompat,
120
+ legacyNodeCompat,
121
+ nodejsCompat,
125
122
  betaD1Shims,
123
+ doBindings: durableObjects.bindings,
126
124
  define,
127
125
  checkFetch: true,
128
126
  assets: assets && {
@@ -136,7 +134,7 @@ export function useEsbuild({
136
134
  local,
137
135
  targetConsumer,
138
136
  testScheduled,
139
- experimentalLocalStubCache,
137
+ experimentalLocal,
140
138
  });
141
139
 
142
140
  // Capture the `stop()` method to use as the `useEffect()` destructor.
@@ -152,7 +150,7 @@ export function useEsbuild({
152
150
  });
153
151
 
154
152
  stopWatching = () => {
155
- watcher.close();
153
+ void watcher.close();
156
154
  };
157
155
  }
158
156
  setBundle({
@@ -187,7 +185,8 @@ export function useEsbuild({
187
185
  exit,
188
186
  noBundle,
189
187
  minify,
190
- nodeCompat,
188
+ legacyNodeCompat,
189
+ nodejsCompat,
191
190
  define,
192
191
  assets,
193
192
  services,
@@ -198,7 +197,7 @@ export function useEsbuild({
198
197
  local,
199
198
  targetConsumer,
200
199
  testScheduled,
201
- experimentalLocalStubCache,
200
+ experimentalLocal,
202
201
  ]);
203
202
  return bundle;
204
203
  }
@@ -28,4 +28,13 @@ export function validateDevProps(props: DevProps) {
28
28
  "You cannot configure [data_blobs] with an ES module worker. Instead, import the file directly in your code, and optionally configure `[rules]` in your wrangler.toml"
29
29
  );
30
30
  }
31
+
32
+ if (
33
+ props.compatibilityFlags?.includes("nodejs_compat") &&
34
+ props.legacyNodeCompat
35
+ ) {
36
+ throw new Error(
37
+ "You cannot use the `nodejs_compat` compatibility flag in conjunction with the legacy `--node-compat` flag. If you want to use the new runtime Node.js compatibility features, please remove the `--node-compat` argument from your CLI command or your config file."
38
+ );
39
+ }
31
40
  }
@@ -13,7 +13,7 @@ import type { HttpTerminator } from "http-terminator";
13
13
  const DEV_REGISTRY_PORT = "6284";
14
14
  const DEV_REGISTRY_HOST = `http://localhost:${DEV_REGISTRY_PORT}`;
15
15
 
16
- let server: Server;
16
+ let server: Server | null;
17
17
  let terminator: HttpTerminator;
18
18
 
19
19
  export type WorkerRegistry = Record<string, WorkerDefinition>;
@@ -102,6 +102,7 @@ export async function startWorkerRegistry() {
102
102
  */
103
103
  export async function stopWorkerRegistry() {
104
104
  await terminator?.terminate();
105
+ server = null;
105
106
  }
106
107
 
107
108
  /**