@turystack/nestjs-database 0.0.1

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.
Files changed (77) hide show
  1. package/dist/database.constants.d.ts +2 -0
  2. package/dist/database.constants.d.ts.map +1 -0
  3. package/dist/database.constants.js +2 -0
  4. package/dist/database.constants.js.map +1 -0
  5. package/dist/database.module.d.ts +8 -0
  6. package/dist/database.module.d.ts.map +1 -0
  7. package/dist/database.module.js +44 -0
  8. package/dist/database.module.js.map +1 -0
  9. package/dist/database.service.d.ts +10 -0
  10. package/dist/database.service.d.ts.map +1 -0
  11. package/dist/database.service.js +29 -0
  12. package/dist/database.service.js.map +1 -0
  13. package/dist/database.types.d.ts +22 -0
  14. package/dist/database.types.d.ts.map +1 -0
  15. package/dist/database.types.js +2 -0
  16. package/dist/database.types.js.map +1 -0
  17. package/dist/drizzle/client.d.ts +12 -0
  18. package/dist/drizzle/client.d.ts.map +1 -0
  19. package/dist/drizzle/client.drizzle.d.ts +12 -0
  20. package/dist/drizzle/client.drizzle.d.ts.map +1 -0
  21. package/dist/drizzle/client.drizzle.js +37 -0
  22. package/dist/drizzle/client.drizzle.js.map +1 -0
  23. package/dist/drizzle/client.js +34 -0
  24. package/dist/drizzle/client.js.map +1 -0
  25. package/dist/drizzle/index.d.ts +4 -0
  26. package/dist/drizzle/index.d.ts.map +1 -0
  27. package/dist/drizzle/index.js +4 -0
  28. package/dist/drizzle/index.js.map +1 -0
  29. package/dist/drizzle/schema-builder.drizzle.d.ts +7 -0
  30. package/dist/drizzle/schema-builder.drizzle.d.ts.map +1 -0
  31. package/dist/drizzle/schema-builder.drizzle.js +30 -0
  32. package/dist/drizzle/schema-builder.drizzle.js.map +1 -0
  33. package/dist/drizzle/schema-builder.types.drizzle.d.ts +8 -0
  34. package/dist/drizzle/schema-builder.types.drizzle.d.ts.map +1 -0
  35. package/dist/drizzle/schema-builder.types.drizzle.js +2 -0
  36. package/dist/drizzle/schema-builder.types.drizzle.js.map +1 -0
  37. package/dist/drizzle/transaction-context.d.ts +9 -0
  38. package/dist/drizzle/transaction-context.d.ts.map +1 -0
  39. package/dist/drizzle/transaction-context.drizzle.d.ts +9 -0
  40. package/dist/drizzle/transaction-context.drizzle.d.ts.map +1 -0
  41. package/dist/drizzle/transaction-context.drizzle.js +15 -0
  42. package/dist/drizzle/transaction-context.drizzle.js.map +1 -0
  43. package/dist/drizzle/transaction-context.js +15 -0
  44. package/dist/drizzle/transaction-context.js.map +1 -0
  45. package/dist/drizzle/transactional.decorator.d.ts +3 -0
  46. package/dist/drizzle/transactional.decorator.d.ts.map +1 -0
  47. package/dist/drizzle/transactional.decorator.js +15 -0
  48. package/dist/drizzle/transactional.decorator.js.map +1 -0
  49. package/dist/drizzle/transactional.drizzle.d.ts +3 -0
  50. package/dist/drizzle/transactional.drizzle.d.ts.map +1 -0
  51. package/dist/drizzle/transactional.drizzle.js +15 -0
  52. package/dist/drizzle/transactional.drizzle.js.map +1 -0
  53. package/dist/index.d.ts +8 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +6 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/prisma/index.d.ts +3 -0
  58. package/dist/prisma/index.d.ts.map +1 -0
  59. package/dist/prisma/index.js +3 -0
  60. package/dist/prisma/index.js.map +1 -0
  61. package/dist/prisma/prisma.client.d.ts +2 -0
  62. package/dist/prisma/prisma.client.d.ts.map +1 -0
  63. package/dist/prisma/prisma.client.js +13 -0
  64. package/dist/prisma/prisma.client.js.map +1 -0
  65. package/dist/prisma/transactional.decorator.d.ts +2 -0
  66. package/dist/prisma/transactional.decorator.d.ts.map +1 -0
  67. package/dist/prisma/transactional.decorator.js +3 -0
  68. package/dist/prisma/transactional.decorator.js.map +1 -0
  69. package/dist/schema-builder.d.ts +7 -0
  70. package/dist/schema-builder.d.ts.map +1 -0
  71. package/dist/schema-builder.js +32 -0
  72. package/dist/schema-builder.js.map +1 -0
  73. package/dist/schema-builder.types.d.ts +8 -0
  74. package/dist/schema-builder.types.d.ts.map +1 -0
  75. package/dist/schema-builder.types.js +2 -0
  76. package/dist/schema-builder.types.js.map +1 -0
  77. package/package.json +70 -0
