diff --git a/db/netlify-driver.test.ts b/db/netlify-driver.test.ts new file mode 100644 index 0000000..f5e60af --- /dev/null +++ b/db/netlify-driver.test.ts @@ -0,0 +1,46 @@ +import { drizzle } from "drizzle-orm/netlify-db"; +import { describe, expect, it, vi } from "vitest"; +import { event } from "@/db/schema"; + +describe("Netlify Database's serverless Drizzle client", () => { + it("uses Neon's conventional query API for ORM selects", async () => { + const query = vi.fn().mockResolvedValue({ rows: [] }); + const httpClient = Object.assign( + vi.fn(() => { + throw new Error("The tagged-template API should not handle ORM SQL."); + }), + { + query, + transaction: vi.fn(), + }, + ); + const database = drizzle({ + client: { + connectionString: "postgres://test:test@example.test/test", + driver: "serverless", + httpClient, + pool: {}, + } as never, + }); + + await expect(database.execute("select 1")).resolves.toMatchObject({ + rows: [], + }); + await expect( + database.select({ id: event.id }).from(event), + ).resolves.toEqual([]); + expect(httpClient).not.toHaveBeenCalled(); + expect(query).toHaveBeenNthCalledWith( + 1, + "select 1", + [], + expect.objectContaining({ arrayMode: false, fullResults: true }), + ); + expect(query).toHaveBeenNthCalledWith( + 2, + expect.stringContaining('from "event"'), + [], + expect.objectContaining({ arrayMode: true, fullResults: true }), + ); + }); +}); diff --git a/package.json b/package.json index 704864b..20e19aa 100644 --- a/package.json +++ b/package.json @@ -58,5 +58,10 @@ "typescript": "^6.0.3", "vite": "^8.2.1", "vitest": "5.0.0-beta.7" + }, + "pnpm": { + "patchedDependencies": { + "drizzle-orm@1.0.0-rc.4": "patches/drizzle-orm@1.0.0-rc.4.patch" + } } } diff --git a/patches/README.md b/patches/README.md new file mode 100644 index 0000000..343539a --- /dev/null +++ b/patches/README.md @@ -0,0 +1,59 @@ +# Dependency patches + +pnpm applies the patches in this directory through `pnpm.patchedDependencies` +in `package.json`. + +## `drizzle-orm@1.0.0-rc.4.patch` + +### Why it exists + +The `drizzle-orm/netlify-db` serverless adapter uses Neon's HTTP client. In +`@neondatabase/serverless` v1, the root client function accepts only tagged +templates; conventional `(sql, params, options)` calls must use the client's +`query()` method. + +Drizzle ORM 1.0.0-rc.4 creates a compatibility function named `clientQuery`, +but its prepared-query and batch paths call the root HTTP client instead. In +production, normal Drizzle queries therefore fail with: + +> This function can now be called only as a tagged-template function. + +This patch routes those calls through `clientQuery` in both distributed module +formats (`session.js` and `session.cjs`). That uses `client.query()` with Neon +v1 while preserving the callable-client fallback for older Neon versions. + +The regression test is `db/netlify-driver.test.ts`. + +Upstream context: + +- [Drizzle issue #5208](https://github.com/drizzle-team/drizzle-orm/issues/5208) + tracks the same Neon v1 error in the older `neon-http` adapter. Its closure + does not fix the Netlify adapter in 1.0.0-rc.4. +- [Drizzle PR #5933](https://github.com/drizzle-team/drizzle-orm/pull/5933), + titled `feat(netlify-db): support credential rotation`, includes the + equivalent Netlify compatibility change as part of a broader proposal. +- The corresponding upstream change is visible in Netlify's + [PR commit](https://github.com/netlify/drizzle-orm/commit/45120d2b59ad1d91d0d0239e6f5dd44c1574169c). + +When this patch was added on 2026-08-19, there was no dedicated +Netlify-adapter issue and no released Drizzle version containing that fix. + +### When to remove it + +Remove the patch after upgrading to a published Drizzle ORM version whose +`netlify-db` adapter routes prepared queries and batches through the Neon +v1-compatible `query()` path. A commit on a branch or an unmerged PR is not +enough; the fix must be present in the installed package. + +To verify removal: + +1. Upgrade `drizzle-orm` (and keep `drizzle-kit` on the corresponding release). +2. Remove the `pnpm.patchedDependencies` entry from `package.json`. +3. Delete `patches/drizzle-orm@1.0.0-rc.4.patch` and run `pnpm install` to update + `pnpm-lock.yaml`. +4. Run `pnpm exec vitest run db/netlify-driver.test.ts` without the patch. +5. Run `pnpm verify`. + +If the regression test still invokes the tagged-template root client, the +installed Drizzle release does not contain the fix and the patch is still +required. diff --git a/patches/drizzle-orm@1.0.0-rc.4.patch b/patches/drizzle-orm@1.0.0-rc.4.patch new file mode 100644 index 0000000..127f4f6 --- /dev/null +++ b/patches/drizzle-orm@1.0.0-rc.4.patch @@ -0,0 +1,60 @@ +diff --git a/netlify-db/session.cjs b/netlify-db/session.cjs +--- a/netlify-db/session.cjs ++++ b/netlify-db/session.cjs +@@ -37,23 +37,23 @@ var NetlifyDbSession = class extends __pg_core_async_session_ts.PgAsyncSession { + } + prepareQuery(query, mode, _name, mapper, queryMetadata, cacheConfig) { + const executor = (params) => { +- if (mode === "raw") return (async () => this.httpClient(query.sql, params, { ++ if (mode === "raw") return (async () => this.clientQuery(query.sql, params ?? [], { + arrayMode: false, + fullResults: true, + authToken: this.options.authToken + }))(); +- return this.httpClient(query.sql, params, { ++ return this.clientQuery(query.sql, params ?? [], { + arrayMode: mode === "arrays", + fullResults: true, + authToken: this.options.authToken + }).then((it) => it.rows); + }; + return new __pg_core_async_session_ts.PgAsyncPreparedQuery(executor, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig); + } + async batch(queries) { + const preparedQueries = []; + const builtQueries = []; +- const q = this.httpClient; ++ const q = this.clientQuery; + for (const query of queries) { + const preparedQuery = query._prepare(); + const builtQuery = preparedQuery.getQuery(); +diff --git a/netlify-db/session.js b/netlify-db/session.js +--- a/netlify-db/session.js ++++ b/netlify-db/session.js +@@ -35,23 +35,23 @@ var NetlifyDbSession = class extends PgAsyncSession { + } + prepareQuery(query, mode, _name, mapper, queryMetadata, cacheConfig) { + const executor = (params) => { +- if (mode === "raw") return (async () => this.httpClient(query.sql, params, { ++ if (mode === "raw") return (async () => this.clientQuery(query.sql, params ?? [], { + arrayMode: false, + fullResults: true, + authToken: this.options.authToken + }))(); +- return this.httpClient(query.sql, params, { ++ return this.clientQuery(query.sql, params ?? [], { + arrayMode: mode === "arrays", + fullResults: true, + authToken: this.options.authToken + }).then((it) => it.rows); + }; + return new PgAsyncPreparedQuery(executor, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig); + } + async batch(queries) { + const preparedQueries = []; + const builtQueries = []; +- const q = this.httpClient; ++ const q = this.clientQuery; + for (const query of queries) { + const preparedQuery = query._prepare(); + const builtQuery = preparedQuery.getQuery(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5db390..3c4fdd0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,25 +4,30 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +patchedDependencies: + drizzle-orm@1.0.0-rc.4: + hash: 4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867 + path: patches/drizzle-orm@1.0.0-rc.4.patch + importers: .: dependencies: '@better-auth/drizzle-adapter': specifier: 1.7.1 - version: 1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3)) + version: 1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3)) '@netlify/database': specifier: ^2.0.0 version: 2.0.0 better-auth: specifier: 1.7.1 - version: 1.7.1(@opentelemetry/api@1.9.1)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7) + version: 1.7.1(@opentelemetry/api@1.9.1)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7) dayjs: specifier: ^1.11.23 version: 1.11.23 drizzle-orm: specifier: 1.0.0-rc.4 - version: 1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3) + version: 1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3) next: specifier: ^16.3.1 version: 16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -71,7 +76,7 @@ importers: version: 5.0.0-beta.7(playwright@1.62.1)(vite@8.2.1(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@5.0.0-beta.7) auth: specifier: ^1.7.1 - version: 1.7.1(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(chokidar@5.0.0)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1)(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7) + version: 1.7.1(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(chokidar@5.0.0)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1)(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7) drizzle-kit: specifier: 1.0.0-rc.4 version: 1.0.0-rc.4 @@ -6964,12 +6969,12 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - '@better-auth/drizzle-adapter@1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))': + '@better-auth/drizzle-adapter@1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))': dependencies: '@better-auth/core': 1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1) '@better-auth/utils': 0.4.2 optionalDependencies: - drizzle-orm: 1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3) + drizzle-orm: 1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3) '@better-auth/kysely-adapter@1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(kysely@0.29.5)': dependencies: @@ -9163,7 +9168,7 @@ snapshots: stubborn-fs: 2.0.0 when-exit: 2.1.5 - auth@1.7.1(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(chokidar@5.0.0)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1)(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7): + auth@1.7.1(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(chokidar@5.0.0)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1)(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7): dependencies: '@babel/core': 7.29.7 '@babel/preset-react': 7.29.7(@babel/core@7.29.7) @@ -9173,7 +9178,7 @@ snapshots: '@better-auth/utils': 0.4.2 '@clack/prompts': 1.7.0 '@mrleebo/prisma-ast': 0.16.0 - better-auth: 1.7.1(@opentelemetry/api@1.9.1)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7) + better-auth: 1.7.1(@opentelemetry/api@1.9.1)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7) c12: 4.0.0-beta.5(chokidar@5.0.0)(dotenv@17.4.2)(jiti@2.7.0) chalk: 5.6.2 commander: 15.0.0 @@ -9285,10 +9290,10 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - better-auth@1.7.1(@opentelemetry/api@1.9.1)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7): + better-auth@1.7.1(@opentelemetry/api@1.9.1)(drizzle-kit@1.0.0-rc.4)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3))(next@16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(pg@8.23.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(vitest@5.0.0-beta.7): dependencies: '@better-auth/core': 1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1) - '@better-auth/drizzle-adapter': 1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3)) + '@better-auth/drizzle-adapter': 1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3)) '@better-auth/kysely-adapter': 1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2)(kysely@0.29.5) '@better-auth/memory-adapter': 1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2) '@better-auth/mongo-adapter': 1.7.1(@better-auth/core@1.7.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.5)(nanostores@1.5.1))(@better-auth/utils@0.4.2) @@ -9306,7 +9311,7 @@ snapshots: zod: 4.4.3 optionalDependencies: drizzle-kit: 1.0.0-rc.4 - drizzle-orm: 1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3) + drizzle-orm: 1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3) next: 16.3.1(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) pg: 8.23.0 react: 19.2.8 @@ -9882,7 +9887,7 @@ snapshots: get-tsconfig: 4.14.3 jiti: 2.7.0 - drizzle-orm@1.0.0-rc.4(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3): + drizzle-orm@1.0.0-rc.4(patch_hash=4106b3249c29efa09d6c2fcc4052e345c0aee75433c3047fd3aeec99fa0c0867)(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.23.0)(zod@4.4.3): optionalDependencies: '@neondatabase/serverless': 1.1.0 '@opentelemetry/api': 1.9.1