wrangler 0.0.0-e7a0cd5b → 0.0.0-e87ad068

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 (255) hide show
  1. package/README.md +3 -3
  2. package/bin/wrangler.js +30 -10
  3. package/miniflare-dist/index.mjs +254 -128
  4. package/package.json +27 -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 +797 -98
  9. package/src/__tests__/constellation.test.ts +371 -0
  10. package/src/__tests__/d1/d1.test.ts +82 -0
  11. package/src/__tests__/d1/execute.test.ts +66 -0
  12. package/src/__tests__/d1/migrate.test.ts +257 -0
  13. package/src/__tests__/d1/splitter.test.ts +255 -0
  14. package/src/__tests__/delete.test.ts +91 -49
  15. package/src/__tests__/deployments.test.ts +330 -56
  16. package/src/__tests__/dev.test.tsx +198 -90
  17. package/src/__tests__/generate.test.ts +12 -10
  18. package/src/__tests__/guess-worker-format.test.ts +35 -0
  19. package/src/__tests__/helpers/end-event-loop.ts +6 -0
  20. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  21. package/src/__tests__/helpers/mock-console.ts +6 -0
  22. package/src/__tests__/helpers/mock-dialogs.ts +71 -85
  23. package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
  24. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
  25. package/src/__tests__/helpers/mock-known-routes.ts +7 -2
  26. package/src/__tests__/helpers/mock-kv.ts +29 -16
  27. package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
  28. package/src/__tests__/helpers/mock-process.ts +8 -13
  29. package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
  30. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  31. package/src/__tests__/helpers/msw/handlers/deployments.ts +128 -27
  32. package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
  33. package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
  34. package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
  35. package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
  36. package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
  37. package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
  38. package/src/__tests__/helpers/msw/index.ts +32 -1
  39. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  40. package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
  41. package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
  42. package/src/__tests__/index.test.ts +92 -72
  43. package/src/__tests__/init.test.ts +1033 -631
  44. package/src/__tests__/jest.setup.ts +19 -42
  45. package/src/__tests__/kv.test.ts +355 -231
  46. package/src/__tests__/logger.test.ts +68 -2
  47. package/src/__tests__/logout.test.ts +47 -0
  48. package/src/__tests__/metrics.test.ts +94 -51
  49. package/src/__tests__/middleware.scheduled.test.ts +42 -32
  50. package/src/__tests__/middleware.test.ts +212 -122
  51. package/src/__tests__/mtls-certificates.test.ts +589 -0
  52. package/src/__tests__/pages/deployment-list.test.ts +80 -0
  53. package/src/__tests__/pages/functions-build.test.ts +529 -0
  54. package/src/__tests__/pages/pages.test.ts +81 -0
  55. package/src/__tests__/pages/project-create.test.ts +63 -0
  56. package/src/__tests__/pages/project-list.test.ts +110 -0
  57. package/src/__tests__/pages/project-upload.test.ts +500 -0
  58. package/src/__tests__/pages/publish.test.ts +2864 -0
  59. package/src/__tests__/pages-deployment-tail.test.ts +957 -0
  60. package/src/__tests__/parse.test.ts +106 -0
  61. package/src/__tests__/publish.test.ts +2227 -1005
  62. package/src/__tests__/pubsub.test.ts +226 -100
  63. package/src/__tests__/queues.test.ts +238 -77
  64. package/src/__tests__/r2.test.ts +55 -57
  65. package/src/__tests__/secret.test.ts +179 -130
  66. package/src/__tests__/tail.test.ts +313 -113
  67. package/src/__tests__/test-old-node-version.js +3 -3
  68. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  69. package/src/__tests__/tsconfig-sanity.ts +12 -0
  70. package/src/__tests__/tsconfig.json +8 -0
  71. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  72. package/src/__tests__/type-generation.test.ts +43 -26
  73. package/src/__tests__/unstableDev.test.ts +61 -0
  74. package/src/__tests__/user.test.ts +35 -72
  75. package/src/__tests__/whoami.test.tsx +8 -114
  76. package/src/__tests__/worker-namespace.test.ts +83 -69
  77. package/src/api/dev.ts +180 -60
  78. package/src/api/index.ts +10 -1
  79. package/src/api/mtls-certificate.ts +148 -0
  80. package/src/api/pages/create-worker-bundle-contents.ts +80 -0
  81. package/src/api/pages/index.ts +5 -0
  82. package/src/api/pages/publish.tsx +371 -0
  83. package/src/bundle.ts +315 -148
  84. package/src/cfetch/index.ts +0 -2
  85. package/src/cfetch/internal.ts +33 -33
  86. package/src/cli.ts +4 -4
  87. package/src/config/config.ts +14 -7
  88. package/src/config/environment.ts +120 -24
  89. package/src/config/index.ts +117 -35
  90. package/src/config/validation-helpers.ts +1 -1
  91. package/src/config/validation.ts +430 -19
  92. package/src/constellation/createProject.tsx +51 -0
  93. package/src/constellation/deleteProject.ts +51 -0
  94. package/src/constellation/deleteProjectModel.ts +76 -0
  95. package/src/constellation/index.ts +75 -0
  96. package/src/constellation/listCatalog.tsx +35 -0
  97. package/src/constellation/listModel.tsx +49 -0
  98. package/src/constellation/listProject.tsx +28 -0
  99. package/src/constellation/listRuntime.tsx +28 -0
  100. package/src/constellation/options.ts +17 -0
  101. package/src/constellation/types.ts +17 -0
  102. package/src/constellation/uploadModel.tsx +84 -0
  103. package/src/constellation/utils.ts +90 -0
  104. package/src/create-worker-preview.ts +19 -8
  105. package/src/create-worker-upload-form.ts +81 -18
  106. package/src/d1/backups.tsx +47 -46
  107. package/src/d1/constants.ts +5 -0
  108. package/src/d1/create.tsx +85 -37
  109. package/src/d1/{delete.tsx → delete.ts} +12 -15
  110. package/src/d1/execute.tsx +228 -156
  111. package/src/d1/index.ts +31 -7
  112. package/src/d1/list.tsx +27 -13
  113. package/src/d1/migrations/apply.tsx +235 -0
  114. package/src/d1/migrations/create.tsx +79 -0
  115. package/src/d1/migrations/helpers.ts +171 -0
  116. package/src/d1/migrations/index.ts +3 -0
  117. package/src/d1/migrations/list.tsx +95 -0
  118. package/src/d1/migrations/options.ts +23 -0
  119. package/src/d1/options.ts +12 -2
  120. package/src/d1/splitter.ts +161 -0
  121. package/src/d1/types.ts +32 -0
  122. package/src/d1/utils.ts +12 -2
  123. package/src/delete.ts +8 -16
  124. package/src/deployments.ts +340 -46
  125. package/src/deprecated/index.ts +8 -302
  126. package/src/dev/dev.tsx +66 -46
  127. package/src/dev/local.tsx +339 -104
  128. package/src/dev/remote.tsx +36 -3
  129. package/src/dev/start-server.ts +146 -101
  130. package/src/dev/use-esbuild.ts +82 -56
  131. package/src/dev/validate-dev-props.ts +9 -0
  132. package/src/{dev-registry.tsx → dev-registry.ts} +13 -1
  133. package/src/dev.tsx +202 -125
  134. package/src/dialogs.ts +136 -0
  135. package/src/dispatch-namespace.ts +21 -17
  136. package/src/docs/helpers.ts +50 -0
  137. package/src/docs/index.ts +54 -0
  138. package/src/entry.ts +26 -11
  139. package/src/environment-variables/factory.ts +89 -0
  140. package/src/environment-variables/misc-variables.ts +30 -0
  141. package/src/generate/index.ts +303 -0
  142. package/src/git-client.ts +15 -4
  143. package/src/{index.tsx → index.ts} +148 -63
  144. package/src/init.ts +301 -197
  145. package/src/inspect.ts +122 -6
  146. package/src/jest.d.ts +4 -0
  147. package/src/kv/helpers.ts +7 -4
  148. package/src/kv/index.ts +15 -17
  149. package/src/logger.ts +36 -5
  150. package/src/metrics/metrics-config.ts +3 -3
  151. package/src/metrics/send-event.ts +6 -1
  152. package/src/miniflare-cli/assets.ts +64 -28
  153. package/src/miniflare-cli/index.ts +6 -9
  154. package/src/miniflare-cli/tsconfig.json +9 -0
  155. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  156. package/src/miniflare-cli/types.ts +11 -0
  157. package/src/module-collection.ts +92 -26
  158. package/src/mtls-certificate/cli.ts +155 -0
  159. package/src/pages/build.ts +423 -0
  160. package/src/pages/buildFunctions.ts +140 -0
  161. package/src/pages/deployment-tails.ts +281 -0
  162. package/src/pages/deployments.tsx +11 -33
  163. package/src/pages/{dev.tsx → dev.ts} +192 -126
  164. package/src/pages/errors.ts +1 -0
  165. package/src/pages/functions/buildPlugin.ts +73 -69
  166. package/src/pages/functions/buildWorker.ts +342 -117
  167. package/src/pages/functions/tsconfig.json +8 -0
  168. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  169. package/src/pages/{functions.tsx → functions.ts} +8 -4
  170. package/src/pages/{index.tsx → index.ts} +11 -3
  171. package/src/pages/projects.tsx +12 -22
  172. package/src/pages/prompt-select-project.tsx +31 -0
  173. package/src/pages/publish.tsx +45 -214
  174. package/src/pages/types.ts +6 -9
  175. package/src/pages/upload.tsx +58 -14
  176. package/src/pages/utils.ts +14 -3
  177. package/src/parse.ts +23 -1
  178. package/src/paths.ts +1 -1
  179. package/src/proxy.ts +5 -0
  180. package/src/publish/index.ts +20 -16
  181. package/src/publish/publish.ts +81 -48
  182. package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
  183. package/src/queues/cli/commands/consumer/add.ts +24 -24
  184. package/src/queues/cli/commands/consumer/index.ts +3 -6
  185. package/src/queues/cli/commands/consumer/remove.ts +11 -18
  186. package/src/queues/cli/commands/create.ts +8 -8
  187. package/src/queues/cli/commands/delete.ts +8 -8
  188. package/src/queues/cli/commands/index.ts +6 -4
  189. package/src/queues/cli/commands/list.ts +8 -8
  190. package/src/queues/client.ts +1 -0
  191. package/src/queues/utils.ts +18 -0
  192. package/src/r2/constants.ts +4 -0
  193. package/src/r2/helpers.ts +1 -0
  194. package/src/r2/index.ts +40 -28
  195. package/src/secret/index.ts +18 -17
  196. package/src/{sites.tsx → sites.ts} +165 -53
  197. package/src/tail/createTail.ts +103 -3
  198. package/src/tail/filters.ts +1 -1
  199. package/src/tail/index.ts +8 -11
  200. package/src/tail/printing.ts +27 -0
  201. package/src/traverse-module-graph.ts +54 -0
  202. package/src/tsconfig-sanity.ts +16 -0
  203. package/src/type-generation.ts +85 -57
  204. package/src/user/access.ts +0 -1
  205. package/src/user/auth-variables.ts +113 -0
  206. package/src/user/choose-account.tsx +1 -31
  207. package/src/user/index.ts +0 -1
  208. package/src/user/{user.tsx → user.ts} +124 -82
  209. package/src/utils/render.ts +93 -0
  210. package/src/{whoami.tsx → whoami.ts} +37 -71
  211. package/src/worker.ts +61 -3
  212. package/src/yargs-types.ts +22 -5
  213. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  214. package/templates/__tests__/tsconfig.json +8 -0
  215. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  216. package/templates/checked-fetch.js +9 -3
  217. package/templates/d1-beta-facade.js +95 -25
  218. package/templates/facade.d.ts +14 -0
  219. package/templates/first-party-worker-module-facade.ts +4 -3
  220. package/templates/format-dev-errors.ts +8 -6
  221. package/templates/gitignore +1 -0
  222. package/templates/init-tests/test-jest-new-worker.js +3 -5
  223. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  224. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  225. package/templates/middleware/loader-modules.ts +2 -2
  226. package/templates/middleware/loader-sw.ts +51 -31
  227. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  228. package/templates/new-worker.ts +3 -0
  229. package/templates/pages-dev-pipeline.ts +4 -1
  230. package/templates/pages-dev-util.ts +4 -1
  231. package/templates/pages-shim.ts +4 -1
  232. package/templates/pages-template-plugin.ts +19 -10
  233. package/templates/serve-static-assets.ts +17 -14
  234. package/templates/service-bindings-module-facade.js +1 -0
  235. package/templates/tsconfig-sanity.ts +11 -0
  236. package/templates/tsconfig.init.json +105 -0
  237. package/templates/tsconfig.json +5 -103
  238. package/templates/tsconfig.tsbuildinfo +1 -0
  239. package/wrangler-dist/cli.d.ts +902 -77
  240. package/wrangler-dist/cli.js +131685 -140615
  241. package/wrangler-dist/wasm-sync.wasm +0 -0
  242. package/src/__tests__/api-devregistry.test.js +0 -57
  243. package/src/__tests__/d1.test.ts +0 -72
  244. package/src/__tests__/dialogs.test.tsx +0 -40
  245. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  246. package/src/__tests__/pages.test.ts +0 -2223
  247. package/src/d1/types.tsx +0 -14
  248. package/src/dialogs.tsx +0 -163
  249. package/src/environment-variables.ts +0 -50
  250. package/src/pages/build.tsx +0 -238
  251. package/src/user/env-vars.ts +0 -46
  252. package/templates/experimental-local-cache-stubs.js +0 -27
  253. /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
  254. /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
  255. /package/src/pages/{hash.tsx → hash.ts} +0 -0
