@turystack/nestjs-database 1.0.0 → 2.1.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 +35 -4
- package/dist/database.adapter.interface.d.ts +17 -0
- package/dist/database.adapter.interface.d.ts.map +1 -0
- package/dist/database.adapter.interface.js +2 -0
- package/dist/database.adapter.interface.js.map +1 -0
- package/dist/database.constants.d.ts +2 -0
- package/dist/database.constants.d.ts.map +1 -1
- package/dist/database.constants.js +2 -0
- package/dist/database.constants.js.map +1 -1
- package/dist/database.helpers.d.ts +2 -0
- package/dist/database.helpers.d.ts.map +1 -1
- package/dist/database.helpers.js +3 -0
- package/dist/database.helpers.js.map +1 -1
- package/dist/database.module.d.ts +1 -0
- package/dist/database.module.d.ts.map +1 -1
- package/dist/database.module.js +41 -23
- package/dist/database.module.js.map +1 -1
- package/dist/database.service.d.ts +2 -2
- package/dist/database.service.d.ts.map +1 -1
- package/dist/database.service.js +8 -5
- package/dist/database.service.js.map +1 -1
- package/dist/database.types.d.ts +28 -1
- package/dist/database.types.d.ts.map +1 -1
- package/dist/drizzle/client.drizzle.d.ts +2 -2
- package/dist/drizzle/client.drizzle.d.ts.map +1 -1
- package/dist/drizzle/client.drizzle.js +1 -1
- package/dist/drizzle/client.drizzle.js.map +1 -1
- package/dist/drizzle/postgresql.adapter.d.ts +4 -0
- package/dist/drizzle/postgresql.adapter.d.ts.map +1 -0
- package/dist/drizzle/postgresql.adapter.js +42 -0
- package/dist/drizzle/postgresql.adapter.js.map +1 -0
- package/dist/dynamodb/client.dynamodb.d.ts +22 -0
- package/dist/dynamodb/client.dynamodb.d.ts.map +1 -0
- package/dist/dynamodb/client.dynamodb.js +39 -0
- package/dist/dynamodb/client.dynamodb.js.map +1 -0
- package/dist/dynamodb/dynamodb.adapter.d.ts +4 -0
- package/dist/dynamodb/dynamodb.adapter.d.ts.map +1 -0
- package/dist/dynamodb/dynamodb.adapter.js +20 -0
- package/dist/dynamodb/dynamodb.adapter.js.map +1 -0
- package/dist/dynamodb/dynamodb.repository.d.ts +37 -0
- package/dist/dynamodb/dynamodb.repository.d.ts.map +1 -0
- package/dist/dynamodb/dynamodb.repository.js +266 -0
- package/dist/dynamodb/dynamodb.repository.js.map +1 -0
- package/dist/dynamodb/dynamodb.repository.types.d.ts +55 -0
- package/dist/dynamodb/dynamodb.repository.types.d.ts.map +1 -0
- package/dist/dynamodb/dynamodb.repository.types.js +2 -0
- package/dist/dynamodb/dynamodb.repository.types.js.map +1 -0
- package/dist/dynamodb/dynamodb.transaction.d.ts +7 -0
- package/dist/dynamodb/dynamodb.transaction.d.ts.map +1 -0
- package/dist/dynamodb/dynamodb.transaction.js +28 -0
- package/dist/dynamodb/dynamodb.transaction.js.map +1 -0
- package/dist/dynamodb/schema-builder.dynamodb.d.ts +4 -0
- package/dist/dynamodb/schema-builder.dynamodb.d.ts.map +1 -0
- package/dist/dynamodb/schema-builder.dynamodb.js +58 -0
- package/dist/dynamodb/schema-builder.dynamodb.js.map +1 -0
- package/dist/dynamodb/schema-builder.types.dynamodb.d.ts +63 -0
- package/dist/dynamodb/schema-builder.types.dynamodb.d.ts.map +1 -0
- package/dist/dynamodb/schema-builder.types.dynamodb.js +2 -0
- package/dist/dynamodb/schema-builder.types.dynamodb.js.map +1 -0
- package/dist/dynamodb.d.ts +3 -0
- package/dist/dynamodb.d.ts.map +1 -0
- package/dist/dynamodb.js +3 -0
- package/dist/dynamodb.js.map +1 -0
- package/dist/index.d.ts +8 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/postgresql.d.ts +3 -0
- package/dist/postgresql.d.ts.map +1 -0
- package/dist/postgresql.js +3 -0
- package/dist/postgresql.js.map +1 -0
- package/dist/{drizzle/transaction-context.drizzle.d.ts → transaction.context.d.ts} +10 -3
- package/dist/transaction.context.d.ts.map +1 -0
- package/dist/{drizzle/transaction-context.drizzle.js → transaction.context.js} +11 -8
- package/dist/transaction.context.js.map +1 -0
- package/dist/{drizzle/transactional.drizzle.d.ts → transactional.d.ts} +3 -2
- package/dist/transactional.d.ts.map +1 -0
- package/dist/{drizzle/transactional.drizzle.js → transactional.js} +6 -5
- package/dist/transactional.js.map +1 -0
- package/package.json +31 -7
- package/dist/drizzle/client.d.ts +0 -12
- package/dist/drizzle/client.d.ts.map +0 -1
- package/dist/drizzle/client.js +0 -34
- package/dist/drizzle/client.js.map +0 -1
- package/dist/drizzle/index.d.ts +0 -4
- package/dist/drizzle/index.d.ts.map +0 -1
- package/dist/drizzle/index.js +0 -4
- package/dist/drizzle/index.js.map +0 -1
- package/dist/drizzle/transaction-context.d.ts +0 -9
- package/dist/drizzle/transaction-context.d.ts.map +0 -1
- package/dist/drizzle/transaction-context.drizzle.d.ts.map +0 -1
- package/dist/drizzle/transaction-context.drizzle.js.map +0 -1
- package/dist/drizzle/transaction-context.js +0 -15
- package/dist/drizzle/transaction-context.js.map +0 -1
- package/dist/drizzle/transactional.decorator.d.ts +0 -3
- package/dist/drizzle/transactional.decorator.d.ts.map +0 -1
- package/dist/drizzle/transactional.decorator.js +0 -15
- package/dist/drizzle/transactional.decorator.js.map +0 -1
- package/dist/drizzle/transactional.drizzle.d.ts.map +0 -1
- package/dist/drizzle/transactional.drizzle.js.map +0 -1
- package/dist/prisma/index.d.ts +0 -3
- package/dist/prisma/index.d.ts.map +0 -1
- package/dist/prisma/index.js +0 -3
- package/dist/prisma/index.js.map +0 -1
- package/dist/prisma/prisma.client.d.ts +0 -2
- package/dist/prisma/prisma.client.d.ts.map +0 -1
- package/dist/prisma/prisma.client.js +0 -13
- package/dist/prisma/prisma.client.js.map +0 -1
- package/dist/prisma/transactional.decorator.d.ts +0 -2
- package/dist/prisma/transactional.decorator.d.ts.map +0 -1
- package/dist/prisma/transactional.decorator.js +0 -3
- package/dist/prisma/transactional.decorator.js.map +0 -1
- package/dist/schema-builder.d.ts +0 -7
- package/dist/schema-builder.d.ts.map +0 -1
- package/dist/schema-builder.js +0 -32
- package/dist/schema-builder.js.map +0 -1
- package/dist/schema-builder.types.d.ts +0 -8
- package/dist/schema-builder.types.d.ts.map +0 -1
- package/dist/schema-builder.types.js +0 -2
- package/dist/schema-builder.types.js.map +0 -1
- package/dist/utils/uuid-v7.d.ts +0 -2
- package/dist/utils/uuid-v7.d.ts.map +0 -1
- package/dist/utils/uuid-v7.js +0 -2
- package/dist/utils/uuid-v7.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @turystack/nestjs-database
|
|
2
2
|
|
|
3
|
-
Typed database module for NestJS: schema builder, per-table repositories, and transactional decorator. PostgreSQL (Drizzle)
|
|
3
|
+
Typed database module for NestJS: schema builder, per-table repositories, and transactional decorator. PostgreSQL (Drizzle) and DynamoDB adapters.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -13,15 +13,46 @@ pnpm add @turystack/nestjs-database
|
|
|
13
13
|
The host application provides these:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
pnpm add @nestjs/common @nestjs/core @turystack/exceptions @turystack/nestjs-config
|
|
16
|
+
pnpm add @nestjs/common @nestjs/core @turystack/exceptions @turystack/nestjs-config reflect-metadata uuidv7
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Then the driver for the engine you chose, and only that one. Every driver is an
|
|
20
|
+
optional peer and is imported lazily, so the package's entry point loads with
|
|
21
|
+
neither installed:
|
|
20
22
|
|
|
21
23
|
```bash
|
|
22
|
-
|
|
24
|
+
# adapter: 'postgresql'
|
|
25
|
+
pnpm add drizzle-orm pg
|
|
26
|
+
|
|
27
|
+
# adapter: 'dynamodb'
|
|
28
|
+
pnpm add @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The PostgreSQL schema builder lives at `@turystack/nestjs-database/postgresql`
|
|
32
|
+
rather than the root, for the same reason: everything it exports imports
|
|
33
|
+
`drizzle-orm` at module scope, and re-exporting it from the barrel would make
|
|
34
|
+
Drizzle required for a DynamoDB app.
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import {
|
|
38
|
+
createSchemaBuilder,
|
|
39
|
+
materializeSchema,
|
|
40
|
+
} from '@turystack/nestjs-database/postgresql'
|
|
23
41
|
```
|
|
24
42
|
|
|
43
|
+
### Breaking: three exports moved
|
|
44
|
+
|
|
45
|
+
`createSchemaBuilder`, `materializeSchema` and `TableRepository` used to come
|
|
46
|
+
from the root and now come from `@turystack/nestjs-database/postgresql`. Nothing
|
|
47
|
+
else moved, and the fix is the import path.
|
|
48
|
+
|
|
49
|
+
They moved because each of them imports `drizzle-orm` at module scope, so while
|
|
50
|
+
they sat in the barrel the "optional" Drizzle peer was required for every
|
|
51
|
+
consumer — including an app that only ever registers `adapter: 'dynamodb'`.
|
|
52
|
+
|
|
53
|
+
This is an entry-point change; the package is still published as `1.0.0` and the
|
|
54
|
+
version bump is a release decision, not a code one.
|
|
55
|
+
|
|
25
56
|
## Documentation
|
|
26
57
|
|
|
27
58
|
Options, API reference and examples:
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TransactionOptions } from './database.types.js';
|
|
2
|
+
export interface ITransactionStrategy {
|
|
3
|
+
run<TResult>(client: unknown, work: (handle: unknown) => Promise<TResult>, options?: TransactionOptions): Promise<TResult>;
|
|
4
|
+
}
|
|
5
|
+
export interface IDatabaseAdapter {
|
|
6
|
+
initialize(): Promise<{
|
|
7
|
+
client: unknown;
|
|
8
|
+
tables: Record<string, unknown>;
|
|
9
|
+
}>;
|
|
10
|
+
createRepository(input: {
|
|
11
|
+
getClient: () => unknown;
|
|
12
|
+
table: unknown;
|
|
13
|
+
tableName: string;
|
|
14
|
+
}): object;
|
|
15
|
+
readonly transaction: ITransactionStrategy;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=database.adapter.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.adapter.interface.d.ts","sourceRoot":"","sources":["../src/database.adapter.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAU7D,MAAM,WAAW,oBAAoB;IASpC,GAAG,CAAC,OAAO,EACV,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,EAC3C,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,OAAO,CAAC,CAAA;CACnB;AAWD,MAAM,WAAW,gBAAgB;IAShC,UAAU,IAAI,OAAO,CAAC;QACrB,MAAM,EAAE,OAAO,CAAA;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,CAAC,CAAA;IASF,gBAAgB,CAAC,KAAK,EAAE;QACvB,SAAS,EAAE,MAAM,OAAO,CAAA;QACxB,KAAK,EAAE,OAAO,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;KACjB,GAAG,MAAM,CAAA;IAGV,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAA;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.adapter.interface.js","sourceRoot":"","sources":["../src/database.adapter.interface.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.constants.d.ts","sourceRoot":"","sources":["../src/database.constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,eAA6B,CAAA"}
|
|
1
|
+
{"version":3,"file":"database.constants.d.ts","sourceRoot":"","sources":["../src/database.constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,eAA6B,CAAA;AAG1D,eAAO,MAAM,gBAAgB,eAA6B,CAAA;AAG1D,eAAO,MAAM,uBAAuB,eAAoC,CAAA"}
|
|
@@ -1 +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"}
|
|
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;AAG1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAG1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { MaterializeSchema } from './drizzle/schema-builder.drizzle.js';
|
|
2
2
|
import type { PgSchemaBuilder, RelationsHelpers, RelationsResolverResult, SchemaResolverResult } from './drizzle/schema-builder.types.drizzle.js';
|
|
3
|
+
import type { DynamoSchemaBuilder, DynamoSchemaResolverResult } from './dynamodb/schema-builder.types.dynamodb.js';
|
|
3
4
|
export declare function defineDatabaseSchema<TResult extends SchemaResolverResult>(resolver: (schema: PgSchemaBuilder) => TResult): (schema: PgSchemaBuilder) => TResult;
|
|
4
5
|
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;
|
|
6
|
+
export declare function defineDynamoDatabaseSchema<TResult extends DynamoSchemaResolverResult>(resolver: (schema: DynamoSchemaBuilder) => TResult): (schema: DynamoSchemaBuilder) => TResult;
|
|
5
7
|
//# sourceMappingURL=database.helpers.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAClD,OAAO,KAAK,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,6CAA6C,CAAA;AAkBpD,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;AAsBD,wBAAgB,0BAA0B,CACzC,OAAO,SAAS,0BAA0B,EAE1C,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,GAChD,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,CAE1C"}
|
package/dist/database.helpers.js
CHANGED
|
@@ -4,4 +4,7 @@ export function defineDatabaseSchema(resolver) {
|
|
|
4
4
|
export function defineDatabaseRelations(_schemaResolver, resolver) {
|
|
5
5
|
return resolver;
|
|
6
6
|
}
|
|
7
|
+
export function defineDynamoDatabaseSchema(resolver) {
|
|
8
|
+
return resolver;
|
|
9
|
+
}
|
|
7
10
|
//# sourceMappingURL=database.helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.helpers.js","sourceRoot":"","sources":["../src/database.helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.helpers.js","sourceRoot":"","sources":["../src/database.helpers.ts"],"names":[],"mappings":"AA4BA,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;AAsBD,MAAM,UAAU,0BAA0B,CAGzC,QAAkD;IAElD,OAAO,QAAQ,CAAA;AAChB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import type { DatabaseModuleOptions } from './database.types.js';
|
|
|
4
4
|
import type { RelationsResolverResult, SchemaResolverResult } from './drizzle/schema-builder.types.drizzle.js';
|
|
5
5
|
export declare class DatabaseModule {
|
|
6
6
|
static register<TResult extends SchemaResolverResult, TRelations extends RelationsResolverResult | undefined = undefined>(options: DatabaseModuleOptions<TResult, TRelations> | ((config: ConfigService) => DatabaseModuleOptions<TResult, TRelations>)): DynamicModule;
|
|
7
|
+
private static _createAdapter;
|
|
7
8
|
private static _resolveOptions;
|
|
8
9
|
private static _resolveProviders;
|
|
9
10
|
}
|
|
@@ -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;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,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;AASxD,OAAO,KAAK,EAEX,qBAAqB,EACrB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EACX,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,2CAA2C,CAAA;AA2ClD,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,CAWf;mBAEoB,cAAc;IAoBnC,OAAO,CAAC,MAAM,CAAC,eAAe;IAsB9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAkDhC"}
|
package/dist/database.module.js
CHANGED
|
@@ -7,24 +7,39 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var DatabaseModule_1;
|
|
8
8
|
import { Module } from '@nestjs/common';
|
|
9
9
|
import { ConfigService } from '@turystack/nestjs-config';
|
|
10
|
-
import {
|
|
11
|
-
import { DATABASE_SERVICE } from './database.constants.js';
|
|
10
|
+
import { DATABASE_ADAPTER, DATABASE_MODULE_OPTIONS, DATABASE_SERVICE, } from './database.constants.js';
|
|
12
11
|
import { DatabaseService } from './database.service.js';
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
import { registerEngine } from './transaction.context.js';
|
|
13
|
+
const ADAPTERS = {
|
|
14
|
+
dynamodb: async (options) => {
|
|
15
|
+
const { createDynamodbAdapter } = await import('./dynamodb/dynamodb.adapter.js');
|
|
16
|
+
return createDynamodbAdapter(options);
|
|
17
|
+
},
|
|
18
|
+
postgresql: async (options) => {
|
|
19
|
+
const { createPostgresqlAdapter } = await import('./drizzle/postgresql.adapter.js');
|
|
20
|
+
return createPostgresqlAdapter(options);
|
|
21
|
+
},
|
|
22
|
+
};
|
|
16
23
|
let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
|
|
17
24
|
static register(options) {
|
|
18
25
|
return {
|
|
19
26
|
exports: [
|
|
20
27
|
DatabaseService,
|
|
21
28
|
DATABASE_SERVICE,
|
|
29
|
+
DATABASE_ADAPTER,
|
|
22
30
|
],
|
|
23
31
|
global: true,
|
|
24
32
|
module: DatabaseModule_1,
|
|
25
33
|
providers: DatabaseModule_1._resolveProviders(options),
|
|
26
34
|
};
|
|
27
35
|
}
|
|
36
|
+
static async _createAdapter(options) {
|
|
37
|
+
const factory = ADAPTERS[options.adapter];
|
|
38
|
+
if (!factory) {
|
|
39
|
+
throw new Error(`[DatabaseModule] unknown adapter "${options.adapter}" — known adapters: ${Object.keys(ADAPTERS).join(', ')}`);
|
|
40
|
+
}
|
|
41
|
+
return factory(options);
|
|
42
|
+
}
|
|
28
43
|
static _resolveOptions(options, config) {
|
|
29
44
|
if (typeof options !== 'function') {
|
|
30
45
|
return options;
|
|
@@ -43,25 +58,28 @@ let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
|
|
|
43
58
|
token: ConfigService,
|
|
44
59
|
},
|
|
45
60
|
],
|
|
61
|
+
provide: DATABASE_MODULE_OPTIONS,
|
|
62
|
+
useFactory: (config) => DatabaseModule_1._resolveOptions(optionsOrFactory, config),
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
inject: [
|
|
66
|
+
DATABASE_MODULE_OPTIONS,
|
|
67
|
+
],
|
|
68
|
+
provide: DATABASE_ADAPTER,
|
|
69
|
+
useFactory: (options) => DatabaseModule_1._createAdapter(options),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
inject: [
|
|
73
|
+
DATABASE_ADAPTER,
|
|
74
|
+
],
|
|
46
75
|
provide: DatabaseService,
|
|
47
|
-
useFactory: async (
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const relationsResult = options.relationsResolver(tables, {
|
|
55
|
-
relations: drizzleRelations,
|
|
56
|
-
});
|
|
57
|
-
fullSchema = {
|
|
58
|
-
...tables,
|
|
59
|
-
...relationsResult,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
const db = await createDrizzleClient(options, fullSchema);
|
|
63
|
-
registerDb(db);
|
|
64
|
-
return new DatabaseService(db, tables);
|
|
76
|
+
useFactory: async (adapter) => {
|
|
77
|
+
const { client, tables } = await adapter.initialize();
|
|
78
|
+
registerEngine({
|
|
79
|
+
adapter,
|
|
80
|
+
client,
|
|
81
|
+
});
|
|
82
|
+
return new DatabaseService(adapter, client, tables);
|
|
65
83
|
},
|
|
66
84
|
},
|
|
67
85
|
{
|
|
@@ -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;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,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;AAGxD,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,GAChB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAKvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AA+BzD,MAAM,QAAQ,GAAqB;IAClC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC3B,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAC7C,gCAAgC,CAChC,CAAA;QAED,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IACD,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAC/C,iCAAiC,CACjC,CAAA;QAED,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;CACD,CAAA;AAGM,IAAM,cAAc,sBAApB,MAAM,cAAc;IACnB,AAAP,MAAM,CAAC,QAAQ,CAId,OAE0E;QAE1E,OAAO;YACN,OAAO,EAAE;gBACR,eAAe;gBACf,gBAAgB;gBAChB,gBAAgB;aAChB;YACD,MAAM,EAAE,IAAI;YACZ,MAAM,kBAAgB;YACtB,SAAS,EAAE,iBAAe,iBAAiB,CAAC,OAAO,CAAC;SACpD,CAAA;IACF,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,cAAc,CAClC,OAA8B;QAM9B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAE5B,CAAA;QAEZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACd,qCAAqC,OAAO,CAAC,OAAO,uBAAuB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7G,CAAA;QACF,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,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,uBAAuB;gBAChC,UAAU,EAAE,CAAC,MAAsB,EAAE,EAAE,CACtC,iBAAe,eAAe,CAAC,gBAAgB,EAAE,MAAM,CAAC;aACzD;YACD;gBACC,MAAM,EAAE;oBACP,uBAAuB;iBACvB;gBACD,OAAO,EAAE,gBAAgB;gBACzB,UAAU,EAAE,CAAC,OAA8B,EAAE,EAAE,CAC9C,iBAAe,cAAc,CAAC,OAAO,CAAC;aACvC;YACD;gBACC,MAAM,EAAE;oBACP,gBAAgB;iBAChB;gBACD,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,KAAK,EAAE,OAAyB,EAAE,EAAE;oBAC/C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;oBAErD,cAAc,CAAC;wBACd,OAAO;wBACP,MAAM;qBACN,CAAC,CAAA;oBAEF,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;gBACpD,CAAC;aACD;YACD;gBACC,OAAO,EAAE,gBAAgB;gBACzB,WAAW,EAAE,eAAe;aAC5B;SACD,CAAA;IACF,CAAC;CACD,CAAA;AAjHY,cAAc;IAD1B,MAAM,CAAC,EAAE,CAAC;GACE,cAAc,CAiH1B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IDatabaseAdapter } from './database.adapter.interface.js';
|
|
2
2
|
import type { ResolvedDatabase, ResolvedRepositories } from './database.types.js';
|
|
3
3
|
export declare class DatabaseService {
|
|
4
4
|
private readonly _db;
|
|
5
|
-
constructor(db: unknown, schema: Record<string,
|
|
5
|
+
constructor(adapter: IDatabaseAdapter, db: unknown, schema: Record<string, unknown>);
|
|
6
6
|
get raw(): ResolvedDatabase;
|
|
7
7
|
}
|
|
8
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":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,EACX,gBAAgB,EAChB,oBAAoB,EACpB,MAAM,qBAAqB,CAAA;AAO5B,qBAEa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YACC,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAgB/B;IAED,IAAI,GAAG,IAAI,gBAAgB,CAE1B;CACD;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;CAAG"}
|
package/dist/database.service.js
CHANGED
|
@@ -8,18 +8,21 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
import { Injectable } from '@nestjs/common';
|
|
11
|
-
import { getCurrentTx } from './
|
|
12
|
-
import { TableRepository } from './repository/table-repository.js';
|
|
11
|
+
import { getCurrentTx } from './transaction.context.js';
|
|
13
12
|
let DatabaseService = class DatabaseService {
|
|
14
13
|
_db;
|
|
15
|
-
constructor(db, schema) {
|
|
14
|
+
constructor(adapter, db, schema) {
|
|
16
15
|
this._db = db;
|
|
17
16
|
for (const [tableName, table] of Object.entries(schema)) {
|
|
18
17
|
if (tableName in this) {
|
|
19
18
|
throw new Error(`[DatabaseModule] table name "${tableName}" is reserved by DatabaseService`);
|
|
20
19
|
}
|
|
21
20
|
;
|
|
22
|
-
this[tableName] =
|
|
21
|
+
this[tableName] = adapter.createRepository({
|
|
22
|
+
getClient: () => this.raw,
|
|
23
|
+
table,
|
|
24
|
+
tableName,
|
|
25
|
+
});
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
get raw() {
|
|
@@ -28,7 +31,7 @@ let DatabaseService = class DatabaseService {
|
|
|
28
31
|
};
|
|
29
32
|
DatabaseService = __decorate([
|
|
30
33
|
Injectable(),
|
|
31
|
-
__metadata("design:paramtypes", [Object, Object])
|
|
34
|
+
__metadata("design:paramtypes", [Object, Object, Object])
|
|
32
35
|
], DatabaseService);
|
|
33
36
|
export { DatabaseService };
|
|
34
37
|
//# 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;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAQhD,IAAM,eAAe,GAArB,MAAM,eAAe;IACV,GAAG,CAAS;IAE7B,YACC,OAAyB,EACzB,EAAW,EACX,MAA+B;QAE/B,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,OAAO,CAAC,gBAAgB,CAAC;gBACxE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG;gBACzB,KAAK;gBACL,SAAS;aACT,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IAED,IAAI,GAAG;QACN,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,GAAG,CAAqB,CAAA;IACxD,CAAC;CACD,CAAA;AA3BY,eAAe;IAF3B,UAAU,EAAE;;GAEA,eAAe,CA2B3B"}
|
package/dist/database.types.d.ts
CHANGED
|
@@ -2,16 +2,38 @@ import type { Table } from 'drizzle-orm';
|
|
|
2
2
|
import type { NodePgDatabase } from 'drizzle-orm/node-postgres';
|
|
3
3
|
import type { MaterializeSchema, MaterializeSchemaWithRelations } from './drizzle/schema-builder.drizzle.js';
|
|
4
4
|
import type { PgSchemaBuilder, RelationsHelpers, RelationsResolverResult, SchemaResolverResult } from './drizzle/schema-builder.types.drizzle.js';
|
|
5
|
+
import type { InferDynamoRepositories } from './dynamodb/dynamodb.repository.types.js';
|
|
6
|
+
import type { DynamoSchemaBuilder, DynamoSchemaResolverResult, DynamoTable, MaterializeDynamoSchema } from './dynamodb/schema-builder.types.dynamodb.js';
|
|
5
7
|
import type { InferRepositories } from './repository/table-repository.types.js';
|
|
6
8
|
export type DatabaseOptions = {
|
|
7
9
|
url: string;
|
|
8
10
|
};
|
|
9
|
-
export type
|
|
11
|
+
export type DatabaseAdapterName = 'dynamodb' | 'postgresql';
|
|
12
|
+
export type DynamodbOptions = {
|
|
13
|
+
credentials?: {
|
|
14
|
+
accessKeyId: string;
|
|
15
|
+
secretAccessKey: string;
|
|
16
|
+
};
|
|
17
|
+
endpoint?: string;
|
|
18
|
+
region: string;
|
|
19
|
+
tablePrefix?: string;
|
|
20
|
+
};
|
|
21
|
+
export type IsolationLevel = 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
|
|
22
|
+
export type TransactionOptions = {
|
|
23
|
+
isolationLevel?: IsolationLevel;
|
|
24
|
+
};
|
|
25
|
+
export type PostgresqlModuleOptions<TResult extends SchemaResolverResult = SchemaResolverResult, TRelations extends RelationsResolverResult | undefined = undefined> = {
|
|
10
26
|
adapter: 'postgresql';
|
|
11
27
|
postgresql: DatabaseOptions;
|
|
12
28
|
schemaResolver: (schema: PgSchemaBuilder) => TResult;
|
|
13
29
|
relationsResolver?: (tables: MaterializeSchema<TResult>, helpers: RelationsHelpers) => TRelations & RelationsResolverResult;
|
|
14
30
|
};
|
|
31
|
+
export type DynamodbModuleOptions<TResult extends DynamoSchemaResolverResult = DynamoSchemaResolverResult> = {
|
|
32
|
+
adapter: 'dynamodb';
|
|
33
|
+
dynamodb: DynamodbOptions;
|
|
34
|
+
schemaResolver: (schema: DynamoSchemaBuilder) => TResult;
|
|
35
|
+
};
|
|
36
|
+
export type DatabaseModuleOptions<TResult extends SchemaResolverResult = SchemaResolverResult, TRelations extends RelationsResolverResult | undefined = undefined> = DynamodbModuleOptions | PostgresqlModuleOptions<TResult, TRelations>;
|
|
15
37
|
export interface DatabaseServiceRegistry {
|
|
16
38
|
}
|
|
17
39
|
export type ResolvedDatabase = DatabaseServiceRegistry extends {
|
|
@@ -21,9 +43,14 @@ export type ResolvedSchema = DatabaseServiceRegistry extends {
|
|
|
21
43
|
schema: infer TSchema extends Record<string, Table>;
|
|
22
44
|
} ? TSchema : Record<string, Table>;
|
|
23
45
|
export type ResolvedRepositories = DatabaseServiceRegistry extends {
|
|
46
|
+
schema: infer TSchema extends Record<string, DynamoTable>;
|
|
47
|
+
} ? InferDynamoRepositories<TSchema> : DatabaseServiceRegistry extends {
|
|
24
48
|
raw: infer TDb;
|
|
25
49
|
schema: infer TSchema extends Record<string, Table>;
|
|
26
50
|
} ? InferRepositories<TDb, TSchema> : {};
|
|
51
|
+
export type InferDynamoDatabaseConfig<TSchemaResult extends DynamoSchemaResolverResult> = {
|
|
52
|
+
schema: MaterializeDynamoSchema<TSchemaResult>;
|
|
53
|
+
};
|
|
27
54
|
export type InferDatabase<TSchema extends SchemaResolverResult, TRelations extends RelationsResolverResult | undefined = undefined> = NodePgDatabase<MaterializeSchemaWithRelations<TSchema, TRelations>>;
|
|
28
55
|
export type InferDatabaseConfig<TSchemaResult extends SchemaResolverResult, TRelationsResult extends RelationsResolverResult | undefined = undefined> = {
|
|
29
56
|
raw: InferDatabase<TSchemaResult, TRelationsResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.types.d.ts","sourceRoot":"","sources":["../src/database.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,KAAK,EACX,iBAAiB,EACjB,8BAA8B,EAC9B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EACX,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,2CAA2C,CAAA;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAE/E,MAAM,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;CACX,CAAA;AASD,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"database.types.d.ts","sourceRoot":"","sources":["../src/database.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function createDrizzleClient(options:
|
|
1
|
+
import type { DatabaseOptions } from '../database.types.js';
|
|
2
|
+
export declare function createDrizzleClient(options: DatabaseOptions, schema: Record<string, unknown>): Promise<unknown>;
|
|
3
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,
|
|
1
|
+
{"version":3,"file":"client.drizzle.d.ts","sourceRoot":"","sources":["../../src/drizzle/client.drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1D,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CAKlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/client.drizzle.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,
|
|
1
|
+
{"version":3,"file":"client.drizzle.js","sourceRoot":"","sources":["../../src/drizzle/client.drizzle.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,OAAwB,EACxB,MAA+B;IAE/B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;IAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3B,MAAM;KACN,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IDatabaseAdapter } from '../database.adapter.interface.js';
|
|
2
|
+
import type { PostgresqlModuleOptions } from '../database.types.js';
|
|
3
|
+
export declare function createPostgresqlAdapter(options: PostgresqlModuleOptions): IDatabaseAdapter;
|
|
4
|
+
//# sourceMappingURL=postgresql.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql.adapter.d.ts","sourceRoot":"","sources":["../../src/drizzle/postgresql.adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,gBAAgB,EAEhB,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EACX,uBAAuB,EAEvB,MAAM,qBAAqB,CAAA;AAiD5B,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,uBAAuB,GAC9B,gBAAgB,CAkClB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { relations as drizzleRelations } from 'drizzle-orm';
|
|
2
|
+
import { createDrizzleClient } from '../drizzle/client.drizzle.js';
|
|
3
|
+
import { createSchemaBuilder, materializeSchema, } from '../drizzle/schema-builder.drizzle.js';
|
|
4
|
+
import { TableRepository } from '../repository/table-repository.js';
|
|
5
|
+
const transaction = {
|
|
6
|
+
async run(client, work, options) {
|
|
7
|
+
const db = client;
|
|
8
|
+
return (await db.transaction((tx) => work(tx), options?.isolationLevel
|
|
9
|
+
? {
|
|
10
|
+
isolationLevel: options.isolationLevel,
|
|
11
|
+
}
|
|
12
|
+
: undefined));
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export function createPostgresqlAdapter(options) {
|
|
16
|
+
return {
|
|
17
|
+
createRepository({ getClient, table, tableName }) {
|
|
18
|
+
return new TableRepository(getClient, tableName, table);
|
|
19
|
+
},
|
|
20
|
+
async initialize() {
|
|
21
|
+
const tables = materializeSchema(options.schemaResolver(createSchemaBuilder()));
|
|
22
|
+
let schema = {
|
|
23
|
+
...tables,
|
|
24
|
+
};
|
|
25
|
+
if (options.relationsResolver) {
|
|
26
|
+
const resolved = options.relationsResolver(tables, {
|
|
27
|
+
relations: drizzleRelations,
|
|
28
|
+
});
|
|
29
|
+
schema = {
|
|
30
|
+
...tables,
|
|
31
|
+
...resolved,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
client: await createDrizzleClient(options.postgresql, schema),
|
|
36
|
+
tables,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
transaction,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=postgresql.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql.adapter.js","sourceRoot":"","sources":["../../src/drizzle/postgresql.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAc,MAAM,aAAa,CAAA;AAWvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EACN,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAiBlE,MAAM,WAAW,GAAyB;IACzC,KAAK,CAAC,GAAG,CACR,MAAe,EACf,IAA2C,EAC3C,OAA4B;QAE5B,MAAM,EAAE,GAAG,MAAuB,CAAA;QAElC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,CAC3B,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAqB,EACpC,OAAO,EAAE,cAAc;YACtB,CAAC,CAAC;gBACA,cAAc,EAAE,OAAO,CAAC,cAAc;aACtC;YACF,CAAC,CAAC,SAAS,CACZ,CAAY,CAAA;IACd,CAAC;CACD,CAAA;AAQD,MAAM,UAAU,uBAAuB,CACtC,OAAgC;IAEhC,OAAO;QACN,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/C,OAAO,IAAI,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,KAAc,CAAC,CAAA;QACjE,CAAC;QAED,KAAK,CAAC,UAAU;YACf,MAAM,MAAM,GAAG,iBAAiB,CAC/B,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,CAC7C,CAAA;YAED,IAAI,MAAM,GAA4B;gBACrC,GAAG,MAAM;aACT,CAAA;YAED,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAe,EAAE;oBAC3D,SAAS,EAAE,gBAAgB;iBAC3B,CAA4B,CAAA;gBAE7B,MAAM,GAAG;oBACR,GAAG,MAAM;oBACT,GAAG,QAAQ;iBACX,CAAA;YACF,CAAC;YAED,OAAO;gBACN,MAAM,EAAE,MAAM,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;gBAC7D,MAAM;aACN,CAAA;QACF,CAAC;QAED,WAAW;KACX,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DynamodbOptions } from '../database.types.js';
|
|
2
|
+
type CommandConstructor = new (input: Record<string, unknown>) => object;
|
|
3
|
+
export type DynamoDocumentClient = {
|
|
4
|
+
send(command: object): Promise<Record<string, unknown>>;
|
|
5
|
+
};
|
|
6
|
+
export type DynamoSdk = {
|
|
7
|
+
BatchWriteCommand: CommandConstructor;
|
|
8
|
+
DeleteCommand: CommandConstructor;
|
|
9
|
+
GetCommand: CommandConstructor;
|
|
10
|
+
PutCommand: CommandConstructor;
|
|
11
|
+
QueryCommand: CommandConstructor;
|
|
12
|
+
TransactWriteCommand: CommandConstructor;
|
|
13
|
+
UpdateCommand: CommandConstructor;
|
|
14
|
+
};
|
|
15
|
+
export type DynamoConnection = {
|
|
16
|
+
client: DynamoDocumentClient;
|
|
17
|
+
sdk: DynamoSdk;
|
|
18
|
+
tablePrefix: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function createDynamoConnection(options: DynamodbOptions): Promise<DynamoConnection>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=client.dynamodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.dynamodb.d.ts","sourceRoot":"","sources":["../../src/dynamodb/client.dynamodb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAa1D,KAAK,kBAAkB,GAAG,KAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAA;AAExE,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACvB,iBAAiB,EAAE,kBAAkB,CAAA;IACrC,aAAa,EAAE,kBAAkB,CAAA;IACjC,UAAU,EAAE,kBAAkB,CAAA;IAC9B,UAAU,EAAE,kBAAkB,CAAA;IAC9B,YAAY,EAAE,kBAAkB,CAAA;IAChC,oBAAoB,EAAE,kBAAkB,CAAA;IACxC,aAAa,EAAE,kBAAkB,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,GAAG,EAAE,SAAS,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACnB,CAAA;AAKD,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAkD3B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const MISSING_SDK = '[DatabaseModule] adapter "dynamodb" needs @aws-sdk/client-dynamodb and @aws-sdk/lib-dynamodb — install them, or use another adapter';
|
|
2
|
+
export async function createDynamoConnection(options) {
|
|
3
|
+
let core;
|
|
4
|
+
let lib;
|
|
5
|
+
const corePackage = '@aws-sdk/client-dynamodb';
|
|
6
|
+
const libPackage = '@aws-sdk/lib-dynamodb';
|
|
7
|
+
try {
|
|
8
|
+
core = (await import(corePackage));
|
|
9
|
+
lib = (await import(libPackage));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
throw new Error(MISSING_SDK);
|
|
13
|
+
}
|
|
14
|
+
const DynamoDBClient = core.DynamoDBClient;
|
|
15
|
+
const DynamoDBDocumentClient = lib.DynamoDBDocumentClient;
|
|
16
|
+
const base = new DynamoDBClient({
|
|
17
|
+
...(options.credentials
|
|
18
|
+
? {
|
|
19
|
+
credentials: options.credentials,
|
|
20
|
+
}
|
|
21
|
+
: {}),
|
|
22
|
+
...(options.endpoint
|
|
23
|
+
? {
|
|
24
|
+
endpoint: options.endpoint,
|
|
25
|
+
}
|
|
26
|
+
: {}),
|
|
27
|
+
region: options.region,
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
client: DynamoDBDocumentClient.from(base, {
|
|
31
|
+
marshallOptions: {
|
|
32
|
+
removeUndefinedValues: true,
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
sdk: lib,
|
|
36
|
+
tablePrefix: options.tablePrefix ?? '',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=client.dynamodb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.dynamodb.js","sourceRoot":"","sources":["../../src/dynamodb/client.dynamodb.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,GAChB,qIAAqI,CAAA;AAEtI,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,OAAwB;IAExB,IAAI,IAA6B,CAAA;IACjC,IAAI,GAA4B,CAAA;IAKhC,MAAM,WAAW,GAAG,0BAA0B,CAAA;IAC9C,MAAM,UAAU,GAAG,uBAAuB,CAAA;IAE1C,IAAI,CAAC;QACJ,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAA4B,CAAA;QAC7D,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAA4B,CAAA;IAC5D,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAEjB,CAAA;IACX,MAAM,sBAAsB,GAAG,GAAG,CAAC,sBAKlC,CAAA;IAED,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC;QAC/B,GAAG,CAAC,OAAO,CAAC,WAAW;YACtB,CAAC,CAAC;gBACA,WAAW,EAAE,OAAO,CAAC,WAAW;aAChC;YACF,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,QAAQ;YACnB,CAAC,CAAC;gBACA,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC1B;YACF,CAAC,CAAC,EAAE,CAAC;QACN,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC,CAAA;IAEF,OAAO;QACN,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE;YACzC,eAAe,EAAE;gBAChB,qBAAqB,EAAE,IAAI;aAC3B;SACD,CAAC;QACF,GAAG,EAAE,GAA2B;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;KACtC,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IDatabaseAdapter } from '../database.adapter.interface.js';
|
|
2
|
+
import type { DynamodbModuleOptions } from '../database.types.js';
|
|
3
|
+
export declare function createDynamodbAdapter(options: DynamodbModuleOptions): IDatabaseAdapter;
|
|
4
|
+
//# sourceMappingURL=dynamodb.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb.adapter.d.ts","sourceRoot":"","sources":["../../src/dynamodb/dynamodb.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAsBhE,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,qBAAqB,GAC5B,gBAAgB,CAwBlB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createDynamoConnection } from '../dynamodb/client.dynamodb.js';
|
|
2
|
+
import { DynamoRepository } from '../dynamodb/dynamodb.repository.js';
|
|
3
|
+
import { dynamoTransaction } from '../dynamodb/dynamodb.transaction.js';
|
|
4
|
+
import { createDynamoSchemaBuilder, materializeDynamoSchema, } from '../dynamodb/schema-builder.dynamodb.js';
|
|
5
|
+
export function createDynamodbAdapter(options) {
|
|
6
|
+
return {
|
|
7
|
+
createRepository({ getClient, table }) {
|
|
8
|
+
return new DynamoRepository(() => getClient(), table);
|
|
9
|
+
},
|
|
10
|
+
async initialize() {
|
|
11
|
+
const tables = materializeDynamoSchema(options.schemaResolver(createDynamoSchemaBuilder()));
|
|
12
|
+
return {
|
|
13
|
+
client: await createDynamoConnection(options.dynamodb),
|
|
14
|
+
tables,
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
transaction: dynamoTransaction,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=dynamodb.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb.adapter.js","sourceRoot":"","sources":["../../src/dynamodb/dynamodb.adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EACN,yBAAyB,EACzB,uBAAuB,GACvB,MAAM,uCAAuC,CAAA;AAa9C,MAAM,UAAU,qBAAqB,CACpC,OAA8B;IAE9B,OAAO;QACN,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;YACpC,OAAO,IAAI,gBAAgB,CAC1B,GAAG,EAAE,CAAC,SAAS,EAAkB,EACjC,KAAoB,CACpB,CAAA;QACF,CAAC;QAED,KAAK,CAAC,UAAU;YACf,MAAM,MAAM,GAAG,uBAAuB,CACrC,OAAO,CAAC,cAAc,CACrB,yBAAyB,EAAE,CACG,CAC/B,CAAA;YAED,OAAO;gBACN,MAAM,EAAE,MAAM,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACtD,MAAM;aACN,CAAA;QACF,CAAC;QAED,WAAW,EAAE,iBAAiB;KAC9B,CAAA;AACF,CAAC"}
|