diff --git a/.changeset/four-banks-peel.md b/.changeset/four-banks-peel.md
new file mode 100644
index 0000000000..57d1304180
--- /dev/null
+++ b/.changeset/four-banks-peel.md
@@ -0,0 +1,5 @@
+---
+"wrangler": patch
+---
+
+`wrangler preview` no longer warns on inheritable binding types being missing from `previews` config.
diff --git a/packages/wrangler/src/__tests__/preview.test.ts b/packages/wrangler/src/__tests__/preview.test.ts
index 1d7453c041..8cf14ca4b5 100644
--- a/packages/wrangler/src/__tests__/preview.test.ts
+++ b/packages/wrangler/src/__tests__/preview.test.ts
@@ -505,6 +505,92 @@ describe("wrangler preview", () => {
expect(std.warn).not.toContain("IMPORTANT_BINDING");
});
+ test("should not warn about inheritable top-level bindings missing from previews", async ({
+ expect,
+ }) => {
+ mkdirSync("public", { recursive: true });
+ writeFileSync("public/index.html", "
Hello
");
+ writeFileSync(
+ "wrangler.json",
+ JSON.stringify({
+ name: "test-worker",
+ main: "src/index.ts",
+ compatibility_date: "2025-01-01",
+ assets: {
+ binding: "ASSETS",
+ directory: "public",
+ },
+ })
+ );
+
+ msw.use(
+ http.get(
+ `*/accounts/:accountId/workers/workers/:workerId/previews/:previewId`,
+ () =>
+ HttpResponse.json(
+ {
+ success: false,
+ result: null,
+ errors: [{ code: 10025, message: "Preview not found" }],
+ },
+ { status: 404 }
+ )
+ ),
+ http.post(
+ `*/accounts/:accountId/workers/workers/:workerId/previews`,
+ () =>
+ HttpResponse.json({
+ success: true,
+ result: {
+ id: "preview-id-assets",
+ name: "test-preview",
+ slug: "test-preview",
+ urls: ["https://test-preview.test-worker.cloudflare.app"],
+ worker_name: "test-worker",
+ created_on: new Date().toISOString(),
+ },
+ })
+ ),
+ http.post(
+ `*/accounts/:accountId/workers/scripts/:workerId/assets-upload-session`,
+ () =>
+ HttpResponse.json({
+ success: true,
+ result: { buckets: [], jwt: "assets-jwt-from-session" },
+ })
+ ),
+ http.post(
+ `*/accounts/:accountId/workers/workers/:workerId/previews/:previewId/deployments`,
+ () =>
+ HttpResponse.json({
+ success: true,
+ result: {
+ id: "deployment-id-assets",
+ preview_id: "preview-id-assets",
+ preview_name: "test-preview",
+ urls: ["https://assets123.test-worker.cloudflare.app"],
+ compatibility_date: "2025-01-01",
+ env: {},
+ created_on: new Date().toISOString(),
+ },
+ })
+ ),
+ http.get(`*/accounts/:accountId/workers/workers/:workerId`, () =>
+ HttpResponse.json({
+ success: true,
+ result: {
+ preview_defaults: {},
+ },
+ })
+ )
+ );
+
+ await runWrangler("preview --name test-preview");
+
+ expect(std.warn).not.toContain("Your configuration has diverged.");
+ expect(std.warn).not.toContain("ASSETS");
+ });
+
test("should output preview and deployment JSON with --json", async ({
expect,
}) => {
diff --git a/packages/wrangler/src/preview/preview.ts b/packages/wrangler/src/preview/preview.ts
index e083c85add..96b5937395 100644
--- a/packages/wrangler/src/preview/preview.ts
+++ b/packages/wrangler/src/preview/preview.ts
@@ -721,6 +721,12 @@ function formatDeploymentResource(
return drawConnectedChildBox(lines, { footerLines, indent: " " });
}
+function isInheritableBinding(
+ binding: Exclude[string]
+) {
+ return binding.type === "assets";
+}
+
function logMissingPreviewsBindingsWarning(
topLevelBindings: StartDevWorkerInput["bindings"],
remotePreviewDefaultBindings: Record | undefined,
@@ -732,7 +738,8 @@ function logMissingPreviewsBindingsWarning(
]);
const missingBindings = Object.fromEntries(
Object.entries(topLevelBindings ?? {}).filter(
- ([name]) => !availableBindingNames.has(name)
+ ([name, binding]) =>
+ !availableBindingNames.has(name) && !isInheritableBinding(binding)
)
);