Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

backfill: database handles are published on globalThis

Aperta
#625 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 3 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
postgresql, typescript

Direzione di ricerca

Read src/db.ts, src/backfill/gaps.ts, and scripts/backfill.ts, then compare the three approaches listed in the issue. Start by tracing how the database handles are initialized and how tests load gaps.ts; the existing issue describes failures from two attempted changes. Done means choosing and implementing a deliberate dependency approach that avoids those failures while removing or containing the untyped global access.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

#385 wires the backfill modules to the database through globals:

// src/db.ts
;(globalThis as any).__lens_prisma = prisma
;(globalThis as any).__lens_pgPool = pgPool

// src/backfill/gaps.ts
function getPrisma() { return (globalThis as any).__lens_prisma }

Why it was done this way, and it is a real constraint. src/backfill/gaps.ts must not import ../db at module load. Several suites mock ../config only partially, and importing db.ts evaluates config.db.url at load time — so an eager import makes unrelated tests fail with Cannot read properties of undefined (reading 'url'). The globals are a decoupling seam, not laziness.

Why it is still worth changing. src/db.ts runs in the API process, not just the CLI, so every request handler shares a process where a live Prisma client and pg pool are reachable as globalThis.__lens_prisma by any code at all — including a dependency that never imported them. It is also untyped on both ends, so a refactor of db.ts will not surface here.

What I tried and why it is not a quick fix. I attempted two versions while merging and reverted both:

  1. Importing the handles in gaps.ts with the global as an override — breaks 6 suites on the load-time config.db.url evaluation described above.
  2. Moving the installation into scripts/backfill.ts and making the accessors throw when absent — breaks 33 suites, because the API routes reach gaps.ts without installing anything.

So it needs a deliberate approach rather than an in-flight patch. Options worth weighing:

  • Make src/db.ts lazy — build the client on first use rather than at module load — which removes the reason for the seam entirely and is probably the real fix.
  • Pass the handles in as arguments to the backfill functions, so the dependency is explicit and the tests inject rather than mock.
  • Keep the seam but confine it: a small src/backfill/handles.ts with typed getters and a setter, so at least it is typed, greppable and not on globalThis.

Not urgent — the current arrangement works and the feature is live. Worth doing before anything else starts reading those globals, because every new reader makes it harder to remove.

Lingua principale
TypeScript
Stelle
4
Fork
71
Merge medio
3g 14h
PR unite (30g)
157

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Divinity-Labs/Lens

Tutte le issue di Divinity-Labs/Lens

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.