@@ -2,11 +2,17 @@ import assert from "node:assert";
2
2
  import { watch } from "chokidar";
3
3
  import { useApp } from "ink";
4
4
  import { useState, useEffect } from "react";
5
- import { bundleWorker, rewriteNodeCompatBuildFailure } from "../bundle";
5
+ import {
6
+ bundleWorker,
7
+ dedupeModulesByName,
8
+ rewriteNodeCompatBuildFailure,
9
+ } from "../bundle";
6
10
  import { logBuildFailure, logger } from "../logger";
11
+ import traverseModuleGraph from "../traverse-module-graph";
7
12
  import type { Config } from "../config";
8
13
  import type { WorkerRegistry } from "../dev-registry";
9
14
  import type { Entry } from "../entry";
15
+ import type { SourceMapMetadata } from "../inspect";
10
16
  import type { CfModule } from "../worker";
11
17
  import type { WatchMode, Metafile } from "esbuild";
12
18
 
@@ -18,6 +24,7 @@ export type EsbuildBundle = {
18
24
  modules: CfModule[];
19
25
  dependencies: Metafile["outputs"][string]["inputs"];
20
26
  sourceMapPath: string | undefined;
27
+ sourceMapMetadata: SourceMapMetadata | undefined;
21
28
  };
22
29
 
