@beignet/provider-db-drizzle 0.0.35 → 0.0.37
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/CHANGELOG.md +8 -0
- package/README.md +81 -0
- package/dist/mysql/index.d.ts +25 -7
- package/dist/mysql/index.d.ts.map +1 -1
- package/dist/mysql/index.js +37 -50
- package/dist/mysql/index.js.map +1 -1
- package/dist/postgres/index.d.ts +31 -5
- package/dist/postgres/index.d.ts.map +1 -1
- package/dist/postgres/index.js +40 -51
- package/dist/postgres/index.js.map +1 -1
- package/dist/sqlite/index.d.ts +20 -2
- package/dist/sqlite/index.d.ts.map +1 -1
- package/dist/sqlite/index.js +37 -50
- package/dist/sqlite/index.js.map +1 -1
- package/package.json +3 -2
- package/skills/database-provider/SKILL.md +29 -1
- package/src/mysql/index.ts +103 -43
- package/src/postgres/index.ts +118 -42
- package/src/sqlite/index.ts +102 -36
package/dist/sqlite/index.d.ts
CHANGED
|
@@ -227,12 +227,14 @@ export interface SqliteConfig {
|
|
|
227
227
|
* Drizzle SQLite lifecycle provider with typed schema and port name.
|
|
228
228
|
*/
|
|
229
229
|
export type DrizzleSqliteProvider<TSchema extends Record<string, unknown>, PortName extends string = "db"> = ServiceProvider<unknown, AnyProviderConfigSchema<SqliteConfig>, Record<PortName, DbPort<TSchema>>>;
|
|
230
|
+
/** Drizzle SQLite provider backed by an app-supplied libSQL client. */
|
|
231
|
+
export type InjectedDrizzleSqliteProvider<TSchema extends Record<string, unknown>, PortName extends string = "db"> = ServiceProvider<unknown, AnyProviderConfigSchema<void>, Record<PortName, DbPort<TSchema>>>;
|
|
230
232
|
/**
|
|
231
233
|
* Options for creating a Drizzle SQLite provider.
|
|
232
234
|
*
|
|
233
235
|
* @template TSchema - The Drizzle schema type
|
|
234
236
|
*/
|
|
235
|
-
|
|
237
|
+
interface DrizzleSqliteProviderBaseOptions<TSchema extends Record<string, unknown>, PortName extends string = "db"> {
|
|
236
238
|
/**
|
|
237
239
|
* The Drizzle schema object (e.g. `import * as schema from '@/db/schema'`).
|
|
238
240
|
* This schema is used to create a typed Drizzle database instance.
|
|
@@ -246,6 +248,15 @@ export interface DrizzleSqliteProviderOptions<TSchema extends Record<string, unk
|
|
|
246
248
|
*/
|
|
247
249
|
portName?: PortName;
|
|
248
250
|
}
|
|
251
|
+
export type DrizzleSqliteProviderOptions<TSchema extends Record<string, unknown>, PortName extends string = "db"> = DrizzleSqliteProviderBaseOptions<TSchema, PortName> & ({
|
|
252
|
+
client?: never;
|
|
253
|
+
closeOnStop?: never;
|
|
254
|
+
} | {
|
|
255
|
+
/** App-supplied libSQL client, caller-owned by default. */
|
|
256
|
+
client: Client;
|
|
257
|
+
/** Close the injected client when the provider stops. @default false */
|
|
258
|
+
closeOnStop?: boolean;
|
|
259
|
+
});
|
|
249
260
|
/**
|
|
250
261
|
* Create a Drizzle SQLite provider factory.
|
|
251
262
|
*
|
|
@@ -268,5 +279,12 @@ export interface DrizzleSqliteProviderOptions<TSchema extends Record<string, unk
|
|
|
268
279
|
* export const drizzleSqliteProvider = createDrizzleSqliteProvider({ schema });
|
|
269
280
|
* ```
|
|
270
281
|
*/
|
|
271
|
-
export declare function createDrizzleSqliteProvider<TSchema extends Record<string, unknown>, PortName extends string = "db">(options:
|
|
282
|
+
export declare function createDrizzleSqliteProvider<TSchema extends Record<string, unknown>, PortName extends string = "db">(options: DrizzleSqliteProviderBaseOptions<TSchema, PortName> & {
|
|
283
|
+
client: Client;
|
|
284
|
+
closeOnStop?: boolean;
|
|
285
|
+
}): InjectedDrizzleSqliteProvider<TSchema, PortName>;
|
|
286
|
+
export declare function createDrizzleSqliteProvider<TSchema extends Record<string, unknown>, PortName extends string = "db">(options: DrizzleSqliteProviderBaseOptions<TSchema, PortName> & {
|
|
287
|
+
client?: never;
|
|
288
|
+
closeOnStop?: never;
|
|
289
|
+
}): DrizzleSqliteProvider<TSchema, PortName>;
|
|
272
290
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,2BAA2B,EAEhC,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite/index.js
CHANGED
|
@@ -321,30 +321,44 @@ const SqliteConfigSchema = z.object({
|
|
|
321
321
|
*/
|
|
322
322
|
DB_AUTH_TOKEN: z.string().optional(),
|
|
323
323
|
});
|
|
324
|
-
/**
|
|
325
|
-
* Create a Drizzle SQLite provider factory.
|
|
326
|
-
*
|
|
327
|
-
* This factory creates a service provider that:
|
|
328
|
-
* - Uses libSQL via @libsql/client, for local `file:` SQLite databases and
|
|
329
|
-
* Turso's hosted libSQL service
|
|
330
|
-
* - Uses Drizzle ORM via drizzle-orm/libsql
|
|
331
|
-
* - Exposes a typed DbPort<TSchema> on ports
|
|
332
|
-
* - Uses SQLITE_-prefixed env vars for connection config
|
|
333
|
-
*
|
|
334
|
-
* @template TSchema - The Drizzle schema type (inferred from the schema parameter)
|
|
335
|
-
* @param options - Configuration options including the schema
|
|
336
|
-
* @returns A service provider that can be used with createNextServer
|
|
337
|
-
*
|
|
338
|
-
* @example
|
|
339
|
-
* ```ts
|
|
340
|
-
* import * as schema from "@/db/schema";
|
|
341
|
-
* import { createDrizzleSqliteProvider } from "@beignet/provider-db-drizzle/sqlite";
|
|
342
|
-
*
|
|
343
|
-
* export const drizzleSqliteProvider = createDrizzleSqliteProvider({ schema });
|
|
344
|
-
* ```
|
|
345
|
-
*/
|
|
346
324
|
export function createDrizzleSqliteProvider(options) {
|
|
347
325
|
const { schema, portName = "db" } = options;
|
|
326
|
+
const setupClient = (ports, client, closeOnStop) => {
|
|
327
|
+
const instrumentation = createProviderInstrumentation(ports, {
|
|
328
|
+
providerName: "drizzle-sqlite",
|
|
329
|
+
watcher: "db",
|
|
330
|
+
});
|
|
331
|
+
const logger = createDbQueryLogger(instrumentation, portName);
|
|
332
|
+
const db = logger
|
|
333
|
+
? drizzle(client, { schema, logger })
|
|
334
|
+
: drizzle(client, { schema });
|
|
335
|
+
const dbPort = {
|
|
336
|
+
drizzle: db,
|
|
337
|
+
client,
|
|
338
|
+
checkHealth: () => checkSqliteHealth(client),
|
|
339
|
+
};
|
|
340
|
+
return {
|
|
341
|
+
ports: { [portName]: dbPort },
|
|
342
|
+
async stop() {
|
|
343
|
+
if (!closeOnStop)
|
|
344
|
+
return;
|
|
345
|
+
try {
|
|
346
|
+
await client.close();
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
console.error("[drizzleSqliteProvider] Error closing database connection:", error);
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
};
|
|
354
|
+
if (options.client) {
|
|
355
|
+
return createProvider({
|
|
356
|
+
name: "drizzle-sqlite",
|
|
357
|
+
setup({ ports }) {
|
|
358
|
+
return setupClient(ports, options.client, options.closeOnStop ?? false);
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
}
|
|
348
362
|
return createProvider({
|
|
349
363
|
name: "drizzle-sqlite",
|
|
350
364
|
config: {
|
|
@@ -360,34 +374,7 @@ export function createDrizzleSqliteProvider(options) {
|
|
|
360
374
|
url: config.DB_URL,
|
|
361
375
|
authToken: config.DB_AUTH_TOKEN,
|
|
362
376
|
});
|
|
363
|
-
|
|
364
|
-
providerName: "drizzle-sqlite",
|
|
365
|
-
watcher: "db",
|
|
366
|
-
});
|
|
367
|
-
const logger = createDbQueryLogger(instrumentation, portName);
|
|
368
|
-
// 2. Create typed Drizzle instance
|
|
369
|
-
const db = logger
|
|
370
|
-
? drizzle(client, { schema, logger })
|
|
371
|
-
: drizzle(client, { schema });
|
|
372
|
-
// 3. Build a typed DbPort
|
|
373
|
-
const dbPort = {
|
|
374
|
-
drizzle: db,
|
|
375
|
-
client,
|
|
376
|
-
checkHealth: () => checkSqliteHealth(client),
|
|
377
|
-
};
|
|
378
|
-
return {
|
|
379
|
-
ports: { [portName]: dbPort },
|
|
380
|
-
async stop() {
|
|
381
|
-
// Gracefully close the database connection
|
|
382
|
-
try {
|
|
383
|
-
await dbPort.client.close();
|
|
384
|
-
}
|
|
385
|
-
catch (error) {
|
|
386
|
-
// Log error but don't throw - we're shutting down anyway
|
|
387
|
-
console.error("[drizzleSqliteProvider] Error closing database connection:", error);
|
|
388
|
-
}
|
|
389
|
-
},
|
|
390
|
-
};
|
|
377
|
+
return setupClient(ports, client, true);
|
|
391
378
|
},
|
|
392
379
|
});
|
|
393
380
|
}
|
package/dist/sqlite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAGL,yBAAyB,GAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,cAAc,EACd,6BAA6B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/provider-db-drizzle",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Drizzle ORM database providers for Beignet — typed DbPort, unit of work, audit logs, outbox, and idempotency for SQLite (libSQL/Turso), Postgres, and MySQL.",
|
|
6
6
|
"exports": {
|
|
@@ -44,8 +44,9 @@
|
|
|
44
44
|
"prepack": "bun run build",
|
|
45
45
|
"dev": "tsc --watch",
|
|
46
46
|
"clean": "rm -rf dist coverage .turbo",
|
|
47
|
-
"test": "bun test",
|
|
47
|
+
"test": "bun test && bun run typecheck:types",
|
|
48
48
|
"test:coverage": "bun test --coverage",
|
|
49
|
+
"typecheck:types": "tsc -p tsconfig.type-tests.json",
|
|
49
50
|
"lint": "biome check ."
|
|
50
51
|
},
|
|
51
52
|
"keywords": [
|
|
@@ -27,6 +27,7 @@ policies, routes, and UI should keep depending on app-owned ports.
|
|
|
27
27
|
Keep Drizzle schema and migrations in the app, normally:
|
|
28
28
|
|
|
29
29
|
```txt
|
|
30
|
+
infra/db/client.ts
|
|
30
31
|
infra/db/schema/
|
|
31
32
|
drizzle/
|
|
32
33
|
drizzle.config.ts
|
|
@@ -54,9 +55,13 @@ and register it before app-local providers that require `ctx.ports.db`.
|
|
|
54
55
|
|
|
55
56
|
```ts
|
|
56
57
|
import { createDrizzleSqliteProvider } from "@beignet/provider-db-drizzle/sqlite";
|
|
58
|
+
import { databaseClient } from "@/infra/db/client";
|
|
57
59
|
import * as schema from "@/infra/db/schema";
|
|
58
60
|
|
|
59
|
-
const drizzleSqliteProvider = createDrizzleSqliteProvider({
|
|
61
|
+
const drizzleSqliteProvider = createDrizzleSqliteProvider({
|
|
62
|
+
schema,
|
|
63
|
+
client: databaseClient,
|
|
64
|
+
});
|
|
60
65
|
|
|
61
66
|
export const providers = [drizzleSqliteProvider] as const;
|
|
62
67
|
```
|
|
@@ -67,6 +72,27 @@ Provider env vars:
|
|
|
67
72
|
- Postgres: `POSTGRES_DB_URL`
|
|
68
73
|
- MySQL: `MYSQL_DB_URL`
|
|
69
74
|
|
|
75
|
+
Generated apps create one module-scoped client in `infra/db/client.ts` and
|
|
76
|
+
share it between Better Auth and the Drizzle provider. Injected clients are
|
|
77
|
+
caller-owned unless `closeOnStop: true` explicitly delegates shutdown. Keep a
|
|
78
|
+
client shared with auth caller-owned because server initialization can fail,
|
|
79
|
+
clean up providers, and retry against that same module-scoped client. Use
|
|
80
|
+
`closeOnStop` only for a client owned exclusively by one server. Generated
|
|
81
|
+
`server/index.ts` wraps the successfully created server's public `stop()` and
|
|
82
|
+
then calls an idempotent `closeDatabaseClient()` so operational commands exit
|
|
83
|
+
without breaking failed-boot retries. When a provider creates its own
|
|
84
|
+
env-backed client, the provider always closes it.
|
|
85
|
+
|
|
86
|
+
If a custom injected client does not use the provider's standard URL env var,
|
|
87
|
+
list that exact variable under `providerAudit.ignoreRequiredEnv` in
|
|
88
|
+
`beignet.config.ts`. The exception affects static CLI audit only.
|
|
89
|
+
|
|
90
|
+
Postgres and MySQL starters expose `POSTGRES_DB_POOL_MAX` or
|
|
91
|
+
`MYSQL_DB_POOL_MAX`, defaulting to `5`. Size that value from the database
|
|
92
|
+
connection limit divided across maximum web, worker, preview, task, and
|
|
93
|
+
migration process concurrency. In serverless deployments, keep each instance's
|
|
94
|
+
pool small and use a provider-managed pooled endpoint when available.
|
|
95
|
+
|
|
70
96
|
`beignet doctor --strict` checks required env, provider registration,
|
|
71
97
|
Drizzle config, schema exports, scripts, seed/reset entrypoints, and
|
|
72
98
|
registration drift in generated apps.
|
|
@@ -156,6 +182,8 @@ the current transaction unless rebuilt from `tx`.
|
|
|
156
182
|
dependency for contracts, use cases, policies, routes, or UI.
|
|
157
183
|
- Register Drizzle before app-local providers that call `ports.db.drizzle` in
|
|
158
184
|
`setup(...)`.
|
|
185
|
+
- Do not create database clients in routes or context factories. Cache the
|
|
186
|
+
server and database client at module scope so warm requests reuse them.
|
|
159
187
|
- Operational ports must be rebuilt from `tx` when they need to commit with
|
|
160
188
|
the business write.
|
|
161
189
|
- SQLite is a single-writer backend. Beignet queues its own Unit of Work,
|
package/src/mysql/index.ts
CHANGED
|
@@ -41,6 +41,7 @@ import {
|
|
|
41
41
|
type AnyProviderConfigSchema,
|
|
42
42
|
createProvider,
|
|
43
43
|
createProviderInstrumentation,
|
|
44
|
+
type ProviderInstrumentationTarget,
|
|
44
45
|
type ServiceProvider,
|
|
45
46
|
} from "@beignet/core/providers";
|
|
46
47
|
import { type ExtractTablesWithRelations, type SQL, sql } from "drizzle-orm";
|
|
@@ -712,12 +713,22 @@ export type DrizzleMysqlProvider<
|
|
|
712
713
|
Record<PortName, DbPort<TSchema>>
|
|
713
714
|
>;
|
|
714
715
|
|
|
716
|
+
/** Drizzle MySQL provider backed by an app-supplied pool. */
|
|
717
|
+
export type InjectedDrizzleMysqlProvider<
|
|
718
|
+
TSchema extends Record<string, unknown>,
|
|
719
|
+
PortName extends string = "db",
|
|
720
|
+
> = ServiceProvider<
|
|
721
|
+
unknown,
|
|
722
|
+
AnyProviderConfigSchema<void>,
|
|
723
|
+
Record<PortName, DbPort<TSchema>>
|
|
724
|
+
>;
|
|
725
|
+
|
|
715
726
|
/**
|
|
716
727
|
* Options for creating a Drizzle MySQL provider.
|
|
717
728
|
*
|
|
718
729
|
* @template TSchema - The Drizzle schema type
|
|
719
730
|
*/
|
|
720
|
-
|
|
731
|
+
interface DrizzleMysqlProviderBaseOptions<
|
|
721
732
|
TSchema extends Record<string, unknown>,
|
|
722
733
|
PortName extends string = "db",
|
|
723
734
|
> {
|
|
@@ -735,12 +746,6 @@ export interface DrizzleMysqlProviderOptions<
|
|
|
735
746
|
*/
|
|
736
747
|
portName?: PortName;
|
|
737
748
|
|
|
738
|
-
/**
|
|
739
|
-
* Optional mysql2 pool options merged into the pool created from
|
|
740
|
-
* `MYSQL_DB_URL` (e.g. `connectionLimit`, `timezone`, TLS settings).
|
|
741
|
-
*/
|
|
742
|
-
pool?: Omit<PoolOptions, "uri">;
|
|
743
|
-
|
|
744
749
|
/**
|
|
745
750
|
* Drizzle relational-query mode. Use "planetscale" when connecting to
|
|
746
751
|
* PlanetScale; defaults to "default".
|
|
@@ -748,6 +753,26 @@ export interface DrizzleMysqlProviderOptions<
|
|
|
748
753
|
mode?: "default" | "planetscale";
|
|
749
754
|
}
|
|
750
755
|
|
|
756
|
+
export type DrizzleMysqlProviderOptions<
|
|
757
|
+
TSchema extends Record<string, unknown>,
|
|
758
|
+
PortName extends string = "db",
|
|
759
|
+
> = DrizzleMysqlProviderBaseOptions<TSchema, PortName> &
|
|
760
|
+
(
|
|
761
|
+
| {
|
|
762
|
+
/** Pool options for the provider-created `MYSQL_DB_URL` pool. */
|
|
763
|
+
pool?: Omit<PoolOptions, "uri">;
|
|
764
|
+
client?: never;
|
|
765
|
+
closeOnStop?: never;
|
|
766
|
+
}
|
|
767
|
+
| {
|
|
768
|
+
/** App-supplied mysql2 pool, caller-owned by default. */
|
|
769
|
+
client: Pool;
|
|
770
|
+
pool?: never;
|
|
771
|
+
/** Close the injected pool when the provider stops. @default false */
|
|
772
|
+
closeOnStop?: boolean;
|
|
773
|
+
}
|
|
774
|
+
);
|
|
775
|
+
|
|
751
776
|
/**
|
|
752
777
|
* Create a Drizzle MySQL provider factory.
|
|
753
778
|
*
|
|
@@ -769,14 +794,83 @@ export interface DrizzleMysqlProviderOptions<
|
|
|
769
794
|
* export const drizzleMysqlProvider = createDrizzleMysqlProvider({ schema });
|
|
770
795
|
* ```
|
|
771
796
|
*/
|
|
797
|
+
export function createDrizzleMysqlProvider<
|
|
798
|
+
TSchema extends Record<string, unknown>,
|
|
799
|
+
PortName extends string = "db",
|
|
800
|
+
>(
|
|
801
|
+
options: DrizzleMysqlProviderBaseOptions<TSchema, PortName> & {
|
|
802
|
+
client: Pool;
|
|
803
|
+
pool?: never;
|
|
804
|
+
closeOnStop?: boolean;
|
|
805
|
+
},
|
|
806
|
+
): InjectedDrizzleMysqlProvider<TSchema, PortName>;
|
|
807
|
+
export function createDrizzleMysqlProvider<
|
|
808
|
+
TSchema extends Record<string, unknown>,
|
|
809
|
+
PortName extends string = "db",
|
|
810
|
+
>(
|
|
811
|
+
options: DrizzleMysqlProviderBaseOptions<TSchema, PortName> & {
|
|
812
|
+
pool?: Omit<PoolOptions, "uri">;
|
|
813
|
+
client?: never;
|
|
814
|
+
closeOnStop?: never;
|
|
815
|
+
},
|
|
816
|
+
): DrizzleMysqlProvider<TSchema, PortName>;
|
|
772
817
|
export function createDrizzleMysqlProvider<
|
|
773
818
|
TSchema extends Record<string, unknown>,
|
|
774
819
|
PortName extends string = "db",
|
|
775
820
|
>(
|
|
776
821
|
options: DrizzleMysqlProviderOptions<TSchema, PortName>,
|
|
777
|
-
):
|
|
822
|
+
):
|
|
823
|
+
| DrizzleMysqlProvider<TSchema, PortName>
|
|
824
|
+
| InjectedDrizzleMysqlProvider<TSchema, PortName> {
|
|
778
825
|
const { schema, portName = "db", mode = "default" } = options;
|
|
779
826
|
|
|
827
|
+
const setupPool = (ports: unknown, pool: Pool, closeOnStop: boolean) => {
|
|
828
|
+
const instrumentation = createProviderInstrumentation(
|
|
829
|
+
ports as ProviderInstrumentationTarget,
|
|
830
|
+
{
|
|
831
|
+
providerName: "drizzle-mysql",
|
|
832
|
+
watcher: "db",
|
|
833
|
+
},
|
|
834
|
+
);
|
|
835
|
+
const logger = createDbQueryLogger(instrumentation, portName);
|
|
836
|
+
const db: MySql2Database<TSchema> = logger
|
|
837
|
+
? drizzle(pool, { schema, logger, mode })
|
|
838
|
+
: drizzle(pool, { schema, mode });
|
|
839
|
+
const dbPort: DbPort<TSchema> = {
|
|
840
|
+
drizzle: db,
|
|
841
|
+
pool,
|
|
842
|
+
checkHealth: () => checkMysqlHealth(pool),
|
|
843
|
+
};
|
|
844
|
+
|
|
845
|
+
return {
|
|
846
|
+
ports: { [portName]: dbPort } as Record<PortName, DbPort<TSchema>>,
|
|
847
|
+
async stop() {
|
|
848
|
+
if (!closeOnStop) return;
|
|
849
|
+
try {
|
|
850
|
+
await pool.end();
|
|
851
|
+
} catch (error) {
|
|
852
|
+
console.error(
|
|
853
|
+
"[drizzleMysqlProvider] Error closing database connection:",
|
|
854
|
+
error,
|
|
855
|
+
);
|
|
856
|
+
}
|
|
857
|
+
},
|
|
858
|
+
};
|
|
859
|
+
};
|
|
860
|
+
|
|
861
|
+
if (options.client) {
|
|
862
|
+
return createProvider<
|
|
863
|
+
unknown,
|
|
864
|
+
AnyProviderConfigSchema<void>,
|
|
865
|
+
Record<PortName, DbPort<TSchema>>
|
|
866
|
+
>({
|
|
867
|
+
name: "drizzle-mysql",
|
|
868
|
+
setup({ ports }) {
|
|
869
|
+
return setupPool(ports, options.client, options.closeOnStop ?? false);
|
|
870
|
+
},
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
|
|
780
874
|
return createProvider({
|
|
781
875
|
name: "drizzle-mysql",
|
|
782
876
|
|
|
@@ -798,41 +892,7 @@ export function createDrizzleMysqlProvider<
|
|
|
798
892
|
...options.pool,
|
|
799
893
|
});
|
|
800
894
|
|
|
801
|
-
|
|
802
|
-
providerName: "drizzle-mysql",
|
|
803
|
-
watcher: "db",
|
|
804
|
-
});
|
|
805
|
-
|
|
806
|
-
const logger = createDbQueryLogger(instrumentation, portName);
|
|
807
|
-
|
|
808
|
-
// 2. Create typed Drizzle instance (mode is required when a schema is
|
|
809
|
-
// provided to drizzle-orm/mysql2)
|
|
810
|
-
const db: MySql2Database<TSchema> = logger
|
|
811
|
-
? drizzle(pool, { schema, logger, mode })
|
|
812
|
-
: drizzle(pool, { schema, mode });
|
|
813
|
-
|
|
814
|
-
// 3. Build a typed DbPort
|
|
815
|
-
const dbPort: DbPort<TSchema> = {
|
|
816
|
-
drizzle: db,
|
|
817
|
-
pool,
|
|
818
|
-
checkHealth: () => checkMysqlHealth(pool),
|
|
819
|
-
};
|
|
820
|
-
|
|
821
|
-
return {
|
|
822
|
-
ports: { [portName]: dbPort } as Record<PortName, DbPort<TSchema>>,
|
|
823
|
-
async stop() {
|
|
824
|
-
// Gracefully close the database connection pool
|
|
825
|
-
try {
|
|
826
|
-
await dbPort.pool.end();
|
|
827
|
-
} catch (error) {
|
|
828
|
-
// Log error but don't throw - we're shutting down anyway
|
|
829
|
-
console.error(
|
|
830
|
-
"[drizzleMysqlProvider] Error closing database connection:",
|
|
831
|
-
error,
|
|
832
|
-
);
|
|
833
|
-
}
|
|
834
|
-
},
|
|
835
|
-
};
|
|
895
|
+
return setupPool(ports, pool, true);
|
|
836
896
|
},
|
|
837
897
|
});
|
|
838
898
|
}
|