Skip to content

chore(panel): Prisma 7, whose client is source and whose URL is the panel's - #130

Merged
aaldersondev merged 1 commit into
mainfrom
chore/prisma-7
Sep 3, 2026
Merged

chore(panel): Prisma 7, whose client is source and whose URL is the panel's#130
aaldersondev merged 1 commit into
mainfrom
chore/prisma-7

Conversation

@aaldersondev

Copy link
Copy Markdown
Contributor

Prisma 6.19.3 → 7.10.0. C'est la majeure que .github/dependabot.yml met explicitement de côté (« major bumps of these land through a deliberate migration, never through an automated pull request ») : Prisma 7 retire le moteur de requêtes Rust, et le client qu'il génère est désormais du TypeScript ordinaire qui parle à la base via un driver adapter. Trois choses sur lesquelles le panel s'appuyait changent, aucune facultative.

Le client est généré dans les sources

Dans src/generated/prisma, compilé avec le reste — donc @prisma/client n'est plus un chemin d'import. Vingt fichiers pointant un chemin relatif, ce sont vingt fichiers à rouvrir le jour où ce répertoire bouge : ils passent tous par src/prisma/client.ts, et le schéma plus ce fichier sont les deux seuls endroits qui nomment l'emplacement.

Le répertoire n'est pas commité : prisma generate le refait à chaque postinstall, ce que l'installeur et docs/updating.md faisaient déjà.

La connexion appartient au panel

Le schéma n'a plus le droit de porter url = env("DATABASE_URL") — Prisma refuse de charger un schéma qui le fait. PrismaService construit donc un adaptateur PrismaPg à partir de la configuration qu'on lui injecte : DATABASE_URL n'a plus qu'un seul lecteur, et il n'est plus .optional() dans le schéma d'environnement. Une variable manquante remontait jusque-là comme une erreur Prisma au milieu de la première requête de quelqu'un ; elle arrête maintenant le démarrage.

La CLI est configurée par prisma.config.ts

Ni la clé prisma du package.json ni le chargement automatique de .env ne survivent à la majeure.

L'URL y est lue avec process.env plutôt qu'avec le helper env() de Prisma, et c'est délibéré : env() lève pendant le chargement du fichier de configuration, donc avant même que la commande soit connue. Or prisma generate n'a besoin d'aucune base, et l'installeur le lance pendant l'étape Build — plusieurs étapes avant d'écrire .env. Un env() impatient à cet endroit fait échouer toute installation neuve sur une variable que la commande n'allait jamais utiliser. Absente, la clé est simplement omise, et migrate deploy réclame lui-même ce qui lui manque :

$ prisma generate      # sans .env
✔ Generated Prisma Client (7.10.0) to ./src/generated/prisma

$ prisma migrate deploy  # sans .env
Error: The datasource.url property is required in your Prisma config file when using prisma migrate deploy.

Vérifié en local

pnpm install --frozen-lockfile depuis un src/generated supprimé (le client est bien refait par le postinstall), format:check, lint 7/7, typecheck 7/7, build 5/5, test 7/7 — 897 tests.

Ce que les tests unitaires ne couvrent pas : ils bouchonnent Prisma, donc aucun d'eux n'ouvre de connexion. Le chemin réel — migrate deploy, db seed, puis un panel qui démarre sur l'adaptateur — est éprouvé par le job Installer, qui installe de bout en bout et crée un serveur. C'est lui qu'il faut regarder sur cette PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HiQhbiTpvjFnK7CJcJuR9m

…anel's

Prisma 7 removes the Rust query engine. The client it generates is now
ordinary TypeScript that talks to the database through a driver adapter,
which changes three things the panel relied on, none of them optional.

**The client is generated into the source tree** — `src/generated/prisma`
— and compiled with everything else, so `@prisma/client` is no longer an
import path. Twenty files importing a relative path is twenty files to
edit the day that directory moves, so they all go through
`src/prisma/client.ts`; the schema and that file are the only two places
that name the location. It is not committed: `prisma generate` rebuilds
it on `postinstall`, as the installer and `docs/updating.md` already did.

**The connection belongs to the panel now.** The schema may no longer
carry `url = env("DATABASE_URL")`; Prisma refuses to load a schema that
does. `PrismaService` builds a `PrismaPg` adapter from the configuration
it is injected, so `DATABASE_URL` has exactly one reader, and it is no
longer `.optional()` in the environment schema — a missing one used to
surface as a Prisma error in the middle of somebody's first request, and
now stops the boot.

**The CLI is configured by `prisma.config.ts`**, since neither the
`prisma` key in package.json nor the automatic `.env` loading survives.
The datasource URL is read there with `process.env` rather than Prisma's
`env()` helper, which throws while the file is being loaded — before the
command is even known. `prisma generate` needs no database, and the
installer runs it during the build, several steps before it writes
`.env`: an eager `env()` there fails every fresh installation on a
variable that command was never going to use. Absent, the key is left
out, and `migrate deploy` says for itself that it wants one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HiQhbiTpvjFnK7CJcJuR9m
@aaldersondev
aaldersondev merged commit 290c77c into main Sep 3, 2026
3 checks passed
@aaldersondev
aaldersondev deleted the chore/prisma-7 branch September 3, 2026 20:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant