@turystack/nestjs-database 0.0.10 → 1.0.0
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/README.md +39 -0
- package/dist/audit.context.d.ts +7 -0
- package/dist/audit.context.d.ts.map +1 -0
- package/dist/audit.context.js +23 -0
- package/dist/audit.context.js.map +1 -0
- package/dist/database.helpers.d.ts +5 -0
- package/dist/database.helpers.d.ts.map +1 -0
- package/dist/database.helpers.js +7 -0
- package/dist/database.helpers.js.map +1 -0
- package/dist/database.module.d.ts +3 -1
- package/dist/database.module.d.ts.map +1 -1
- package/dist/database.module.js +36 -8
- package/dist/database.module.js.map +1 -1
- package/dist/database.service.d.ts +1 -3
- package/dist/database.service.d.ts.map +1 -1
- package/dist/database.service.js +5 -4
- package/dist/database.service.js.map +1 -1
- package/dist/drizzle/client.d.ts +12 -0
- package/dist/drizzle/client.d.ts.map +1 -0
- package/dist/drizzle/client.drizzle.d.ts +1 -7
- package/dist/drizzle/client.drizzle.d.ts.map +1 -1
- package/dist/drizzle/client.drizzle.js +3 -14
- package/dist/drizzle/client.drizzle.js.map +1 -1
- package/dist/drizzle/client.js +34 -0
- package/dist/drizzle/client.js.map +1 -0
- package/dist/drizzle/index.d.ts +4 -0
- package/dist/drizzle/index.d.ts.map +1 -0
- package/dist/drizzle/index.js +4 -0
- package/dist/drizzle/index.js.map +1 -0
- package/dist/drizzle/schema-builder.drizzle.d.ts +1 -1
- package/dist/drizzle/schema-builder.drizzle.d.ts.map +1 -1
- package/dist/drizzle/schema-builder.drizzle.js +7 -2
- package/dist/drizzle/schema-builder.drizzle.js.map +1 -1
- package/dist/drizzle/schema-builder.types.drizzle.d.ts.map +1 -1
- package/dist/drizzle/transaction-context.d.ts +9 -0
- package/dist/drizzle/transaction-context.d.ts.map +1 -0
- package/dist/drizzle/transaction-context.drizzle.d.ts +8 -0
- package/dist/drizzle/transaction-context.drizzle.d.ts.map +1 -1
- package/dist/drizzle/transaction-context.drizzle.js +29 -0
- package/dist/drizzle/transaction-context.drizzle.js.map +1 -1
- package/dist/drizzle/transaction-context.js +15 -0
- package/dist/drizzle/transaction-context.js.map +1 -0
- package/dist/drizzle/transactional.decorator.d.ts +3 -0
- package/dist/drizzle/transactional.decorator.d.ts.map +1 -0
- package/dist/drizzle/transactional.decorator.js +15 -0
- package/dist/drizzle/transactional.decorator.js.map +1 -0
- package/dist/drizzle/transactional.drizzle.d.ts.map +1 -1
- package/dist/drizzle/transactional.drizzle.js +20 -2
- package/dist/drizzle/transactional.drizzle.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/prisma/index.d.ts +3 -0
- package/dist/prisma/index.d.ts.map +1 -0
- package/dist/prisma/index.js +3 -0
- package/dist/prisma/index.js.map +1 -0
- package/dist/prisma/prisma.client.d.ts +2 -0
- package/dist/prisma/prisma.client.d.ts.map +1 -0
- package/dist/prisma/prisma.client.js +13 -0
- package/dist/prisma/prisma.client.js.map +1 -0
- package/dist/prisma/transactional.decorator.d.ts +2 -0
- package/dist/prisma/transactional.decorator.d.ts.map +1 -0
- package/dist/prisma/transactional.decorator.js +3 -0
- package/dist/prisma/transactional.decorator.js.map +1 -0
- package/dist/repository/table-repository.d.ts +6 -0
- package/dist/repository/table-repository.d.ts.map +1 -1
- package/dist/repository/table-repository.errors.d.ts.map +1 -1
- package/dist/repository/table-repository.js +115 -39
- package/dist/repository/table-repository.js.map +1 -1
- package/dist/repository/table-repository.types.d.ts +3 -1
- package/dist/repository/table-repository.types.d.ts.map +1 -1
- package/dist/schema-builder.d.ts +7 -0
- package/dist/schema-builder.d.ts.map +1 -0
- package/dist/schema-builder.js +32 -0
- package/dist/schema-builder.js.map +1 -0
- package/dist/schema-builder.types.d.ts +8 -0
- package/dist/schema-builder.types.d.ts.map +1 -0
- package/dist/schema-builder.types.js +2 -0
- package/dist/schema-builder.types.js.map +1 -0
- package/dist/utils/uuid-v7.d.ts +2 -0
- package/dist/utils/uuid-v7.d.ts.map +1 -0
- package/dist/utils/uuid-v7.js +2 -0
- package/dist/utils/uuid-v7.js.map +1 -0
- package/package.json +22 -8
package/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# @turystack/nestjs-database
|
|
2
|
+
|
|
3
|
+
Typed database module for NestJS: schema builder, per-table repositories, and transactional decorator. PostgreSQL (Drizzle) built-in.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @turystack/nestjs-database
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### Peer dependencies
|
|
12
|
+
|
|
13
|
+
The host application provides these:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pnpm add @nestjs/common @nestjs/core @turystack/exceptions @turystack/nestjs-config drizzle-orm reflect-metadata uuidv7
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Optional — install only the ones whose feature you use:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm add pg
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Documentation
|
|
26
|
+
|
|
27
|
+
Options, API reference and examples:
|
|
28
|
+
|
|
29
|
+
**https://tury.dev/libs/nestjs-database**
|
|
30
|
+
|
|
31
|
+
## Development
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm install
|
|
35
|
+
pnpm typecheck
|
|
36
|
+
pnpm check
|
|
37
|
+
pnpm test
|
|
38
|
+
pnpm build
|
|
39
|
+
```
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type AuditActorReader = () => string | undefined;
|
|
2
|
+
export declare function registerAuditActor(next: AuditActorReader | undefined): void;
|
|
3
|
+
export declare function currentAuditActor(): string | undefined;
|
|
4
|
+
export declare const CREATED_BY_COLUMN = "createdBy";
|
|
5
|
+
export declare const UPDATED_BY_COLUMN = "updatedBy";
|
|
6
|
+
export declare function withAuditActor(data: Record<string, unknown>, columns: Record<string, unknown>, column: string): Record<string, unknown>;
|
|
7
|
+
//# sourceMappingURL=audit.context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.context.d.ts","sourceRoot":"","sources":["../src/audit.context.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,gBAAgB,GAAG,MAAM,MAAM,GAAG,SAAS,CAAA;AAYvD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAE3E;AAGD,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAGD,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAG5C,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAS5C,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
let reader;
|
|
2
|
+
export function registerAuditActor(next) {
|
|
3
|
+
reader = next;
|
|
4
|
+
}
|
|
5
|
+
export function currentAuditActor() {
|
|
6
|
+
return reader?.();
|
|
7
|
+
}
|
|
8
|
+
export const CREATED_BY_COLUMN = 'createdBy';
|
|
9
|
+
export const UPDATED_BY_COLUMN = 'updatedBy';
|
|
10
|
+
export function withAuditActor(data, columns, column) {
|
|
11
|
+
if (!columns[column] || data[column] !== undefined) {
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
14
|
+
const actor = currentAuditActor();
|
|
15
|
+
if (!actor) {
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
...data,
|
|
20
|
+
[column]: actor,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=audit.context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.context.js","sourceRoot":"","sources":["../src/audit.context.ts"],"names":[],"mappings":"AAGA,IAAI,MAAoC,CAAA;AAUxC,MAAM,UAAU,kBAAkB,CAAC,IAAkC;IACpE,MAAM,GAAG,IAAI,CAAA;AACd,CAAC;AAGD,MAAM,UAAU,iBAAiB;IAChC,OAAO,MAAM,EAAE,EAAE,CAAA;AAClB,CAAC;AAGD,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAG5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAS5C,MAAM,UAAU,cAAc,CAC7B,IAA6B,EAC7B,OAAgC,EAChC,MAAc;IAEd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAA;IAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,OAAO;QACN,GAAG,IAAI;QACP,CAAC,MAAM,CAAC,EAAE,KAAK;KACf,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MaterializeSchema } from './drizzle/schema-builder.drizzle.js';
|
|
2
|
+
import type { PgSchemaBuilder, RelationsHelpers, RelationsResolverResult, SchemaResolverResult } from './drizzle/schema-builder.types.drizzle.js';
|
|
3
|
+
export declare function defineDatabaseSchema<TResult extends SchemaResolverResult>(resolver: (schema: PgSchemaBuilder) => TResult): (schema: PgSchemaBuilder) => TResult;
|
|
4
|
+
export declare function defineDatabaseRelations<TSchemaResolver extends (schema: PgSchemaBuilder) => SchemaResolverResult, TRelations extends RelationsResolverResult>(_schemaResolver: TSchemaResolver, resolver: (tables: MaterializeSchema<ReturnType<TSchemaResolver>>, helpers: RelationsHelpers) => TRelations): (tables: MaterializeSchema<ReturnType<TSchemaResolver>>, helpers: RelationsHelpers) => TRelations;
|
|
5
|
+
//# sourceMappingURL=database.helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.helpers.d.ts","sourceRoot":"","sources":["../src/database.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,KAAK,EACX,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,2CAA2C,CAAA;AAkBlD,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,oBAAoB,EACxE,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,GAC5C,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAEtC;AAkBD,wBAAgB,uBAAuB,CACtC,eAAe,SAAS,CAAC,MAAM,EAAE,eAAe,KAAK,oBAAoB,EACzE,UAAU,SAAS,uBAAuB,EAE1C,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,CACT,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EACtD,OAAO,EAAE,gBAAgB,KACrB,UAAU,GACb,CACF,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EACtD,OAAO,EAAE,gBAAgB,KACrB,UAAU,CAEd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.helpers.js","sourceRoot":"","sources":["../src/database.helpers.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,oBAAoB,CACnC,QAA8C;IAE9C,OAAO,QAAQ,CAAA;AAChB,CAAC;AAkBD,MAAM,UAAU,uBAAuB,CAItC,eAAgC,EAChC,QAGe;IAKf,OAAO,QAAQ,CAAA;AAChB,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@turystack/nestjs-config';
|
|
2
3
|
import type { DatabaseModuleOptions } from './database.types.js';
|
|
3
4
|
import type { RelationsResolverResult, SchemaResolverResult } from './drizzle/schema-builder.types.drizzle.js';
|
|
4
5
|
export declare class DatabaseModule {
|
|
5
|
-
static register<TResult extends SchemaResolverResult, TRelations extends RelationsResolverResult | undefined = undefined>(options: DatabaseModuleOptions<TResult, TRelations>): DynamicModule;
|
|
6
|
+
static register<TResult extends SchemaResolverResult, TRelations extends RelationsResolverResult | undefined = undefined>(options: DatabaseModuleOptions<TResult, TRelations> | ((config: ConfigService) => DatabaseModuleOptions<TResult, TRelations>)): DynamicModule;
|
|
7
|
+
private static _resolveOptions;
|
|
6
8
|
private static _resolveProviders;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=database.module.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAKxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAOhE,OAAO,KAAK,EACX,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,2CAA2C,CAAA;AAGlD,qBACa,cAAc;IAC1B,MAAM,CAAC,QAAQ,CACd,OAAO,SAAS,oBAAoB,EACpC,UAAU,SAAS,uBAAuB,GAAG,SAAS,GAAG,SAAS,EAElE,OAAO,EACJ,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,GAC1C,CAAC,CAAC,MAAM,EAAE,aAAa,KAAK,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,GACxE,aAAa,CAUf;IAED,OAAO,CAAC,MAAM,CAAC,eAAe;IAsB9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAuDhC"}
|
package/dist/database.module.js
CHANGED
|
@@ -6,6 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
var DatabaseModule_1;
|
|
8
8
|
import { Module } from '@nestjs/common';
|
|
9
|
+
import { ConfigService } from '@turystack/nestjs-config';
|
|
9
10
|
import { relations as drizzleRelations } from 'drizzle-orm';
|
|
10
11
|
import { DATABASE_SERVICE } from './database.constants.js';
|
|
11
12
|
import { DatabaseService } from './database.service.js';
|
|
@@ -15,25 +16,52 @@ import { registerDb } from './drizzle/transaction-context.drizzle.js';
|
|
|
15
16
|
let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
|
|
16
17
|
static register(options) {
|
|
17
18
|
return {
|
|
18
|
-
exports: [
|
|
19
|
+
exports: [
|
|
20
|
+
DatabaseService,
|
|
21
|
+
DATABASE_SERVICE,
|
|
22
|
+
],
|
|
23
|
+
global: true,
|
|
19
24
|
module: DatabaseModule_1,
|
|
20
25
|
providers: DatabaseModule_1._resolveProviders(options),
|
|
21
26
|
};
|
|
22
27
|
}
|
|
23
|
-
static
|
|
28
|
+
static _resolveOptions(options, config) {
|
|
29
|
+
if (typeof options !== 'function') {
|
|
30
|
+
return options;
|
|
31
|
+
}
|
|
32
|
+
if (!config) {
|
|
33
|
+
throw new Error('[DatabaseModule] register((config) => ...) requires ConfigModule (@turystack/nestjs-config) to be registered');
|
|
34
|
+
}
|
|
35
|
+
return options(config);
|
|
36
|
+
}
|
|
37
|
+
static _resolveProviders(optionsOrFactory) {
|
|
24
38
|
return [
|
|
25
39
|
{
|
|
40
|
+
inject: [
|
|
41
|
+
{
|
|
42
|
+
optional: true,
|
|
43
|
+
token: ConfigService,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
26
46
|
provide: DatabaseService,
|
|
27
|
-
useFactory: async () => {
|
|
47
|
+
useFactory: async (config) => {
|
|
48
|
+
const options = DatabaseModule_1._resolveOptions(optionsOrFactory, config);
|
|
28
49
|
const tables = materializeSchema(options.schemaResolver(createSchemaBuilder()));
|
|
29
|
-
let fullSchema = {
|
|
50
|
+
let fullSchema = {
|
|
51
|
+
...tables,
|
|
52
|
+
};
|
|
30
53
|
if (options.relationsResolver) {
|
|
31
|
-
const relationsResult = options.relationsResolver(tables, {
|
|
32
|
-
|
|
54
|
+
const relationsResult = options.relationsResolver(tables, {
|
|
55
|
+
relations: drizzleRelations,
|
|
56
|
+
});
|
|
57
|
+
fullSchema = {
|
|
58
|
+
...tables,
|
|
59
|
+
...relationsResult,
|
|
60
|
+
};
|
|
33
61
|
}
|
|
34
|
-
const
|
|
62
|
+
const db = await createDrizzleClient(options, fullSchema);
|
|
35
63
|
registerDb(db);
|
|
36
|
-
return new DatabaseService(db, tables
|
|
64
|
+
return new DatabaseService(db, tables);
|
|
37
65
|
},
|
|
38
66
|
},
|
|
39
67
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.module.js","sourceRoot":"","sources":["../src/database.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAsB,MAAM,EAAiB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"database.module.js","sourceRoot":"","sources":["../src/database.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAsB,MAAM,EAAiB,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE3D,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;AAK5C,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAA;AAG9D,IAAM,cAAc,sBAApB,MAAM,cAAc;IACnB,AAAP,MAAM,CAAC,QAAQ,CAId,OAE0E;QAE1E,OAAO;YACN,OAAO,EAAE;gBACR,eAAe;gBACf,gBAAgB;aAChB;YACD,MAAM,EAAE,IAAI;YACZ,MAAM,kBAAgB;YACtB,SAAS,EAAE,iBAAe,iBAAiB,CAAC,OAAO,CAAC;SACpD,CAAA;IACF,CAAC;IAEO,MAAM,CAAC,eAAe,CAI7B,OAE0E,EAC1E,MAAsB;QAEtB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YACnC,OAAO,OAAO,CAAA;QACf,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACd,8GAA8G,CAC9G,CAAA;QACF,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC;IAEc,AAAP,MAAM,CAAC,iBAAiB,CAI/B,gBAE0E;QAE1E,OAAO;YACN;gBACC,MAAM,EAAE;oBACP;wBACC,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,aAAa;qBACpB;iBACD;gBACD,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,KAAK,EAAE,MAAsB,EAAE,EAAE;oBAC5C,MAAM,OAAO,GAAG,iBAAe,eAAe,CAC7C,gBAAgB,EAChB,MAAM,CACN,CAAA;oBACD,MAAM,MAAM,GAAG,iBAAiB,CAC/B,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,CAC7C,CAAA;oBAED,IAAI,UAAU,GAA4B;wBACzC,GAAG,MAAM;qBACT,CAAA;oBAED,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;wBAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAe,EAAE;4BAClE,SAAS,EAAE,gBAAgB;yBAC3B,CAAC,CAAA;wBACF,UAAU,GAAG;4BACZ,GAAG,MAAM;4BACT,GAAG,eAAe;yBAClB,CAAA;oBACF,CAAC;oBAED,MAAM,EAAE,GAAG,MAAM,mBAAmB,CACnC,OAAgC,EAChC,UAAU,CACV,CAAA;oBACD,UAAU,CAAC,EAAE,CAAC,CAAA;oBAEd,OAAO,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;gBACvC,CAAC;aACD;YACD;gBACC,OAAO,EAAE,gBAAgB;gBACzB,WAAW,EAAE,eAAe;aAC5B;SACD,CAAA;IACF,CAAC;CACD,CAAA;AAjGY,cAAc;IAD1B,MAAM,CAAC,EAAE,CAAC;GACE,cAAc,CAiG1B"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { Table } from 'drizzle-orm';
|
|
2
2
|
import type { ResolvedDatabase, ResolvedRepositories } from './database.types.js';
|
|
3
|
-
import type { AdapterStrategy } from './drizzle/client.drizzle.js';
|
|
4
3
|
export declare class DatabaseService {
|
|
5
4
|
private readonly _db;
|
|
6
|
-
|
|
7
|
-
constructor(db: unknown, schema: Record<string, Table>, strategy: AdapterStrategy);
|
|
5
|
+
constructor(db: unknown, schema: Record<string, Table>);
|
|
8
6
|
get raw(): ResolvedDatabase;
|
|
9
7
|
}
|
|
10
8
|
export interface DatabaseService extends ResolvedRepositories {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.service.d.ts","sourceRoot":"","sources":["../src/database.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.service.d.ts","sourceRoot":"","sources":["../src/database.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,KAAK,EACX,gBAAgB,EAChB,oBAAoB,EACpB,MAAM,qBAAqB,CAAA;AAK5B,qBAEa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAerD;IAED,IAAI,GAAG,IAAI,gBAAgB,CAE1B;CACD;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;CAAG"}
|
package/dist/database.service.js
CHANGED
|
@@ -12,11 +12,12 @@ import { getCurrentTx } from './drizzle/transaction-context.drizzle.js';
|
|
|
12
12
|
import { TableRepository } from './repository/table-repository.js';
|
|
13
13
|
let DatabaseService = class DatabaseService {
|
|
14
14
|
_db;
|
|
15
|
-
|
|
16
|
-
constructor(db, schema, strategy) {
|
|
15
|
+
constructor(db, schema) {
|
|
17
16
|
this._db = db;
|
|
18
|
-
this._strategy = strategy;
|
|
19
17
|
for (const [tableName, table] of Object.entries(schema)) {
|
|
18
|
+
if (tableName in this) {
|
|
19
|
+
throw new Error(`[DatabaseModule] table name "${tableName}" is reserved by DatabaseService`);
|
|
20
|
+
}
|
|
20
21
|
;
|
|
21
22
|
this[tableName] = new TableRepository(() => this.raw, tableName, table);
|
|
22
23
|
}
|
|
@@ -27,7 +28,7 @@ let DatabaseService = class DatabaseService {
|
|
|
27
28
|
};
|
|
28
29
|
DatabaseService = __decorate([
|
|
29
30
|
Injectable(),
|
|
30
|
-
__metadata("design:paramtypes", [Object, Object
|
|
31
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
31
32
|
], DatabaseService);
|
|
32
33
|
export { DatabaseService };
|
|
33
34
|
//# sourceMappingURL=database.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.service.js","sourceRoot":"","sources":["../src/database.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"database.service.js","sourceRoot":"","sources":["../src/database.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAQ3C,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAI3D,IAAM,eAAe,GAArB,MAAM,eAAe;IACV,GAAG,CAAS;IAE7B,YAAY,EAAW,EAAE,MAA6B;QACrD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QAEb,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACd,gCAAgC,SAAS,kCAAkC,CAC3E,CAAA;YACF,CAAC;YACD,CAAC;YAAC,IAAgC,CAAC,SAAS,CAAC,GAAG,IAAI,eAAe,CAClE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EACd,SAAS,EACT,KAAK,CACL,CAAA;QACF,CAAC;IACF,CAAC;IAED,IAAI,GAAG;QACN,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,GAAG,CAAqB,CAAA;IACxD,CAAC;CACD,CAAA;AAvBY,eAAe;IAF3B,UAAU,EAAE;;GAEA,eAAe,CAuB3B"}
|
|
@@ -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"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
1
|
import type { DatabaseModuleOptions } from '../database.types.js';
|
|
2
|
-
export
|
|
3
|
-
runTransaction(db: unknown, fn: (tx: unknown) => Promise<unknown>, isolationLevel?: string): Promise<unknown>;
|
|
4
|
-
}
|
|
5
|
-
export declare function createDrizzleClient(options: DatabaseModuleOptions, schema: Record<string, unknown>): Promise<{
|
|
6
|
-
db: unknown;
|
|
7
|
-
strategy: AdapterStrategy;
|
|
8
|
-
}>;
|
|
2
|
+
export declare function createDrizzleClient(options: DatabaseModuleOptions, schema: Record<string, unknown>): Promise<unknown>;
|
|
9
3
|
//# sourceMappingURL=client.drizzle.d.ts.map
|
|
@@ -1 +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;AAEhE,
|
|
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;AAEhE,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CAKlB"}
|
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
class PostgresqlStrategy {
|
|
2
|
-
async runTransaction(db, fn, isolationLevel) {
|
|
3
|
-
const pgDb = db;
|
|
4
|
-
return pgDb.transaction(fn, isolationLevel
|
|
5
|
-
? {
|
|
6
|
-
isolationLevel,
|
|
7
|
-
}
|
|
8
|
-
: undefined);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
1
|
export async function createDrizzleClient(options, schema) {
|
|
12
2
|
const { drizzle } = await import('drizzle-orm/node-postgres');
|
|
13
|
-
return {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
3
|
+
return drizzle(options.postgresql.url, {
|
|
4
|
+
schema,
|
|
5
|
+
});
|
|
17
6
|
}
|
|
18
7
|
//# sourceMappingURL=client.drizzle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/client.drizzle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/client.drizzle.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,OAA8B,EAC9B,MAA+B;IAE/B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;IAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE;QACtC,MAAM;KACN,CAAC,CAAA;AACH,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 @@
|
|
|
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 @@
|
|
|
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"}
|
|
@@ -12,6 +12,6 @@ type MaterializePg<TResult extends SchemaResolverResult> = {
|
|
|
12
12
|
};
|
|
13
13
|
export type MaterializeSchema<TResult extends SchemaResolverResult> = MaterializePg<TResult>;
|
|
14
14
|
export declare function materializeSchema<TResult extends SchemaResolverResult>(resolverResult: TResult): MaterializePg<TResult>;
|
|
15
|
-
export type MaterializeSchemaWithRelations<TTableResult extends SchemaResolverResult, TRelationsResult extends RelationsResolverResult | undefined> =
|
|
15
|
+
export type MaterializeSchemaWithRelations<TTableResult extends SchemaResolverResult, TRelationsResult extends RelationsResolverResult | undefined> = TRelationsResult extends RelationsResolverResult ? MaterializeSchema<TTableResult> & TRelationsResult : MaterializeSchema<TTableResult>;
|
|
16
16
|
export {};
|
|
17
17
|
//# sourceMappingURL=schema-builder.drizzle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-builder.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema-builder.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAA;AACzE,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,2CAA2C,CAAA;
|
|
1
|
+
{"version":3,"file":"schema-builder.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema-builder.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAA;AACzE,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,2CAA2C,CAAA;AAYlD,wBAAgB,mBAAmB,IAAI,eAAe,CAMrD;AAYD,KAAK,aAAa,CAAC,OAAO,SAAS,oBAAoB,IAAI;KACzD,CAAC,IAAI,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,GACjE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC5C,kBAAkB,CAAC;QACnB,IAAI,EAAE,CAAC,CAAA;QACP,MAAM,EAAE,SAAS,CAAA;QACjB,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACjC,OAAO,EAAE,IAAI,CAAA;KACb,CAAC,GACD,KAAK,GACN,KAAK;CACR,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,oBAAoB,IACjE,aAAa,CAAC,OAAO,CAAC,CAAA;AAEvB,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,oBAAoB,EACrE,cAAc,EAAE,OAAO,GACrB,aAAa,CAAC,OAAO,CAAC,CAAA;AAYzB,MAAM,MAAM,8BAA8B,CACzC,YAAY,SAAS,oBAAoB,EACzC,gBAAgB,SAAS,uBAAuB,GAAG,SAAS,IACzD,gBAAgB,SAAS,uBAAuB,GACjD,iBAAiB,CAAC,YAAY,CAAC,GAAG,gBAAgB,GAClD,iBAAiB,CAAC,YAAY,CAAC,CAAA"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import * as pgCore from 'drizzle-orm/pg-core';
|
|
2
2
|
const tableBuilder = {
|
|
3
3
|
table(columns) {
|
|
4
|
-
return {
|
|
4
|
+
return {
|
|
5
|
+
__columns: columns,
|
|
6
|
+
};
|
|
5
7
|
},
|
|
6
8
|
};
|
|
7
9
|
export function createSchemaBuilder() {
|
|
8
10
|
const { pgTable: _pgTable, ...pgColumns } = pgCore;
|
|
9
|
-
return {
|
|
11
|
+
return {
|
|
12
|
+
...tableBuilder,
|
|
13
|
+
...pgColumns,
|
|
14
|
+
};
|
|
10
15
|
}
|
|
11
16
|
function createTable(tableName, columns) {
|
|
12
17
|
return pgCore.pgTable(tableName, columns);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-builder.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/schema-builder.drizzle.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAS7C,MAAM,YAAY,GAAG;IACpB,KAAK,CACJ,OAAiB;QAEjB,OAAO,
|
|
1
|
+
{"version":3,"file":"schema-builder.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/schema-builder.drizzle.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAS7C,MAAM,YAAY,GAAG;IACpB,KAAK,CACJ,OAAiB;QAEjB,OAAO;YACN,SAAS,EAAE,OAAO;SAClB,CAAA;IACF,CAAC;CACD,CAAA;AAED,MAAM,UAAU,mBAAmB;IAClC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAA;IAClD,OAAO;QACN,GAAG,YAAY;QACf,GAAG,SAAS;KACO,CAAA;AACrB,CAAC;AAED,SAAS,WAAW,CACnB,SAAiB,EACjB,OAAgC;IAEhC,OAAO,MAAM,CAAC,OAAO,CACpB,SAAS,EACT,OAAqD,CACrD,CAAA;AACF,CAAC;AAqBD,MAAM,UAAU,iBAAiB,CAChC,cAAoC;IAEpC,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;QAC9D,SAAS;QACT,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;KAC3C,CAAC,CACF,CAAA;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-builder.types.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema-builder.types.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"schema-builder.types.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema-builder.types.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAOlD,MAAM,MAAM,SAAS,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI;IAC3E,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;CAC5B,CAAA;AAED,UAAU,kBAAkB;IAC3B,KAAK,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACvD,OAAO,EAAE,QAAQ,GACf,SAAS,CAAC,QAAQ,CAAC,CAAA;CACtB;AAGD,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAC/C,IAAI,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAA;AAE/B,MAAM,MAAM,aAAa,GAAG,eAAe,CAAA;AAE3C,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACxC,MAAM,EACN,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAC5C,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAC3C,MAAM,EACN,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC3C,CAAA;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,OAAO,SAAS,CAAA;CAC3B"}
|
|
@@ -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"}
|
|
@@ -2,6 +2,14 @@ import { AsyncLocalStorage } from 'node:async_hooks';
|
|
|
2
2
|
import type { ResolvedDatabase } from '../database.types.js';
|
|
3
3
|
export declare const transactionStorage: AsyncLocalStorage<unknown>;
|
|
4
4
|
export declare function getCurrentTx(): ResolvedDatabase | undefined;
|
|
5
|
+
export type BeforeCommitHook = (tx: ResolvedDatabase) => Promise<void> | void;
|
|
6
|
+
export declare const beforeCommitStorage: AsyncLocalStorage<BeforeCommitHook[]>;
|
|
7
|
+
export declare function onBeforeCommit(hook: BeforeCommitHook): boolean;
|
|
8
|
+
export declare const transactionStateStorage: AsyncLocalStorage<Map<symbol, unknown>>;
|
|
9
|
+
export declare function transactionState<T>(key: symbol, create: () => T): T | undefined;
|
|
10
|
+
export type AfterCommitHook = () => Promise<void> | void;
|
|
11
|
+
export declare const afterCommitStorage: AsyncLocalStorage<AfterCommitHook[]>;
|
|
12
|
+
export declare function onAfterCommit(hook: AfterCommitHook): boolean;
|
|
5
13
|
export declare function registerDb(db: ResolvedDatabase): void;
|
|
6
14
|
export declare function getDb(): ResolvedDatabase;
|
|
7
15
|
//# sourceMappingURL=transaction-context.drizzle.d.ts.map
|
|
@@ -1 +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;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,eAAO,MAAM,kBAAkB,
|
|
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;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,eAAO,MAAM,kBAAkB,4BAA4C,CAAA;AAE3E,wBAAgB,YAAY,IAAI,gBAAgB,GAAG,SAAS,CAE3D;AAGD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAS7E,eAAO,MAAM,mBAAmB,uCAA8C,CAAA;AAa9E,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAU9D;AAGD,eAAO,MAAM,uBAAuB,yCAEjC,CAAA;AAYH,wBAAgB,gBAAgB,CAAC,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,GACb,CAAC,GAAG,SAAS,CAYf;AAGD,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAGxD,eAAO,MAAM,kBAAkB,sCAA6C,CAAA;AAY5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAU5D;AAID,wBAAgB,UAAU,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAErD;AAED,wBAAgB,KAAK,IAAI,gBAAgB,CAQxC"}
|
|
@@ -3,6 +3,35 @@ export const transactionStorage = new AsyncLocalStorage();
|
|
|
3
3
|
export function getCurrentTx() {
|
|
4
4
|
return transactionStorage.getStore();
|
|
5
5
|
}
|
|
6
|
+
export const beforeCommitStorage = new AsyncLocalStorage();
|
|
7
|
+
export function onBeforeCommit(hook) {
|
|
8
|
+
const hooks = beforeCommitStorage.getStore();
|
|
9
|
+
if (!hooks) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
hooks.push(hook);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
export const transactionStateStorage = new AsyncLocalStorage();
|
|
16
|
+
export function transactionState(key, create) {
|
|
17
|
+
const state = transactionStateStorage.getStore();
|
|
18
|
+
if (!state) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
if (!state.has(key)) {
|
|
22
|
+
state.set(key, create());
|
|
23
|
+
}
|
|
24
|
+
return state.get(key);
|
|
25
|
+
}
|
|
26
|
+
export const afterCommitStorage = new AsyncLocalStorage();
|
|
27
|
+
export function onAfterCommit(hook) {
|
|
28
|
+
const hooks = afterCommitStorage.getStore();
|
|
29
|
+
if (!hooks) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
hooks.push(hook);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
6
35
|
let _db;
|
|
7
36
|
export function registerDb(db) {
|
|
8
37
|
_db = db;
|
|
@@ -1 +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;AAIpD,MAAM,CAAC,MAAM,kBAAkB,
|
|
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;AAIpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAoB,CAAA;AAE3E,MAAM,UAAU,YAAY;IAC3B,OAAO,kBAAkB,CAAC,QAAQ,EAAE,CAAA;AACrC,CAAC;AAYD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,iBAAiB,EAAsB,CAAA;AAa9E,MAAM,UAAU,cAAc,CAAC,IAAsB;IACpD,MAAM,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,CAAA;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEhB,OAAO,IAAI,CAAA;AACZ,CAAC;AAGD,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,iBAAiB,EAEzD,CAAA;AAYH,MAAM,UAAU,gBAAgB,CAC/B,GAAW,EACX,MAAe;IAEf,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,EAAE,CAAA;IAEhD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAM,CAAA;AAC3B,CAAC;AAMD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAqB,CAAA;AAY5E,MAAM,UAAU,aAAa,CAAC,IAAqB;IAClD,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAA;IAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEhB,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,IAAI,GAAiC,CAAA;AAErC,MAAM,UAAU,UAAU,CAAC,EAAoB;IAC9C,GAAG,GAAG,EAAE,CAAA;AACT,CAAC;AAED,MAAM,UAAU,KAAK;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACd,6EAA6E,CAC7E,CAAA;IACF,CAAC;IAED,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactional.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/transactional.drizzle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transactional.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/transactional.drizzle.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,cAAc,GACvB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,CAAA;AAEjB,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,cAAc,aAElD,MAAM,gBACD,MAAM,GAAG,MAAM,cACjB,kBAAkB,KAC5B,kBAAkB,CAmErB"}
|