23
30
  export function useEsbuild({
@@ -25,12 +32,15 @@ export function useEsbuild({
25
32
  destination,
26
33
  jsxFactory,
27
34
  jsxFragment,
35
+ processEntrypoint,
36
+ additionalModules,
28
37
  rules,
29
38
  assets,
30
39
  serveAssetsFromWorker,
31
40
  tsconfig,
32
41
  minify,
33
- nodeCompat,
42
+ legacyNodeCompat,
43
+ nodejsCompat,
34
44
  betaD1Shims,
35
45
  define,
36
46
  noBundle,
@@ -41,12 +51,14 @@ export function useEsbuild({
41
51
  local,
42
52
  targetConsumer,
43
53
  testScheduled,
44
- experimentalLocalStubCache,
54
+ experimentalLocal,
45
55
  }: {
46
56
  entry: Entry;
47
57
  destination: string | undefined;
48
58
  jsxFactory: string | undefined;
49
59
  jsxFragment: string | undefined;
60
+ processEntrypoint: boolean;
61
+ additionalModules: CfModule[];
50
62
  rules: Config["rules"];
51
63
  assets: Config["assets"];
52
64
  define: Config["define"];
@@ -54,7 +66,8 @@ export function useEsbuild({
54
66
  serveAssetsFromWorker: boolean;
55
67
  tsconfig: string | undefined;
56
68
  minify: boolean | undefined;
57
- nodeCompat: boolean | undefined;
69
+ legacyNodeCompat: boolean | undefined;
70
+ nodejsCompat: boolean | undefined;
58
71
  betaD1Shims?: string[];
59
72
  noBundle: boolean;
60
73
  workerDefinitions: WorkerRegistry;
@@ -63,7 +76,7 @@ export function useEsbuild({
63
76
  local: boolean;
64
77
  targetConsumer: "dev" | "publish";
65
78
  testScheduled: boolean;
66
- experimentalLocalStubCache: boolean | undefined;
79
+ experimentalLocal: boolean | undefined;
67
80
  }): EsbuildBundle | undefined {
68
81
  const [bundle, setBundle] = useState<EsbuildBundle>();
69
82
  const { exit } = useApp();
@@ -85,7 +98,7 @@ export function useEsbuild({
85
98
  const watchMode: WatchMode = {
86
99
  async onRebuild(error) {
87
100
  if (error !== null) {
88
- if (!nodeCompat) rewriteNodeCompatBuildFailure(error);
101
+ if (!legacyNodeCompat) rewriteNodeCompatBuildFailure(error);
89
102
  logBuildFailure(error);
90
103
  logger.error("Watch build failed:", error.message);
91
104
  } else {
@@ -97,50 +110,52 @@ export function useEsbuild({
97
110
  async function build() {
98
111
  if (!destination) return;
99
112
 
100
- const {
101
- resolvedEntryPointPath,
102
- bundleType,
103
- modules,
104
- dependencies,
105
- stop,
106
- sourceMapPath,
107
- }: 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
- }
116
- : await bundleWorker(entry, destination, {
117
- serveAssetsFromWorker,
118
- jsxFactory,
119
- jsxFragment,
120
- rules,
121
- watch: watchMode,
122
- tsconfig,
123
- minify,
124
- nodeCompat,
125
- betaD1Shims,
126
- define,
127
- checkFetch: true,
128
- assets: assets && {
129
- ...assets,
130
- // disable the cache in dev
131
- bypassCache: true,
132
- },
133
- workerDefinitions,
134
- services,
135
- firstPartyWorkerDevFacade,
136
- local,
137
- targetConsumer,
138
- testScheduled,
139
- experimentalLocalStubCache,
140
- });
113
+ let traverseModuleGraphResult:
114
+ | Awaited<ReturnType<typeof bundleWorker>>
115
+ | undefined;
116
+ let bundleResult: Awaited<ReturnType<typeof bundleWorker>> | undefined;
117
+ if (noBundle) {
118
+ traverseModuleGraphResult = await traverseModuleGraph(entry, rules);
119
+ }
120
+
121
+ if (processEntrypoint || !noBundle) {
122
+ bundleResult = await bundleWorker(entry, destination, {
123
+ bundle: !noBundle,
124
+ disableModuleCollection: noBundle,
125
+ serveAssetsFromWorker,
126
+ jsxFactory,
127
+ jsxFragment,
128
+ rules,
129
+ watch: watchMode,
130
+ tsconfig,
131
+ minify,
132
+ legacyNodeCompat,
133
+ nodejsCompat,
134
+ betaD1Shims,
135
+ doBindings: durableObjects.bindings,
136
+ define,
137
+ checkFetch: true,
138
+ assets: assets && {
139
+ ...assets,
140
+ // disable the cache in dev
141
+ bypassCache: true,
142
+ },
143
+ workerDefinitions,
144
+ services,
145
+ firstPartyWorkerDevFacade,
146
+ local,
147
+ targetConsumer,
148
+ testScheduled,
149
+ experimentalLocal,
150
+ additionalModules: dedupeModulesByName([
151
+ ...(traverseModuleGraphResult?.modules ?? []),
152
+ ...additionalModules,
153
+ ]),
154
+ });
155
+ }
141
156
 
142
157
  // Capture the `stop()` method to use as the `useEffect()` destructor.
143
- stopWatching = stop;
158
+ stopWatching = bundleResult?.stop;
144
159
 
145
160
  // if "noBundle" is true, then we need to manually watch the entry point and
146
161
  // trigger "builds" when it changes
@@ -152,17 +167,25 @@ export function useEsbuild({
152
167
  });
153
168
 
154
169
  stopWatching = () => {
155
- watcher.close();
170
+ void watcher.close();
156
171
  };
157
172
  }
158
173
  setBundle({
159
174
  id: 0,
160
175
  entry,
161
- path: resolvedEntryPointPath,
162
- type: bundleType,
163
- modules,
164
- dependencies,
165
- sourceMapPath,
176
+ path: bundleResult?.resolvedEntryPointPath ?? entry.file,
177
+ type:
178
+ bundleResult?.bundleType ??
179
+ (entry.format === "modules" ? "esm" : "commonjs"),
180
+ modules: bundleResult
181
+ ? bundleResult.modules
182
+ : dedupeModulesByName([
183
+ ...(traverseModuleGraphResult?.modules ?? []),
184
+ ...additionalModules,
185
+ ]),
186
+ dependencies: bundleResult?.dependencies ?? {},
187
+ sourceMapPath: bundleResult?.sourceMapPath,
188
+ sourceMapMetadata: bundleResult?.sourceMapMetadata,
166
189
  });
167
190
  }
168
191
 
@@ -182,12 +205,15 @@ export function useEsbuild({
182
205
  jsxFactory,
183
206
  jsxFragment,
184
207
  serveAssetsFromWorker,
208
+ processEntrypoint,
209
+ additionalModules,
185
210
  rules,
186
211
  tsconfig,
187
212
  exit,
188
213
  noBundle,
189
214
  minify,
190
- nodeCompat,
215
+ legacyNodeCompat,
216
+ nodejsCompat,
191
217
  define,
192
218
  assets,
193
219
  services,
@@ -198,7 +224,7 @@ export function useEsbuild({
198
224
  local,
199
225
  targetConsumer,
200
226
  testScheduled,
201
- experimentalLocalStubCache,
227
+ experimentalLocal,
202
228
  ]);
203
229
  return bundle;
204
230
  }
@@ -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>;
@@ -94,6 +94,13 @@ export async function startWorkerRegistry() {
94
94
  throw err;
95
95
  }
96
96
  });
97
+
98
+ /**
99
+ * The registry server may close. Reset the server to null for restart.
100
+ */
101
+ server.on("close", () => {
102
+ server = null;
103
+ });
97
104
  }
98
105
  }
99
106
 
@@ -102,6 +109,7 @@ export async function startWorkerRegistry() {
102
109
  */
103
110
  export async function stopWorkerRegistry() {
104
111
  await terminator?.terminate();
112
+ server = null;
105
113
  }
106
114
 
107
115
  /**
@@ -111,6 +119,10 @@ export async function registerWorker(
111
119
  name: string,
112
120
  definition: WorkerDefinition
113
121
  ) {
122
+ /**
123
+ * Prevent the dev registry be closed.
124
+ */
125
+ await startWorkerRegistry();
114
126
  try {
115
127
  return await fetch(`${DEV_REGISTRY_HOST}/workers/${name}`, {
116
128
  method: "POST",