@c9up/atlas 0.1.19 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/README.md +63 -14
  2. package/db.darwin-arm64.node +0 -0
  3. package/db.darwin-x64.node +0 -0
  4. package/db.linux-arm64-gnu.node +0 -0
  5. package/db.linux-x64-gnu.node +0 -0
  6. package/db.win32-x64-msvc.node +0 -0
  7. package/dist/AtlasProvider.d.ts +66 -7
  8. package/dist/AtlasProvider.d.ts.map +1 -1
  9. package/dist/AtlasProvider.js +205 -39
  10. package/dist/AtlasProvider.js.map +1 -1
  11. package/dist/BaseEntity.d.ts +181 -5
  12. package/dist/BaseEntity.d.ts.map +1 -1
  13. package/dist/BaseEntity.js +339 -33
  14. package/dist/BaseEntity.js.map +1 -1
  15. package/dist/BaseModel.d.ts +127 -0
  16. package/dist/BaseModel.d.ts.map +1 -0
  17. package/dist/BaseModel.js +250 -0
  18. package/dist/BaseModel.js.map +1 -0
  19. package/dist/BaseRepository.d.ts +81 -15
  20. package/dist/BaseRepository.d.ts.map +1 -1
  21. package/dist/BaseRepository.js +1433 -387
  22. package/dist/BaseRepository.js.map +1 -1
  23. package/dist/ConnectionManager.d.ts +106 -0
  24. package/dist/ConnectionManager.d.ts.map +1 -0
  25. package/dist/ConnectionManager.js +228 -0
  26. package/dist/ConnectionManager.js.map +1 -0
  27. package/dist/ModelQuery.d.ts +577 -41
  28. package/dist/ModelQuery.d.ts.map +1 -1
  29. package/dist/ModelQuery.js +2188 -291
  30. package/dist/ModelQuery.js.map +1 -1
  31. package/dist/Transaction.d.ts +71 -1
  32. package/dist/Transaction.d.ts.map +1 -1
  33. package/dist/Transaction.js +138 -24
  34. package/dist/Transaction.js.map +1 -1
  35. package/dist/adapters/NapiDbAdapter.d.ts +44 -4
  36. package/dist/adapters/NapiDbAdapter.d.ts.map +1 -1
  37. package/dist/adapters/NapiDbAdapter.js +131 -13
  38. package/dist/adapters/NapiDbAdapter.js.map +1 -1
  39. package/dist/console/contract.d.ts +62 -0
  40. package/dist/console/contract.d.ts.map +1 -0
  41. package/dist/console/contract.js +38 -0
  42. package/dist/console/contract.js.map +1 -0
  43. package/dist/console/factoryCommands.d.ts +23 -0
  44. package/dist/console/factoryCommands.d.ts.map +1 -0
  45. package/dist/console/factoryCommands.js +62 -0
  46. package/dist/console/factoryCommands.js.map +1 -0
  47. package/dist/console/migrationCommands.d.ts +78 -0
  48. package/dist/console/migrationCommands.d.ts.map +1 -0
  49. package/dist/console/migrationCommands.js +327 -0
  50. package/dist/console/migrationCommands.js.map +1 -0
  51. package/dist/console/schemaCheckCommand.d.ts +11 -17
  52. package/dist/console/schemaCheckCommand.d.ts.map +1 -1
  53. package/dist/console/schemaCheckCommand.js +21 -15
  54. package/dist/console/schemaCheckCommand.js.map +1 -1
  55. package/dist/console/schemaDumpCommand.d.ts +30 -0
  56. package/dist/console/schemaDumpCommand.d.ts.map +1 -0
  57. package/dist/console/schemaDumpCommand.js +69 -0
  58. package/dist/console/schemaDumpCommand.js.map +1 -0
  59. package/dist/console/schemaGenerateCommand.d.ts +100 -0
  60. package/dist/console/schemaGenerateCommand.d.ts.map +1 -0
  61. package/dist/console/schemaGenerateCommand.js +246 -0
  62. package/dist/console/schemaGenerateCommand.js.map +1 -0
  63. package/dist/console/seederCommands.d.ts +46 -0
  64. package/dist/console/seederCommands.d.ts.map +1 -0
  65. package/dist/console/seederCommands.js +136 -0
  66. package/dist/console/seederCommands.js.map +1 -0
  67. package/dist/decorators/entity.d.ts +50 -8
  68. package/dist/decorators/entity.d.ts.map +1 -1
  69. package/dist/decorators/entity.js +42 -2
  70. package/dist/decorators/entity.js.map +1 -1
  71. package/dist/decorators/hooks.d.ts +3 -3
  72. package/dist/decorators/hooks.d.ts.map +1 -1
  73. package/dist/decorators/hooks.js.map +1 -1
  74. package/dist/events.d.ts +69 -0
  75. package/dist/events.d.ts.map +1 -0
  76. package/dist/events.js +82 -0
  77. package/dist/events.js.map +1 -0
  78. package/dist/factories.d.ts +8 -0
  79. package/dist/factories.d.ts.map +1 -0
  80. package/dist/factories.js +8 -0
  81. package/dist/factories.js.map +1 -0
  82. package/dist/index.d.ts +15 -5
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +14 -3
  85. package/dist/index.js.map +1 -1
  86. package/dist/lucid-schema.d.ts +15 -0
  87. package/dist/lucid-schema.d.ts.map +1 -0
  88. package/dist/lucid-schema.js +16 -0
  89. package/dist/lucid-schema.js.map +1 -0
  90. package/dist/metadata-keys.d.ts +3 -2
  91. package/dist/metadata-keys.d.ts.map +1 -1
  92. package/dist/naming/NamingStrategy.d.ts +7 -0
  93. package/dist/naming/NamingStrategy.d.ts.map +1 -1
  94. package/dist/naming/NamingStrategy.js +16 -0
  95. package/dist/naming/NamingStrategy.js.map +1 -1
  96. package/dist/orm.d.ts +14 -0
  97. package/dist/orm.d.ts.map +1 -0
  98. package/dist/orm.js +14 -0
  99. package/dist/orm.js.map +1 -0
  100. package/dist/query/DatabaseQueryBuilder.d.ts +557 -0
  101. package/dist/query/DatabaseQueryBuilder.d.ts.map +1 -0
  102. package/dist/query/DatabaseQueryBuilder.js +1798 -0
  103. package/dist/query/DatabaseQueryBuilder.js.map +1 -0
  104. package/dist/query/DmlBuilder.d.ts +62 -0
  105. package/dist/query/DmlBuilder.d.ts.map +1 -0
  106. package/dist/query/DmlBuilder.js +84 -0
  107. package/dist/query/DmlBuilder.js.map +1 -0
  108. package/dist/query/QueryBuilder.d.ts +5 -0
  109. package/dist/query/QueryBuilder.d.ts.map +1 -1
  110. package/dist/query/QueryBuilder.js +7 -0
  111. package/dist/query/QueryBuilder.js.map +1 -1
  112. package/dist/query/RawQueryBuilder.d.ts +47 -0
  113. package/dist/query/RawQueryBuilder.d.ts.map +1 -0
  114. package/dist/query/RawQueryBuilder.js +138 -0
  115. package/dist/query/RawQueryBuilder.js.map +1 -0
  116. package/dist/query/interpolate.d.ts +45 -0
  117. package/dist/query/interpolate.d.ts.map +1 -0
  118. package/dist/query/interpolate.js +51 -0
  119. package/dist/query/interpolate.js.map +1 -0
  120. package/dist/query/native.d.ts +8 -0
  121. package/dist/query/native.d.ts.map +1 -1
  122. package/dist/query/native.js +14 -0
  123. package/dist/query/native.js.map +1 -1
  124. package/dist/query/operators.d.ts +4 -0
  125. package/dist/query/operators.d.ts.map +1 -0
  126. package/dist/query/operators.js +27 -0
  127. package/dist/query/operators.js.map +1 -0
  128. package/dist/schema/Migration.d.ts +50 -3
  129. package/dist/schema/Migration.d.ts.map +1 -1
  130. package/dist/schema/Migration.js +60 -24
  131. package/dist/schema/Migration.js.map +1 -1
  132. package/dist/schema/MigrationRunner.d.ts +95 -34
  133. package/dist/schema/MigrationRunner.d.ts.map +1 -1
  134. package/dist/schema/MigrationRunner.js +523 -68
  135. package/dist/schema/MigrationRunner.js.map +1 -1
  136. package/dist/schema/Schema.d.ts +114 -0
  137. package/dist/schema/Schema.d.ts.map +1 -1
  138. package/dist/schema/Schema.js +272 -3
  139. package/dist/schema/Schema.js.map +1 -1
  140. package/dist/schema/SchemaDumper.d.ts +121 -0
  141. package/dist/schema/SchemaDumper.d.ts.map +1 -0
  142. package/dist/schema/SchemaDumper.js +365 -0
  143. package/dist/schema/SchemaDumper.js.map +1 -0
  144. package/dist/schema/Seeder.d.ts +13 -0
  145. package/dist/schema/Seeder.d.ts.map +1 -1
  146. package/dist/schema/Seeder.js +28 -5
  147. package/dist/schema/Seeder.js.map +1 -1
  148. package/dist/schema/TableBuilder.d.ts +274 -16
  149. package/dist/schema/TableBuilder.d.ts.map +1 -1
  150. package/dist/schema/TableBuilder.js +656 -52
  151. package/dist/schema/TableBuilder.js.map +1 -1
  152. package/dist/schema/catalog.d.ts +71 -0
  153. package/dist/schema/catalog.d.ts.map +1 -0
  154. package/dist/schema/catalog.js +158 -0
  155. package/dist/schema/catalog.js.map +1 -0
  156. package/dist/schema/introspect.d.ts +1 -1
  157. package/dist/schema/introspect.d.ts.map +1 -1
  158. package/dist/schema/introspect.js +26 -11
  159. package/dist/schema/introspect.js.map +1 -1
  160. package/dist/schema/types.d.ts +150 -1
  161. package/dist/schema/types.d.ts.map +1 -1
  162. package/dist/schema/types.js +11 -0
  163. package/dist/schema/types.js.map +1 -1
  164. package/dist/seeders.d.ts +7 -0
  165. package/dist/seeders.d.ts.map +1 -0
  166. package/dist/seeders.js +7 -0
  167. package/dist/seeders.js.map +1 -0
  168. package/dist/services/db.d.ts +122 -5
  169. package/dist/services/db.d.ts.map +1 -1
  170. package/dist/services/db.js +187 -14
  171. package/dist/services/db.js.map +1 -1
  172. package/dist/testing/DatabaseCleanup.d.ts +33 -7
  173. package/dist/testing/DatabaseCleanup.d.ts.map +1 -1
  174. package/dist/testing/DatabaseCleanup.js +54 -24
  175. package/dist/testing/DatabaseCleanup.js.map +1 -1
  176. package/dist/testing/DbAssertions.d.ts +48 -0
  177. package/dist/testing/DbAssertions.d.ts.map +1 -0
  178. package/dist/testing/DbAssertions.js +80 -0
  179. package/dist/testing/DbAssertions.js.map +1 -0
  180. package/dist/testing/Factory.d.ts +166 -15
  181. package/dist/testing/Factory.d.ts.map +1 -1
  182. package/dist/testing/Factory.js +497 -23
  183. package/dist/testing/Factory.js.map +1 -1
  184. package/dist/testing/TestUtils.d.ts +49 -0
  185. package/dist/testing/TestUtils.d.ts.map +1 -0
  186. package/dist/testing/TestUtils.js +79 -0
  187. package/dist/testing/TestUtils.js.map +1 -0
  188. package/dist/testing/index.d.ts +3 -1
  189. package/dist/testing/index.d.ts.map +1 -1
  190. package/dist/testing/index.js +3 -1
  191. package/dist/testing/index.js.map +1 -1
  192. package/dist/types/relations.d.ts +31 -0
  193. package/dist/types/relations.d.ts.map +1 -0
  194. package/dist/types/relations.js +20 -0
  195. package/dist/types/relations.js.map +1 -0
  196. package/index.darwin-arm64.node +0 -0
  197. package/index.darwin-x64.node +0 -0
  198. package/index.linux-arm64-gnu.node +0 -0
  199. package/index.linux-x64-gnu.node +0 -0
  200. package/index.win32-x64-msvc.node +0 -0
  201. package/package.json +32 -2
  202. package/scripts/guard-publish.mjs +15 -0
  203. package/src/AtlasProvider.ts +305 -52
  204. package/src/BaseEntity.ts +460 -41
  205. package/src/BaseModel.ts +461 -0
  206. package/src/BaseRepository.ts +1710 -421
  207. package/src/ConnectionManager.ts +298 -0
  208. package/src/ModelQuery.ts +2998 -335
  209. package/src/Transaction.ts +227 -30
  210. package/src/adapters/NapiDbAdapter.ts +224 -17
  211. package/src/console/contract.ts +96 -0
  212. package/src/console/factoryCommands.ts +73 -0
  213. package/src/console/migrationCommands.ts +448 -0
  214. package/src/console/schemaCheckCommand.ts +26 -22
  215. package/src/console/schemaDumpCommand.ts +96 -0
  216. package/src/console/schemaGenerateCommand.ts +380 -0
  217. package/src/console/seederCommands.ts +174 -0
  218. package/src/decorators/entity.ts +71 -8
  219. package/src/decorators/hooks.ts +5 -3
  220. package/src/events.ts +117 -0
  221. package/src/factories.ts +10 -0
  222. package/src/index.ts +69 -3
  223. package/src/lucid-schema.ts +22 -0
  224. package/src/metadata-keys.ts +3 -2
  225. package/src/naming/NamingStrategy.ts +23 -0
  226. package/src/orm.ts +13 -0
  227. package/src/query/DatabaseQueryBuilder.ts +2724 -0
  228. package/src/query/DmlBuilder.ts +131 -0
  229. package/src/query/QueryBuilder.ts +8 -0
  230. package/src/query/RawQueryBuilder.ts +173 -0
  231. package/src/query/interpolate.ts +73 -0
  232. package/src/query/native.ts +29 -0
  233. package/src/query/operators.ts +27 -0
  234. package/src/schema/Migration.ts +71 -3
  235. package/src/schema/MigrationRunner.ts +676 -69
  236. package/src/schema/Schema.ts +359 -3
  237. package/src/schema/SchemaDumper.ts +518 -0
  238. package/src/schema/Seeder.ts +47 -10
  239. package/src/schema/TableBuilder.ts +783 -52
  240. package/src/schema/catalog.ts +236 -0
  241. package/src/schema/introspect.ts +26 -9
  242. package/src/schema/types.ts +137 -2
  243. package/src/seeders.ts +16 -0
  244. package/src/services/db.ts +361 -21
  245. package/src/testing/DatabaseCleanup.ts +78 -25
  246. package/src/testing/DbAssertions.ts +127 -0
  247. package/src/testing/Factory.ts +837 -40
  248. package/src/testing/TestUtils.ts +123 -0
  249. package/src/testing/index.ts +12 -1
  250. package/src/types/relations.ts +43 -0
