@take-out/cli 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +274 -0
- package/cli.mjs +3 -0
- package/dist/cjs/cli.cjs +71 -0
- package/dist/cjs/cli.js +70 -0
- package/dist/cjs/cli.js.map +6 -0
- package/dist/cjs/cli.native.js +79 -0
- package/dist/cjs/cli.native.js.map +6 -0
- package/dist/cjs/commands/changed.cjs +212 -0
- package/dist/cjs/commands/changed.js +214 -0
- package/dist/cjs/commands/changed.js.map +6 -0
- package/dist/cjs/commands/changed.native.js +289 -0
- package/dist/cjs/commands/changed.native.js.map +6 -0
- package/dist/cjs/commands/docs.cjs +388 -0
- package/dist/cjs/commands/docs.js +313 -0
- package/dist/cjs/commands/docs.js.map +6 -0
- package/dist/cjs/commands/docs.native.js +476 -0
- package/dist/cjs/commands/docs.native.js.map +6 -0
- package/dist/cjs/commands/env-setup.cjs +90 -0
- package/dist/cjs/commands/env-setup.js +78 -0
- package/dist/cjs/commands/env-setup.js.map +6 -0
- package/dist/cjs/commands/env-setup.native.js +85 -0
- package/dist/cjs/commands/env-setup.native.js.map +6 -0
- package/dist/cjs/commands/onboard.cjs +479 -0
- package/dist/cjs/commands/onboard.js +631 -0
- package/dist/cjs/commands/onboard.js.map +6 -0
- package/dist/cjs/commands/onboard.native.js +608 -0
- package/dist/cjs/commands/onboard.native.js.map +6 -0
- package/dist/cjs/commands/run.cjs +148 -0
- package/dist/cjs/commands/run.js +116 -0
- package/dist/cjs/commands/run.js.map +6 -0
- package/dist/cjs/commands/run.native.js +140 -0
- package/dist/cjs/commands/run.native.js.map +6 -0
- package/dist/cjs/commands/script.cjs +379 -0
- package/dist/cjs/commands/script.js +339 -0
- package/dist/cjs/commands/script.js.map +6 -0
- package/dist/cjs/commands/script.native.js +449 -0
- package/dist/cjs/commands/script.native.js.map +6 -0
- package/dist/cjs/commands/sync.cjs +190 -0
- package/dist/cjs/commands/sync.js +168 -0
- package/dist/cjs/commands/sync.js.map +6 -0
- package/dist/cjs/commands/sync.native.js +211 -0
- package/dist/cjs/commands/sync.native.js.map +6 -0
- package/dist/cjs/constants/ascii.cjs +36 -0
- package/dist/cjs/constants/ascii.js +30 -0
- package/dist/cjs/constants/ascii.js.map +6 -0
- package/dist/cjs/constants/ascii.native.js +36 -0
- package/dist/cjs/constants/ascii.native.js.map +6 -0
- package/dist/cjs/index.cjs +64 -0
- package/dist/cjs/index.js +55 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/index.native.js +94 -0
- package/dist/cjs/index.native.js.map +6 -0
- package/dist/cjs/types.cjs +16 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/types.js.map +6 -0
- package/dist/cjs/types.native.js +15 -0
- package/dist/cjs/types.native.js.map +6 -0
- package/dist/cjs/utils/env-categories.cjs +272 -0
- package/dist/cjs/utils/env-categories.js +296 -0
- package/dist/cjs/utils/env-categories.js.map +6 -0
- package/dist/cjs/utils/env-categories.native.js +317 -0
- package/dist/cjs/utils/env-categories.native.js.map +6 -0
- package/dist/cjs/utils/env-setup.cjs +181 -0
- package/dist/cjs/utils/env-setup.js +190 -0
- package/dist/cjs/utils/env-setup.js.map +6 -0
- package/dist/cjs/utils/env-setup.native.js +264 -0
- package/dist/cjs/utils/env-setup.native.js.map +6 -0
- package/dist/cjs/utils/env.cjs +118 -0
- package/dist/cjs/utils/env.js +97 -0
- package/dist/cjs/utils/env.js.map +6 -0
- package/dist/cjs/utils/env.native.js +128 -0
- package/dist/cjs/utils/env.native.js.map +6 -0
- package/dist/cjs/utils/files.cjs +215 -0
- package/dist/cjs/utils/files.js +164 -0
- package/dist/cjs/utils/files.js.map +6 -0
- package/dist/cjs/utils/files.native.js +266 -0
- package/dist/cjs/utils/files.native.js.map +6 -0
- package/dist/cjs/utils/parallel-runner.cjs +99 -0
- package/dist/cjs/utils/parallel-runner.js +84 -0
- package/dist/cjs/utils/parallel-runner.js.map +6 -0
- package/dist/cjs/utils/parallel-runner.native.js +123 -0
- package/dist/cjs/utils/parallel-runner.native.js.map +6 -0
- package/dist/cjs/utils/ports.cjs +101 -0
- package/dist/cjs/utils/ports.js +81 -0
- package/dist/cjs/utils/ports.js.map +6 -0
- package/dist/cjs/utils/ports.native.js +130 -0
- package/dist/cjs/utils/ports.native.js.map +6 -0
- package/dist/cjs/utils/prerequisites.cjs +119 -0
- package/dist/cjs/utils/prerequisites.js +107 -0
- package/dist/cjs/utils/prerequisites.js.map +6 -0
- package/dist/cjs/utils/prerequisites.native.js +127 -0
- package/dist/cjs/utils/prerequisites.native.js.map +6 -0
- package/dist/cjs/utils/prompts.cjs +161 -0
- package/dist/cjs/utils/prompts.js +162 -0
- package/dist/cjs/utils/prompts.js.map +6 -0
- package/dist/cjs/utils/prompts.native.js +179 -0
- package/dist/cjs/utils/prompts.native.js.map +6 -0
- package/dist/cjs/utils/script-listing.cjs +113 -0
- package/dist/cjs/utils/script-listing.js +108 -0
- package/dist/cjs/utils/script-listing.js.map +6 -0
- package/dist/cjs/utils/script-listing.native.js +174 -0
- package/dist/cjs/utils/script-listing.native.js.map +6 -0
- package/dist/cjs/utils/sync.cjs +85 -0
- package/dist/cjs/utils/sync.js +70 -0
- package/dist/cjs/utils/sync.js.map +6 -0
- package/dist/cjs/utils/sync.native.js +84 -0
- package/dist/cjs/utils/sync.native.js.map +6 -0
- package/dist/cjs/utils/welcome.cjs +50 -0
- package/dist/cjs/utils/welcome.js +42 -0
- package/dist/cjs/utils/welcome.js.map +6 -0
- package/dist/cjs/utils/welcome.native.js +47 -0
- package/dist/cjs/utils/welcome.native.js.map +6 -0
- package/dist/esm/cli.js +79 -0
- package/dist/esm/cli.js.map +6 -0
- package/dist/esm/cli.mjs +71 -0
- package/dist/esm/cli.mjs.map +1 -0
- package/dist/esm/cli.native.js +69 -0
- package/dist/esm/cli.native.js.map +1 -0
- package/dist/esm/commands/changed.js +194 -0
- package/dist/esm/commands/changed.js.map +6 -0
- package/dist/esm/commands/changed.mjs +178 -0
- package/dist/esm/commands/changed.mjs.map +1 -0
- package/dist/esm/commands/changed.native.js +273 -0
- package/dist/esm/commands/changed.native.js.map +1 -0
- package/dist/esm/commands/docs.js +306 -0
- package/dist/esm/commands/docs.js.map +6 -0
- package/dist/esm/commands/docs.mjs +353 -0
- package/dist/esm/commands/docs.mjs.map +1 -0
- package/dist/esm/commands/docs.native.js +516 -0
- package/dist/esm/commands/docs.native.js.map +1 -0
- package/dist/esm/commands/env-setup.js +56 -0
- package/dist/esm/commands/env-setup.js.map +6 -0
- package/dist/esm/commands/env-setup.mjs +56 -0
- package/dist/esm/commands/env-setup.mjs.map +1 -0
- package/dist/esm/commands/env-setup.native.js +59 -0
- package/dist/esm/commands/env-setup.native.js.map +1 -0
- package/dist/esm/commands/onboard.js +645 -0
- package/dist/esm/commands/onboard.js.map +6 -0
- package/dist/esm/commands/onboard.mjs +445 -0
- package/dist/esm/commands/onboard.mjs.map +1 -0
- package/dist/esm/commands/onboard.native.js +584 -0
- package/dist/esm/commands/onboard.native.js.map +1 -0
- package/dist/esm/commands/run.js +95 -0
- package/dist/esm/commands/run.js.map +6 -0
- package/dist/esm/commands/run.mjs +114 -0
- package/dist/esm/commands/run.mjs.map +1 -0
- package/dist/esm/commands/run.native.js +133 -0
- package/dist/esm/commands/run.native.js.map +1 -0
- package/dist/esm/commands/script.js +338 -0
- package/dist/esm/commands/script.js.map +6 -0
- package/dist/esm/commands/script.mjs +336 -0
- package/dist/esm/commands/script.mjs.map +1 -0
- package/dist/esm/commands/script.native.js +445 -0
- package/dist/esm/commands/script.native.js.map +1 -0
- package/dist/esm/commands/sync.js +158 -0
- package/dist/esm/commands/sync.js.map +6 -0
- package/dist/esm/commands/sync.mjs +155 -0
- package/dist/esm/commands/sync.mjs.map +1 -0
- package/dist/esm/commands/sync.native.js +173 -0
- package/dist/esm/commands/sync.native.js.map +1 -0
- package/dist/esm/constants/ascii.js +14 -0
- package/dist/esm/constants/ascii.js.map +6 -0
- package/dist/esm/constants/ascii.mjs +12 -0
- package/dist/esm/constants/ascii.mjs.map +1 -0
- package/dist/esm/constants/ascii.native.js +12 -0
- package/dist/esm/constants/ascii.native.js.map +1 -0
- package/dist/esm/index.js +83 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/index.mjs +7 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +7 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +6 -0
- package/dist/esm/types.mjs +2 -0
- package/dist/esm/types.mjs.map +1 -0
- package/dist/esm/types.native.js +2 -0
- package/dist/esm/types.native.js.map +1 -0
- package/dist/esm/utils/env-categories.js +272 -0
- package/dist/esm/utils/env-categories.js.map +6 -0
- package/dist/esm/utils/env-categories.mjs +233 -0
- package/dist/esm/utils/env-categories.mjs.map +1 -0
- package/dist/esm/utils/env-categories.native.js +246 -0
- package/dist/esm/utils/env-categories.native.js.map +1 -0
- package/dist/esm/utils/env-setup.js +173 -0
- package/dist/esm/utils/env-setup.js.map +6 -0
- package/dist/esm/utils/env-setup.mjs +146 -0
- package/dist/esm/utils/env-setup.mjs.map +1 -0
- package/dist/esm/utils/env-setup.native.js +243 -0
- package/dist/esm/utils/env-setup.native.js.map +1 -0
- package/dist/esm/utils/env.js +83 -0
- package/dist/esm/utils/env.js.map +6 -0
- package/dist/esm/utils/env.mjs +90 -0
- package/dist/esm/utils/env.mjs.map +1 -0
- package/dist/esm/utils/env.native.js +99 -0
- package/dist/esm/utils/env.native.js.map +1 -0
- package/dist/esm/utils/files.js +150 -0
- package/dist/esm/utils/files.js.map +6 -0
- package/dist/esm/utils/files.mjs +187 -0
- package/dist/esm/utils/files.mjs.map +1 -0
- package/dist/esm/utils/files.native.js +247 -0
- package/dist/esm/utils/files.native.js.map +1 -0
- package/dist/esm/utils/parallel-runner.js +69 -0
- package/dist/esm/utils/parallel-runner.js.map +6 -0
- package/dist/esm/utils/parallel-runner.mjs +76 -0
- package/dist/esm/utils/parallel-runner.mjs.map +1 -0
- package/dist/esm/utils/parallel-runner.native.js +109 -0
- package/dist/esm/utils/parallel-runner.native.js.map +1 -0
- package/dist/esm/utils/ports.js +65 -0
- package/dist/esm/utils/ports.js.map +6 -0
- package/dist/esm/utils/ports.mjs +74 -0
- package/dist/esm/utils/ports.mjs.map +1 -0
- package/dist/esm/utils/ports.native.js +93 -0
- package/dist/esm/utils/ports.native.js.map +1 -0
- package/dist/esm/utils/prerequisites.js +91 -0
- package/dist/esm/utils/prerequisites.js.map +6 -0
- package/dist/esm/utils/prerequisites.mjs +91 -0
- package/dist/esm/utils/prerequisites.mjs.map +1 -0
- package/dist/esm/utils/prerequisites.native.js +97 -0
- package/dist/esm/utils/prerequisites.native.js.map +1 -0
- package/dist/esm/utils/prompts.js +139 -0
- package/dist/esm/utils/prompts.js.map +6 -0
- package/dist/esm/utils/prompts.mjs +112 -0
- package/dist/esm/utils/prompts.mjs.map +1 -0
- package/dist/esm/utils/prompts.native.js +115 -0
- package/dist/esm/utils/prompts.native.js.map +1 -0
- package/dist/esm/utils/script-listing.js +91 -0
- package/dist/esm/utils/script-listing.js.map +6 -0
- package/dist/esm/utils/script-listing.mjs +76 -0
- package/dist/esm/utils/script-listing.mjs.map +1 -0
- package/dist/esm/utils/script-listing.native.js +151 -0
- package/dist/esm/utils/script-listing.native.js.map +1 -0
- package/dist/esm/utils/sync.js +50 -0
- package/dist/esm/utils/sync.js.map +6 -0
- package/dist/esm/utils/sync.mjs +48 -0
- package/dist/esm/utils/sync.mjs.map +1 -0
- package/dist/esm/utils/sync.native.js +53 -0
- package/dist/esm/utils/sync.native.js.map +1 -0
- package/dist/esm/utils/welcome.js +21 -0
- package/dist/esm/utils/welcome.js.map +6 -0
- package/dist/esm/utils/welcome.mjs +15 -0
- package/dist/esm/utils/welcome.mjs.map +1 -0
- package/dist/esm/utils/welcome.native.js +18 -0
- package/dist/esm/utils/welcome.native.js.map +1 -0
- package/docs/aggregates.md +579 -0
- package/docs/cloudflare-dev-tunnel.md +41 -0
- package/docs/database.md +203 -0
- package/docs/docs.md +8 -0
- package/docs/emitters.md +562 -0
- package/docs/hot-updater.md +223 -0
- package/docs/native-hot-update.md +252 -0
- package/docs/one-components.md +234 -0
- package/docs/one-hooks.md +570 -0
- package/docs/one-routes.md +660 -0
- package/docs/package-json.md +115 -0
- package/docs/react-native-navigation-flow.md +184 -0
- package/docs/scripts.md +147 -0
- package/docs/sync-prompt.md +208 -0
- package/docs/tamagui.md +478 -0
- package/docs/testing-integration.md +564 -0
- package/docs/triggers.md +450 -0
- package/docs/zero.md +719 -0
- package/package.json +76 -0
- package/scripts/seed.ts +209 -0
- package/src/cli.ts +147 -0
- package/src/commands/changed.ts +313 -0
- package/src/commands/docs.ts +582 -0
- package/src/commands/env-setup.ts +69 -0
- package/src/commands/onboard.ts +1391 -0
- package/src/commands/run.ts +173 -0
- package/src/commands/script.ts +587 -0
- package/src/commands/sync.ts +305 -0
- package/src/constants/ascii.ts +17 -0
- package/src/index.ts +63 -0
- package/src/types.ts +59 -0
- package/src/utils/env-categories.ts +245 -0
- package/src/utils/env-setup.ts +338 -0
- package/src/utils/env.ts +127 -0
- package/src/utils/files.ts +302 -0
- package/src/utils/parallel-runner.ts +129 -0
- package/src/utils/ports.ts +77 -0
- package/src/utils/prerequisites.ts +137 -0
- package/src/utils/prompts.ts +197 -0
- package/src/utils/script-listing.ts +214 -0
- package/src/utils/sync.ts +101 -0
- package/src/withOpSqliteStatic.cjs +51 -0
- package/types/cli.d.ts +7 -0
- package/types/cli.d.ts.map +1 -0
- package/types/commands/changed.d.ts +14 -0
- package/types/commands/changed.d.ts.map +1 -0
- package/types/commands/docs.d.ts +5 -0
- package/types/commands/docs.d.ts.map +1 -0
- package/types/commands/env-setup.d.ts +25 -0
- package/types/commands/env-setup.d.ts.map +1 -0
- package/types/commands/onboard.d.ts +16 -0
- package/types/commands/onboard.d.ts.map +1 -0
- package/types/commands/run.d.ts +8 -0
- package/types/commands/run.d.ts.map +1 -0
- package/types/commands/script.d.ts +28 -0
- package/types/commands/script.d.ts.map +1 -0
- package/types/commands/sync.d.ts +5 -0
- package/types/commands/sync.d.ts.map +1 -0
- package/types/constants/ascii.d.ts +6 -0
- package/types/constants/ascii.d.ts.map +1 -0
- package/types/index.d.ts +12 -0
- package/types/index.d.ts.map +1 -0
- package/types/types.d.ts +54 -0
- package/types/types.d.ts.map +1 -0
- package/types/utils/env-categories.d.ts +8 -0
- package/types/utils/env-categories.d.ts.map +1 -0
- package/types/utils/env-setup.d.ts +10 -0
- package/types/utils/env-setup.d.ts.map +1 -0
- package/types/utils/env.d.ts +19 -0
- package/types/utils/env.d.ts.map +1 -0
- package/types/utils/files.d.ts +47 -0
- package/types/utils/files.d.ts.map +1 -0
- package/types/utils/parallel-runner.d.ts +15 -0
- package/types/utils/parallel-runner.d.ts.map +1 -0
- package/types/utils/ports.d.ts +16 -0
- package/types/utils/ports.d.ts.map +1 -0
- package/types/utils/prerequisites.d.ts +11 -0
- package/types/utils/prerequisites.d.ts.map +1 -0
- package/types/utils/prompts.d.ts +30 -0
- package/types/utils/prompts.d.ts.map +1 -0
- package/types/utils/script-listing.d.ts +7 -0
- package/types/utils/script-listing.d.ts.map +1 -0
- package/types/utils/sync.d.ts +16 -0
- package/types/utils/sync.d.ts.map +1 -0
- package/types/utils/welcome.d.ts +6 -0
- package/types/utils/welcome.d.ts.map +1 -0
package/docs/database.md
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database
|
|
3
|
+
description: Database guide for PostgreSQL, Drizzle ORM, and Zero sync. INVOKE WHEN: Drizzle, migrations, schema changes, ALTER TABLE, SQL queries, getDb, getDBClient, queryDb, connection pooling, Aurora, pgvector, vector search.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Database
|
|
7
|
+
|
|
8
|
+
This guide covers the database architecture, tools, and patterns used in this
|
|
9
|
+
codebase.
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The application uses PostgreSQL as its primary database with multiple access
|
|
14
|
+
patterns and tools:
|
|
15
|
+
|
|
16
|
+
PostgreSQL - primary database (locally via Docker, production via AWS Aurora
|
|
17
|
+
Serverless v2) Drizzle ORM - type-safe ORM for schema management pgvector -
|
|
18
|
+
vector database extension for semantic search Zero - real-time sync system with
|
|
19
|
+
its own database requirements pg - direct PostgreSQL client for custom queries
|
|
20
|
+
|
|
21
|
+
## Local Development
|
|
22
|
+
|
|
23
|
+
### Database GUI - TablePlus
|
|
24
|
+
|
|
25
|
+
TablePlus is the recommended database GUI for macOS. It provides a clean, native
|
|
26
|
+
macOS interface, support for multiple database types, query editor with syntax
|
|
27
|
+
highlighting, import/export capabilities, and SSH tunnel support for production
|
|
28
|
+
databases.
|
|
29
|
+
|
|
30
|
+
To connect to your local development database:
|
|
31
|
+
|
|
32
|
+
Open TablePlus, create a new PostgreSQL connection, and use the connection
|
|
33
|
+
string from `ZERO_UPSTREAM_DB` environment variable. Default local connection:
|
|
34
|
+
`postgresql://user:password@127.0.0.1:5433/postgres`
|
|
35
|
+
|
|
36
|
+
### Command Line Access
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
bun db:psql:dev
|
|
40
|
+
QUERY="SELECT * FROM users LIMIT 5" bun db:psql:dev
|
|
41
|
+
bun db:psql:dev -c "SELECT COUNT(*) FROM messages"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Database Migrations
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
bun db:migrate:add my-migration-name
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Query Patterns
|
|
51
|
+
|
|
52
|
+
The codebase uses multiple query patterns depending on the use case.
|
|
53
|
+
|
|
54
|
+
### Drizzle ORM via getDb()
|
|
55
|
+
|
|
56
|
+
Standard ORM queries for type-safe database operations:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { getDb } from '~/database'
|
|
60
|
+
import { users } from '~/database/schema-public'
|
|
61
|
+
|
|
62
|
+
const db = getDb()
|
|
63
|
+
const allUsers = await db.select().from(users)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Location: src/database/index.ts:28
|
|
67
|
+
|
|
68
|
+
### Direct SQL with Template Literals
|
|
69
|
+
|
|
70
|
+
For complex queries using the sql helper:
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import { sql } from '~/database/sql'
|
|
74
|
+
|
|
75
|
+
const result = await sql`
|
|
76
|
+
SELECT * FROM users
|
|
77
|
+
WHERE created_at > ${date}
|
|
78
|
+
ORDER BY created_at DESC
|
|
79
|
+
`
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Location: src/database/sql.ts:10
|
|
83
|
+
|
|
84
|
+
### Raw pg Client via getDBClient()
|
|
85
|
+
|
|
86
|
+
For connection pooling and advanced PostgreSQL features:
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { getDBClient, queryDb } from '~/database/helpers'
|
|
90
|
+
|
|
91
|
+
const client = await getDBClient()
|
|
92
|
+
try {
|
|
93
|
+
const result = await client.query('SELECT * FROM users')
|
|
94
|
+
} finally {
|
|
95
|
+
client.release()
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const result = await queryDb('SELECT * FROM users WHERE id = $1', [userId])
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Location: src/database/getDBClient.ts:36
|
|
102
|
+
|
|
103
|
+
## Production Infrastructure (AWS Aurora)
|
|
104
|
+
|
|
105
|
+
The production database runs on AWS Aurora Serverless v2 with PostgreSQL 16.6.
|
|
106
|
+
Configuration defined in sst.config.ts.
|
|
107
|
+
|
|
108
|
+
### Connection Management
|
|
109
|
+
|
|
110
|
+
The application implements sophisticated connection pooling to handle Aurora's
|
|
111
|
+
connection limits:
|
|
112
|
+
|
|
113
|
+
Connection pool with retry logic (src/database/getDBClient.ts:36), automatic
|
|
114
|
+
connection limit monitoring, pool recycling when approaching limits,
|
|
115
|
+
configurable timeouts and retry strategies.
|
|
116
|
+
|
|
117
|
+
## Migrations
|
|
118
|
+
|
|
119
|
+
We use Drizzle only for schema migrations, but we often go outside of it for our
|
|
120
|
+
own migration system which is designed to be very simple and builds so it runs
|
|
121
|
+
locally and on AWS Lambda, when deploying to production.
|
|
122
|
+
|
|
123
|
+
### Migration Workflow
|
|
124
|
+
|
|
125
|
+
For Drizzle schame changes in schema-public or schema-private, you just change
|
|
126
|
+
the file and run `bun migrate:build`.
|
|
127
|
+
|
|
128
|
+
If you're developing locally you can skip this and build and run migrations at
|
|
129
|
+
the same time using `bun migrate`.
|
|
130
|
+
|
|
131
|
+
### Custom migrations
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
bun db:migrate:add update-user-stats
|
|
135
|
+
bun migrate
|
|
136
|
+
bun migrate:production
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Custom Migration Example
|
|
140
|
+
|
|
141
|
+
Location: src/database/scripts/migration-add.ts:37
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
import type { PoolClient } from 'pg'
|
|
145
|
+
|
|
146
|
+
export async function up(client: PoolClient) {
|
|
147
|
+
await client.query(`
|
|
148
|
+
ALTER TABLE users
|
|
149
|
+
ADD COLUMN last_seen TIMESTAMP
|
|
150
|
+
`)
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
We don't do down migrations.
|
|
155
|
+
|
|
156
|
+
### Generated Columns in PostgreSQL
|
|
157
|
+
|
|
158
|
+
When creating generated columns:
|
|
159
|
+
|
|
160
|
+
Correct syntax for adding generated columns:
|
|
161
|
+
|
|
162
|
+
```sql
|
|
163
|
+
ALTER TABLE "table_name"
|
|
164
|
+
ADD COLUMN "column_name" data_type
|
|
165
|
+
GENERATED ALWAYS AS (expression) STORED;
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Modifying existing columns to be generated: first drop the existing column, then
|
|
169
|
+
add it back as generated. Cannot directly convert a regular column to generated.
|
|
170
|
+
|
|
171
|
+
In Drizzle schema (src/database/schema-public.ts):
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
columnName: t.integer().generatedAlwaysAs(sql`expression`)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Zero Database Requirements
|
|
178
|
+
|
|
179
|
+
Zero requires specific database configuration:
|
|
180
|
+
|
|
181
|
+
Three separate databases: main, CVR, and change tracking. Logical replication
|
|
182
|
+
enabled. Connection strings configured via environment: ZERO_UPSTREAM_DB (main
|
|
183
|
+
database), ZERO_CVR_DB (client view records), ZERO_CHANGE_DB (change tracking).
|
|
184
|
+
|
|
185
|
+
## Best Practices
|
|
186
|
+
|
|
187
|
+
Connection Management: always release clients when using getDBClient(), use
|
|
188
|
+
queryDb() helper for one-off queries, monitor connection pool usage in
|
|
189
|
+
production.
|
|
190
|
+
|
|
191
|
+
Migrations: test migrations locally before production, use transactions for data
|
|
192
|
+
migrations.
|
|
193
|
+
|
|
194
|
+
Query Performance: use indexes for frequently queried columns, monitor slow
|
|
195
|
+
queries via Aurora logs, use EXPLAIN ANALYZE for query optimization.
|
|
196
|
+
|
|
197
|
+
Security: never log sensitive data, use parameterized queries to prevent SQL
|
|
198
|
+
injection, keep connection strings in environment variables.
|
|
199
|
+
|
|
200
|
+
## Integration Testing
|
|
201
|
+
|
|
202
|
+
For information on database state management during integration testing, see the
|
|
203
|
+
Integration Testing Guide (./testing-integration.md).
|
package/docs/docs.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs
|
|
3
|
+
description: Docs/documentation, writing english, JSDoc code comments, markdown, md, mdx, english
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Writing documentation
|
|
7
|
+
|
|
8
|
+
When writing markdown/docs, JSDoc, or other natural english, we prefer the keep things simple, avoid writing too many lists, avoid bolding things too much, avoid emojis. In general avoid over-use of tables unless it's a pattern found in similar docs elsewhere or truly essential to list out a table-like structure.
|