Skip to content

Commit 203e599

Browse files
fix: prevent duplicate warning messages in wrangler dev (v3 backport) (#10962)
* fix: prevent duplicate warning messages in wrangler dev (v3 backport) Changes all logger.warn() calls to logger.once.warn() in ConfigController.ts to ensure warnings are only shown once even when configuration is updated multiple times. Also adds a test to verify warnings are only logged once across multiple config updates. Backport of #10913 to v3-maintenance branch. Co-Authored-By: smacleod@cloudflare.com <smacleod@cloudflare.com> * Add changeset for v3 backport Co-Authored-By: smacleod@cloudflare.com <smacleod@cloudflare.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: smacleod@cloudflare.com <smacleod@cloudflare.com>
1 parent 9cb702e commit 203e599

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

.changeset/tasty-moose-matter.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"wrangler": patch
3+
---
4+
5+
Fixed duplicate warning messages appearing during wrangler dev when configuration changes or state transitions occur

packages/wrangler/src/__tests__/api/startDevWorker/ConfigController.test.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,4 +223,62 @@ base_dir = \"./some/base_dir\"`,
223223
apiToken: { apiToken: "some-api-token" },
224224
});
225225
});
226+
227+
it("should only log warnings once even with multiple config updates", async () => {
228+
const std = mockConsoleMethods();
229+
const controller = new ConfigController();
230+
231+
await seed({
232+
"src/index.ts": dedent/* javascript */ `
233+
export default class MyDurableObject {
234+
constructor(state, env) {}
235+
async fetch(request) {
236+
return new Response("Hello");
237+
}
238+
}
239+
`,
240+
"wrangler.toml": dedent/* toml */ `
241+
name = "my-worker"
242+
main = "src/index.ts"
243+
compatibility_date = "2024-06-01"
244+
245+
[[durable_objects.bindings]]
246+
name = "MY_DO"
247+
class_name = "MyDurableObject"
248+
249+
[[migrations]]
250+
tag = "v1"
251+
new_sqlite_classes = ["MyDurableObject"]
252+
`,
253+
});
254+
255+
const event1 = waitForConfigUpdate(controller);
256+
await controller.set({
257+
config: "./wrangler.toml",
258+
dev: { remote: true },
259+
});
260+
await event1;
261+
262+
const event2 = waitForConfigUpdate(controller);
263+
await controller.patch({
264+
dev: { liveReload: true },
265+
});
266+
await event2;
267+
268+
const event3 = waitForConfigUpdate(controller);
269+
await controller.patch({
270+
dev: { server: { port: 8787 } },
271+
});
272+
await event3;
273+
274+
const warningCount = std.warn
275+
.split("\n")
276+
.filter((line) =>
277+
line.includes(
278+
"SQLite in Durable Objects is only supported in local mode"
279+
)
280+
).length;
281+
282+
expect(warningCount).toBe(1);
283+
});
226284
});

packages/wrangler/src/api/startDevWorker/ConfigController.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ async function resolveConfig(
338338

339339
const services = extractBindingsOfType("service", resolved.bindings);
340340
if (services && services.length > 0 && resolved.dev?.remote) {
341-
logger.warn(
341+
logger.once.warn(
342342
`This worker is bound to live services: ${services
343343
.map(
344344
(service) =>
@@ -351,7 +351,7 @@ async function resolveConfig(
351351
}
352352

353353
if (!resolved.dev?.origin?.secure && resolved.dev?.remote) {
354-
logger.warn(
354+
logger.once.warn(
355355
"Setting upstream-protocol to http is not currently supported for remote mode.\n" +
356356
"If this is required in your project, please add your use case to the following issue:\n" +
357357
"https://github.com/cloudflare/workers-sdk/issues/583."
@@ -365,7 +365,9 @@ async function resolveConfig(
365365
(queues?.length ||
366366
resolved.triggers?.some((t) => t.type === "queue-consumer"))
367367
) {
368-
logger.warn("Queues are not yet supported in wrangler dev remote mode.");
368+
logger.once.warn(
369+
"Queues are not yet supported in wrangler dev remote mode."
370+
);
369371
}
370372

371373
// TODO(do) support remote wrangler dev
@@ -376,7 +378,9 @@ async function resolveConfig(
376378
resolved.dev.remote &&
377379
Array.from(classNamesWhichUseSQLite.values()).some((v) => v)
378380
) {
379-
logger.warn("SQLite in Durable Objects is only supported in local mode.");
381+
logger.once.warn(
382+
"SQLite in Durable Objects is only supported in local mode."
383+
);
380384
}
381385

382386
return resolved;

0 commit comments

Comments
 (0)