@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.
Files changed (124) hide show
  1. package/README.md +35 -4
  2. package/dist/database.adapter.interface.d.ts +17 -0
  3. package/dist/database.adapter.interface.d.ts.map +1 -0
  4. package/dist/database.adapter.interface.js +2 -0
  5. package/dist/database.adapter.interface.js.map +1 -0
  6. package/dist/database.constants.d.ts +2 -0
  7. package/dist/database.constants.d.ts.map +1 -1
  8. package/dist/database.constants.js +2 -0
  9. package/dist/database.constants.js.map +1 -1
  10. package/dist/database.helpers.d.ts +2 -0
  11. package/dist/database.helpers.d.ts.map +1 -1
  12. package/dist/database.helpers.js +3 -0
  13. package/dist/database.helpers.js.map +1 -1
  14. package/dist/database.module.d.ts +1 -0
  15. package/dist/database.module.d.ts.map +1 -1
  16. package/dist/database.module.js +41 -23
  17. package/dist/database.module.js.map +1 -1
  18. package/dist/database.service.d.ts +2 -2
  19. package/dist/database.service.d.ts.map +1 -1
  20. package/dist/database.service.js +8 -5
  21. package/dist/database.service.js.map +1 -1
  22. package/dist/database.types.d.ts +28 -1
  23. package/dist/database.types.d.ts.map +1 -1
  24. package/dist/drizzle/client.drizzle.d.ts +2 -2
  25. package/dist/drizzle/client.drizzle.d.ts.map +1 -1
  26. package/dist/drizzle/client.drizzle.js +1 -1
  27. package/dist/drizzle/client.drizzle.js.map +1 -1
  28. package/dist/drizzle/postgresql.adapter.d.ts +4 -0
  29. package/dist/drizzle/postgresql.adapter.d.ts.map +1 -0
  30. package/dist/drizzle/postgresql.adapter.js +42 -0
  31. package/dist/drizzle/postgresql.adapter.js.map +1 -0
  32. package/dist/dynamodb/client.dynamodb.d.ts +22 -0
  33. package/dist/dynamodb/client.dynamodb.d.ts.map +1 -0
  34. package/dist/dynamodb/client.dynamodb.js +39 -0
  35. package/dist/dynamodb/client.dynamodb.js.map +1 -0
  36. package/dist/dynamodb/dynamodb.adapter.d.ts +4 -0
  37. package/dist/dynamodb/dynamodb.adapter.d.ts.map +1 -0
  38. package/dist/dynamodb/dynamodb.adapter.js +20 -0
  39. package/dist/dynamodb/dynamodb.adapter.js.map +1 -0
  40. package/dist/dynamodb/dynamodb.repository.d.ts +37 -0
  41. package/dist/dynamodb/dynamodb.repository.d.ts.map +1 -0
  42. package/dist/dynamodb/dynamodb.repository.js +266 -0
  43. package/dist/dynamodb/dynamodb.repository.js.map +1 -0
  44. package/dist/dynamodb/dynamodb.repository.types.d.ts +55 -0
  45. package/dist/dynamodb/dynamodb.repository.types.d.ts.map +1 -0
  46. package/dist/dynamodb/dynamodb.repository.types.js +2 -0
  47. package/dist/dynamodb/dynamodb.repository.types.js.map +1 -0
  48. package/dist/dynamodb/dynamodb.transaction.d.ts +7 -0
  49. package/dist/dynamodb/dynamodb.transaction.d.ts.map +1 -0
  50. package/dist/dynamodb/dynamodb.transaction.js +28 -0
  51. package/dist/dynamodb/dynamodb.transaction.js.map +1 -0
  52. package/dist/dynamodb/schema-builder.dynamodb.d.ts +4 -0
  53. package/dist/dynamodb/schema-builder.dynamodb.d.ts.map +1 -0
  54. package/dist/dynamodb/schema-builder.dynamodb.js +58 -0
  55. package/dist/dynamodb/schema-builder.dynamodb.js.map +1 -0
  56. package/dist/dynamodb/schema-builder.types.dynamodb.d.ts +63 -0
  57. package/dist/dynamodb/schema-builder.types.dynamodb.d.ts.map +1 -0
  58. package/dist/dynamodb/schema-builder.types.dynamodb.js +2 -0
  59. package/dist/dynamodb/schema-builder.types.dynamodb.js.map +1 -0
  60. package/dist/dynamodb.d.ts +3 -0
  61. package/dist/dynamodb.d.ts.map +1 -0
  62. package/dist/dynamodb.js +3 -0
  63. package/dist/dynamodb.js.map +1 -0
  64. package/dist/index.d.ts +8 -11
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +3 -5
  67. package/dist/index.js.map +1 -1
  68. package/dist/postgresql.d.ts +3 -0
  69. package/dist/postgresql.d.ts.map +1 -0
  70. package/dist/postgresql.js +3 -0
  71. package/dist/postgresql.js.map +1 -0
  72. package/dist/{drizzle/transaction-context.drizzle.d.ts → transaction.context.d.ts} +10 -3
  73. package/dist/transaction.context.d.ts.map +1 -0
  74. package/dist/{drizzle/transaction-context.drizzle.js → transaction.context.js} +11 -8
  75. package/dist/transaction.context.js.map +1 -0
  76. package/dist/{drizzle/transactional.drizzle.d.ts → transactional.d.ts} +3 -2
  77. package/dist/transactional.d.ts.map +1 -0
  78. package/dist/{drizzle/transactional.drizzle.js → transactional.js} +6 -5
  79. package/dist/transactional.js.map +1 -0
  80. package/package.json +31 -7
  81. package/dist/drizzle/client.d.ts +0 -12
  82. package/dist/drizzle/client.d.ts.map +0 -1
  83. package/dist/drizzle/client.js +0 -34
  84. package/dist/drizzle/client.js.map +0 -1
  85. package/dist/drizzle/index.d.ts +0 -4
  86. package/dist/drizzle/index.d.ts.map +0 -1
  87. package/dist/drizzle/index.js +0 -4
  88. package/dist/drizzle/index.js.map +0 -1
  89. package/dist/drizzle/transaction-context.d.ts +0 -9
  90. package/dist/drizzle/transaction-context.d.ts.map +0 -1
  91. package/dist/drizzle/transaction-context.drizzle.d.ts.map +0 -1
  92. package/dist/drizzle/transaction-context.drizzle.js.map +0 -1
  93. package/dist/drizzle/transaction-context.js +0 -15
  94. package/dist/drizzle/transaction-context.js.map +0 -1
  95. package/dist/drizzle/transactional.decorator.d.ts +0 -3
  96. package/dist/drizzle/transactional.decorator.d.ts.map +0 -1
  97. package/dist/drizzle/transactional.decorator.js +0 -15
  98. package/dist/drizzle/transactional.decorator.js.map +0 -1
  99. package/dist/drizzle/transactional.drizzle.d.ts.map +0 -1
  100. package/dist/drizzle/transactional.drizzle.js.map +0 -1
  101. package/dist/prisma/index.d.ts +0 -3
  102. package/dist/prisma/index.d.ts.map +0 -1
  103. package/dist/prisma/index.js +0 -3
  104. package/dist/prisma/index.js.map +0 -1
  105. package/dist/prisma/prisma.client.d.ts +0 -2
  106. package/dist/prisma/prisma.client.d.ts.map +0 -1
  107. package/dist/prisma/prisma.client.js +0 -13
  108. package/dist/prisma/prisma.client.js.map +0 -1
  109. package/dist/prisma/transactional.decorator.d.ts +0 -2
  110. package/dist/prisma/transactional.decorator.d.ts.map +0 -1
  111. package/dist/prisma/transactional.decorator.js +0 -3
  112. package/dist/prisma/transactional.decorator.js.map +0 -1
  113. package/dist/schema-builder.d.ts +0 -7
  114. package/dist/schema-builder.d.ts.map +0 -1
  115. package/dist/schema-builder.js +0 -32
  116. package/dist/schema-builder.js.map +0 -1
  117. package/dist/schema-builder.types.d.ts +0 -8
  118. package/dist/schema-builder.types.d.ts.map +0 -1
  119. package/dist/schema-builder.types.js +0 -2
  120. package/dist/schema-builder.types.js.map +0 -1
  121. package/dist/utils/uuid-v7.d.ts +0 -2
  122. package/dist/utils/uuid-v7.d.ts.map +0 -1
  123. package/dist/utils/uuid-v7.js +0 -2
  124. 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) built-in.
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 drizzle-orm reflect-metadata uuidv7
16
+ pnpm add @nestjs/common @nestjs/core @turystack/exceptions @turystack/nestjs-config reflect-metadata uuidv7
17
17
  ```
18
18
 
19
- Optional install only the ones whose feature you use:
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
- pnpm add pg
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=database.adapter.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.adapter.interface.js","sourceRoot":"","sources":["../src/database.adapter.interface.ts"],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  export declare const DATABASE_SERVICE: unique symbol;
2
+ export declare const DATABASE_ADAPTER: unique symbol;
3
+ export declare const DATABASE_MODULE_OPTIONS: unique symbol;
2
4
  //# sourceMappingURL=database.constants.d.ts.map
@@ -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,2 +1,4 @@
1
1
  export const DATABASE_SERVICE = Symbol('DATABASE_SERVICE');
2
+ export const DATABASE_ADAPTER = Symbol('DATABASE_ADAPTER');
3
+ export const DATABASE_MODULE_OPTIONS = Symbol('DATABASE_MODULE_OPTIONS');
2
4
  //# sourceMappingURL=database.constants.js.map
@@ -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;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"}
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"}
@@ -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":"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
+ {"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;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"}
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"}
@@ -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 { relations as drizzleRelations } from 'drizzle-orm';
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 { createDrizzleClient } from './drizzle/client.drizzle.js';
14
- import { createSchemaBuilder, materializeSchema, } from './drizzle/schema-builder.drizzle.js';
15
- import { registerDb } from './drizzle/transaction-context.drizzle.js';
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 (config) => {
48
- const options = DatabaseModule_1._resolveOptions(optionsOrFactory, config);
49
- const tables = materializeSchema(options.schemaResolver(createSchemaBuilder()));
50
- let fullSchema = {
51
- ...tables,
52
- };
53
- if (options.relationsResolver) {
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;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
+ {"version":3,"file":"database.module.js","sourceRoot":"","sources":["../src/database.module.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import type { Table } from 'drizzle-orm';
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, Table>);
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":"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"}
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"}
@@ -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 './drizzle/transaction-context.drizzle.js';
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] = new TableRepository(() => this.raw, tableName, table);
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;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"}
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"}
@@ -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 DatabaseModuleOptions<TResult extends SchemaResolverResult = SchemaResolverResult, TRelations extends RelationsResolverResult | undefined = undefined> = {
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,qBAAqB,CAChC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,GAAG,SAAS,GAAG,SAAS,IAC/D;IACH,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,eAAe,CAAA;IAC3B,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAA;IACpD,iBAAiB,CAAC,EAAE,CACnB,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAClC,OAAO,EAAE,gBAAgB,KACrB,UAAU,GAAG,uBAAuB,CAAA;CACzC,CAAA;AAqBD,MAAM,WAAW,uBAAuB;CAAG;AAG3C,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,SAAS;IAC9D,GAAG,EAAE,MAAM,GAAG,CAAA;CACd,GACE,GAAG,GACH,OAAO,CAAA;AAGV,MAAM,MAAM,cAAc,GAAG,uBAAuB,SAAS;IAC5D,MAAM,EAAE,MAAM,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CACnD,GACE,OAAO,GACP,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAGxB,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,SAAS;IAClE,GAAG,EAAE,MAAM,GAAG,CAAA;IACd,MAAM,EAAE,MAAM,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CACnD,GACE,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,GAC/B,EAAE,CAAA;AAKL,MAAM,MAAM,aAAa,CACxB,OAAO,SAAS,oBAAoB,EACpC,UAAU,SAAS,uBAAuB,GAAG,SAAS,GAAG,SAAS,IAC/D,cAAc,CAAC,8BAA8B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AAkBvE,MAAM,MAAM,mBAAmB,CAC9B,aAAa,SAAS,oBAAoB,EAC1C,gBAAgB,SAAS,uBAAuB,GAAG,SAAS,GAAG,SAAS,IACrE;IACH,GAAG,EAAE,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAA;IACnD,MAAM,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,CACpC,MAAM,EAAE,eAAe,KACnB,oBAAoB,CAAA;AAEzB,MAAM,MAAM,yBAAyB,CACpC,aAAa,SAAS,oBAAoB,IACvC,CACH,MAAM,EAAE,iBAAiB,CAAC,aAAa,CAAC,EACxC,OAAO,EAAE,gBAAgB,KACrB,uBAAuB,CAAA"}
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 { DatabaseModuleOptions } from '../database.types.js';
2
- export declare function createDrizzleClient(options: DatabaseModuleOptions, schema: Record<string, unknown>): Promise<unknown>;
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,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
+ {"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,6 +1,6 @@
1
1
  export async function createDrizzleClient(options, schema) {
2
2
  const { drizzle } = await import('drizzle-orm/node-postgres');
3
- return drizzle(options.postgresql.url, {
3
+ return drizzle(options.url, {
4
4
  schema,
5
5
  });
6
6
  }
@@ -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,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"}
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"}