Skip to content

Commit fc95831

Browse files
authored
feat(wrangler): Add type generation support to wrangler dev (#11616)
* Added initial `wrangler dev` type generation support * Minor `wrangler dev` type generation refactoring * Add initial `wrangler dev` type generation tests * Improved dev code generation tests * Fixed worker utils package validation tests * Minor `wrangler dev` type generation test fixes * Fixed unsupported fields validation test fixture * Added changeset * Minor type generation property casing fixes * Improved changelog details * Fixed `wrangler dev` tests for type generation * Minor `checkTypesDiff` refactoring * Minor `wrangler dev` type generation test refactoring * Fixed `dev.generate_types` default value * Moved `resolveConfig` comment inside of `checkTypesDiff` * Updated `wrangler dev --types` doc comment description * Fixed `wrangler dev --types` "file is up to date" test
1 parent 65d1850 commit fc95831

File tree

15 files changed

+365
-13
lines changed

15 files changed

+365
-13
lines changed

.changeset/plain-beds-spend.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
"@cloudflare/workers-utils": minor
3+
"wrangler": minor
4+
---
5+
6+
Add type generation support to `wrangler dev`
7+
8+
You can now have your worker configuration types be automatically generated when the local Wrangler development server starts.
9+
10+
To use it you can either:
11+
12+
1. Add the `--types` flag when running `wrangler dev`.
13+
14+
2. Update your Wrangler configuration file to add the new `dev.generate_types` boolean property.
15+
16+
```json
17+
{
18+
"$schema": "node_modules/wrangler/config-schema.json",
19+
"name": "example",
20+
"main": "src/index.ts",
21+
"compatibility_date": "2025-12-12",
22+
"dev": {
23+
"generate_types": true
24+
}
25+
}
26+
```

packages/workers-utils/src/config/config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,13 @@ export interface DevConfig {
252252
* Note that windows is only supported via WSL at the moment
253253
*/
254254
container_engine: ContainerEngine | undefined;
255+
256+
/**
257+
* Re-generate your worker types when your Wrangler configuration file changes.
258+
*
259+
* @default false
260+
*/
261+
generate_types: boolean;
255262
}
256263

257264
export type RawDevConfig = Partial<DevConfig>;
@@ -298,6 +305,7 @@ export const defaultWranglerConfig: Config = {
298305
// Note this one is also workers only
299306
enable_containers: true,
300307
container_engine: undefined,
308+
generate_types: false,
301309
},
302310

303311
/** INHERITABLE ENVIRONMENT FIELDS **/

packages/workers-utils/src/config/validation.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ export type NormalizeAndValidateConfigArgs = {
113113
upstreamProtocol?: string;
114114
script?: string;
115115
enableContainers?: boolean;
116+
generateTypes?: boolean;
116117
};
117118

118119
const ENGLISH = new Intl.ListFormat("en-US");
@@ -566,6 +567,7 @@ function normalizeAndValidateDev(
566567
upstreamProtocol: upstreamProtocolArg,
567568
remote: remoteArg,
568569
enableContainers: enableContainersArg,
570+
generateTypes: generateTypesArg,
569571
} = args;
570572
assert(
571573
localProtocolArg === undefined ||
@@ -582,6 +584,9 @@ function normalizeAndValidateDev(
582584
enableContainersArg === undefined ||
583585
typeof enableContainersArg === "boolean"
584586
);
587+
assert(
588+
generateTypesArg === undefined || typeof generateTypesArg === "boolean"
589+
);
585590
const {
586591
// On Windows, when specifying `localhost` as the socket hostname, `workerd`
587592
// will only listen on the IPv4 loopback `127.0.0.1`, not the IPv6 `::1`:
@@ -601,6 +606,7 @@ function normalizeAndValidateDev(
601606
host,
602607
enable_containers = enableContainersArg ?? true,
603608
container_engine,
609+
generate_types = generateTypesArg ?? false,
604610
...rest
605611
} = rawDev;
606612
validateAdditionalProperties(diagnostics, "dev", Object.keys(rest), []);
@@ -647,6 +653,14 @@ function normalizeAndValidateDev(
647653
"string"
648654
);
649655

656+
validateOptionalProperty(
657+
diagnostics,
658+
"dev",
659+
"generate_types",
660+
generate_types,
661+
"boolean"
662+
);
663+
650664
return {
651665
ip,
652666
port,
@@ -656,6 +670,7 @@ function normalizeAndValidateDev(
656670
host,
657671
enable_containers,
658672
container_engine,
673+
generate_types,
659674
};
660675
}
661676

packages/workers-utils/tests/config/validation/normalize-and-validate-config.pages.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ describe("normalizeAndValidateConfig() - Pages configuration", () => {
4343
upstream_protocol: "https",
4444
host: "127.0.0.0",
4545
enable_containers: true,
46+
generate_types: false,
4647
},
4748
send_metrics: true,
4849

@@ -145,6 +146,7 @@ describe("normalizeAndValidateConfig() - Pages configuration", () => {
145146
upstream_protocol: "https",
146147
host: "127.0.0.0",
147148
enable_containers: true,
149+
generate_types: false,
148150
},
149151
send_metrics: true,
150152

@@ -247,6 +249,7 @@ describe("normalizeAndValidateConfig() - Pages configuration", () => {
247249
upstream_protocol: "https",
248250
host: "127.0.0.0",
249251
enable_containers: true,
252+
generate_types: false,
250253
},
251254
send_metrics: true,
252255

@@ -366,6 +369,7 @@ describe("normalizeAndValidateConfig() - Pages configuration", () => {
366369
upstream_protocol: "https",
367370
host: "127.0.0.0",
368371
enable_containers: true,
372+
generate_types: false,
369373
},
370374
send_metrics: true,
371375

@@ -476,6 +480,7 @@ describe("normalizeAndValidateConfig() - Pages configuration", () => {
476480
upstream_protocol: "https",
477481
host: "127.0.0.0",
478482
enable_containers: true,
483+
generate_types: false,
479484
},
480485
send_metrics: true,
481486

@@ -586,6 +591,7 @@ describe("normalizeAndValidateConfig() - Pages configuration", () => {
586591
upstream_protocol: "https",
587592
host: "127.0.0.0",
588593
enable_containers: true,
594+
generate_types: false,
589595
},
590596
send_metrics: true,
591597

@@ -694,6 +700,7 @@ describe("normalizeAndValidateConfig() - Pages configuration", () => {
694700
upstream_protocol: "https",
695701
host: "127.0.0.0",
696702
enable_containers: true,
703+
generate_types: false,
697704
},
698705
send_metrics: true,
699706

@@ -842,6 +849,7 @@ function generateRawConfigForPages(
842849
local_protocol: "https",
843850
upstream_protocol: "https",
844851
host: "127.0.0.0",
852+
generate_types: false,
845853
},
846854
send_metrics: true,
847855

packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ describe("normalizeAndValidateConfig()", () => {
4444
enable_containers: true,
4545
inspector_port: undefined,
4646
container_engine: undefined,
47+
generate_types: false,
4748
},
4849
containers: undefined,
4950
cloudchamber: {},
@@ -141,6 +142,7 @@ describe("normalizeAndValidateConfig()", () => {
141142
local_protocol: "https",
142143
upstream_protocol: "http",
143144
enable_containers: false,
145+
generate_types: false,
144146
},
145147
};
146148

@@ -167,6 +169,7 @@ describe("normalizeAndValidateConfig()", () => {
167169
local_protocol: "wss",
168170
upstream_protocol: "ws",
169171
enable_containers: true,
172+
generate_types: false,
170173
},
171174
};
172175

packages/wrangler/src/__tests__/config-validation-pages.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ describe("validatePagesConfig()", () => {
186186
host: "test-host",
187187
enable_containers: false,
188188
container_engine: undefined,
189+
generate_types: false,
189190
},
190191
},
191192
};

0 commit comments

Comments
 (0)