TanStack / TanStack/tanstack.com

Eager DB client initialization makes the DB required to preview the docs

Ouverte
#590 1 commentaire 3 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
TypeScript
Étoiles
1.1k
Forks
401
Merge moyen
18 h 14 min
PR mergées (30 j)
56

Description

https://github.com/TanStack/tanstack.com/blob/b5379db43a8112a5e929260e992099b58f61734a/src/db/client.ts#L5-L21

If there is no DB connection set, the build will fail. On docs only contributions, it is annoying.

As a workaround, I'm doing this:

function lazyObject<T extends object>(factory: () => T): T {
  let value: T | undefined = undefined
  return new Proxy({} as T, {
    get(_, prop) {
      if (!value) value = factory()
      return value[prop as keyof T]
    },
  }) as T
}

export const db = lazyObject(() => {
  // Create the connection string from environment variable
  const connectionString = process.env.DATABASE_URL

  if (!connectionString) {
    throw new Error('DATABASE_URL environment variable is not set')
  }

  // Create postgres client
  // For serverless environments, use connection pooling
  const client = postgres(connectionString, {
    max: 1, // For serverless, limit connections
    idle_timeout: 20,
    connect_timeout: 10,
  })

  // Create drizzle instance with schema
  return drizzle(client, { schema })
})

Is that ok for a workaround for a PR, or is there a better pattern or approach? Passing it though the backend context? Or maybe a React's cache like API in start? 🤔

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les lignes 5-21 de src/db/client.ts et reproduisez une compilation ou un aperçu de la documentation sans DATABASE_URL. Identifiez les chemins de documentation qui initialisent le client et comparez-les à ceux qui nécessitent réellement un accès à la base de données. Le travail est terminé lorsque la documentation peut être compilée et prévisualisée sans base de données, tandis que le comportement s'appuyant sur la base de données continue de fonctionner lorsqu'il est configuré.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
postgresql, typescript
Domaine
build-system, database, documentation
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.