From c794935143e98af1829682fb4f34dec6efa7077a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Somhairle=20MacLe=C3=B2id?= Date: Mon, 21 Oct 2024 13:55:24 +0100 Subject: [PATCH] Add ` (local)` indicator to bindings using local data (#6972) --- .changeset/wet-dryers-pretend.md | 5 +++ .../e2e/__snapshots__/pages-dev.test.ts.snap | 36 +++++++++--------- packages/wrangler/e2e/pages-dev.test.ts | 38 +++++++++---------- .../wrangler/src/__tests__/deploy.test.ts | 6 +-- .../api/startDevWorker/ConfigController.ts | 2 +- packages/wrangler/src/config/index.ts | 29 ++++++++------ packages/wrangler/src/dev.tsx | 11 ++++-- packages/wrangler/src/paths.ts | 8 +++- 8 files changed, 77 insertions(+), 58 deletions(-) create mode 100644 .changeset/wet-dryers-pretend.md diff --git a/.changeset/wet-dryers-pretend.md b/.changeset/wet-dryers-pretend.md new file mode 100644 index 000000000000..d388dac062a1 --- /dev/null +++ b/.changeset/wet-dryers-pretend.md @@ -0,0 +1,5 @@ +--- +"wrangler": patch +--- + +Add ` (local)` indicator to bindings using local data diff --git a/packages/wrangler/e2e/__snapshots__/pages-dev.test.ts.snap b/packages/wrangler/e2e/__snapshots__/pages-dev.test.ts.snap index 17f95f783736..1aa4f55fe193 100644 --- a/packages/wrangler/e2e/__snapshots__/pages-dev.test.ts.snap +++ b/packages/wrangler/e2e/__snapshots__/pages-dev.test.ts.snap @@ -14,17 +14,17 @@ Your worker has access to the following bindings: - DO_BINDING_2_TOML: DO_2_TOML (defined in 🔴 DO_SCRIPT_2_TOML) - DO_BINDING_3_ARGS: DO_3_ARGS (defined in 🔴 DO_SCRIPT_3_ARGS) - KV Namespaces: - - KV_BINDING_1_TOML: NEW_KV_ID_1 - - KV_BINDING_2_TOML: KV_ID_2_TOML - - KV_BINDING_3_ARGS: KV_ID_3_ARGS + - KV_BINDING_1_TOML: NEW_KV_ID_1 (local) + - KV_BINDING_2_TOML: KV_ID_2_TOML (local) + - KV_BINDING_3_ARGS: KV_ID_3_ARGS (local) - D1 Databases: - - D1_BINDING_1_TOML: local-D1_BINDING_1_TOML=NEW_D1_NAME_1 (NEW_D1_NAME_1) - - D1_BINDING_2_TOML: D1_NAME_2_TOML (D1_ID_2_TOML) - - D1_BINDING_3_ARGS: local-D1_BINDING_3_ARGS=D1_NAME_3_ARGS (D1_NAME_3_ARGS) + - D1_BINDING_1_TOML: local-D1_BINDING_1_TOML=NEW_D1_NAME_1 (NEW_D1_NAME_1) (local) + - D1_BINDING_2_TOML: D1_NAME_2_TOML (D1_ID_2_TOML) (local) + - D1_BINDING_3_ARGS: local-D1_BINDING_3_ARGS=D1_NAME_3_ARGS (D1_NAME_3_ARGS) (local) - R2 Buckets: - - R2_BINDING_1_TOML: NEW_R2_BUCKET_1 - - R2_BINDING_2_TOML: R2_BUCKET_2_TOML - - R2_BINDING_3_TOML: R2_BUCKET_3_ARGS + - R2_BINDING_1_TOML: NEW_R2_BUCKET_1 (local) + - R2_BINDING_2_TOML: R2_BUCKET_2_TOML (local) + - R2_BINDING_3_TOML: R2_BUCKET_3_ARGS (local) - Services: - SERVICE_BINDING_1_TOML: 🔴 NEW_SERVICE_NAME_1 - SERVICE_BINDING_2_TOML: 🔴 SERVICE_NAME_2_TOML @@ -53,17 +53,17 @@ Your worker has access to the following bindings: - DO_BINDING_2_TOML: DO_2_TOML (defined in 🔴 DO_SCRIPT_2_TOML) - DO_BINDING_3_ARGS: DO_3_ARGS (defined in 🔴 DO_SCRIPT_3_ARGS) - KV Namespaces: - - KV_BINDING_1_TOML: NEW_KV_ID_1 - - KV_BINDING_2_TOML: KV_ID_2_TOML - - KV_BINDING_3_ARGS: KV_ID_3_ARGS + - KV_BINDING_1_TOML: NEW_KV_ID_1 (local) + - KV_BINDING_2_TOML: KV_ID_2_TOML (local) + - KV_BINDING_3_ARGS: KV_ID_3_ARGS (local) - D1 Databases: - - D1_BINDING_1_TOML: local-D1_BINDING_1_TOML=NEW_D1_NAME_1 (NEW_D1_NAME_1) - - D1_BINDING_2_TOML: D1_NAME_2_TOML (D1_ID_2_TOML) - - D1_BINDING_3_ARGS: local-D1_BINDING_3_ARGS=D1_NAME_3_ARGS (D1_NAME_3_ARGS) + - D1_BINDING_1_TOML: local-D1_BINDING_1_TOML=NEW_D1_NAME_1 (NEW_D1_NAME_1) (local) + - D1_BINDING_2_TOML: D1_NAME_2_TOML (D1_ID_2_TOML) (local) + - D1_BINDING_3_ARGS: local-D1_BINDING_3_ARGS=D1_NAME_3_ARGS (D1_NAME_3_ARGS) (local) - R2 Buckets: - - R2_BINDING_1_TOML: NEW_R2_BUCKET_1 - - R2_BINDING_2_TOML: R2_BUCKET_2_TOML - - R2_BINDING_3_TOML: R2_BUCKET_3_ARGS + - R2_BINDING_1_TOML: NEW_R2_BUCKET_1 (local) + - R2_BINDING_2_TOML: R2_BUCKET_2_TOML (local) + - R2_BINDING_3_TOML: R2_BUCKET_3_ARGS (local) - Services: - SERVICE_BINDING_1_TOML: 🔴 NEW_SERVICE_NAME_1 - SERVICE_BINDING_2_TOML: 🔴 SERVICE_NAME_2_TOML diff --git a/packages/wrangler/e2e/pages-dev.test.ts b/packages/wrangler/e2e/pages-dev.test.ts index cc6b1b2ce45f..9b11034f7644 100644 --- a/packages/wrangler/e2e/pages-dev.test.ts +++ b/packages/wrangler/e2e/pages-dev.test.ts @@ -117,20 +117,19 @@ describe.each([ `${cmd} . --port ${port} --service TEST_SERVICE=test-worker --kv TEST_KV --do TEST_DO=TestDurableObject@a --d1 TEST_D1 --r2 TEST_R2` ); await worker.waitForReady(); - expect(normalizeOutput(worker.currentOutput).replace(/\s/g, "")).toContain( - ` - Your worker has access to the following bindings: - - Durable Objects: - - TEST_DO: TestDurableObject (defined in 🔴 a) - - KV Namespaces: - - TEST_KV: TEST_KV - - D1 Databases: - - TEST_D1: local-TEST_D1 (TEST_D1) - - R2 Buckets: - - TEST_R2: TEST_R2 - - Services: - - TEST_SERVICE: 🔴 test-worker - `.replace(/\s/g, "") + expect(normalizeOutput(worker.currentOutput)).toContain( + dedent`Your worker has access to the following bindings: + - Durable Objects: + - TEST_DO: TestDurableObject (defined in 🔴 a) + - KV Namespaces: + - TEST_KV: TEST_KV (local) + - D1 Databases: + - TEST_D1: local-TEST_D1 (TEST_D1) (local) + - R2 Buckets: + - TEST_R2: TEST_R2 (local) + - Services: + - TEST_SERVICE: 🔴 test-worker + ` ); }); @@ -320,14 +319,13 @@ describe.each([ const text = await fetchText(url); expect(text).toBe("⚡️ Pages ⚡️ supports wrangler.toml"); - expect(normalizeOutput(worker.currentOutput).replace(/\s/g, "")).toContain( - ` - Your worker has access to the following bindings: + expect(normalizeOutput(worker.currentOutput)).toContain( + dedent`Your worker has access to the following bindings: - KV Namespaces: - - KV_BINDING_TOML: KV_ID_TOML + - KV_BINDING_TOML: KV_ID_TOML (local) - Vars: - - PAGES: "⚡️ Pages ⚡️" - `.replace(/\s/g, "") + - PAGES: "⚡️ Pages ⚡️" + ` ); }); diff --git a/packages/wrangler/src/__tests__/deploy.test.ts b/packages/wrangler/src/__tests__/deploy.test.ts index 75d00f8a8480..2faaa97f925c 100644 --- a/packages/wrangler/src/__tests__/deploy.test.ts +++ b/packages/wrangler/src/__tests__/deploy.test.ts @@ -8189,7 +8189,7 @@ addEventListener('fetch', event => {});` "Total Upload: xx KiB / gzip: xx KiB Worker Startup Time: 100 ms Your worker has access to the following bindings: - - dispatch namespaces: + - Dispatch Namespaces: - foo: Foo Uploaded test-name (TIMINGS) Deployed test-name triggers (TIMINGS) @@ -8247,7 +8247,7 @@ addEventListener('fetch', event => {});` "Total Upload: xx KiB / gzip: xx KiB Worker Startup Time: 100 ms Your worker has access to the following bindings: - - dispatch namespaces: + - Dispatch Namespaces: - foo: Foo (outbound -> foo_outbound) - bar: Bar (outbound -> bar_outbound) Uploaded test-name (TIMINGS) @@ -8304,7 +8304,7 @@ addEventListener('fetch', event => {});` "Total Upload: xx KiB / gzip: xx KiB Worker Startup Time: 100 ms Your worker has access to the following bindings: - - dispatch namespaces: + - Dispatch Namespaces: - foo: Foo (outbound -> foo_outbound) Uploaded test-name (TIMINGS) Deployed test-name triggers (TIMINGS) diff --git a/packages/wrangler/src/api/startDevWorker/ConfigController.ts b/packages/wrangler/src/api/startDevWorker/ConfigController.ts index 244f8ae6191a..b0a6d1e74dd7 100644 --- a/packages/wrangler/src/api/startDevWorker/ConfigController.ts +++ b/packages/wrangler/src/api/startDevWorker/ConfigController.ts @@ -163,7 +163,7 @@ async function resolveBindings( ...bindings, vars: maskedVars, }, - input.dev?.registry + { registry: input.dev?.registry, local: !input.dev?.remote } ); return { diff --git a/packages/wrangler/src/config/index.ts b/packages/wrangler/src/config/index.ts index 1f1ad2bf9c5c..cc843a98bf26 100644 --- a/packages/wrangler/src/config/index.ts +++ b/packages/wrangler/src/config/index.ts @@ -192,12 +192,19 @@ export function findWranglerToml( return findUpSync(`wrangler.toml`, { cwd: referencePath }); } +function addLocalSuffix(id: string, local: boolean = false) { + return `${id}${local ? " (local)" : ""}`; +} + /** * Print all the bindings a worker using a given config would have access to */ export function printBindings( bindings: CfWorkerInit["bindings"], - registry?: WorkerRegistry + context: { + registry?: WorkerRegistry; + local?: boolean; + } = {} ) { const truncate = (item: string | Record) => { const s = typeof item === "string" ? item : JSON.stringify(item); @@ -257,7 +264,7 @@ export function printBindings( ({ name, class_name, script_name }) => { let value = class_name; if (script_name) { - const registryDefinition = registry?.[script_name]; + const registryDefinition = context.registry?.[script_name]; if ( registryDefinition && registryDefinition.durableObjects.some( @@ -302,7 +309,7 @@ export function printBindings( entries: kv_namespaces.map(({ binding, id }) => { return { key: binding, - value: id, + value: addLocalSuffix(id, context.local), }; }), }); @@ -331,7 +338,7 @@ export function printBindings( entries: queues.map(({ binding, queue_name }) => { return { key: binding, - value: queue_name, + value: addLocalSuffix(queue_name, context.local), }; }), }); @@ -352,7 +359,7 @@ export function printBindings( } return { key: binding, - value: databaseValue, + value: addLocalSuffix(databaseValue, context.local), }; } ), @@ -365,7 +372,7 @@ export function printBindings( entries: vectorize.map(({ binding, index_name }) => { return { key: binding, - value: index_name, + value: addLocalSuffix(index_name, context.local), }; }), }); @@ -377,7 +384,7 @@ export function printBindings( entries: hyperdrive.map(({ binding, id }) => { return { key: binding, - value: id, + value: addLocalSuffix(id, context.local), }; }), }); @@ -392,7 +399,7 @@ export function printBindings( } return { key: binding, - value: bucket_name, + value: addLocalSuffix(bucket_name, context.local), }; }), }); @@ -419,7 +426,7 @@ export function printBindings( value += `#${entrypoint}`; } - const registryDefinition = registry?.[service]; + const registryDefinition = context.registry?.[service]; if ( registryDefinition && (!entrypoint || registryDefinition.entrypointAddresses?.[entrypoint]) @@ -478,7 +485,7 @@ export function printBindings( output.push({ type: "AI", - entries: entries, + entries, }); } @@ -541,7 +548,7 @@ export function printBindings( if (dispatch_namespaces !== undefined && dispatch_namespaces.length > 0) { output.push({ - type: "dispatch namespaces", + type: "Dispatch Namespaces", entries: dispatch_namespaces.map(({ binding, namespace, outbound }) => { return { key: binding, diff --git a/packages/wrangler/src/dev.tsx b/packages/wrangler/src/dev.tsx index 109a91269d02..75d7cdb8b902 100644 --- a/packages/wrangler/src/dev.tsx +++ b/packages/wrangler/src/dev.tsx @@ -1414,10 +1414,13 @@ export function getResolvedBindings( const maskedVars = maskVars(bindings, configParam); - printBindings({ - ...bindings, - vars: maskedVars, - }); + printBindings( + { + ...bindings, + vars: maskedVars, + }, + { local: !args.remote } + ); return bindings; } diff --git a/packages/wrangler/src/paths.ts b/packages/wrangler/src/paths.ts index 930b0ff4d776..aeb0ccd27c27 100644 --- a/packages/wrangler/src/paths.ts +++ b/packages/wrangler/src/paths.ts @@ -99,7 +99,13 @@ export function getWranglerTmpDir( const tmpPrefix = path.join(tmpRoot, `${prefix}-`); const tmpDir = fs.realpathSync(fs.mkdtempSync(tmpPrefix)); - const removeDir = () => fs.rmSync(tmpDir, { recursive: true, force: true }); + const removeDir = () => { + try { + return fs.rmSync(tmpDir, { recursive: true, force: true }); + } catch (e) { + // This sometimes fails on Windows with EBUSY + } + }; const removeExitListener = onExit(removeDir); return {