refactor(server): replace postgres-js to pg to support auto-instrumentation

This commit is contained in:
RainbowBird
2026-03-09 18:47:34 +08:00
parent 64da72e95a
commit 0732827a9e
5 changed files with 34 additions and 28 deletions
+3 -2
View File
@@ -31,19 +31,20 @@
"@opentelemetry/sdk-node": "^0.213.0",
"@opentelemetry/sdk-trace-node": "^2.6.0",
"@opentelemetry/semantic-conventions": "^1.40.0",
"@proj-airi/drizzle-orm-browser-migrator": "^0.1.4",
"@proj-airi/drizzle-orm-browser-migrator": "^0.1.6",
"@proj-airi/server-schema": "workspace:*",
"better-auth": "^1.4.19",
"drizzle-orm": "^0.45.1",
"drizzle-valibot": "catalog:",
"hono": "catalog:",
"injeca": "catalog:",
"postgres": "^3.4.8",
"pg": "^8.13.3",
"tsx": "^4.21.0",
"valibot": "catalog:"
},
"devDependencies": {
"@better-auth/cli": "^1.4.21",
"@types/pg": "^8.11.11",
"drizzle-kit": "^0.31.9"
}
}
+3 -2
View File
@@ -126,14 +126,15 @@ async function createApp() {
})
const db = injeca.provide('services:db', {
dependsOn: { env: parsedEnv },
dependsOn: { env: parsedEnv, lifecycle },
build: async ({ dependsOn }) => {
const dbInstance = createDrizzle(dependsOn.env.DATABASE_URL)
const { db: dbInstance, pool } = createDrizzle(dependsOn.env.DATABASE_URL)
await dbInstance.execute('SELECT 1')
logger.log('Connected to database')
await migrateDatabase(dbInstance)
logger.log('Applied schema')
dependsOn.lifecycle.appHooks.onStop(() => pool.end())
return dbInstance
},
})
+6 -5
View File
@@ -1,15 +1,16 @@
import postgres from 'postgres'
import { migrate } from '@proj-airi/drizzle-orm-browser-migrator/pg'
import { migrations } from '@proj-airi/server-schema'
import { drizzle } from 'drizzle-orm/postgres-js'
import { drizzle } from 'drizzle-orm/node-postgres'
import { Pool } from 'pg'
import * as fullSchema from '../schemas'
export type Database = ReturnType<typeof createDrizzle>
export type Database = ReturnType<typeof createDrizzle>['db']
export function createDrizzle(dsn: string) {
return drizzle(postgres(dsn), { schema: fullSchema })
const pool = new Pool({ connectionString: dsn })
const db = drizzle(pool, { schema: fullSchema })
return { db, pool }
}
export function migrateDatabase(db: Database) {
+1 -1
View File
@@ -5,4 +5,4 @@ import { createDrizzle } from '../libs/db'
import { parseEnv } from '../libs/env'
const env = parseEnv(process.env)
export default createAuth(createDrizzle(env.DATABASE_URL), env)
export default createAuth(createDrizzle(env.DATABASE_URL).db, env)
+21 -18
View File
@@ -523,8 +523,8 @@ importers:
specifier: ^1.40.0
version: 1.40.0
'@proj-airi/drizzle-orm-browser-migrator':
specifier: ^0.1.4
version: 0.1.4(drizzle-orm@0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(kysely@0.28.11)(pg@8.19.0)(postgres@3.4.8))
specifier: ^0.1.6
version: 0.1.6(drizzle-orm@0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(kysely@0.28.11)(pg@8.19.0)(postgres@3.4.8))
'@proj-airi/server-schema':
specifier: workspace:*
version: link:../../packages/server-schema
@@ -543,9 +543,9 @@ importers:
injeca:
specifier: 'catalog:'
version: 0.1.7(@guiiai/logg@1.2.11)(error-stack-parser@2.1.4)(nanoid@5.1.6)
postgres:
specifier: ^3.4.8
version: 3.4.8
pg:
specifier: ^8.13.3
version: 8.19.0
tsx:
specifier: ^4.21.0
version: 4.21.0
@@ -556,6 +556,9 @@ importers:
'@better-auth/cli':
specifier: ^1.4.21
version: 1.4.21(@better-fetch/fetch@1.1.21)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(better-call@1.1.8(zod@4.3.6))(drizzle-kit@0.31.9)(jose@6.1.3)(kysely@0.28.11)(magicast@0.5.2)(nanostores@1.1.1)(postgres@3.4.8)(react@19.2.3)(vitest@4.0.18)(vue@3.5.29(typescript@5.9.3))
'@types/pg':
specifier: ^8.11.11
version: 8.16.0
drizzle-kit:
specifier: ^0.31.9
version: 0.31.9
@@ -829,7 +832,7 @@ importers:
version: 1.2.44
'@intlify/unplugin-vue-i18n':
specifier: ^11.0.7
version: 11.0.7(@vue/compiler-dom@3.5.29)(eslint@9.39.3(jiti@2.6.1))(rollup@2.80.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
version: 11.0.7(@vue/compiler-dom@3.5.29)(eslint@9.39.3(jiti@2.6.1))(rollup@4.59.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
'@proj-airi/cap-vite':
specifier: workspace:*
version: link:../../packages/cap-vite
@@ -892,19 +895,19 @@ importers:
version: 4.5.1
unplugin-info:
specifier: ^1.2.4
version: 1.2.4(esbuild@0.27.2)(rollup@2.80.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
version: 1.2.4(esbuild@0.27.2)(rollup@4.59.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
unplugin-vue-router:
specifier: ^0.19.2
version: 0.19.2(@vue/compiler-sfc@3.5.29)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
unplugin-yaml:
specifier: ^4.0.0
version: 4.0.0(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@2.80.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
version: 4.0.0(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
vite:
specifier: 'catalog:'
version: 8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
vite-bundle-visualizer:
specifier: ^1.2.1
version: 1.2.1(rolldown@1.0.0-rc.3)(rollup@2.80.0)
version: 1.2.1(rolldown@1.0.0-rc.3)(rollup@4.59.0)
vite-plugin-mkcert:
specifier: 'catalog:'
version: 1.17.10(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
@@ -919,7 +922,7 @@ importers:
version: 0.11.0(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
vue-macros:
specifier: ^3.1.2
version: 3.1.2(@vueuse/core@14.2.1(vue@3.5.29(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))
version: 3.1.2(@vueuse/core@14.2.1(vue@3.5.29(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))
vue-tsc:
specifier: ^3.1.8
version: 3.2.5(typescript@5.9.3)
@@ -1650,7 +1653,7 @@ importers:
version: 1.2.44
'@intlify/unplugin-vue-i18n':
specifier: ^11.0.7
version: 11.0.7(@vue/compiler-dom@3.5.29)(eslint@9.39.3(jiti@2.6.1))(rollup@4.59.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
version: 11.0.7(@vue/compiler-dom@3.5.29)(eslint@9.39.3(jiti@2.6.1))(rollup@2.80.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
'@proj-airi/iconify-meteocons':
specifier: 'catalog:'
version: 0.1.4
@@ -1710,19 +1713,19 @@ importers:
version: 4.5.1
unplugin-info:
specifier: ^1.2.4
version: 1.2.4(esbuild@0.27.2)(rollup@4.59.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
version: 1.2.4(esbuild@0.27.2)(rollup@2.80.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
unplugin-vue-router:
specifier: ^0.19.2
version: 0.19.2(@vue/compiler-sfc@3.5.29)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
unplugin-yaml:
specifier: ^4.0.0
version: 4.0.0(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
version: 4.0.0(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@2.80.0)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
vite:
specifier: 'catalog:'
version: 8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
vite-bundle-visualizer:
specifier: ^1.2.1
version: 1.2.1(rolldown@1.0.0-rc.3)(rollup@4.59.0)
version: 1.2.1(rolldown@1.0.0-rc.3)(rollup@2.80.0)
vite-plugin-pwa:
specifier: ^1.2.0
version: 1.2.0(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(workbox-build@7.4.0)(workbox-window@7.4.0)
@@ -1734,7 +1737,7 @@ importers:
version: 0.11.0(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
vue-macros:
specifier: ^3.1.2
version: 3.1.2(@vueuse/core@14.2.1(vue@3.5.29(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))
version: 3.1.2(@vueuse/core@14.2.1(vue@3.5.29(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.3)(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.0-beta.15(@types/node@24.10.14)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))
vue-tsc:
specifier: ^3.2.5
version: 3.2.5(typescript@5.9.3)
@@ -7823,8 +7826,8 @@ packages:
web-worker:
optional: true
'@proj-airi/drizzle-orm-browser-migrator@0.1.4':
resolution: {integrity: sha512-xglys6t2+h62aLwAvIN7L4V/lUB3FkVSbm7nj8dCHQ+OxCSQtEPyjgiwqahlFBRg6n9/L/ASvD78ASk/2VT/RQ==}
'@proj-airi/drizzle-orm-browser-migrator@0.1.6':
resolution: {integrity: sha512-7A7Ay5vSLBer2P+Ydbrl9AktE7geIlh396zB/3a9odwI/1GT89Pljzvjz5SVxG0e17+wMOPLRKnTnCzukL1B9Q==}
peerDependencies:
drizzle-orm: '>=0.44.0'
@@ -21927,7 +21930,7 @@ snapshots:
transitivePeerDependencies:
- '@75lb/nature'
'@proj-airi/drizzle-orm-browser-migrator@0.1.4(drizzle-orm@0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(kysely@0.28.11)(pg@8.19.0)(postgres@3.4.8))':
'@proj-airi/drizzle-orm-browser-migrator@0.1.6(drizzle-orm@0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(kysely@0.28.11)(pg@8.19.0)(postgres@3.4.8))':
dependencies:
'@guiiai/logg': 1.2.11
drizzle-orm: 0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(kysely@0.28.11)(pg@8.19.0)(postgres@3.4.8)