@@ -0,0 +1,127 @@
1
+ import type { AsyncDatabaseConnection, TransactionOptions } from "./adapters/NapiDbAdapter.js";
2
+ import { BaseEntity } from "./BaseEntity.js";
3
+ import { BaseRepository, type DatabaseConnection } from "./BaseRepository.js";
4
+ import type { TransactionClient } from "./Transaction.js";
5
+ /**
6
+ * Options accepted by the static finders/creators — Adonis Lucid's
7
+ * `{ client: trx }`. Routes the operation through a transaction client instead
8
+ * of the model's own connection.
9
+ */
10
+ export interface ModelClientOptions {
11
+ client?: DatabaseConnection;
12
+ }
13
+ /** A concrete BaseModel subclass: a `new()` constructor plus the static façade. */
14
+ type ModelClass<T extends BaseModel> = (new () => T) & typeof BaseModel;
15
+ /**
16
+ * AdonisJS Lucid–style Active Record façade. Subclass this (instead of
17
+ * `BaseEntity`) to get static finders/creators + `instance.save()/delete()`
18
+ * that delegate to a per-connection {@link BaseRepository}, while still
19
+ * inheriting `fill`/`merge`/`refresh`, dirty-tracking and the model-state flags
20
+ * (`$isPersisted`, `$isNew`, …) from BaseEntity.
21
+ *
22
+ * class User extends BaseModel {
23
+ * @PrimaryKey() declare id: number
24
+ * @Column() declare email: string
25
+ * }
26
+ * const u = await User.find(1)
27
+ * if (u) { u.email = "x@y"; await u.save() }
28
+ *
29
+ * `@Entity('table')` is OPTIONAL on a BaseModel — the table name is inferred
30
+ * from the class name via the naming strategy (or `static table`). The
31
+ * Data-Mapper `BaseRepository` remains available for those who prefer it.
32
+ */
33
+ export declare abstract class BaseModel extends BaseEntity {
34
+ #private;
35
+ /** Override the inferred table name (AdonisJS `static table`). */
36
+ static table?: string;
37
+ /** Bind to a named connection (AdonisJS `static connection`); default otherwise. */
38
+ static connection?: string;
39
+ /** Override the primary-key column name (AdonisJS `static primaryKey`); `@PrimaryKey()` otherwise. */
40
+ static primaryKey?: string;
41
+ /**
42
+ * Ensure `@Entity` metadata exists — infer the table name from the class name
43
+ * (naming strategy) or `static table` when the decorator is absent. Idempotent;
44
+ * runs on first repository access.
45
+ */
46
+ static $boot<T extends BaseModel>(this: ModelClass<T>): void;
47
+ /** Resolve this model's connection (named via `static connection`, else default). */
48
+ static $connection(): AsyncDatabaseConnection;
49
+ /**
50
+ * The {@link BaseRepository} backing this model on its resolved connection.
51
+ * Pass `{ client: trx }` (Adonis Lucid) to bind the repository to a
52
+ * transaction, so every finder/creator routed through it runs on that trx.
53
+ */
54
+ static $repo<T extends BaseModel>(this: ModelClass<T>, options?: ModelClientOptions): BaseRepository<T>;
55
+ /**
56
+ * Start a transaction on THIS model's connection (Adonis Lucid
57
+ * `Model.transaction`) — handy when the model overrides `static connection`.
58
+ * Managed when given a callback (auto commit on success, rollback on throw),
59
+ * manual otherwise. On the default connection it is equivalent to
60
+ * `db.transaction(...)`. Accepts an `isolationLevel` via the options.
61
+ */
62
+ static transaction<T>(this: ModelClass<BaseModel>, callback: (trx: TransactionClient) => Promise<T> | T, options?: TransactionOptions): Promise<T>;
63
+ static transaction(this: ModelClass<BaseModel>, options?: TransactionOptions): Promise<TransactionClient>;
64
+ static find<T extends BaseModel>(this: ModelClass<T>, id: string | number, options?: ModelClientOptions): Promise<T | null>;
65
+ static findOrFail<T extends BaseModel>(this: ModelClass<T>, id: string | number, options?: ModelClientOptions): Promise<T>;
66
+ static findBy<T extends BaseModel>(this: ModelClass<T>, column: string, value: unknown, options?: ModelClientOptions): Promise<T | null>;
67
+ static findBy<T extends BaseModel>(this: ModelClass<T>, clause: Record<string, unknown>, options?: ModelClientOptions): Promise<T | null>;
68
+ static findByOrFail<T extends BaseModel>(this: ModelClass<T>, column: string, value: unknown, options?: ModelClientOptions): Promise<T>;
69
+ static findByOrFail<T extends BaseModel>(this: ModelClass<T>, clause: Record<string, unknown>, options?: ModelClientOptions): Promise<T>;
70
+ static findMany<T extends BaseModel>(this: ModelClass<T>, ids: Array<string | number>, options?: ModelClientOptions): Promise<T[]>;
71
+ static findManyBy<T extends BaseModel>(this: ModelClass<T>, column: string, values: Array<string | number>, options?: ModelClientOptions): Promise<T[]>;
72
+ static findManyBy<T extends BaseModel>(this: ModelClass<T>, clause: Record<string, unknown>, options?: ModelClientOptions): Promise<T[]>;
73
+ static all<T extends BaseModel>(this: ModelClass<T>, options?: ModelClientOptions): Promise<T[]>;
74
+ static query<T extends BaseModel>(this: ModelClass<T>, options?: ModelClientOptions): ReturnType<BaseRepository<T>["query"]>;
75
+ static first<T extends BaseModel>(this: ModelClass<T>, options?: ModelClientOptions): Promise<T | null>;
76
+ static firstOrFail<T extends BaseModel>(this: ModelClass<T>, options?: ModelClientOptions): Promise<T>;
77
+ static create<T extends BaseModel>(this: ModelClass<T>, data: Partial<Record<string, unknown>>, options?: ModelClientOptions & {
78
+ allowExtraProperties?: boolean;
79
+ }): Promise<T>;
80
+ static createMany<T extends BaseModel>(this: ModelClass<T>, rows: Array<Partial<Record<string, unknown>>>, options?: ModelClientOptions): Promise<T[]>;
81
+ /** {@link create} without firing lifecycle hooks (AdonisJS Lucid `createQuietly`). */
82
+ static createQuietly<T extends BaseModel>(this: ModelClass<T>, data: Partial<Record<string, unknown>>, options?: ModelClientOptions): Promise<T>;
83
+ /** {@link createMany} without firing lifecycle hooks (AdonisJS Lucid `createManyQuietly`). */
84
+ static createManyQuietly<T extends BaseModel>(this: ModelClass<T>, rows: Array<Partial<Record<string, unknown>>>, options?: ModelClientOptions): Promise<T[]>;
85
+ static firstOrCreate<T extends BaseModel>(this: ModelClass<T>, search: Record<string, unknown>, values?: Record<string, unknown>, options?: ModelClientOptions): Promise<T>;
86
+ static firstOrNew<T extends BaseModel>(this: ModelClass<T>, search: Record<string, unknown>, values?: Record<string, unknown>, options?: ModelClientOptions): Promise<T>;
87
+ static updateOrCreate<T extends BaseModel>(this: ModelClass<T>, search: Record<string, unknown>, values: Record<string, unknown>, options?: ModelClientOptions): Promise<T>;
88
+ static updateOrCreateMany<T extends BaseModel>(this: ModelClass<T>, key: string | string[], rows: Array<Record<string, unknown>>, options?: ModelClientOptions): Promise<T[]>;
89
+ static fetchOrCreateMany<T extends BaseModel>(this: ModelClass<T>, key: string | string[], rows: Array<Record<string, unknown>>, options?: ModelClientOptions): Promise<T[]>;
90
+ static fetchOrNewUpMany<T extends BaseModel>(this: ModelClass<T>, key: string | string[], rows: Array<Record<string, unknown>>, options?: ModelClientOptions): Promise<T[]>;
91
+ /** Empty this model's table (AdonisJS `Model.truncate`). `cascade` is Postgres-only. */
92
+ static truncate<T extends BaseModel>(this: ModelClass<T>, cascade?: boolean, options?: ModelClientOptions): Promise<void>;
93
+ /** The transaction bound to this instance, if any (AdonisJS Lucid `$trx`). */
94
+ get $trx(): DatabaseConnection | undefined;
95
+ /**
96
+ * Bind this instance to a transaction so subsequent `save()` / `delete()` run
97
+ * inside it (AdonisJS Lucid `model.useTransaction`). Chainable.
98
+ *
99
+ * The binding is released when the transaction settles: Lucid clears `$trx`
100
+ * on commit/rollback so a reused instance falls back to the connection pool
101
+ * instead of a finished client. We mirror that by unbinding iff we are still
102
+ * bound to the same trx (a later `useTransaction` to another trx wins).
103
+ */
104
+ useTransaction(trx: DatabaseConnection): this;
105
+ /**
106
+ * The repository backing this instance — transaction-bound when
107
+ * {@link useTransaction} was called. `this.constructor` is the concrete
108
+ * BaseModel subclass at runtime; TS types it only as `Function`, hence the
109
+ * single unavoidable narrowing (the pattern Lucid's own BaseModel uses).
110
+ */
111
+ /**
112
+ * Bind this instance to a named connection at runtime (AdonisJS Lucid
113
+ * `model.useConnection`) — subsequent `save()`/`delete()`/relations run on it.
114
+ * A per-instance override of the class's `static connection`. Chainable.
115
+ */
116
+ useConnection(name: string): this;
117
+ /** INSERT this instance if new, else UPDATE its dirty columns. Returns `this`. */
118
+ save(): Promise<this>;
119
+ /** {@link save} without firing lifecycle hooks (AdonisJS Lucid `saveQuietly`). Returns `this`. */
120
+ saveQuietly(): Promise<this>;
121
+ /** DELETE this instance's row (soft-delete aware). Sets `$isDeleted`. */
122
+ delete(): Promise<void>;
123
+ /** {@link delete} without firing lifecycle hooks (AdonisJS Lucid `deleteQuietly`). */
124
+ deleteQuietly(): Promise<void>;
125
+ }
126
+ export {};
127
+ //# sourceMappingURL=BaseModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseModel.d.ts","sourceRoot":"","sources":["../src/BaseModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ import { BaseEntity } from "./BaseEntity.js";
2
+ import { BaseRepository } from "./BaseRepository.js";
3
+ import { ensureEntityMetadata } from "./decorators/entity.js";
4
+ import { AtlasError } from "./errors.js";
5
+ import { getConnection, getDb } from "./services/db.js";
6
+ import { isTransactionClient } from "./utils/transactionBrand.js";
7
+ /**
8
+ * Narrow the optional trailing argument of an overloaded finder (which is a
9
+ * value in the `(column, value)` form, or the options in the `(clause)` form) to
10
+ * client options — without a cast. An options object without a `client` reads as
11
+ * "no options", which is the same as passing none.
12
+ */
13
+ function isClientOptions(x) {
14
+ return typeof x === "object" && x !== null && "client" in x;
15
+ }
16
+ /**
17
+ * AdonisJS Lucid–style Active Record façade. Subclass this (instead of
18
+ * `BaseEntity`) to get static finders/creators + `instance.save()/delete()`
19
+ * that delegate to a per-connection {@link BaseRepository}, while still
20
+ * inheriting `fill`/`merge`/`refresh`, dirty-tracking and the model-state flags
21
+ * (`$isPersisted`, `$isNew`, …) from BaseEntity.
22
+ *
23
+ * class User extends BaseModel {
24
+ * @PrimaryKey() declare id: number
25
+ * @Column() declare email: string
26
+ * }
27
+ * const u = await User.find(1)
28
+ * if (u) { u.email = "x@y"; await u.save() }
29
+ *
30
+ * `@Entity('table')` is OPTIONAL on a BaseModel — the table name is inferred
31
+ * from the class name via the naming strategy (or `static table`). The
32
+ * Data-Mapper `BaseRepository` remains available for those who prefer it.
33
+ */
34
+ export class BaseModel extends BaseEntity {
35
+ /** Override the inferred table name (AdonisJS `static table`). */
36
+ static table;
37
+ /** Bind to a named connection (AdonisJS `static connection`); default otherwise. */
38
+ static connection;
39
+ /** Override the primary-key column name (AdonisJS `static primaryKey`); `@PrimaryKey()` otherwise. */
40
+ static primaryKey;
41
+ /**
42
+ * Ensure `@Entity` metadata exists — infer the table name from the class name
43
+ * (naming strategy) or `static table` when the decorator is absent. Idempotent;
44
+ * runs on first repository access.
45
+ */
46
+ static $boot() {
47
+ ensureEntityMetadata(this);
48
+ }
49
+ /** Resolve this model's connection (named via `static connection`, else default). */
50
+ static $connection() {
51
+ const conn = this.connection ? getConnection(this.connection) : getDb();
52
+ if (conn === undefined) {
53
+ throw new AtlasError("MISSING_CONNECTION", this.connection
54
+ ? `No connection named '${this.connection}' is registered for model '${this.name}'.`
55
+ : `No default database connection for model '${this.name}' — is AtlasProvider booted?`, {
56
+ hint: "Boot AtlasProvider (config/database.ts) before using models, or register the named connection.",
57
+ });
58
+ }
59
+ return conn;
60
+ }
61
+ /**
62
+ * The {@link BaseRepository} backing this model on its resolved connection.
63
+ * Pass `{ client: trx }` (Adonis Lucid) to bind the repository to a
64
+ * transaction, so every finder/creator routed through it runs on that trx.
65
+ */
66
+ static $repo(options) {
67
+ this.$boot();
68
+ const repo = new BaseRepository(this, this.$connection());
69
+ return options?.client ? repo.useTransaction(options.client) : repo;
70
+ }
71
+ static transaction(callbackOrOptions, options) {
72
+ const conn = this.$connection();
73
+ if (typeof conn.transaction !== "function") {
74
+ throw new AtlasError("E_NO_INTERACTIVE_TRANSACTION", `Model '${this.name}' connection has no interactive transaction().`);
75
+ }
76
+ if (typeof callbackOrOptions === "function") {
77
+ return conn.transaction(callbackOrOptions, options);
78
+ }
79
+ // Manual mode: forward the isolation options if any (the overload rejects an
80
+ // explicit `undefined`, so call with no args when none were passed).
81
+ return callbackOrOptions === undefined
82
+ ? conn.transaction()
83
+ : conn.transaction(callbackOrOptions);
84
+ }
85
+ // — Static finders (AdonisJS Lucid) —
86
+ static find(id, options) {
87
+ return this.$repo(options).find(id);
88
+ }
89
+ static findOrFail(id, options) {
90
+ return this.$repo(options).findOrFail(id);
91
+ }
92
+ static findBy(columnOrClause, valueOrOptions, options) {
93
+ if (typeof columnOrClause === "string") {
94
+ return this.$repo(options).findBy(columnOrClause, valueOrOptions);
95
+ }
96
+ const opts = isClientOptions(valueOrOptions) ? valueOrOptions : undefined;
97
+ return this.$repo(opts).findBy(columnOrClause);
98
+ }
99
+ static findByOrFail(columnOrClause, valueOrOptions, options) {
100
+ if (typeof columnOrClause === "string") {
101
+ return this.$repo(options).findByOrFail(columnOrClause, valueOrOptions);
102
+ }
103
+ const opts = isClientOptions(valueOrOptions) ? valueOrOptions : undefined;
104
+ return this.$repo(opts).findByOrFail(columnOrClause);
105
+ }
106
+ static findMany(ids, options) {
107
+ return this.$repo(options).findMany(ids);
108
+ }
109
+ static findManyBy(columnOrClause, valuesOrOptions, options) {
110
+ if (typeof columnOrClause === "string") {
111
+ const values = Array.isArray(valuesOrOptions) ? valuesOrOptions : [];
112
+ return this.$repo(options).findManyBy(columnOrClause, values);
113
+ }
114
+ const opts = isClientOptions(valuesOrOptions) ? valuesOrOptions : undefined;
115
+ return this.$repo(opts).findManyBy(columnOrClause);
116
+ }
117
+ static all(options) {
118
+ return this.$repo(options).all();
119
+ }
120
+ static query(options) {
121
+ return this.$repo(options).query();
122
+ }
123
+ static first(options) {
124
+ return this.$repo(options).query().first();
125
+ }
126
+ static firstOrFail(options) {
127
+ return this.$repo(options).query().firstOrFail();
128
+ }
129
+ // — Static creators (AdonisJS Lucid) —
130
+ static create(data, options) {
131
+ return this.$repo(options).create(data, {
132
+ allowExtraProperties: options?.allowExtraProperties ?? false,
133
+ });
134
+ }
135
+ static createMany(rows, options) {
136
+ return this.$repo(options).createMany(rows);
137
+ }
138
+ /** {@link create} without firing lifecycle hooks (AdonisJS Lucid `createQuietly`). */
139
+ static createQuietly(data, options) {
140
+ return this.$repo(options).createQuietly(data);
141
+ }
142
+ /** {@link createMany} without firing lifecycle hooks (AdonisJS Lucid `createManyQuietly`). */
143
+ static createManyQuietly(rows, options) {
144
+ return this.$repo(options).createManyQuietly(rows);
145
+ }
146
+ static firstOrCreate(search, values, options) {
147
+ return this.$repo(options).firstOrCreate(search, values);
148
+ }
149
+ static firstOrNew(search, values, options) {
150
+ return this.$repo(options).firstOrNew(search, values);
151
+ }
152
+ static updateOrCreate(search, values, options) {
153
+ return this.$repo(options).updateOrCreate(search, values);
154
+ }
155
+ static updateOrCreateMany(key, rows, options) {
156
+ return this.$repo(options).updateOrCreateMany(key, rows);
157
+ }
158
+ static fetchOrCreateMany(key, rows, options) {
159
+ return this.$repo(options).fetchOrCreateMany(key, rows);
160
+ }
161
+ static fetchOrNewUpMany(key, rows, options) {
162
+ return this.$repo(options).fetchOrNewUpMany(key, rows);
163
+ }
164
+ /** Empty this model's table (AdonisJS `Model.truncate`). `cascade` is Postgres-only. */
165
+ static truncate(cascade = false, options) {
166
+ return this.$repo(options).truncate(cascade);
167
+ }
168
+ // — Instance persistence (AdonisJS Lucid) —
169
+ /** Transaction bound to this instance via {@link useTransaction}, if any. */
170
+ #trx;
171
+ /** Named connection bound at runtime via {@link useConnection}, if any. */
172
+ #connectionOverride;
173
+ /** The transaction bound to this instance, if any (AdonisJS Lucid `$trx`). */
174
+ get $trx() {
175
+ return this.#trx;
176
+ }
177
+ /**
178
+ * Bind this instance to a transaction so subsequent `save()` / `delete()` run
179
+ * inside it (AdonisJS Lucid `model.useTransaction`). Chainable.
180
+ *
181
+ * The binding is released when the transaction settles: Lucid clears `$trx`
182
+ * on commit/rollback so a reused instance falls back to the connection pool
183
+ * instead of a finished client. We mirror that by unbinding iff we are still
184
+ * bound to the same trx (a later `useTransaction` to another trx wins).
185
+ */
186
+ useTransaction(trx) {
187
+ this.#trx = trx;
188
+ // `.after` lives on the transaction client (a plain pool connection has no
189
+ // settle event). In practice useTransaction always receives a trx; guard so
190
+ // the type narrows and a non-trx connection is simply left bound (Lucid too
191
+ // only resets $trx for real transactions).
192
+ if (isTransactionClient(trx)) {
193
+ const release = () => {
194
+ if (this.#trx === trx)
195
+ this.#trx = undefined;
196
+ };
197
+ trx.after("commit", release);
198
+ trx.after("rollback", release);
199
+ }
200
+ return this;
201
+ }
202
+ /**
203
+ * The repository backing this instance — transaction-bound when
204
+ * {@link useTransaction} was called. `this.constructor` is the concrete
205
+ * BaseModel subclass at runtime; TS types it only as `Function`, hence the
206
+ * single unavoidable narrowing (the pattern Lucid's own BaseModel uses).
207
+ */
208
+ /**
209
+ * Bind this instance to a named connection at runtime (AdonisJS Lucid
210
+ * `model.useConnection`) — subsequent `save()`/`delete()`/relations run on it.
211
+ * A per-instance override of the class's `static connection`. Chainable.
212
+ */
213
+ useConnection(name) {
214
+ this.#connectionOverride = name;
215
+ return this;
216
+ }
217
+ #repo() {
218
+ const model = this.constructor;
219
+ if (this.#connectionOverride !== undefined) {
220
+ const conn = getConnection(this.#connectionOverride);
221
+ if (!conn) {
222
+ throw new AtlasError("MISSING_CONNECTION", `Model '${model.name}': no connection named '${this.#connectionOverride}' is registered.`);
223
+ }
224
+ model.$boot();
225
+ const repo = new BaseRepository(model, conn);
226
+ return this.#trx ? repo.useTransaction(this.#trx) : repo;
227
+ }
228
+ const repo = model.$repo();
229
+ return this.#trx ? repo.useTransaction(this.#trx) : repo;
230
+ }
231
+ /** INSERT this instance if new, else UPDATE its dirty columns. Returns `this`. */
232
+ async save() {
233
+ await this.#repo().save(this);
234
+ return this;
235
+ }
236
+ /** {@link save} without firing lifecycle hooks (AdonisJS Lucid `saveQuietly`). Returns `this`. */
237
+ async saveQuietly() {
238
+ await this.#repo().saveQuietly(this);
239
+ return this;
240
+ }
241
+ /** DELETE this instance's row (soft-delete aware). Sets `$isDeleted`. */
242
+ async delete() {
243
+ await this.#repo().delete(this);
244
+ }
245
+ /** {@link delete} without firing lifecycle hooks (AdonisJS Lucid `deleteQuietly`). */
246
+ async deleteQuietly() {
247
+ await this.#repo().deleteQuietly(this);
248
+ }
249
+ }
250
+ //# sourceMappingURL=BaseModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseModel.js","sourceRoot":"","sources":["../src/BaseModel.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @implements FR29, FR31, FR35
5
5
  */
6
- import type { TransactionOptions } from "./adapters/NapiDbAdapter.js";
6
+ import type { QueryMeta, TransactionOptions } from "./adapters/NapiDbAdapter.js";
7
7
  import type { BaseEntity, DomainEvent, RelationProxy } from "./BaseEntity.js";
8
8
  import { getColumnMetadata } from "./decorators/entity.js";
9
9
  import { ModelQuery } from "./ModelQuery.js";
@@ -28,13 +28,26 @@ export type Row = Dict<unknown>;
28
28
  * Drivers backed by `AsyncDatabaseConnection` (`createNapiConnection`)
29
29
  * satisfy this interface out-of-the-box.
30
30
  */
31
+ /** Options for {@link BaseRepository.create} (Adonis Lucid `create` options). */
32
+ export interface CreateOptions {
33
+ /** Skip lifecycle hooks + event dispatch (atlas's legacy `quiet` flag). */
34
+ quiet?: boolean;
35
+ /** Silently drop keys that are not columns instead of throwing (Lucid default: throw). */
36
+ allowExtraProperties?: boolean;
37
+ }
31
38
  export interface DatabaseConnection {
32
- /** Run a write statement; returns rowsAffected. */
33
- execute(sql: string, params?: unknown[]): Promise<{
39
+ /**
40
+ * Run a write statement; returns rowsAffected.
41
+ *
42
+ * `meta` is optional context for the `db:query` event (model, method,
43
+ * per-query debug). A connection that ignores it — every test fake — is
44
+ * still a valid `DatabaseConnection`.
45
+ */
46
+ execute(sql: string, params?: unknown[], meta?: QueryMeta): Promise<{
34
47
  rowsAffected: number;
35
48
  }>;
36
- /** Run a SELECT and return all rows. */
37
- query<T = Row>(sql: string, params?: unknown[]): Promise<T[]>;
49
+ /** Run a SELECT and return all rows. See {@link execute} for `meta`. */
50
+ query<T = Row>(sql: string, params?: unknown[], meta?: QueryMeta): Promise<T[]>;
38
51
  /**
39
52
  * Optional — open an interactive transaction pinned to ONE connection
40
53
  * (Lucid's `db.transaction`: manual without a callback, managed with one).
@@ -62,25 +75,42 @@ export declare class BaseRepository<T extends BaseEntity> {
62
75
  find(id: string | number | bigint): Promise<T | null>;
63
76
  findOrFail(id: string | number): Promise<T>;
64
77
  findBy(column: string, value: unknown): Promise<T | null>;
65
- /** Find by a column or throw `EntityNotFoundError` (AdonisJS `findByOrFail`). */
78
+ findBy(clause: Record<string, unknown>): Promise<T | null>;
79
+ /** Find by a column/clause or throw `EntityNotFoundError` (AdonisJS `findByOrFail`). */
66
80
  findByOrFail(column: string, value: unknown): Promise<T>;
81
+ findByOrFail(clause: Record<string, unknown>): Promise<T>;
67
82
  /** Find many rows by primary key (AdonisJS `findMany`), ordered PK desc. */
68
83
  findMany(ids: Array<string | number>): Promise<T[]>;
69
- /** Find many rows by an arbitrary column (AdonisJS `findManyBy`). */
84
+ /** Find many rows by a column IN values, or by an object clause (AdonisJS `findManyBy`). */
70
85
  findManyBy(column: string, values: Array<string | number>): Promise<T[]>;
86
+ findManyBy(clause: Record<string, unknown>): Promise<T[]>;
71
87
  all(): Promise<T[]>;
88
+ /**
89
+ * Empty this model's table (AdonisJS Lucid `Model.truncate`). Postgres/MySQL
90
+ * issue `TRUNCATE TABLE` (fast, resets identity); SQLite has no TRUNCATE so it
91
+ * falls back to `DELETE FROM`. `cascade` is Postgres-only (truncates dependent
92
+ * FK tables). The table name comes from entity metadata — never user input.
93
+ */
94
+ truncate(cascade?: boolean): Promise<void>;
72
95
  allWithTrashed(): Promise<T[]>;
73
96
  onlyTrashed(): Promise<T[]>;
74
97
  where(column: string, value: unknown): Promise<T[]>;
75
98
  /**
76
- * Build an entity from a plain object and persist it. Fires `beforeSave` →
77
- * `beforeCreate` → INSERT → `afterCreate` → `afterSave`.
99
+ * Build an entity from a plain object and persist it. Fires `beforeCreate` →
100
+ * `beforeSave` → INSERT → `afterCreate` → `afterSave` (AdonisJS/Lucid order:
101
+ * the specific hook runs before the general `beforeSave`).
102
+ *
103
+ * An unknown key throws by default (Lucid); pass `{ allowExtraProperties: true }`
104
+ * to drop unknown keys instead. A bare boolean is the legacy `quiet` flag.
78
105
  */
79
- create(data: Partial<Record<string, unknown>>): Promise<T>;
106
+ create(data: Partial<Record<string, unknown>>, options?: boolean | CreateOptions): Promise<T>;
107
+ /** {@link create} without firing lifecycle hooks (AdonisJS Lucid `createQuietly`). */
108
+ createQuietly(data: Partial<Record<string, unknown>>): Promise<T>;
80
109
  /**
81
110
  * Persist an entity. Insert if PK is missing or row doesn't exist, update
82
- * otherwise. Fires `beforeSave` → (`beforeCreate` | `beforeUpdate`) → DB →
83
- * (`afterCreate` | `afterUpdate`) → `afterSave`, then dispatches
111
+ * otherwise. Fires (`beforeCreate` | `beforeUpdate`) → `beforeSave` → DB →
112
+ * (`afterCreate` | `afterUpdate`) → `afterSave` (AdonisJS/Lucid order: the
113
+ * specific hook runs before the general `beforeSave`), then dispatches
84
114
  * accumulated domain events through `onDomainEvents`.
85
115
  *
86
116
  * Race-safety: the `find(pk)` → branch decision has a TOCTOU window. If a
@@ -91,7 +121,9 @@ export declare class BaseRepository<T extends BaseEntity> {
91
121
  * `beforeCreate` hooks to be idempotent or move side-effects into
92
122
  * `afterCreate` / `afterSave` where they only fire on commit.
93
123
  */
94
- save(entity: T): Promise<void>;
124
+ save(entity: T, quiet?: boolean): Promise<void>;
125
+ /** {@link save} without firing lifecycle hooks (AdonisJS Lucid `saveQuietly`). */
126
+ saveQuietly(entity: T): Promise<void>;
95
127
  /**
96
128
  * Insert many rows in a single multi-row INSERT. Fires beforeSave/beforeCreate
97
129
  * on each hydrated entity, then hydrates from the RETURNING clause (postgres +
@@ -100,7 +132,9 @@ export declare class BaseRepository<T extends BaseEntity> {
100
132
  *
101
133
  * @implements Story 30.1 + 30.5
102
134
  */
103
- createMany(rows: Array<Partial<Record<string, unknown>>>): Promise<T[]>;
135
+ createMany(rows: Array<Partial<Record<string, unknown>>>, quiet?: boolean): Promise<T[]>;
136
+ /** {@link createMany} without firing lifecycle hooks (AdonisJS Lucid `createManyQuietly`). */
137
+ createManyQuietly(rows: Array<Partial<Record<string, unknown>>>): Promise<T[]>;
104
138
  /**
105
139
  * Persist many already-constructed entity instances. Same hooks + batching
106
140
  * as `createMany`, but accepts prebuilt entities so dirty tracking works.
@@ -125,8 +159,25 @@ export declare class BaseRepository<T extends BaseEntity> {
125
159
  firstOrNew(search: Record<string, unknown>, defaults?: Record<string, unknown>): Promise<T>;
126
160
  /** Atomic find-or-update-or-insert (AdonisJS Lucid parity — locked + transactional). */
127
161
  updateOrCreate(search: Record<string, unknown>, values: Record<string, unknown>): Promise<T>;
162
+ /**
163
+ * Bulk find-or-update-or-insert, keyed by a unique column (or columns), in ONE
164
+ * transaction — all-or-nothing (AdonisJS Lucid `updateOrCreateMany`).
165
+ */
166
+ updateOrCreateMany(key: string | string[], rows: Array<Record<string, unknown>>): Promise<T[]>;
167
+ /**
168
+ * Bulk find-or-create keyed by a unique column(s) — existing rows are returned
169
+ * untouched — in one transaction (AdonisJS Lucid `fetchOrCreateMany`).
170
+ */
171
+ fetchOrCreateMany(key: string | string[], rows: Array<Record<string, unknown>>): Promise<T[]>;
172
+ /**
173
+ * Bulk find-or-new keyed by a unique column(s): existing rows are returned,
174
+ * misses become UNPERSISTED in-memory instances (AdonisJS `fetchOrNewUpMany`).
175
+ */
176
+ fetchOrNewUpMany(key: string | string[], rows: Array<Record<string, unknown>>): Promise<T[]>;
128
177
  /** Delete the entity. Fires `beforeDelete` → DB → `afterDelete`. Soft-delete aware. */
129
- delete(entity: T): Promise<void>;
178
+ delete(entity: T, quiet?: boolean): Promise<void>;
179
+ /** {@link delete} without firing lifecycle hooks (AdonisJS Lucid `deleteQuietly`). */
180
+ deleteQuietly(entity: T): Promise<void>;
130
181
  /** Permanently delete (bypasses soft delete). Fires `beforeDelete` / `afterDelete` hooks. */
131
182
  forceDelete(entity: T): Promise<void>;
132
183
  restore(entity: T): Promise<void>;
@@ -194,5 +245,20 @@ export declare class BaseRepository<T extends BaseEntity> {
194
245
  relatedProxy(entity: BaseEntity, relationName: string): RelationProxy;
195
246
  fresh(entity: T): Promise<T>;
196
247
  }
248
+ /**
249
+ * Annotate an adapter callback failure with the property key that triggered
250
+ * it. Without this, a `prepare`/`consume` throwing on row N silently surfaces
251
+ * as "Invalid bind value" or similar, with no hint at WHICH column the
252
+ * adapter rejected — the dev has to bisect across every adapter-tagged
253
+ * property to find the culprit.
254
+ */
255
+ export declare function wrapAdapterError(phase: "prepare" | "consume", propertyKey: string, err: unknown): Error;
256
+ /**
257
+ * Adapter callbacks must be synchronous — the bind layer cannot await before
258
+ * handing values to the Rust DML compiler. Catching an `async` adapter here
259
+ * gives the user a column-annotated error instead of an opaque "Invalid bind
260
+ * value" downstream when the unawaited Promise hits the NAPI boundary.
261
+ */
262
+ export declare function assertNotPromise(phase: "prepare" | "consume", propertyKey: string, value: unknown): void;
197
263
  export {};
198
264
  //# sourceMappingURL=BaseRepository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseRepository.d.ts","sourceRoot":"","sources":["../src/BaseRepository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EACX,UAAU,EAEV,WAAW,EAIX,aAAa,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEN,iBAAiB,EAQjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,UAAU,EAA8B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACN,KAAK,YAAY,EAKjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,iBAAiB,EAAe,MAAM,kBAAkB,CAAC;AAGvE,KAAK,iBAAiB,CAAC,CAAC,SAAS,UAAU,IAAI,UAAU,CAAC,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAEjD,4DAA4D;AAC5D,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAuDhC;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IAClC,mDAAmD;IACnD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,wCAAwC;IACxC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,CAAC,EACb,QAAQ,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACpD,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;CACd;AAmCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAClD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBxB;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS,UAAU;;IAkC/C,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBAGzD,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACjC,EAAE,EAAE,kBAAkB,EACtB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,YAAY,CAAA;KAAE;IA8HrC,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC;IActB,cAAc,CAAC,GAAG,EAAE,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC;IAepD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAerD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAU3C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK/D,iFAAiF;IAC3E,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAU9D,4EAA4E;IACtE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAQzD,qEAAqE;IAC/D,UAAU,CACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAC5B,OAAO,CAAC,CAAC,EAAE,CAAC;IAKT,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAOnB,cAAc,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAI9B,WAAW,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAK3B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAazD;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAmBhE;;;;;;;;;;;;;OAaG;IACG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DpC;;;;;;;OAOG;IACG,UAAU,CACf,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC,CAAC,EAAE,CAAC;IAuDf;;;;;OAKG;IACG,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IA8B3C;;;;;OAKG;IACG,MAAM,CACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC9D,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,GAAE,MAAM,EAAO,GAC1B,OAAO,CAAC,MAAM,CAAC;IAmBlB;;;;OAIG;IACG,aAAa,CAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,OAAO,CAAC,CAAC,CAAC;IAWb,oEAAoE;IAC9D,UAAU,CACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,OAAO,CAAC,CAAC,CAAC;IAWb,wFAAwF;IAClF,cAAc,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAkGb,uFAAuF;IACjF,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtC,6FAA6F;IACvF,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAarC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjC,UAAU,CACf,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAOV,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,EACpB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAQhB;;;;;;;;;OASG;IACH,SAAS,CACR,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAChB,SAAS,CACR,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC;IAYhB,8DAA8D;IAC9D,SAAS,CACR,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAChB,SAAS,CACR,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC;IAcV,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAO1D,YAAY,IAAI,MAAM;IAGtB,mBAAmB,IAAI,MAAM;IA2N7B;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhD;;;;OAIG;IACH;;;;;;OAMG;IACG,SAAS,CACd,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAiBhB;;;;;OAKG;IACG,aAAa,CAClB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GACzB,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;;OAKG;IACG,YAAY,CACjB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa;IAwe/D,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAqElC"}
1
+ {"version":3,"file":"BaseRepository.d.ts","sourceRoot":"","sources":["../src/BaseRepository.ts"],"names":[],"mappings":"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"}