From e44114092616d2c628eb2a9112f4cdb7854c7a0d Mon Sep 17 00:00:00 2001 From: Tim Laubert Date: Thu, 27 Aug 2026 11:17:45 +0200 Subject: [PATCH 1/2] fix(db): lazily initialize runtime reference identities --- .../lazy-runtime-reference-identities.md | 5 +++++ .../src/query/runtime-reference-identity.ts | 14 +++++++++++-- .../db/tests/query/ir-stable-identity.test.ts | 20 +++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 .changeset/lazy-runtime-reference-identities.md diff --git a/.changeset/lazy-runtime-reference-identities.md b/.changeset/lazy-runtime-reference-identities.md new file mode 100644 index 0000000000..807b0f5ce7 --- /dev/null +++ b/.changeset/lazy-runtime-reference-identities.md @@ -0,0 +1,5 @@ +--- +'@tanstack/db': patch +--- + +Lazily initialize runtime reference identities to avoid generating random values during Cloudflare Worker module evaluation. diff --git a/packages/db/src/query/runtime-reference-identity.ts b/packages/db/src/query/runtime-reference-identity.ts index 15d7b82b6d..73ed621db0 100644 --- a/packages/db/src/query/runtime-reference-identity.ts +++ b/packages/db/src/query/runtime-reference-identity.ts @@ -21,8 +21,18 @@ export function createRuntimeReferenceIdentityFactory(): ( } } -export const getRuntimeReferenceIdentity = - createRuntimeReferenceIdentityFactory() +let runtimeReferenceIdentityFactory: + | ReturnType + | undefined + +export function getRuntimeReferenceIdentity( + value: object, +): RuntimeReferenceIdentity { + runtimeReferenceIdentityFactory ??= + createRuntimeReferenceIdentityFactory() + + return runtimeReferenceIdentityFactory(value) +} function createRuntimeReferenceNamespace(): string { const randomValues = new Uint32Array(4) diff --git a/packages/db/tests/query/ir-stable-identity.test.ts b/packages/db/tests/query/ir-stable-identity.test.ts index ca745d9de5..a412f2e0b4 100644 --- a/packages/db/tests/query/ir-stable-identity.test.ts +++ b/packages/db/tests/query/ir-stable-identity.test.ts @@ -309,6 +309,26 @@ describe(`semantic expression identity`, () => { }, ) + it(`does not initialize runtime reference identities during module evaluation`, async () => { + const getRandomValues = vi.fn((values: Uint32Array) => values) + vi.stubGlobal(`crypto`, { getRandomValues }) + vi.resetModules() + + try { + const { getRuntimeReferenceIdentity } = + await import(`../../src/query/runtime-reference-identity.js`) + + expect(getRandomValues).not.toHaveBeenCalled() + + getRuntimeReferenceIdentity({}) + getRuntimeReferenceIdentity({}) + + expect(getRandomValues).toHaveBeenCalledOnce() + } finally { + vi.unstubAllGlobals() + } + }) + it(`does not reuse reference identities across runtimes`, () => { const firstRuntime = createRuntimeReferenceIdentityFactory() const secondRuntime = createRuntimeReferenceIdentityFactory() From cc607e74bf1f0ea5a53540ac774966f54689442e Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2026 16:26:35 +0000 Subject: [PATCH 2/2] ci: apply automated fixes --- packages/db/src/query/runtime-reference-identity.ts | 3 +-- packages/db/tests/query/ir-stable-identity.test.ts | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/db/src/query/runtime-reference-identity.ts b/packages/db/src/query/runtime-reference-identity.ts index 73ed621db0..e41aeaf67a 100644 --- a/packages/db/src/query/runtime-reference-identity.ts +++ b/packages/db/src/query/runtime-reference-identity.ts @@ -28,8 +28,7 @@ let runtimeReferenceIdentityFactory: export function getRuntimeReferenceIdentity( value: object, ): RuntimeReferenceIdentity { - runtimeReferenceIdentityFactory ??= - createRuntimeReferenceIdentityFactory() + runtimeReferenceIdentityFactory ??= createRuntimeReferenceIdentityFactory() return runtimeReferenceIdentityFactory(value) } diff --git a/packages/db/tests/query/ir-stable-identity.test.ts b/packages/db/tests/query/ir-stable-identity.test.ts index a412f2e0b4..6b730cbda3 100644 --- a/packages/db/tests/query/ir-stable-identity.test.ts +++ b/packages/db/tests/query/ir-stable-identity.test.ts @@ -315,8 +315,9 @@ describe(`semantic expression identity`, () => { vi.resetModules() try { - const { getRuntimeReferenceIdentity } = - await import(`../../src/query/runtime-reference-identity.js`) + const { getRuntimeReferenceIdentity } = await import( + `../../src/query/runtime-reference-identity.js` + ) expect(getRandomValues).not.toHaveBeenCalled()