@turystack/nestjs-database 0.0.11 → 2.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 +70 -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.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 +7 -0
- package/dist/database.helpers.d.ts.map +1 -0
- package/dist/database.helpers.js +10 -0
- package/dist/database.helpers.js.map +1 -0
- package/dist/database.module.d.ts +4 -1
- package/dist/database.module.d.ts.map +1 -1
- package/dist/database.module.js +63 -17
- package/dist/database.module.js.map +1 -1
- package/dist/database.service.d.ts +2 -4
- package/dist/database.service.d.ts.map +1 -1
- package/dist/database.service.js +10 -6
- 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 -8
- 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/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/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/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 +7 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- 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/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/transaction.context.d.ts +22 -0
- package/dist/transaction.context.d.ts.map +1 -0
- package/dist/transaction.context.js +48 -0
- 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/transactional.js +38 -0
- package/dist/transactional.js.map +1 -0
- package/package.json +48 -10
- package/dist/drizzle/transaction-context.drizzle.d.ts +0 -7
- package/dist/drizzle/transaction-context.drizzle.d.ts.map +0 -1
- package/dist/drizzle/transaction-context.drizzle.js +0 -16
- package/dist/drizzle/transaction-context.drizzle.js.map +0 -1
- package/dist/drizzle/transactional.drizzle.d.ts.map +0 -1
- package/dist/drizzle/transactional.drizzle.js +0 -19
- package/dist/drizzle/transactional.drizzle.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# @turystack/nestjs-database
|
|
2
|
+
|
|
3
|
+
Typed database module for NestJS: schema builder, per-table repositories, and transactional decorator. PostgreSQL (Drizzle) and DynamoDB adapters.
|
|
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 reflect-metadata uuidv7
|
|
17
|
+
```
|
|
18
|
+
|
|
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:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
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'
|
|
41
|
+
```
|
|
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
|
+
|
|
56
|
+
## Documentation
|
|
57
|
+
|
|
58
|
+
Options, API reference and examples:
|
|
59
|
+
|
|
60
|
+
**https://tury.dev/libs/nestjs-database**
|
|
61
|
+
|
|
62
|
+
## Development
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pnpm install
|
|
66
|
+
pnpm typecheck
|
|
67
|
+
pnpm check
|
|
68
|
+
pnpm test
|
|
69
|
+
pnpm build
|
|
70
|
+
```
|
|
@@ -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,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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
import type { DynamoSchemaBuilder, DynamoSchemaResolverResult } from './dynamodb/schema-builder.types.dynamodb.js';
|
|
4
|
+
export declare function defineDatabaseSchema<TResult extends SchemaResolverResult>(resolver: (schema: PgSchemaBuilder) => TResult): (schema: PgSchemaBuilder) => TResult;
|
|
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;
|
|
7
|
+
//# 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;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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function defineDatabaseSchema(resolver) {
|
|
2
|
+
return resolver;
|
|
3
|
+
}
|
|
4
|
+
export function defineDatabaseRelations(_schemaResolver, resolver) {
|
|
5
|
+
return resolver;
|
|
6
|
+
}
|
|
7
|
+
export function defineDynamoDatabaseSchema(resolver) {
|
|
8
|
+
return resolver;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=database.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
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 _createAdapter;
|
|
8
|
+
private static _resolveOptions;
|
|
6
9
|
private static _resolveProviders;
|
|
7
10
|
}
|
|
8
11
|
//# 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;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
|
@@ -6,34 +6,80 @@ 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 {
|
|
10
|
-
import { DATABASE_SERVICE } from './database.constants.js';
|
|
9
|
+
import { ConfigService } from '@turystack/nestjs-config';
|
|
10
|
+
import { DATABASE_ADAPTER, DATABASE_MODULE_OPTIONS, DATABASE_SERVICE, } from './database.constants.js';
|
|
11
11
|
import { DatabaseService } from './database.service.js';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
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
|
+
};
|
|
15
23
|
let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
|
|
16
24
|
static register(options) {
|
|
17
25
|
return {
|
|
18
|
-
exports: [
|
|
26
|
+
exports: [
|
|
27
|
+
DatabaseService,
|
|
28
|
+
DATABASE_SERVICE,
|
|
29
|
+
DATABASE_ADAPTER,
|
|
30
|
+
],
|
|
31
|
+
global: true,
|
|
19
32
|
module: DatabaseModule_1,
|
|
20
33
|
providers: DatabaseModule_1._resolveProviders(options),
|
|
21
34
|
};
|
|
22
35
|
}
|
|
23
|
-
static
|
|
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
|
+
}
|
|
43
|
+
static _resolveOptions(options, config) {
|
|
44
|
+
if (typeof options !== 'function') {
|
|
45
|
+
return options;
|
|
46
|
+
}
|
|
47
|
+
if (!config) {
|
|
48
|
+
throw new Error('[DatabaseModule] register((config) => ...) requires ConfigModule (@turystack/nestjs-config) to be registered');
|
|
49
|
+
}
|
|
50
|
+
return options(config);
|
|
51
|
+
}
|
|
52
|
+
static _resolveProviders(optionsOrFactory) {
|
|
24
53
|
return [
|
|
25
54
|
{
|
|
55
|
+
inject: [
|
|
56
|
+
{
|
|
57
|
+
optional: true,
|
|
58
|
+
token: ConfigService,
|
|
59
|
+
},
|
|
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
|
+
],
|
|
26
75
|
provide: DatabaseService,
|
|
27
|
-
useFactory: async () => {
|
|
28
|
-
const tables =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const { db, strategy } = await createDrizzleClient(options, fullSchema);
|
|
35
|
-
registerDb(db);
|
|
36
|
-
return new DatabaseService(db, tables, strategy);
|
|
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);
|
|
37
83
|
},
|
|
38
84
|
},
|
|
39
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;
|
|
1
|
+
{"version":3,"file":"database.module.js","sourceRoot":"","sources":["../src/database.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +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
|
-
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(adapter: IDatabaseAdapter, db: unknown, schema: Record<string, unknown>);
|
|
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":"AAEA,OAAO,KAAK,EAAE,
|
|
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,17 +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
|
-
|
|
16
|
-
constructor(db, schema, strategy) {
|
|
14
|
+
constructor(adapter, db, schema) {
|
|
17
15
|
this._db = db;
|
|
18
|
-
this._strategy = strategy;
|
|
19
16
|
for (const [tableName, table] of Object.entries(schema)) {
|
|
17
|
+
if (tableName in this) {
|
|
18
|
+
throw new Error(`[DatabaseModule] table name "${tableName}" is reserved by DatabaseService`);
|
|
19
|
+
}
|
|
20
20
|
;
|
|
21
|
-
this[tableName] =
|
|
21
|
+
this[tableName] = adapter.createRepository({
|
|
22
|
+
getClient: () => this.raw,
|
|
23
|
+
table,
|
|
24
|
+
tableName,
|
|
25
|
+
});
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
get raw() {
|
|
@@ -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,9 +1,3 @@
|
|
|
1
|
-
import type {
|
|
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
|
-
}>;
|
|
1
|
+
import type { DatabaseOptions } from '../database.types.js';
|
|
2
|
+
export declare function createDrizzleClient(options: DatabaseOptions, 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,
|
|
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,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.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,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"}
|
|
@@ -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"}
|