@@ -0,0 +1,2 @@
1
+ export declare const DATABASE_SERVICE: unique symbol;
2
+ //# sourceMappingURL=database.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.constants.d.ts","sourceRoot":"","sources":["../src/database.constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,eAA6B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const DATABASE_SERVICE = Symbol('DATABASE_SERVICE');
2
+ //# sourceMappingURL=database.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.constants.js","sourceRoot":"","sources":["../src/database.constants.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { type DynamicModule } from '@nestjs/common';
2
+ import type { DatabaseModuleOptions } from './database.types.js';
3
+ import type { SchemaResolverResult } from './drizzle/schema-builder.types.drizzle.js';
4
+ export declare class DatabaseModule {
5
+ static register<TResult extends SchemaResolverResult>(options: DatabaseModuleOptions<TResult>): DynamicModule;
6
+ private static _resolveProviders;
7
+ }
8
+ //# sourceMappingURL=database.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.module.d.ts","sourceRoot":"","sources":["../src/database.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAyB,MAAM,gBAAgB,CAAA;AAI1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAOhE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAGrF,qBACa,cAAc;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,SAAS,oBAAoB,EACnD,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,GACrC,aAAa;IAUhB,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAmBhC"}
@@ -0,0 +1,44 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var DatabaseModule_1;
8
+ import { Module } from '@nestjs/common';
9
+ import { DATABASE_SERVICE } from './database.constants.js';
10
+ import { DatabaseService } from './database.service.js';
11
+ import { createDrizzleClient } from './drizzle/client.drizzle.js';
12
+ import { createSchemaBuilder, materializeSchema, } from './drizzle/schema-builder.drizzle.js';
13
+ import { registerDb } from './drizzle/transaction-context.drizzle.js';
14
+ let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
15
+ static register(options) {
16
+ return {
17
+ exports: [
18
+ DATABASE_SERVICE,
19
+ ],
20
+ module: DatabaseModule_1,
21
+ providers: DatabaseModule_1._resolveProviders(options),
22
+ };
23
+ }
24
+ static _resolveProviders(options) {
25
+ return [
26
+ {
27
+ provide: DATABASE_SERVICE,
28
+ useFactory: () => {
29
+ const { db, strategy } = createDrizzleClient(options);
30
+ registerDb(db);
31
+ const builder = createSchemaBuilder();
32
+ const resolverResult = options.schemaResolver(builder);
33
+ const schema = materializeSchema(options.adapter, resolverResult);
34
+ return new DatabaseService(db, schema, strategy);
35
+ },
36
+ },
37
+ ];
38
+ }
39
+ };
40
+ DatabaseModule = DatabaseModule_1 = __decorate([
41
+ Module({})
42
+ ], DatabaseModule);
43
+ export { DatabaseModule };
44
+ //# sourceMappingURL=database.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.module.js","sourceRoot":"","sources":["../src/database.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAsB,MAAM,EAAiB,MAAM,gBAAgB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EACN,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,qCAAqC,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAA;AAG9D,IAAM,cAAc,sBAApB,MAAM,cAAc;IAC1B,MAAM,CAAC,QAAQ,CACd,OAAuC;QAEvC,OAAO;YACN,OAAO,EAAE;gBACR,gBAAgB;aAChB;YACD,MAAM,EAAE,gBAAc;YACtB,SAAS,EAAE,gBAAc,CAAC,iBAAiB,CAAC,OAAO,CAAC;SACpD,CAAA;IACF,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAC/B,OAAuC;QAEvC,OAAO;YACN;gBACC,OAAO,EAAE,gBAAgB;gBACzB,UAAU,EAAE,GAAG,EAAE;oBAChB,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;oBACrD,UAAU,CAAC,EAAE,CAAC,CAAA;oBAEd,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;oBACrC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;oBACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;oBAEjE,OAAO,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;gBACjD,CAAC;aACD;SACD,CAAA;IACF,CAAC;CACD,CAAA;AAhCY,cAAc;IAD1B,MAAM,CAAC,EAAE,CAAC;GACE,cAAc,CAgC1B"}
@@ -0,0 +1,10 @@
1
+ import type { AdapterStrategy } from './drizzle/client.drizzle.js';
2
+ type AnyDb = any;
3
+ export declare class DatabaseService<TSchema extends Record<string, unknown> = Record<string, unknown>> {
4
+ private readonly _db;
5
+ readonly _strategy: AdapterStrategy;
6
+ constructor(db: AnyDb, schema: TSchema, strategy: AdapterStrategy);
7
+ get db(): AnyDb;
8
+ }
9
+ export {};
10
+ //# sourceMappingURL=database.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.service.d.ts","sourceRoot":"","sources":["../src/database.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAIlE,KAAK,KAAK,GAAG,GAAG,CAAA;AAyBhB,qBACa,eAAe,CAC3B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAO;IAC3B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAA;gBAEvB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe;IAUjE,IAAI,EAAE,IAAI,KAAK,CAEd;CACD"}
@@ -0,0 +1,29 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Injectable } from '@nestjs/common';
11
+ import { getCurrentTx } from './drizzle/transaction-context.drizzle.js';
12
+ let DatabaseService = class DatabaseService {
13
+ _db;
14
+ _strategy;
15
+ constructor(db, schema, strategy) {
16
+ this._db = db;
17
+ this._strategy = strategy;
18
+ Object.assign(this, schema);
19
+ }
20
+ get db() {
21
+ return getCurrentTx() ?? this._db;
22
+ }
23
+ };
24
+ DatabaseService = __decorate([
25
+ Injectable(),
26
+ __metadata("design:paramtypes", [Object, Object, Object])
27
+ ], DatabaseService);
28
+ export { DatabaseService };
29
+ //# sourceMappingURL=database.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.service.js","sourceRoot":"","sources":["../src/database.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAA;AA6BhE,IAAM,eAAe,GAArB,MAAM,eAAe;IAGV,GAAG,CAAO;IAClB,SAAS,CAAiB;IAEnC,YAAY,EAAS,EAAE,MAAe,EAAE,QAAyB;QAChE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC5B,CAAC;IAMD,IAAI,EAAE;QACL,OAAO,YAAY,EAAE,IAAI,IAAI,CAAC,GAAG,CAAA;IAClC,CAAC;CACD,CAAA;AAnBY,eAAe;IAD3B,UAAU,EAAE;;GACA,eAAe,CAmB3B"}
@@ -0,0 +1,22 @@
1
+ import type { SchemaBuilder, SchemaResolverResult } from './drizzle/schema-builder.types.drizzle.js';
2
+ export type DatabaseAdapter = 'postgresql' | 'mysql' | 'sqlite';
3
+ export type DatabaseModuleOptions<TResult extends SchemaResolverResult = SchemaResolverResult> = {
4
+ adapter: 'postgresql';
5
+ postgresql: {
6
+ url: string;
7
+ };
8
+ schemaResolver: (schema: SchemaBuilder) => TResult;
9
+ } | {
10
+ adapter: 'mysql';
11
+ mysql: {
12
+ url: string;
13
+ };
14
+ schemaResolver: (schema: SchemaBuilder) => TResult;
15
+ } | {
16
+ adapter: 'sqlite';
17
+ sqlite: {
18
+ url: string;
19
+ };
20
+ schemaResolver: (schema: SchemaBuilder) => TResult;
21
+ };
22
+ //# sourceMappingURL=database.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.types.d.ts","sourceRoot":"","sources":["../src/database.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAGpG,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAA;AAsB/D,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,IACzF;IACE,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAA;CACnD,GACD;IACE,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACtB,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAA;CACnD,GACD;IACE,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAA;CACnD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=database.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.types.js","sourceRoot":"","sources":["../src/database.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import type { DatabaseModuleOptions } from '../database.types.js';
2
+ type AnyDb = any;
3
+ type AnyTx = any;
4
+ export interface AdapterStrategy {
5
+ runTransaction(db: AnyDb, fn: (tx: AnyTx) => Promise<unknown>, isolationLevel?: string): Promise<unknown>;
6
+ }
7
+ export declare function createDrizzleClient(options: DatabaseModuleOptions): {
8
+ db: AnyDb;
9
+ strategy: AdapterStrategy;
10
+ };
11
+ export {};
12
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/drizzle/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAGhE,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,MAAM,WAAW,eAAe;IAC9B,cAAc,CACZ,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,EACnC,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,OAAO,CAAC,CAAA;CACpB;AAkCD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG;IACnE,EAAE,EAAE,KAAK,CAAA;IACT,QAAQ,EAAE,eAAe,CAAA;CAC1B,CAoBA"}
@@ -0,0 +1,12 @@
1
+ import type { DatabaseModuleOptions } from '../database.types.js';
2
+ type AnyDb = any;
3
+ type AnyTx = any;
4
+ export interface AdapterStrategy {
5
+ runTransaction(db: AnyDb, fn: (tx: AnyTx) => Promise<unknown>, isolationLevel?: string): Promise<unknown>;
6
+ }
7
+ export declare function createDrizzleClient(options: DatabaseModuleOptions): {
8
+ db: AnyDb;
9
+ strategy: AdapterStrategy;
10
+ };
11
+ export {};
12
+ //# sourceMappingURL=client.drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/client.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAGhE,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,MAAM,WAAW,eAAe;IAC/B,cAAc,CACb,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,EACnC,cAAc,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAAA;CACnB;AA+CD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG;IACpE,EAAE,EAAE,KAAK,CAAA;IACT,QAAQ,EAAE,eAAe,CAAA;CACzB,CAuBA"}
@@ -0,0 +1,37 @@
1
+ class PostgresqlStrategy {
2
+ async runTransaction(db, fn, isolationLevel) {
3
+ return db.transaction(fn, isolationLevel ? { isolationLevel } : undefined);
4
+ }
5
+ }
6
+ class MysqlStrategy {
7
+ async runTransaction(db, fn, isolationLevel) {
8
+ return db.transaction(fn, isolationLevel ? { isolationLevel } : undefined);
9
+ }
10
+ }
11
+ class SqliteStrategy {
12
+ async runTransaction(db, fn, isolationLevel) {
13
+ const behavior = isolationLevel;
14
+ return db.transaction(fn, behavior ? { behavior } : undefined);
15
+ }
16
+ }
17
+ export function createDrizzleClient(options) {
18
+ switch (options.adapter) {
19
+ case 'postgresql': {
20
+ const { drizzle } = require('drizzle-orm/node-postgres');
21
+ return { db: drizzle(options.postgresql.url), strategy: new PostgresqlStrategy() };
22
+ }
23
+ case 'mysql': {
24
+ const { drizzle } = require('drizzle-orm/mysql2');
25
+ return { db: drizzle(options.mysql.url), strategy: new MysqlStrategy() };
26
+ }
27
+ case 'sqlite': {
28
+ const { drizzle } = require('drizzle-orm/better-sqlite3');
29
+ const Database = require('better-sqlite3');
30
+ return {
31
+ db: drizzle(new Database(options.sqlite.url)),
32
+ strategy: new SqliteStrategy(),
33
+ };
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=client.drizzle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/client.drizzle.ts"],"names":[],"mappings":"AAeA,MAAM,kBAAkB;IACvB,KAAK,CAAC,cAAc,CACnB,EAAS,EACT,EAAmC,EACnC,cAAuB;QAEvB,OAAO,EAAE,CAAC,WAAW,CACpB,EAAE,EACF,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAC/C,CAAA;IACF,CAAC;CACD;AAED,MAAM,aAAa;IAClB,KAAK,CAAC,cAAc,CACnB,EAAS,EACT,EAAmC,EACnC,cAAuB;QAEvB,OAAO,EAAE,CAAC,WAAW,CACpB,EAAE,EACF,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAC/C,CAAA;IACF,CAAC;CACD;AAED,MAAM,cAAc;IACnB,KAAK,CAAC,cAAc,CACnB,EAAS,EACT,EAAmC,EACnC,cAAuB;QAGvB,MAAM,QAAQ,GAAG,cAIL,CAAA;QACZ,OAAO,EAAE,CAAC,WAAW,CACpB,EAAE,EACF,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CACnC,CAAA;IACF,CAAC;CACD;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA8B;IAIjE,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;QACzB,KAAK,YAAY,CAAC,CAAC,CAAC;YAEnB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,2BAA2B,CAAQ,CAAA;YAC/D,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,kBAAkB,EAAE,EAAE,CAAA;QACnF,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YAEd,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAQ,CAAA;YACxD,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,EAAE,CAAA;QACzE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YAEf,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YAEhE,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAQ,CAAA;YACjD,OAAO;gBACN,EAAE,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7C,QAAQ,EAAE,IAAI,cAAc,EAAE;aAC9B,CAAA;QACF,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -0,0 +1,34 @@
1
+ class PostgresqlStrategy {
2
+ async runTransaction(db, fn, isolationLevel) {
3
+ return db.transaction(fn, isolationLevel ? { isolationLevel } : undefined);
4
+ }
5
+ }
6
+ class MysqlStrategy {
7
+ async runTransaction(db, fn, isolationLevel) {
8
+ return db.transaction(fn, isolationLevel ? { isolationLevel } : undefined);
9
+ }
10
+ }
11
+ class SqliteStrategy {
12
+ async runTransaction(db, fn, isolationLevel) {
13
+ const behavior = isolationLevel;
14
+ return db.transaction(fn, behavior ? { behavior } : undefined);
15
+ }
16
+ }
17
+ export function createDrizzleClient(options) {
18
+ switch (options.adapter) {
19
+ case 'postgresql': {
20
+ const { drizzle } = require('drizzle-orm/node-postgres');
21
+ return { db: drizzle(options.postgresql.url), strategy: new PostgresqlStrategy() };
22
+ }
23
+ case 'mysql': {
24
+ const { drizzle } = require('drizzle-orm/mysql2');
25
+ return { db: drizzle(options.mysql.url), strategy: new MysqlStrategy() };
26
+ }
27
+ case 'sqlite': {
28
+ const { drizzle } = require('drizzle-orm/better-sqlite3');
29
+ const Database = require('better-sqlite3');
30
+ return { db: drizzle(new Database(options.sqlite.url)), strategy: new SqliteStrategy() };
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/drizzle/client.ts"],"names":[],"mappings":"AAeA,MAAM,kBAAkB;IACtB,KAAK,CAAC,cAAc,CAClB,EAAS,EACT,EAAmC,EACnC,cAAuB;QAEvB,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC5E,CAAC;CACF;AAED,MAAM,aAAa;IACjB,KAAK,CAAC,cAAc,CAClB,EAAS,EACT,EAAmC,EACnC,cAAuB;QAEvB,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC5E,CAAC;CACF;AAED,MAAM,cAAc;IAClB,KAAK,CAAC,cAAc,CAClB,EAAS,EACT,EAAmC,EACnC,cAAuB;QAGvB,MAAM,QAAQ,GAAG,cAAoE,CAAA;QACrF,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAChE,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA8B;IAIhE,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,YAAY,CAAC,CAAC,CAAC;YAElB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,2BAA2B,CAAQ,CAAA;YAC/D,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,kBAAkB,EAAE,EAAE,CAAA;QACpF,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YAEb,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAQ,CAAA;YACxD,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,EAAE,CAAA;QAC1E,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YAEd,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YAEhE,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAQ,CAAA;YACjD,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,cAAc,EAAE,EAAE,CAAA;QAC1F,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from '../drizzle/client.js';
2
+ export * from '../drizzle/transaction-context.js';
3
+ export * from '../drizzle/transactional.decorator.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drizzle/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,kCAAkC,CAAA;AAChD,cAAc,sCAAsC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from '../drizzle/client.js';
2
+ export * from '../drizzle/transaction-context.js';
3
+ export * from '../drizzle/transactional.decorator.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drizzle/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,kCAAkC,CAAA;AAChD,cAAc,sCAAsC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { DatabaseAdapter } from '../database.types.js';
2
+ import type { SchemaBuilder, SchemaResolverResult } from '../drizzle/schema-builder.types.drizzle.js';
3
+ export declare function createSchemaBuilder(): SchemaBuilder;
4
+ type AnyTable = any;
5
+ export declare function materializeSchema(adapter: DatabaseAdapter, resolverResult: SchemaResolverResult): Record<string, AnyTable>;
6
+ export {};
7
+ //# sourceMappingURL=schema-builder.drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema-builder.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAEX,aAAa,EACb,oBAAoB,EACpB,MAAM,2CAA2C,CAAA;AAElD,wBAAgB,mBAAmB,IAAI,aAAa,CAQnD;AAGD,KAAK,QAAQ,GAAG,GAAG,CAAA;AA2BnB,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,eAAe,EACxB,cAAc,EAAE,oBAAoB,GAClC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAO1B"}
@@ -0,0 +1,30 @@
1
+ export function createSchemaBuilder() {
2
+ return {
3
+ table(columns) {
4
+ return { __columns: columns };
5
+ },
6
+ };
7
+ }
8
+ function createTable(adapter, tableName, columns) {
9
+ switch (adapter) {
10
+ case 'postgresql': {
11
+ const { pgTable } = require('drizzle-orm/pg-core');
12
+ return pgTable(tableName, columns);
13
+ }
14
+ case 'mysql': {
15
+ const { mysqlTable } = require('drizzle-orm/mysql-core');
16
+ return mysqlTable(tableName, columns);
17
+ }
18
+ case 'sqlite': {
19
+ const { sqliteTable } = require('drizzle-orm/sqlite-core');
20
+ return sqliteTable(tableName, columns);
21
+ }
22
+ }
23
+ }
24
+ export function materializeSchema(adapter, resolverResult) {
25
+ return Object.fromEntries(Object.entries(resolverResult).map(([tableName, columnMap]) => {
26
+ const columns = columnMap.__columns;
27
+ return [tableName, createTable(adapter, tableName, columns)];
28
+ }));
29
+ }
30
+ //# sourceMappingURL=schema-builder.drizzle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/schema-builder.drizzle.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,mBAAmB;IAClC,OAAO;QACN,KAAK,CACJ,OAAiB;YAEjB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;QAC9B,CAAC;KACD,CAAA;AACF,CAAC;AAKD,SAAS,WAAW,CACnB,OAAwB,EACxB,SAAiB,EAEjB,OAA4B;IAE5B,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,YAAY,CAAC,CAAC,CAAC;YAEnB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAQ,CAAA;YACzD,OAAO,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YAEd,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAQ,CAAA;YAC/D,OAAO,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACtC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YAEf,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAAQ,CAAA;YACjE,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,OAAwB,EACxB,cAAoC;IAEpC,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAA;QACnC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;IAC7D,CAAC,CAAC,CACF,CAAA;AACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type ColumnMap<TColumns extends Record<string, unknown>> = {
2
+ readonly __columns: TColumns;
3
+ };
4
+ export interface SchemaBuilder {
5
+ table<TColumns extends Record<string, unknown>>(columns: TColumns): ColumnMap<TColumns>;
6
+ }
7
+ export type SchemaResolverResult = Record<string, ColumnMap<Record<string, unknown>>>;
8
+ //# sourceMappingURL=schema-builder.types.drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.types.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema-builder.types.drizzle.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACjE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;CAC5B,CAAA;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,OAAO,EAAE,QAAQ,GACf,SAAS,CAAC,QAAQ,CAAC,CAAA;CACtB;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACxC,MAAM,EACN,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAClC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema-builder.types.drizzle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.types.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/schema-builder.types.drizzle.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ type AnyTx = any;
3
+ type AnyDb = any;
4
+ export declare const transactionStorage: AsyncLocalStorage<any>;
5
+ export declare function getCurrentTx(): AnyTx | undefined;
6
+ export declare function registerDb(db: AnyDb): void;
7
+ export declare function getDb(): AnyDb;
8
+ export {};
9
+ //# sourceMappingURL=transaction-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-context.d.ts","sourceRoot":"","sources":["../../src/drizzle/transaction-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGpD,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,eAAO,MAAM,kBAAkB,wBAAiC,CAAA;AAEhE,wBAAgB,YAAY,IAAI,KAAK,GAAG,SAAS,CAEhD;AAID,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAE1C;AAED,wBAAgB,KAAK,IAAI,KAAK,CAG7B"}
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ type AnyTx = any;
3
+ type AnyDb = any;
4
+ export declare const transactionStorage: AsyncLocalStorage<any>;
5
+ export declare function getCurrentTx(): AnyTx | undefined;
6
+ export declare function registerDb(db: AnyDb): void;
7
+ export declare function getDb(): AnyDb;
8
+ export {};
9
+ //# sourceMappingURL=transaction-context.drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-context.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/transaction-context.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGpD,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,KAAK,KAAK,GAAG,GAAG,CAAA;AAEhB,eAAO,MAAM,kBAAkB,wBAAiC,CAAA;AAEhE,wBAAgB,YAAY,IAAI,KAAK,GAAG,SAAS,CAEhD;AAID,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAE1C;AAED,wBAAgB,KAAK,IAAI,KAAK,CAM7B"}
@@ -0,0 +1,15 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ export const transactionStorage = new AsyncLocalStorage();
3
+ export function getCurrentTx() {
4
+ return transactionStorage.getStore();
5
+ }
6
+ let _db;
7
+ export function registerDb(db) {
8
+ _db = db;
9
+ }
10
+ export function getDb() {
11
+ if (!_db)
12
+ throw new Error('[DatabaseModule] db not initialized — was DatabaseModule.register() called?');
13
+ return _db;
14
+ }
15
+ //# sourceMappingURL=transaction-context.drizzle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-context.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/transaction-context.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAOpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAS,CAAA;AAEhE,MAAM,UAAU,YAAY;IAC3B,OAAO,kBAAkB,CAAC,QAAQ,EAAE,CAAA;AACrC,CAAC;AAED,IAAI,GAAsB,CAAA;AAE1B,MAAM,UAAU,UAAU,CAAC,EAAS;IACnC,GAAG,GAAG,EAAE,CAAA;AACT,CAAC;AAED,MAAM,UAAU,KAAK;IACpB,IAAI,CAAC,GAAG;QACP,MAAM,IAAI,KAAK,CACd,6EAA6E,CAC7E,CAAA;IACF,OAAO,GAAG,CAAA;AACX,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ export const transactionStorage = new AsyncLocalStorage();
3
+ export function getCurrentTx() {
4
+ return transactionStorage.getStore();
5
+ }
6
+ let _db;
7
+ export function registerDb(db) {
8
+ _db = db;
9
+ }
10
+ export function getDb() {
11
+ if (!_db)
12
+ throw new Error('[DatabaseModule] db not initialized — was DatabaseModule.register() called?');
13
+ return _db;
14
+ }
15
+ //# sourceMappingURL=transaction-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-context.js","sourceRoot":"","sources":["../../src/drizzle/transaction-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAOpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAS,CAAA;AAEhE,MAAM,UAAU,YAAY;IAC1B,OAAO,kBAAkB,CAAC,QAAQ,EAAE,CAAA;AACtC,CAAC;AAED,IAAI,GAAsB,CAAA;AAE1B,MAAM,UAAU,UAAU,CAAC,EAAS;IAClC,GAAG,GAAG,EAAE,CAAA;AACV,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAA;IACxG,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type IsolationLevel = 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable' | 'deferred' | 'immediate' | 'exclusive';
2
+ export declare function Transactional(isolationLevel?: IsolationLevel): (_target: object, _propertyKey: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
3
+ //# sourceMappingURL=transactional.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional.decorator.d.ts","sourceRoot":"","sources":["../../src/drizzle/transactional.decorator.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,GACd,UAAU,GACV,WAAW,GACX,WAAW,CAAA;AAEf,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,cAAc,IAEzD,SAAS,MAAM,EACf,cAAc,MAAM,GAAG,MAAM,EAC7B,YAAY,kBAAkB,KAC7B,kBAAkB,CAkBtB"}
@@ -0,0 +1,15 @@
1
+ import { getCurrentTx, getDb, transactionStorage } from '../drizzle/transaction-context.js';
2
+ export function Transactional(isolationLevel) {
3
+ return function (_target, _propertyKey, descriptor) {
4
+ const original = descriptor.value;
5
+ descriptor.value = async function (...args) {
6
+ if (getCurrentTx() !== undefined) {
7
+ return original.apply(this, args);
8
+ }
9
+ const db = getDb();
10
+ return db.transaction((tx) => transactionStorage.run(tx, () => original.apply(this, args)), isolationLevel ? { isolationLevel } : undefined);
11
+ };
12
+ return descriptor;
13
+ };
14
+ }
15
+ //# sourceMappingURL=transactional.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional.decorator.js","sourceRoot":"","sources":["../../src/drizzle/transactional.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAW1F,MAAM,UAAU,aAAa,CAAC,cAA+B;IAC3D,OAAO,UACL,OAAe,EACf,YAA6B,EAC7B,UAA8B;QAE9B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAiD,CAAA;QAE7E,UAAU,CAAC,KAAK,GAAG,KAAK,WAA0B,GAAG,IAAe;YAClE,IAAI,YAAY,EAAE,KAAK,SAAS,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACnC,CAAC;YAED,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;YAElB,OAAO,EAAE,CAAC,WAAW,CACnB,CAAC,EAAW,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAC7E,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAChD,CAAA;QACH,CAAC,CAAA;QAED,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type IsolationLevel = 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable' | 'deferred' | 'immediate' | 'exclusive';
2
+ export declare function Transactional(isolationLevel?: IsolationLevel): (_target: object, _propertyKey: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
3
+ //# sourceMappingURL=transactional.drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/transactional.drizzle.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GACvB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,GACd,UAAU,GACV,WAAW,GACX,WAAW,CAAA;AAEd,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,cAAc,IAE3D,SAAS,MAAM,EACf,cAAc,MAAM,GAAG,MAAM,EAC7B,YAAY,kBAAkB,KAC5B,kBAAkB,CAmBrB"}
@@ -0,0 +1,15 @@
1
+ import { getCurrentTx, getDb, transactionStorage, } from '../drizzle/transaction-context.drizzle.js';
2
+ export function Transactional(isolationLevel) {
3
+ return function (_target, _propertyKey, descriptor) {
4
+ const original = descriptor.value;
5
+ descriptor.value = async function (...args) {
6
+ if (getCurrentTx() !== undefined) {
7
+ return original.apply(this, args);
8
+ }
9
+ const db = getDb();
10
+ return db.transaction((tx) => transactionStorage.run(tx, () => original.apply(this, args)), isolationLevel ? { isolationLevel } : undefined);
11
+ };
12
+ return descriptor;
13
+ };
14
+ }
15
+ //# sourceMappingURL=transactional.drizzle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/transactional.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,KAAK,EACL,kBAAkB,GAClB,MAAM,0CAA0C,CAAA;AAWjD,MAAM,UAAU,aAAa,CAAC,cAA+B;IAC5D,OAAO,UACN,OAAe,EACf,YAA6B,EAC7B,UAA8B;QAE9B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAiD,CAAA;QAE7E,UAAU,CAAC,KAAK,GAAG,KAAK,WAA0B,GAAG,IAAe;YACnE,IAAI,YAAY,EAAE,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAClC,CAAC;YAED,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;YAElB,OAAO,EAAE,CAAC,WAAW,CACpB,CAAC,EAAW,EAAE,EAAE,CACf,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAC7D,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAC/C,CAAA;QACF,CAAC,CAAA;QAED,OAAO,UAAU,CAAA;IAClB,CAAC,CAAA;AACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './database.constants.js';
2
+ export * from './database.module.js';
3
+ export * from './database.service.js';
4
+ export * from './database.types.js';
5
+ export type { ColumnMap, SchemaBuilder, SchemaResolverResult, } from './drizzle/schema-builder.types.drizzle.js';
6
+ export type { IsolationLevel } from './drizzle/transactional.drizzle.js';
7
+ export { Transactional } from './drizzle/transactional.drizzle.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AAEnC,YAAY,EACX,SAAS,EACT,aAAa,EACb,oBAAoB,GACpB,MAAM,2CAA2C,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from './database.constants.js';
2
+ export * from './database.module.js';
3
+ export * from './database.service.js';
4
+ export * from './database.types.js';
5
+ export { Transactional } from './drizzle/transactional.drizzle.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AAQnC,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from '../prisma/prisma.client.js';
2
+ export * from '../prisma/transactional.decorator.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prisma/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,qCAAqC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from '../prisma/prisma.client.js';
2
+ export * from '../prisma/transactional.decorator.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prisma/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,qCAAqC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function createPrismaClient(databaseUrl: string): any;
2
+ //# sourceMappingURL=prisma.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.client.d.ts","sourceRoot":"","sources":["../../src/prisma/prisma.client.ts"],"names":[],"mappings":"AAUA,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,OAcrD"}
@@ -0,0 +1,13 @@
1
+ import { patchPrismaTx } from '@myfunc/prisma-transactional';
2
+ import { PrismaPg } from '@prisma/adapter-pg';
3
+ export function createPrismaClient(databaseUrl) {
4
+ const { PrismaClient } = require('@prisma/client');
5
+ const adapter = new PrismaPg({
6
+ connectionString: databaseUrl,
7
+ });
8
+ const client = new PrismaClient({
9
+ adapter,
10
+ });
11
+ return patchPrismaTx(client);
12
+ }
13
+ //# sourceMappingURL=prisma.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.client.js","sourceRoot":"","sources":["../../src/prisma/prisma.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAS7C,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IAGpD,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC;QAC3B,gBAAgB,EAAE,WAAW;KAC9B,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,OAAO;KACR,CAAC,CAAA;IAEF,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const Transactional: (isolationLevel?: string) => MethodDecorator;
2
+ //# sourceMappingURL=transactional.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional.decorator.d.ts","sourceRoot":"","sources":["../../src/prisma/transactional.decorator.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,aAAa,GAAI,iBAAiB,MAAM,oBAChB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { PrismaTransactional } from '@myfunc/prisma-transactional';
2
+ export const Transactional = (isolationLevel) => PrismaTransactional(isolationLevel);
3
+ //# sourceMappingURL=transactional.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional.decorator.js","sourceRoot":"","sources":["../../src/prisma/transactional.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAoBlE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,cAAuB,EAAE,EAAE,CACvD,mBAAmB,CAAC,cAAc,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { DatabaseAdapter } from './database.types.js';
2
+ import type { SchemaBuilder, SchemaResolverResult } from './schema-builder.types.js';
3
+ export declare function createSchemaBuilder(): SchemaBuilder;
4
+ type AnyTable = any;
5
+ export declare function materializeSchema(adapter: DatabaseAdapter, resolverResult: SchemaResolverResult): Record<string, AnyTable>;
6
+ export {};
7
+ //# sourceMappingURL=schema-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.d.ts","sourceRoot":"","sources":["../src/schema-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAEX,aAAa,EACb,oBAAoB,EACpB,MAAM,2BAA2B,CAAA;AAElC,wBAAgB,mBAAmB,IAAI,aAAa,CAUnD;AAGD,KAAK,QAAQ,GAAG,GAAG,CAAA;AA2BnB,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,eAAe,EACxB,cAAc,EAAE,oBAAoB,GAClC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAO1B"}
@@ -0,0 +1,32 @@
1
+ export function createSchemaBuilder() {
2
+ return {
3
+ table(columns) {
4
+ return {
5
+ __columns: columns,
6
+ };
7
+ },
8
+ };
9
+ }
10
+ function createTable(adapter, tableName, columns) {
11
+ switch (adapter) {
12
+ case 'postgresql': {
13
+ const { pgTable } = require('drizzle-orm/pg-core');
14
+ return pgTable(tableName, columns);
15
+ }
16
+ case 'mysql': {
17
+ const { mysqlTable } = require('drizzle-orm/mysql-core');
18
+ return mysqlTable(tableName, columns);
19
+ }
20
+ case 'sqlite': {
21
+ const { sqliteTable } = require('drizzle-orm/sqlite-core');
22
+ return sqliteTable(tableName, columns);
23
+ }
24
+ }
25
+ }
26
+ export function materializeSchema(adapter, resolverResult) {
27
+ return Object.fromEntries(Object.entries(resolverResult).map(([tableName, columnMap]) => {
28
+ const columns = columnMap.__columns;
29
+ return [tableName, createTable(adapter, tableName, columns)];
30
+ }));
31
+ }
32
+ //# sourceMappingURL=schema-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.js","sourceRoot":"","sources":["../src/schema-builder.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,mBAAmB;IAClC,OAAO;QACN,KAAK,CACJ,OAAiB;YAEjB,OAAO;gBACN,SAAS,EAAE,OAAO;aAClB,CAAA;QACF,CAAC;KACD,CAAA;AACF,CAAC;AAKD,SAAS,WAAW,CACnB,OAAwB,EACxB,SAAiB,EAEjB,OAA4B;IAE5B,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,YAAY,CAAC,CAAC,CAAC;YAEnB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAQ,CAAA;YACzD,OAAO,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YAEd,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAQ,CAAA;YAC/D,OAAO,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACtC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YAEf,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAAQ,CAAA;YACjE,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,OAAwB,EACxB,cAAoC;IAEpC,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAA;QACnC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;IAC7D,CAAC,CAAC,CACF,CAAA;AACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type ColumnMap<TColumns extends Record<string, unknown>> = {
2
+ readonly __columns: TColumns;
3
+ };
4
+ export interface SchemaBuilder {
5
+ table<TColumns extends Record<string, unknown>>(columns: TColumns): ColumnMap<TColumns>;
6
+ }
7
+ export type SchemaResolverResult = Record<string, ColumnMap<Record<string, unknown>>>;
8
+ //# sourceMappingURL=schema-builder.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.types.d.ts","sourceRoot":"","sources":["../src/schema-builder.types.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACjE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;CAC5B,CAAA;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,OAAO,EAAE,QAAQ,GACf,SAAS,CAAC,QAAQ,CAAC,CAAA;CACtB;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACxC,MAAM,EACN,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAClC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema-builder.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.types.js","sourceRoot":"","sources":["../src/schema-builder.types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@turystack/nestjs-database",
3
+ "private": false,
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
24
+ "test": "vitest run",
25
+ "test:cov": "vitest run --coverage",
26
+ "lint": "biome lint ./src",
27
+ "format": "biome format --write ./src",
28
+ "check": "biome check --write ./src"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/turystack/nestjs-database.git"
33
+ },
34
+ "peerDependencies": {
35
+ "@nestjs/common": "^11.0.0",
36
+ "@nestjs/core": "^11.0.0",
37
+ "better-sqlite3": "^11.0.0",
38
+ "drizzle-orm": "^0.44.0",
39
+ "mysql2": "^3.0.0",
40
+ "pg": "^8.0.0",
41
+ "reflect-metadata": "^0.2.0"
42
+ },
43
+ "peerDependenciesMeta": {
44
+ "pg": {
45
+ "optional": true
46
+ },
47
+ "mysql2": {
48
+ "optional": true
49
+ },
50
+ "better-sqlite3": {
51
+ "optional": true
52
+ }
53
+ },
54
+ "devDependencies": {
55
+ "@biomejs/biome": "2.2.2",
56
+ "@nestjs/common": "^11.0.0",
57
+ "@nestjs/core": "^11.0.0",
58
+ "@types/better-sqlite3": "^7.0.0",
59
+ "@types/node": "^22.19.15",
60
+ "@types/pg": "^8.0.0",
61
+ "@vitest/coverage-v8": "^2.1.0",
62
+ "better-sqlite3": "^11.0.0",
63
+ "drizzle-orm": "^0.44.0",
64
+ "pg": "^8.0.0",
65
+ "reflect-metadata": "^0.2.2",
66
+ "tsc-alias": "^1.8.16",
67
+ "typescript": "^5.5.0",
68
+ "vitest": "^2.1.0"
69
+ }
70
+ }