getsentry / getsentry/sentry-javascript

Prisma 8 support for `prismaIntegration`

Abierto
#24,237 1 comentario 0 reacciones 1 asignado Reclamado por @chargome Ver en GitHub
Integration: prisma Package: node
Lenguaje dominante
TypeScript
Estrellas
8.7k
Forks
1.8k
Merge medio
1 d 17 h
PR fusionados (30 d)
523

Descripción

Prisma 8 ("Prisma Next", `@prisma/orm-postgres`, currently 8.0.0-rc.8) ships no tracing surface. It never reads the global `PRISMA_INSTRUMENTATION` helper, so `prismaIntegration` is inert. Only raw `pg` spans from `postgresIntegration` remain: one flat `db` span per statement, plus Prisma's marker-verification and `BEGIN`/`COMMIT` housekeeping queries as siblings. The v7 span tree (`prisma:client:operation` with `model`/`method`, `serialize`, `connect`, nested `db_query`) is gone.

**Goal:** roughly the same spans on Prisma 8 as on v7.

**Approach:** instrument via orchestrion, like the other server-utils integrations. No user code needed, works with the runtime loader hook and the bundler plugins.

- Patch the `CollectionImpl` methods (`create`, `createAll`, `upsert`, `update`, `updateAll`, `delete`, `deleteAll`, `all`, `first`, `count`, `aggregate`) in `@prisma/orm-family-sql/dist/orm-client.mjs` for `prisma:client:operation` (origin `auto.db.prisma`, `model`/`method` attributes).
- Patch `execute(plan, options)` on the runtime base class in `@prisma/orm-family-sql/dist/runtime.mjs` so the `pg` query spans nest under the operation. The plan carries `meta.lane` and annotations.
- No `serialize` span. `connect` only if the lazy pool creation in `@prisma/orm-postgres/dist/runtime.mjs` is patchable cleanly.
- Wire it through `prismaIntegration` so `@sentry/node` and `@sentry/cloudflare/nodejs_compat` stay the entry points.

**Scope:**
- Orchestrion config + channel subscriber for the above.
- Extend `dev-packages/node-integration-tests/suites/tracing/prisma-orm-v8` (currently pins the inert behaviour) to assert the v7-shaped tree.
- Docs: `prismaIntegration` JSDoc and Sentry docs say "v6 and v7"; add v8.

**Risks / constraints:**
- Patch points live in `@prisma/orm-family-sql`, a transitive dependency. The two files are unhashed, but `versionRange` must be pinned tightly and revisited at 8.0 stable.
- `.all()` returns a thenable that only runs the query when awaited; check the `Auto` kind's promise handling against that shape.
- Prisma's marker-verification and `BEGIN`/`COMMIT` statements will nest under the operation span, unlike v7.
- v8 CLI needs Node ≥22.18; `DateTime` columns decode to `Temporal` (global only on Node 26).

**References:**
- Prisma scorecard, "OpenTelemetry tracing spans: not in 8.0": https://github.com/prisma/orm/blob/main/scorecard/19-observability-and-lifecycle.md
- Telemetry design: https://github.com/prisma/orm/blob/main/docs/architecture%20docs/adrs/ADR%20024%20-%20Telemetry%20Schema.md

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.