From 8a83ef1f11ecf019ca4574bb28efcb31c17e906a Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 1 Dec 2025 14:49:17 +0800 Subject: [PATCH 1/2] doc: v3 db recipes --- versioned_docs/version-3.x/_components/PackageInstall.tsx | 5 ++--- versioned_docs/version-3.x/recipe/databases/_category_.yml | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 versioned_docs/version-3.x/recipe/databases/_category_.yml diff --git a/versioned_docs/version-3.x/_components/PackageInstall.tsx b/versioned_docs/version-3.x/_components/PackageInstall.tsx index 53bf8805..20dbf002 100644 --- a/versioned_docs/version-3.x/_components/PackageInstall.tsx +++ b/versioned_docs/version-3.x/_components/PackageInstall.tsx @@ -20,9 +20,8 @@ const PackageInstall = ({ devDependencies, dependencies }: Props) => { {pkgManagers.map((pkg) => ( - {`${devDependencies?.length ? `${pkg.command} ${pkg.dev} ${devDependencies.join(' ')}\n` : ''}${ - dependencies?.length ? `${pkg.command} ${dependencies.join(' ')}` : '' - }`} + {`${dependencies?.length ? `${pkg.command} ${dependencies.join(' ')}` : ''} +${devDependencies?.length ? `${pkg.command} ${pkg.dev} ${devDependencies.join(' ')}\n` : ''}`} ))} diff --git a/versioned_docs/version-3.x/recipe/databases/_category_.yml b/versioned_docs/version-3.x/recipe/databases/_category_.yml new file mode 100644 index 00000000..649e74c8 --- /dev/null +++ b/versioned_docs/version-3.x/recipe/databases/_category_.yml @@ -0,0 +1,7 @@ +position: 1 +label: Databases +collapsible: true +collapsed: true +link: + type: generated-index + title: Databases From 67a9555246b5cbc86e36e5fb88d61faa54937dec Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 1 Dec 2025 14:49:26 +0800 Subject: [PATCH 2/2] update --- .../version-3.x/recipe/databases/neon.md | 43 +++++++++++++++++++ .../version-3.x/recipe/databases/postgres.md | 28 ++++++++++++ .../version-3.x/recipe/databases/sqlite.md | 24 +++++++++++ 3 files changed, 95 insertions(+) create mode 100644 versioned_docs/version-3.x/recipe/databases/neon.md create mode 100644 versioned_docs/version-3.x/recipe/databases/postgres.md create mode 100644 versioned_docs/version-3.x/recipe/databases/sqlite.md diff --git a/versioned_docs/version-3.x/recipe/databases/neon.md b/versioned_docs/version-3.x/recipe/databases/neon.md new file mode 100644 index 00000000..4004c3f2 --- /dev/null +++ b/versioned_docs/version-3.x/recipe/databases/neon.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 3 +--- + +import PackageInstall from '../../_components/PackageInstall'; + +# Neon + +Neon can be used with the regular `pg` driver as described in the [PostgreSQL](./postgres) guide. It also provides a serverless driver that uses HTTP/WebSocket protocol which works in edge environments. This guide explains how to use the serverless driver with ZenStack. + +## Installing driver + + + +## Creating ZenStackClient + +```ts +import { schema } from '@/zenstack/schema'; +import { Pool } from '@neondatabase/serverless'; +import { ZenStackClient } from '@zenstackhq/orm'; +import { PostgresDialect } from '@zenstackhq/orm/dialects/postgres'; + +const db = new ZenStackClient(schema, { + dialect: new PostgresDialect({ + pool: new Pool({ + connectionString: process.env.DATABASE_URL, + }), + }), +}); +``` + +## Notes about edge runtime + +Edge environments are ephemeral and often only live to serve a single request. Instead of holding a global singleton client instance, you should create a new one per request. The serverless driver is designed to be used this way. + +```ts +export async function handler(req: Request): Promise { + const db = createClient(); + // use db... + await db.$disconnect(); + return new Response('ok'); +} +``` diff --git a/versioned_docs/version-3.x/recipe/databases/postgres.md b/versioned_docs/version-3.x/recipe/databases/postgres.md new file mode 100644 index 00000000..15c0de24 --- /dev/null +++ b/versioned_docs/version-3.x/recipe/databases/postgres.md @@ -0,0 +1,28 @@ +--- +sidebar_position: 1 +--- + +import PackageInstall from '../../_components/PackageInstall'; + +# PostgreSQL + +## Installing driver + + + +## Creating ZenStackClient + +```ts +import { schema } from './zenstack/schema'; +import { Pool } from 'pg'; +import { ZenStackClient } from '@zenstackhq/orm'; +import { PostgresDialect } from '@zenstackhq/orm/dialects/postgres'; + +const db = new ZenStackClient(schema, { + dialect: new PostgresDialect({ + pool: new Pool({ + connectionString: process.env.DATABASE_URL, + }), + }), +}); +``` diff --git a/versioned_docs/version-3.x/recipe/databases/sqlite.md b/versioned_docs/version-3.x/recipe/databases/sqlite.md new file mode 100644 index 00000000..581e1267 --- /dev/null +++ b/versioned_docs/version-3.x/recipe/databases/sqlite.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 2 +--- + +import PackageInstall from '../../_components/PackageInstall'; + +# SQLite + +## Installing driver + + + +## Creating ZenStackClient + +```ts +import { schema } from './zenstack/schema'; +import SQLite from 'better-sqlite3'; +import { ZenStackClient } from '@zenstackhq/orm'; +import { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite'; + +const db = new ZenStackClient(schema, { + dialect: new SqliteDialect({ database: new SQLite('./dev.db') }), +}); +```