TanStack / TanStack/tanstack.com

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

オープン
#590 コメント 1 件 リアクション 3 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
TypeScript
スター
1.1k
フォーク
401
平均マージ
18時間 14分
マージ済み PR(30日)
56

説明

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? 🤔

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

src/db/client.ts の 5-21 行目から始め、DATABASE_URL なしでドキュメントのビルドまたはプレビューを再現します。どのドキュメントパスがクライアントを初期化するかを追跡し、実際にデータベースアクセスを必要とするパスと比較します。データベースなしでドキュメントをビルドしてプレビューでき、設定した場合はデータベースに依存する動作も引き続き機能すれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
postgresql, typescript
領域
build-system, database, documentation
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。