wrangler 4.42.2 → 4.44.0

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.
@@ -720,6 +720,24 @@
720
720
  "description": "Binding to Cloudflare Images\n\nNOTE: This field is not automatically inherited from the top level environment, and so must be specified in every named environment.\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#images",
721
721
  "default": {}
722
722
  },
723
+ "media": {
724
+ "type": "object",
725
+ "properties": {
726
+ "binding": {
727
+ "type": "string"
728
+ },
729
+ "remote": {
730
+ "type": "boolean",
731
+ "description": "Whether the Media binding should be remote or not"
732
+ }
733
+ },
734
+ "required": [
735
+ "binding"
736
+ ],
737
+ "additionalProperties": false,
738
+ "description": "Binding to Cloudflare Media Transformations\n\nNOTE: This field is not automatically inherited from the top level environment, and so must be specified in every named environment.",
739
+ "default": {}
740
+ },
723
741
  "version_metadata": {
724
742
  "type": "object",
725
743
  "properties": {
@@ -1869,6 +1887,24 @@
1869
1887
  "description": "Binding to Cloudflare Images\n\nNOTE: This field is not automatically inherited from the top level environment, and so must be specified in every named environment.\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#images",
1870
1888
  "default": {}
1871
1889
  },
1890
+ "media": {
1891
+ "type": "object",
1892
+ "properties": {
1893
+ "binding": {
1894
+ "type": "string"
1895
+ },
1896
+ "remote": {
1897
+ "type": "boolean",
1898
+ "description": "Whether the Media binding should be remote or not"
1899
+ }
1900
+ },
1901
+ "required": [
1902
+ "binding"
1903
+ ],
1904
+ "additionalProperties": false,
1905
+ "description": "Binding to Cloudflare Media Transformations\n\nNOTE: This field is not automatically inherited from the top level environment, and so must be specified in every named environment.",
1906
+ "default": {}
1907
+ },
1872
1908
  "version_metadata": {
1873
1909
  "type": "object",
1874
1910
  "properties": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrangler",
3
- "version": "4.42.2",
3
+ "version": "4.44.0",
4
4
  "description": "Command-line interface for all things Cloudflare Workers",
5
5
  "keywords": [
6
6
  "wrangler",
@@ -54,15 +54,15 @@
54
54
  "esbuild": "0.25.4",
55
55
  "path-to-regexp": "6.3.0",
56
56
  "unenv": "2.0.0-rc.21",
57
- "workerd": "1.20251008.0",
57
+ "workerd": "1.20251011.0",
58
58
  "@cloudflare/kv-asset-handler": "0.4.0",
59
- "@cloudflare/unenv-preset": "2.7.7",
60
- "miniflare": "4.20251008.0"
59
+ "miniflare": "4.20251011.0",
60
+ "@cloudflare/unenv-preset": "2.7.8"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@aws-sdk/client-s3": "^3.721.0",
64
64
  "@cloudflare/types": "6.18.4",
65
- "@cloudflare/workers-types": "^4.20251008.0",
65
+ "@cloudflare/workers-types": "^4.20251011.0",
66
66
  "@cspotcode/source-map-support": "0.8.1",
67
67
  "@iarna/toml": "^3.0.0",
68
68
  "@sentry/node": "^7.86.0",
@@ -72,6 +72,7 @@
72
72
  "@types/glob-to-regexp": "^0.4.1",
73
73
  "@types/is-ci": "^3.0.0",
74
74
  "@types/javascript-time-ago": "^2.0.3",
75
+ "@types/json-diff": "^1.0.3",
75
76
  "@types/mime": "^3.0.4",
76
77
  "@types/minimatch": "^5.1.2",
77
78
  "@types/node": "^20.19.9",
@@ -105,6 +106,7 @@
105
106
  "is-ci": "^3.0.1",
106
107
  "itty-time": "^1.0.6",
107
108
  "javascript-time-ago": "^2.5.4",
109
+ "json-diff": "^1.0.6",
108
110
  "md5-file": "5.0.0",
109
111
  "mime": "^3.0.0",
110
112
  "minimatch": "^5.1.0",
@@ -139,16 +141,16 @@
139
141
  "xxhash-wasm": "^1.0.1",
140
142
  "yaml": "^2.8.1",
141
143
  "yargs": "^17.7.2",
144
+ "@cloudflare/containers-shared": "0.2.13",
142
145
  "@cloudflare/cli": "1.1.3",
143
- "@cloudflare/containers-shared": "0.2.12",
144
146
  "@cloudflare/eslint-config-shared": "1.1.0",
145
- "@cloudflare/pages-shared": "^0.13.79",
147
+ "@cloudflare/pages-shared": "^0.13.80",
146
148
  "@cloudflare/workers-shared": "0.18.8",
147
149
  "@cloudflare/workers-tsconfig": "0.0.0",
148
150
  "@cloudflare/workflows-shared": "0.3.7"
149
151
  },
150
152
  "peerDependencies": {
151
- "@cloudflare/workers-types": "^4.20251008.0"
153
+ "@cloudflare/workers-types": "^4.20251011.0"
152
154
  },
153
155
  "peerDependenciesMeta": {
154
156
  "@cloudflare/workers-types": {
@@ -9,6 +9,39 @@ class BindingNotFoundError extends Error {
9
9
  }
10
10
  }
11
11
 
12
+ /**
13
+ * Here be dragons! capnweb does not currently support ReadableStreams, which Media
14
+ * bindings use for input. As such, Media Bindings cannot be directly used via capnweb,
15
+ * and need to be special cased.
16
+ */
17
+
18
+ function isSpecialCaseMediaBindingRequest(headers: Headers): boolean {
19
+ return headers.has("x-cf-media-input-options");
20
+ }
21
+ async function evaluateMediaBinding(
22
+ headers: Headers,
23
+ stream: ReadableStream,
24
+ binding: MediaBinding
25
+ ): Promise<Response> {
26
+ const inputOptions = JSON.parse(
27
+ headers.get("x-cf-media-input-options") as string
28
+ );
29
+ const outputOptions = JSON.parse(
30
+ headers.get("x-cf-media-output-options") as string
31
+ );
32
+
33
+ const result = await binding
34
+ .input(stream)
35
+ .transform(inputOptions)
36
+ .output(outputOptions);
37
+
38
+ return new Response(await result.media(), {
39
+ headers: {
40
+ "x-cf-media-content-type": await result.contentType(),
41
+ },
42
+ });
43
+ }
44
+
12
45
  /**
13
46
  * For most bindings, we expose them as
14
47
  * - RPC stubs directly to capnweb, or
@@ -114,6 +147,13 @@ export default {
114
147
  originalHeaders.set(name, value);
115
148
  }
116
149
  }
150
+ if (isSpecialCaseMediaBindingRequest(originalHeaders)) {
151
+ return evaluateMediaBinding(
152
+ originalHeaders,
153
+ request.body as ReadableStream,
154
+ fetcher as unknown as MediaBinding
155
+ );
156
+ }
117
157
 
118
158
  return fetcher.fetch(
119
159
  request.headers.get("MF-URL") ?? "http://example.com",
@@ -2412,6 +2412,23 @@ var BindingNotFoundError = class extends Error {
2412
2412
  super(`Binding ${name ? `"${name}"` : ""} not found`);
2413
2413
  }
2414
2414
  };
2415
+ function isSpecialCaseMediaBindingRequest(headers) {
2416
+ return headers.has("x-cf-media-input-options");
2417
+ }
2418
+ async function evaluateMediaBinding(headers, stream, binding) {
2419
+ const inputOptions = JSON.parse(
2420
+ headers.get("x-cf-media-input-options")
2421
+ );
2422
+ const outputOptions = JSON.parse(
2423
+ headers.get("x-cf-media-output-options")
2424
+ );
2425
+ const result = await binding.input(stream).transform(inputOptions).output(outputOptions);
2426
+ return new Response(await result.media(), {
2427
+ headers: {
2428
+ "x-cf-media-content-type": await result.contentType()
2429
+ }
2430
+ });
2431
+ }
2415
2432
  function getExposedJSRPCBinding(request, env) {
2416
2433
  const url = new URL(request.url);
2417
2434
  const bindingName = url.searchParams.get("MF-Binding");
@@ -2478,6 +2495,13 @@ var ProxyServerWorker_default = {
2478
2495
  originalHeaders.set(name, value);
2479
2496
  }
2480
2497
  }
2498
+ if (isSpecialCaseMediaBindingRequest(originalHeaders)) {
2499
+ return evaluateMediaBinding(
2500
+ originalHeaders,
2501
+ request.body,
2502
+ fetcher
2503
+ );
2504
+ }
2481
2505
  return fetcher.fetch(
2482
2506
  request.headers.get("MF-URL") ?? "http://example.com",
2483
2507
  new Request(request, {
@@ -915,6 +915,20 @@ interface EnvironmentNonInheritable {
915
915
  /** Whether the Images binding should be remote or not in local development */
916
916
  remote?: boolean;
917
917
  } | undefined;
918
+ /**
919
+ * Binding to Cloudflare Media Transformations
920
+ *
921
+ * NOTE: This field is not automatically inherited from the top level environment,
922
+ * and so must be specified in every named environment.
923
+ *
924
+ * @default {}
925
+ * @nonInheritable
926
+ */
927
+ media: {
928
+ binding: string;
929
+ /** Whether the Media binding should be remote or not */
930
+ remote?: boolean;
931
+ } | undefined;
918
932
  /**
919
933
  * Binding to the Worker Version's metadata
920
934
  */
@@ -1212,6 +1226,11 @@ type ContainerEngine = {
1212
1226
  localDocker: DockerConfiguration;
1213
1227
  } | string;
1214
1228
 
1229
+ /**
1230
+ * The compliance region to use for the API requests.
1231
+ */
1232
+ type ComplianceConfig = Partial<Pick<Config, "compliance_region">>;
1233
+
1215
1234
  /**
1216
1235
  * A symbol to inherit a binding from the deployed worker.
1217
1236
  */
@@ -1316,6 +1335,13 @@ interface CfImagesBinding {
1316
1335
  raw?: boolean;
1317
1336
  remote?: boolean;
1318
1337
  }
1338
+ /**
1339
+ * A binding to Cloudflare Media Transformations
1340
+ */
1341
+ interface CfMediaBinding {
1342
+ binding: string;
1343
+ remote?: boolean;
1344
+ }
1319
1345
  /**
1320
1346
  * A Durable Object.
1321
1347
  */
@@ -1743,6 +1769,7 @@ interface CommonYargsOptions {
1743
1769
  "env-file": string[] | undefined;
1744
1770
  "experimental-provision": boolean | undefined;
1745
1771
  "experimental-remote-bindings": boolean | undefined;
1772
+ "experimental-auto-create": boolean;
1746
1773
  }
1747
1774
  type CommonYargsArgv = Argv<CommonYargsOptions>;
1748
1775
  type RemoveIndex<T> = {
@@ -2011,11 +2038,6 @@ declare const unstable_pages: {
2011
2038
  deploy: typeof deploy;
2012
2039
  };
2013
2040
 
2014
- /**
2015
- * The compliance region to use for the API requests.
2016
- */
2017
- type ComplianceConfig = Partial<Pick<Config, "compliance_region">>;
2018
-
2019
2041
  type _Params<ParamsArray extends [unknown?]> = ParamsArray extends [infer P] ? P : undefined;
2020
2042
  type _EventMethods = keyof Protocol.Events;
2021
2043
  type DevToolsEvent<Method extends _EventMethods> = Method extends unknown ? {
@@ -2409,7 +2431,9 @@ type Binding = {
2409
2431
  type: "worker_loader";
2410
2432
  } & BindingOmit<CfWorkerLoader>) | ({
2411
2433
  type: "vpc_service";
2412
- } & BindingOmit<CfVpcService>) | {
2434
+ } & BindingOmit<CfVpcService>) | ({
2435
+ type: "media";
2436
+ } & BindingOmit<CfMediaBinding>) | {
2413
2437
  type: `unsafe_${string}`;
2414
2438
  } | {
2415
2439
  type: "assets";
@@ -2968,6 +2992,7 @@ type ExperimentalFlags = {
2968
2992
  RESOURCES_PROVISION: boolean;
2969
2993
  REMOTE_BINDINGS: boolean;
2970
2994
  DEPLOY_REMOTE_DIFF_CHECK: boolean;
2995
+ AUTOCREATE_RESOURCES: boolean;
2971
2996
  };
2972
2997
 
2973
2998
  // Team names from https://wiki.cfdata.org/display/EW/Developer+Platform+Components+and+Pillar+Ownership
@@ -3224,6 +3249,13 @@ declare function createCLIParser(argv: string[]): {
3224
3249
  readonly hidden: true;
3225
3250
  readonly alias: readonly ["x-provision"];
3226
3251
  };
3252
+ readonly "experimental-auto-create": {
3253
+ readonly describe: "Automatically provision draft bindings with new resources";
3254
+ readonly type: "boolean";
3255
+ readonly default: true;
3256
+ readonly hidden: true;
3257
+ readonly alias: "x-auto-create";
3258
+ };
3227
3259
  };
3228
3260
  };
3229
3261