diff --git a/.changeset/tasty-moose-matter.md b/.changeset/tasty-moose-matter.md new file mode 100644 index 000000000000..babbd97c03f4 --- /dev/null +++ b/.changeset/tasty-moose-matter.md @@ -0,0 +1,5 @@ +--- +"wrangler": patch +--- + +Fixed duplicate warning messages appearing during wrangler dev when configuration changes or state transitions occur diff --git a/packages/wrangler/src/__tests__/api/startDevWorker/ConfigController.test.ts b/packages/wrangler/src/__tests__/api/startDevWorker/ConfigController.test.ts index 35d3c1d705a2..7e9c799053dc 100644 --- a/packages/wrangler/src/__tests__/api/startDevWorker/ConfigController.test.ts +++ b/packages/wrangler/src/__tests__/api/startDevWorker/ConfigController.test.ts @@ -239,4 +239,56 @@ describe("ConfigController", () => { }, }); }); + + it("should only log warnings once even with multiple config updates", async () => { + const std = mockConsoleMethods(); + + await seed({ + "src/index.ts": dedent/* javascript */ ` + export default { + fetch(request, env, ctx) { + return new Response("hello world") + } + } satisfies ExportedHandler + `, + "wrangler.toml": dedent/* toml */ ` + name = "my-worker" + main = "src/index.ts" + compatibility_date = "2024-06-01" + + [[queues.consumers]] + queue = "my-queue" + max_batch_size = 10 + `, + }); + + const event1 = waitForConfigUpdate(controller); + await controller.set({ + config: "./wrangler.toml", + dev: { remote: true }, + }); + await event1; + + const event2 = waitForConfigUpdate(controller); + await controller.patch({ + dev: { liveReload: true }, + }); + await event2; + + const event3 = waitForConfigUpdate(controller); + await controller.patch({ + dev: { server: { port: 8787 } }, + }); + await event3; + + const warningCount = std.warn + .split("\n") + .filter((line) => + line.includes( + "Queues are not yet supported in wrangler dev remote mode" + ) + ).length; + + expect(warningCount).toBe(1); + }); }); diff --git a/packages/wrangler/src/__tests__/dev.test.ts b/packages/wrangler/src/__tests__/dev.test.ts index d600cdb5c7ab..d9ab76c4ab6e 100644 --- a/packages/wrangler/src/__tests__/dev.test.ts +++ b/packages/wrangler/src/__tests__/dev.test.ts @@ -10,6 +10,7 @@ import { getWorkerAccountAndContext } from "../dev/remote"; import { COMPLIANCE_REGION_CONFIG_UNKNOWN } from "../environment-variables/misc-variables"; import { FatalError } from "../errors"; import { CI } from "../is-ci"; +import { logger } from "../logger"; import { sniffUserAgent } from "../package-manager"; import { mockAccountId, mockApiToken } from "./helpers/mock-account-id"; import { mockConsoleMethods } from "./helpers/mock-console"; @@ -2110,6 +2111,10 @@ describe.sequential("wrangler dev", () => { }); describe("containers", () => { + beforeEach(() => { + logger.clearHistory(); + }); + const containerConfig = { main: "index.js", compatibility_date: "2024-01-01", diff --git a/packages/wrangler/src/api/startDevWorker/ConfigController.ts b/packages/wrangler/src/api/startDevWorker/ConfigController.ts index 9e271cca479a..c22faf2f6ed8 100644 --- a/packages/wrangler/src/api/startDevWorker/ConfigController.ts +++ b/packages/wrangler/src/api/startDevWorker/ConfigController.ts @@ -396,7 +396,7 @@ async function resolveConfig( !resolved.dev.remote && resolved.build.format === "service-worker" ) { - logger.warn( + logger.once.warn( "Analytics Engine is not supported locally when using the service-worker format. Please migrate to the module worker format: https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/" ); } @@ -405,7 +405,7 @@ async function resolveConfig( const services = extractBindingsOfType("service", resolved.bindings); if (services && services.length > 0 && resolved.dev?.remote) { - logger.warn( + logger.once.warn( `This worker is bound to live services: ${services .map( (service) => @@ -418,7 +418,7 @@ async function resolveConfig( } if (!resolved.dev?.origin?.secure && resolved.dev?.remote) { - logger.warn( + logger.once.warn( "Setting upstream-protocol to http is not currently supported for remote mode.\n" + "If this is required in your project, please add your use case to the following issue:\n" + "https://github.com/cloudflare/workers-sdk/issues/583." @@ -442,7 +442,9 @@ async function resolveConfig( (queues?.length || resolved.triggers?.some((t) => t.type === "queue-consumer")) ) { - logger.warn("Queues are not yet supported in wrangler dev remote mode."); + logger.once.warn( + "Queues are not yet supported in wrangler dev remote mode." + ); } if (resolved.dev.remote) { @@ -453,7 +455,7 @@ async function resolveConfig( resolved.containers && resolved.containers.length > 0 ) { - logger.warn( + logger.once.warn( "Containers are only supported in local mode, to suppress this warning set `dev.enable_containers` to `false` or pass `--enable-containers=false` to the `wrangler dev` command" ); } @@ -466,7 +468,9 @@ async function resolveConfig( resolved.dev.remote && Array.from(classNamesWhichUseSQLite.values()).some((v) => v) ) { - logger.warn("SQLite in Durable Objects is only supported in local mode."); + logger.once.warn( + "SQLite in Durable Objects is only supported in local mode." + ); } }