Skip to content

Commit 00d71e0

Browse files
committed
fix: config preview_urls defaults to undefined (falsy) instead of true
We want preview_urls to be opt-in, rather than opt-out. For this reason its default value will be falsy.
1 parent 7c70628 commit 00d71e0

File tree

13 files changed

+102
-56
lines changed

13 files changed

+102
-56
lines changed

.changeset/ready-banks-repair.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"wrangler": minor
3+
---
4+
5+
Beta feature preview_urls is now disabled by default.
6+
7+
This change makes preview_urls disabled by default when it's not provided, making
8+
the feature opt-in instead of opt-out.

packages/wrangler/src/__tests__/config/configuration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ describe("normalizeAndValidateConfig()", () => {
130130
wasm_modules: undefined,
131131
data_blobs: undefined,
132132
workers_dev: undefined,
133-
preview_urls: true,
133+
preview_urls: undefined,
134134
zone_id: undefined,
135135
no_bundle: undefined,
136136
minify: undefined,

packages/wrangler/src/__tests__/deploy.test.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,7 +1898,7 @@ Update them to point to this script instead?`,
18981898
});
18991899
await mockAUSRequest([]);
19001900
mockSubDomainRequest();
1901-
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: true });
1901+
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: false });
19021902
mockUploadWorkerRequest({
19031903
expectedAssets: {
19041904
jwt: "<<aus-completion-token>>",
@@ -1983,7 +1983,7 @@ Update them to point to this script instead?`,
19831983
});
19841984
await mockAUSRequest([]);
19851985
mockSubDomainRequest();
1986-
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: true });
1986+
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: false });
19871987
mockUploadWorkerRequest({
19881988
expectedAssets: {
19891989
jwt: "<<aus-completion-token>>",
@@ -2046,7 +2046,7 @@ Update them to point to this script instead?`,
20462046
writeWorkerSource();
20472047
await mockAUSRequest([]);
20482048
mockSubDomainRequest();
2049-
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: true });
2049+
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: false });
20502050
mockUploadWorkerRequest({
20512051
expectedAssets: {
20522052
jwt: "<<aus-completion-token>>",
@@ -2116,7 +2116,7 @@ Update them to point to this script instead?`,
21162116
});
21172117
await mockAUSRequest([]);
21182118
mockSubDomainRequest();
2119-
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: true });
2119+
mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: false });
21202120
mockUploadWorkerRequest({
21212121
expectedAssets: {
21222122
jwt: "<<aus-completion-token>>",
@@ -12987,7 +12987,10 @@ export default{
1298712987
]);
1298812988
mockGetServiceRoutes("test-name", []);
1298912989
mockGetServiceCustomDomainRecords([]);
12990-
mockGetServiceSubDomainData("test-name", { enabled: true });
12990+
mockGetServiceSubDomainData("test-name", {
12991+
enabled: true,
12992+
previews_enabled: false,
12993+
});
1299112994
mockGetServiceSchedules("test-name", { schedules: [] });
1299212995
mockGetServiceMetadata("test-name", {
1299312996
created_on: "2025-08-07T09:34:47.846308Z",
@@ -13012,7 +13015,7 @@ export default{
1301213015
"▲ [WARNING] The local configuration being used (generated from your local configuration file) differs from the remote configuration of your Worker set via the Cloudflare Dashboard:
1301313016
1301413017
\\"workers_dev\\": true,
13015-
\\"preview_urls\\": true,
13018+
\\"preview_urls\\": false,
1301613019
\\"vars\\": {
1301713020
- \\"MY_VAR\\": \\"abc\\"
1301813021
+ \\"MY_VAR\\": 123
@@ -13049,7 +13052,10 @@ export default{
1304913052
]);
1305013053
mockGetServiceRoutes("test-name", []);
1305113054
mockGetServiceCustomDomainRecords([]);
13052-
mockGetServiceSubDomainData("test-name", { enabled: true });
13055+
mockGetServiceSubDomainData("test-name", {
13056+
enabled: true,
13057+
previews_enabled: false,
13058+
});
1305313059
mockGetServiceSchedules("test-name", { schedules: [] });
1305413060
mockGetServiceMetadata("test-name", {
1305513061
created_on: "2025-08-07T09:34:47.846308Z",
@@ -13077,7 +13083,7 @@ export default{
1307713083
"▲ [WARNING] The local configuration being used (generated from your local configuration file) differs from the remote configuration of your Worker set via the Cloudflare Dashboard:
1307813084
1307913085
\\"workers_dev\\": true,
13080-
\\"preview_urls\\": true,
13086+
\\"preview_urls\\": false,
1308113087
\\"vars\\": {
1308213088
- \\"MY_VAR\\": \\"abc\\"
1308313089
+ \\"MY_VAR\\": \\"this is a toml file\\"
@@ -13925,6 +13931,7 @@ function mockGetServiceSubDomainData(
1392513931
serviceName: string,
1392613932
data: {
1392713933
enabled: boolean;
13934+
previews_enabled: boolean;
1392813935
}
1392913936
) {
1393013937
msw.use(

packages/wrangler/src/__tests__/deploy/config-diffs.test.ts

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ describe("getRemoteConfigsDiff", () => {
88
name: "silent-firefly-dbe3",
99
main: "/tmp/src/index.js",
1010
workers_dev: true,
11+
preview_urls: false,
1112
compatibility_date: "2025-07-08",
1213
compatibility_flags: undefined,
1314
placement: undefined,
@@ -38,6 +39,7 @@ describe("getRemoteConfigsDiff", () => {
3839
name: "silent-firefly-dbe3",
3940
main: "/tmp/src/index.js",
4041
workers_dev: true,
42+
preview_urls: false,
4143
compatibility_date: "2025-07-08",
4244
compatibility_flags: undefined,
4345
placement: undefined,
@@ -75,6 +77,7 @@ describe("getRemoteConfigsDiff", () => {
7577
name: "silent-firefly-dbe3",
7678
main: "/tmp/src/index.js",
7779
workers_dev: true,
80+
preview_urls: false,
7881
compatibility_date: "2025-07-08",
7982
compatibility_flags: undefined,
8083
placement: undefined,
@@ -104,20 +107,7 @@ describe("getRemoteConfigsDiff", () => {
104107
+ \\"id\\": \\"my-kv-456\\"
105108
}
106109
],
107-
- \\"workers_dev\\": true,
108-
\\"observability\\": {
109-
\\"enabled\\": false,
110-
\\"head_sampling_rate\\": 1,
111-
112-
...
113-
114-
\\"head_sampling_rate\\": 1,
115-
\\"invocation_logs\\": true
116-
}
117-
- }
118-
+ },
119-
+ \\"workers_dev\\": true
120-
}"
110+
\\"workers_dev\\": true,"
121111
`);
122112
expect(nonDestructive).toBe(true);
123113
});
@@ -128,6 +118,7 @@ describe("getRemoteConfigsDiff", () => {
128118
name: "silent-firefly-dbe3",
129119
main: "/tmp/src/index.js",
130120
workers_dev: true,
121+
preview_urls: false,
131122
compatibility_date: "2025-07-08",
132123
compatibility_flags: undefined,
133124
placement: undefined,
@@ -161,11 +152,11 @@ describe("getRemoteConfigsDiff", () => {
161152
162153
...
163154
164-
}
165155
},
166156
\\"account_id\\": \\"account-id-123\\",
167-
+ \\"workers_dev\\": true
168-
- \\"workers_dev\\": true,
157+
\\"workers_dev\\": true,
158+
+ \\"preview_urls\\": false
159+
- \\"preview_urls\\": false,
169160
- \\"kv_namespaces\\": [
170161
- {
171162
- \\"binding\\": \\"MY_KV\\",
@@ -191,6 +182,7 @@ describe("getRemoteConfigsDiff", () => {
191182
{
192183
observability: remoteObservability,
193184
workers_dev: true,
185+
preview_urls: false,
194186
},
195187
{
196188
observability: localObservability,

packages/wrangler/src/__tests__/helpers/mock-upload-worker.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { http, HttpResponse } from "msw";
2+
import { ParseError } from "../../parse";
3+
import { getSubdomainValues } from "../../triggers/deploy";
24
import { mockGetWorkerSubdomain } from "./mock-workers-subdomain";
35
import { createFetchResult, msw } from "./msw";
46
import { serialize, toString } from "./serialize-form-data-entry";
7+
import { readWranglerConfig } from "./write-wrangler-config";
8+
import type { RawConfig, RawEnvironment } from "../../config";
59
import type {
610
AssetConfigMetadata,
711
WorkerMetadata,
@@ -236,9 +240,30 @@ export function mockUploadWorkerRequest(
236240
)
237241
);
238242
}
239-
// TODO make explicit by callers?
243+
// Every upload is followed by a GET subdomain request, to check if the worker is enabled.
244+
// TODO: make this explicit by callers?
245+
let config: RawConfig = {};
246+
try {
247+
config = readWranglerConfig();
248+
} catch (e) {
249+
if (e instanceof ParseError) {
250+
// Ignore, config is either bad or doesn't exist.
251+
} else {
252+
throw e;
253+
}
254+
}
255+
let envConfig: RawEnvironment = config;
256+
if (env) {
257+
envConfig = config.env?.[env] ?? {};
258+
}
259+
const { workers_dev, preview_urls } = getSubdomainValues(
260+
envConfig.workers_dev,
261+
envConfig.preview_urls,
262+
envConfig.routes ?? []
263+
);
240264
mockGetWorkerSubdomain({
241-
enabled: true,
265+
enabled: workers_dev,
266+
previews_enabled: preview_urls,
242267
env,
243268
legacyEnv,
244269
expectedScriptName,

packages/wrangler/src/__tests__/helpers/mock-workers-subdomain.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export function mockSubDomainRequest(
3636
/** Create a mock handler to fetch the <script>.<user>.workers.dev subdomain status*/
3737
export function mockGetWorkerSubdomain({
3838
enabled,
39-
previews_enabled = true,
39+
previews_enabled = false,
4040
env,
4141
legacyEnv = false,
4242
expectedScriptName = "test-name" + (legacyEnv && env ? `-${env}` : ""),
@@ -73,7 +73,7 @@ export function mockGetWorkerSubdomain({
7373
/** Create a mock handler to toggle a <script>.<user>.workers.dev subdomain status */
7474
export function mockUpdateWorkerSubdomain({
7575
enabled,
76-
previews_enabled = true,
76+
previews_enabled = false,
7777
env,
7878
legacyEnv = false,
7979
expectedScriptName = "test-name",

packages/wrangler/src/__tests__/helpers/write-wrangler-config.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as fs from "node:fs";
22
import { dirname } from "node:path";
3-
import { formatConfigSnippet } from "../../config";
3+
import { formatConfigSnippet, parseRawConfigFile } from "../../config";
44
import type { RawConfig } from "../../config";
55

66
/** Write a mock wrangler config file to disk. */
@@ -24,3 +24,7 @@ export function writeWranglerConfig(
2424
"utf-8"
2525
);
2626
}
27+
28+
export function readWranglerConfig(path = "./wrangler.toml"): RawConfig {
29+
return parseRawConfigFile(path);
30+
}

packages/wrangler/src/config/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ export const defaultWranglerConfig: Config = {
346346
preserve_file_names: undefined,
347347
base_dir: undefined,
348348
workers_dev: undefined,
349-
preview_urls: true,
349+
preview_urls: undefined,
350350
route: undefined,
351351
routes: undefined,
352352
tsconfig: undefined,

packages/wrangler/src/config/environment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ interface EnvironmentInheritable {
321321
* Whether we use <version>-<name>.<subdomain>.workers.dev to
322322
* serve Preview URLs for your Worker.
323323
*
324-
* @default true
324+
* @default false
325325
* @inheritable
326326
*/
327327
preview_urls: boolean | undefined;

packages/wrangler/src/config/validation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ function normalizeAndValidateEnvironment(
10591059
rawEnv,
10601060
"preview_urls",
10611061
isBoolean,
1062-
true
1062+
undefined
10631063
);
10641064

10651065
const build = normalizeAndValidateBuild(

0 commit comments

Comments
 (0)