@decaf-ts/core 0.5.0 → 0.5.2

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 (330) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +652 -15
  3. package/dist/core.cjs +2638 -1085
  4. package/dist/core.esm.cjs +2636 -1070
  5. package/lib/esm/identity/decorators.d.ts +52 -14
  6. package/lib/esm/identity/decorators.js +54 -16
  7. package/lib/esm/identity/utils.d.ts +20 -1
  8. package/lib/esm/identity/utils.js +22 -2
  9. package/lib/esm/index.d.ts +11 -15
  10. package/lib/esm/index.js +17 -19
  11. package/lib/esm/interfaces/ErrorParser.d.ts +12 -0
  12. package/lib/esm/interfaces/ErrorParser.js +1 -1
  13. package/lib/esm/interfaces/Executor.d.ts +10 -13
  14. package/lib/esm/interfaces/Executor.js +1 -1
  15. package/lib/esm/interfaces/Observable.d.ts +20 -18
  16. package/lib/esm/interfaces/Observable.js +1 -1
  17. package/lib/esm/interfaces/Observer.d.ts +7 -8
  18. package/lib/esm/interfaces/Observer.js +1 -1
  19. package/lib/esm/interfaces/Paginatable.d.ts +18 -2
  20. package/lib/esm/interfaces/Paginatable.js +1 -1
  21. package/lib/esm/interfaces/Queriable.d.ts +44 -3
  22. package/lib/esm/interfaces/Queriable.js +1 -1
  23. package/lib/esm/interfaces/RawExecutor.d.ts +10 -13
  24. package/lib/esm/interfaces/RawExecutor.js +1 -1
  25. package/lib/esm/interfaces/SequenceOptions.d.ts +50 -5
  26. package/lib/esm/interfaces/SequenceOptions.js +19 -1
  27. package/lib/esm/interfaces/index.d.ts +0 -1
  28. package/lib/esm/interfaces/index.js +1 -2
  29. package/lib/esm/model/BaseModel.d.ts +31 -0
  30. package/lib/esm/model/BaseModel.js +24 -1
  31. package/lib/esm/model/construction.d.ts +442 -9
  32. package/lib/esm/model/construction.js +441 -2
  33. package/lib/esm/model/decorators.d.ts +166 -42
  34. package/lib/esm/model/decorators.js +161 -37
  35. package/lib/esm/model/index.js +1 -2
  36. package/lib/esm/model/types.d.ts +9 -0
  37. package/lib/esm/model/types.js +1 -1
  38. package/lib/esm/persistence/Adapter.d.ts +384 -40
  39. package/lib/esm/persistence/Adapter.js +415 -59
  40. package/lib/esm/persistence/Dispatch.d.ts +131 -0
  41. package/lib/esm/persistence/Dispatch.js +187 -0
  42. package/lib/esm/persistence/ObserverHandler.d.ts +109 -0
  43. package/lib/esm/persistence/ObserverHandler.js +137 -0
  44. package/lib/esm/persistence/Sequence.d.ts +89 -8
  45. package/lib/esm/persistence/Sequence.js +91 -1
  46. package/lib/esm/persistence/constants.d.ts +22 -5
  47. package/lib/esm/persistence/constants.js +23 -7
  48. package/lib/esm/persistence/decorators.d.ts +10 -0
  49. package/lib/esm/persistence/decorators.js +11 -1
  50. package/lib/esm/persistence/errors.d.ts +23 -3
  51. package/lib/esm/persistence/errors.js +25 -7
  52. package/lib/esm/persistence/index.d.ts +3 -0
  53. package/lib/esm/persistence/index.js +4 -1
  54. package/lib/esm/persistence/types.d.ts +21 -0
  55. package/lib/esm/persistence/types.js +2 -0
  56. package/lib/esm/query/Condition.d.ts +88 -44
  57. package/lib/esm/query/Condition.js +144 -62
  58. package/lib/esm/query/Paginator.d.ts +67 -10
  59. package/lib/esm/query/Paginator.js +64 -10
  60. package/lib/esm/query/Statement.d.ts +82 -47
  61. package/lib/esm/query/Statement.js +175 -122
  62. package/lib/esm/query/constants.d.ts +25 -64
  63. package/lib/esm/query/constants.js +26 -68
  64. package/lib/esm/query/errors.d.ts +14 -0
  65. package/lib/esm/query/errors.js +15 -1
  66. package/lib/esm/query/index.d.ts +0 -5
  67. package/lib/esm/query/index.js +1 -6
  68. package/lib/esm/query/options.d.ts +69 -178
  69. package/lib/esm/query/options.js +1 -1
  70. package/lib/esm/query/selectors.d.ts +20 -24
  71. package/lib/esm/query/selectors.js +1 -1
  72. package/lib/esm/ram/RamAdapter.d.ts +322 -20
  73. package/lib/esm/ram/RamAdapter.js +360 -140
  74. package/lib/esm/ram/RamContext.d.ts +16 -1
  75. package/lib/esm/ram/RamContext.js +18 -3
  76. package/lib/esm/ram/RamPaginator.d.ts +51 -6
  77. package/lib/esm/ram/RamPaginator.js +58 -6
  78. package/lib/esm/ram/RamSequence.d.ts +49 -24
  79. package/lib/esm/ram/RamSequence.js +52 -40
  80. package/lib/esm/ram/RamStatement.d.ts +84 -6
  81. package/lib/esm/ram/RamStatement.js +175 -6
  82. package/lib/esm/ram/constants.d.ts +9 -0
  83. package/lib/esm/ram/constants.js +10 -0
  84. package/lib/esm/ram/handlers.d.ts +25 -0
  85. package/lib/esm/ram/handlers.js +27 -0
  86. package/lib/esm/ram/index.d.ts +4 -4
  87. package/lib/esm/ram/index.js +9 -5
  88. package/lib/esm/ram/model/RamSequence.d.ts +21 -9
  89. package/lib/esm/ram/model/RamSequence.js +19 -1
  90. package/lib/esm/ram/types.d.ts +47 -5
  91. package/lib/esm/ram/types.js +1 -1
  92. package/lib/esm/repository/Repository.d.ts +381 -22
  93. package/lib/esm/repository/Repository.js +446 -43
  94. package/lib/esm/repository/constants.d.ts +23 -13
  95. package/lib/esm/repository/constants.js +24 -14
  96. package/lib/esm/repository/decorators.d.ts +27 -0
  97. package/lib/esm/repository/decorators.js +28 -1
  98. package/lib/esm/repository/errors.d.ts +12 -11
  99. package/lib/esm/repository/errors.js +13 -16
  100. package/lib/esm/repository/injectables.d.ts +18 -0
  101. package/lib/esm/repository/injectables.js +19 -1
  102. package/lib/esm/repository/types.d.ts +13 -1
  103. package/lib/esm/repository/types.js +1 -1
  104. package/lib/esm/repository/utils.d.ts +11 -0
  105. package/lib/esm/repository/utils.js +12 -1
  106. package/lib/esm/utils/decorators.d.ts +9 -0
  107. package/lib/esm/utils/decorators.js +19 -0
  108. package/lib/esm/utils/errors.d.ts +56 -0
  109. package/lib/esm/utils/errors.js +63 -0
  110. package/lib/esm/utils/index.d.ts +2 -0
  111. package/lib/esm/utils/index.js +3 -0
  112. package/lib/identity/decorators.cjs +54 -16
  113. package/lib/identity/decorators.d.ts +52 -14
  114. package/lib/identity/utils.cjs +22 -2
  115. package/lib/identity/utils.d.ts +20 -1
  116. package/lib/index.cjs +17 -19
  117. package/lib/index.d.ts +11 -15
  118. package/lib/interfaces/ErrorParser.cjs +1 -1
  119. package/lib/interfaces/ErrorParser.d.ts +12 -0
  120. package/lib/interfaces/Executor.cjs +1 -1
  121. package/lib/interfaces/Executor.d.ts +10 -13
  122. package/lib/interfaces/Observable.cjs +1 -1
  123. package/lib/interfaces/Observable.d.ts +20 -18
  124. package/lib/interfaces/Observer.cjs +1 -1
  125. package/lib/interfaces/Observer.d.ts +7 -8
  126. package/lib/interfaces/Paginatable.cjs +1 -1
  127. package/lib/interfaces/Paginatable.d.ts +18 -2
  128. package/lib/interfaces/Queriable.cjs +1 -1
  129. package/lib/interfaces/Queriable.d.ts +44 -3
  130. package/lib/interfaces/RawExecutor.cjs +1 -1
  131. package/lib/interfaces/RawExecutor.d.ts +10 -13
  132. package/lib/interfaces/SequenceOptions.cjs +19 -1
  133. package/lib/interfaces/SequenceOptions.d.ts +50 -5
  134. package/lib/interfaces/index.cjs +1 -2
  135. package/lib/interfaces/index.d.ts +0 -1
  136. package/lib/model/BaseModel.cjs +24 -1
  137. package/lib/model/BaseModel.d.ts +31 -0
  138. package/lib/model/construction.cjs +441 -2
  139. package/lib/model/construction.d.ts +442 -9
  140. package/lib/model/decorators.cjs +161 -37
  141. package/lib/model/decorators.d.ts +166 -42
  142. package/lib/model/index.cjs +1 -2
  143. package/lib/model/types.cjs +1 -1
  144. package/lib/model/types.d.ts +9 -0
  145. package/lib/persistence/Adapter.cjs +414 -58
  146. package/lib/persistence/Adapter.d.ts +384 -40
  147. package/lib/persistence/Dispatch.cjs +191 -0
  148. package/lib/persistence/Dispatch.d.ts +131 -0
  149. package/lib/persistence/ObserverHandler.cjs +141 -0
  150. package/lib/persistence/ObserverHandler.d.ts +109 -0
  151. package/lib/persistence/Sequence.cjs +91 -1
  152. package/lib/persistence/Sequence.d.ts +89 -8
  153. package/lib/persistence/constants.cjs +24 -8
  154. package/lib/persistence/constants.d.ts +22 -5
  155. package/lib/persistence/decorators.cjs +11 -1
  156. package/lib/persistence/decorators.d.ts +10 -0
  157. package/lib/persistence/errors.cjs +26 -9
  158. package/lib/persistence/errors.d.ts +23 -3
  159. package/lib/persistence/index.cjs +4 -1
  160. package/lib/persistence/index.d.ts +3 -0
  161. package/lib/persistence/types.cjs +3 -0
  162. package/lib/persistence/types.d.ts +21 -0
  163. package/lib/query/Condition.cjs +143 -61
  164. package/lib/query/Condition.d.ts +88 -44
  165. package/lib/query/Paginator.cjs +64 -10
  166. package/lib/query/Paginator.d.ts +67 -10
  167. package/lib/query/Statement.cjs +174 -121
  168. package/lib/query/Statement.d.ts +82 -47
  169. package/lib/query/constants.cjs +27 -69
  170. package/lib/query/constants.d.ts +25 -64
  171. package/lib/query/errors.cjs +15 -1
  172. package/lib/query/errors.d.ts +14 -0
  173. package/lib/query/index.cjs +1 -6
  174. package/lib/query/index.d.ts +0 -5
  175. package/lib/query/options.cjs +1 -1
  176. package/lib/query/options.d.ts +69 -178
  177. package/lib/query/selectors.cjs +1 -1
  178. package/lib/query/selectors.d.ts +20 -24
  179. package/lib/ram/RamAdapter.cjs +358 -172
  180. package/lib/ram/RamAdapter.d.ts +322 -20
  181. package/lib/ram/RamContext.cjs +18 -3
  182. package/lib/ram/RamContext.d.ts +16 -1
  183. package/lib/ram/RamPaginator.cjs +58 -6
  184. package/lib/ram/RamPaginator.d.ts +51 -6
  185. package/lib/ram/RamSequence.cjs +52 -41
  186. package/lib/ram/RamSequence.d.ts +49 -24
  187. package/lib/ram/RamStatement.cjs +175 -6
  188. package/lib/ram/RamStatement.d.ts +84 -6
  189. package/lib/ram/constants.cjs +13 -0
  190. package/lib/ram/constants.d.ts +9 -0
  191. package/lib/ram/handlers.cjs +30 -0
  192. package/lib/ram/handlers.d.ts +25 -0
  193. package/lib/ram/index.cjs +9 -5
  194. package/lib/ram/index.d.ts +4 -4
  195. package/lib/ram/model/RamSequence.cjs +19 -1
  196. package/lib/ram/model/RamSequence.d.ts +21 -9
  197. package/lib/ram/types.cjs +1 -1
  198. package/lib/ram/types.d.ts +47 -5
  199. package/lib/repository/Repository.cjs +445 -42
  200. package/lib/repository/Repository.d.ts +381 -22
  201. package/lib/repository/constants.cjs +24 -14
  202. package/lib/repository/constants.d.ts +23 -13
  203. package/lib/repository/decorators.cjs +28 -1
  204. package/lib/repository/decorators.d.ts +27 -0
  205. package/lib/repository/errors.cjs +14 -19
  206. package/lib/repository/errors.d.ts +12 -11
  207. package/lib/repository/injectables.cjs +19 -1
  208. package/lib/repository/injectables.d.ts +18 -0
  209. package/lib/repository/types.cjs +1 -1
  210. package/lib/repository/types.d.ts +13 -1
  211. package/lib/repository/utils.cjs +12 -1
  212. package/lib/repository/utils.d.ts +11 -0
  213. package/lib/utils/decorators.cjs +22 -0
  214. package/lib/utils/decorators.d.ts +9 -0
  215. package/lib/utils/errors.cjs +69 -0
  216. package/lib/utils/errors.d.ts +56 -0
  217. package/lib/{validators → utils}/index.cjs +2 -2
  218. package/lib/utils/index.d.ts +2 -0
  219. package/package.json +5 -5
  220. package/lib/esm/interfaces/Builder.d.ts +0 -16
  221. package/lib/esm/interfaces/Builder.js +0 -2
  222. package/lib/esm/model/IdentifiedBaseModel.d.ts +0 -7
  223. package/lib/esm/model/IdentifiedBaseModel.js +0 -25
  224. package/lib/esm/query/Clause.d.ts +0 -50
  225. package/lib/esm/query/Clause.js +0 -82
  226. package/lib/esm/query/ClauseFactory.d.ts +0 -71
  227. package/lib/esm/query/ClauseFactory.js +0 -6
  228. package/lib/esm/query/Query.d.ts +0 -43
  229. package/lib/esm/query/Query.js +0 -54
  230. package/lib/esm/query/clauses/FromClause.d.ts +0 -45
  231. package/lib/esm/query/clauses/FromClause.js +0 -59
  232. package/lib/esm/query/clauses/GroupByClause.d.ts +0 -21
  233. package/lib/esm/query/clauses/GroupByClause.js +0 -19
  234. package/lib/esm/query/clauses/InsertClause.d.ts +0 -37
  235. package/lib/esm/query/clauses/InsertClause.js +0 -55
  236. package/lib/esm/query/clauses/LimitClause.d.ts +0 -29
  237. package/lib/esm/query/clauses/LimitClause.js +0 -27
  238. package/lib/esm/query/clauses/OffsetClause.d.ts +0 -21
  239. package/lib/esm/query/clauses/OffsetClause.js +0 -19
  240. package/lib/esm/query/clauses/OrderByClause.d.ts +0 -37
  241. package/lib/esm/query/clauses/OrderByClause.js +0 -39
  242. package/lib/esm/query/clauses/SelectClause.d.ts +0 -47
  243. package/lib/esm/query/clauses/SelectClause.js +0 -62
  244. package/lib/esm/query/clauses/SelectorBasedClause.d.ts +0 -25
  245. package/lib/esm/query/clauses/SelectorBasedClause.js +0 -44
  246. package/lib/esm/query/clauses/ValuesClause.d.ts +0 -21
  247. package/lib/esm/query/clauses/ValuesClause.js +0 -36
  248. package/lib/esm/query/clauses/WhereClause.d.ts +0 -46
  249. package/lib/esm/query/clauses/WhereClause.js +0 -71
  250. package/lib/esm/query/clauses/index.d.ts +0 -10
  251. package/lib/esm/query/clauses/index.js +0 -11
  252. package/lib/esm/query/types.d.ts +0 -2
  253. package/lib/esm/query/types.js +0 -2
  254. package/lib/esm/ram/RamClauseFactory.d.ts +0 -17
  255. package/lib/esm/ram/RamClauseFactory.js +0 -92
  256. package/lib/esm/ram/clauses/FromClause.d.ts +0 -7
  257. package/lib/esm/ram/clauses/FromClause.js +0 -11
  258. package/lib/esm/ram/clauses/InsertClause.d.ts +0 -7
  259. package/lib/esm/ram/clauses/InsertClause.js +0 -13
  260. package/lib/esm/ram/clauses/OrderByClause.d.ts +0 -7
  261. package/lib/esm/ram/clauses/OrderByClause.js +0 -39
  262. package/lib/esm/ram/clauses/SelectClause.d.ts +0 -7
  263. package/lib/esm/ram/clauses/SelectClause.js +0 -16
  264. package/lib/esm/ram/clauses/ValuesClause.d.ts +0 -7
  265. package/lib/esm/ram/clauses/ValuesClause.js +0 -12
  266. package/lib/esm/ram/clauses/WhereClause.d.ts +0 -7
  267. package/lib/esm/ram/clauses/WhereClause.js +0 -11
  268. package/lib/esm/ram/clauses/index.d.ts +0 -6
  269. package/lib/esm/ram/clauses/index.js +0 -7
  270. package/lib/esm/validators/ClauseSequenceValidator.d.ts +0 -28
  271. package/lib/esm/validators/ClauseSequenceValidator.js +0 -95
  272. package/lib/esm/validators/decorators.d.ts +0 -10
  273. package/lib/esm/validators/decorators.js +0 -24
  274. package/lib/esm/validators/index.d.ts +0 -2
  275. package/lib/esm/validators/index.js +0 -3
  276. package/lib/interfaces/Builder.cjs +0 -3
  277. package/lib/interfaces/Builder.d.ts +0 -16
  278. package/lib/model/IdentifiedBaseModel.cjs +0 -29
  279. package/lib/model/IdentifiedBaseModel.d.ts +0 -7
  280. package/lib/query/Clause.cjs +0 -86
  281. package/lib/query/Clause.d.ts +0 -50
  282. package/lib/query/ClauseFactory.cjs +0 -10
  283. package/lib/query/ClauseFactory.d.ts +0 -71
  284. package/lib/query/Query.cjs +0 -58
  285. package/lib/query/Query.d.ts +0 -43
  286. package/lib/query/clauses/FromClause.cjs +0 -63
  287. package/lib/query/clauses/FromClause.d.ts +0 -45
  288. package/lib/query/clauses/GroupByClause.cjs +0 -23
  289. package/lib/query/clauses/GroupByClause.d.ts +0 -21
  290. package/lib/query/clauses/InsertClause.cjs +0 -59
  291. package/lib/query/clauses/InsertClause.d.ts +0 -37
  292. package/lib/query/clauses/LimitClause.cjs +0 -31
  293. package/lib/query/clauses/LimitClause.d.ts +0 -29
  294. package/lib/query/clauses/OffsetClause.cjs +0 -23
  295. package/lib/query/clauses/OffsetClause.d.ts +0 -21
  296. package/lib/query/clauses/OrderByClause.cjs +0 -43
  297. package/lib/query/clauses/OrderByClause.d.ts +0 -37
  298. package/lib/query/clauses/SelectClause.cjs +0 -66
  299. package/lib/query/clauses/SelectClause.d.ts +0 -47
  300. package/lib/query/clauses/SelectorBasedClause.cjs +0 -48
  301. package/lib/query/clauses/SelectorBasedClause.d.ts +0 -25
  302. package/lib/query/clauses/ValuesClause.cjs +0 -40
  303. package/lib/query/clauses/ValuesClause.d.ts +0 -21
  304. package/lib/query/clauses/WhereClause.cjs +0 -75
  305. package/lib/query/clauses/WhereClause.d.ts +0 -46
  306. package/lib/query/clauses/index.cjs +0 -27
  307. package/lib/query/clauses/index.d.ts +0 -10
  308. package/lib/query/types.cjs +0 -3
  309. package/lib/query/types.d.ts +0 -2
  310. package/lib/ram/RamClauseFactory.cjs +0 -96
  311. package/lib/ram/RamClauseFactory.d.ts +0 -17
  312. package/lib/ram/clauses/FromClause.cjs +0 -15
  313. package/lib/ram/clauses/FromClause.d.ts +0 -7
  314. package/lib/ram/clauses/InsertClause.cjs +0 -17
  315. package/lib/ram/clauses/InsertClause.d.ts +0 -7
  316. package/lib/ram/clauses/OrderByClause.cjs +0 -43
  317. package/lib/ram/clauses/OrderByClause.d.ts +0 -7
  318. package/lib/ram/clauses/SelectClause.cjs +0 -20
  319. package/lib/ram/clauses/SelectClause.d.ts +0 -7
  320. package/lib/ram/clauses/ValuesClause.cjs +0 -16
  321. package/lib/ram/clauses/ValuesClause.d.ts +0 -7
  322. package/lib/ram/clauses/WhereClause.cjs +0 -15
  323. package/lib/ram/clauses/WhereClause.d.ts +0 -7
  324. package/lib/ram/clauses/index.cjs +0 -23
  325. package/lib/ram/clauses/index.d.ts +0 -6
  326. package/lib/validators/ClauseSequenceValidator.cjs +0 -98
  327. package/lib/validators/ClauseSequenceValidator.d.ts +0 -28
  328. package/lib/validators/decorators.cjs +0 -27
  329. package/lib/validators/decorators.d.ts +0 -10
  330. package/lib/validators/index.d.ts +0 -2
@@ -2,13 +2,103 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Sequence = void 0;
4
4
  const utils_1 = require("./../identity/utils.cjs");
5
+ const db_decorators_1 = require("@decaf-ts/db-decorators");
6
+ const logging_1 = require("@decaf-ts/logging");
7
+ /**
8
+ * @description Abstract base class for sequence generation
9
+ * @summary Provides a framework for generating sequential values (like primary keys) in the persistence layer.
10
+ * Implementations of this class handle the specifics of how sequences are stored and incremented in different
11
+ * database systems.
12
+ * @param {SequenceOptions} options - Configuration options for the sequence generator
13
+ * @class Sequence
14
+ * @example
15
+ * ```typescript
16
+ * // Example implementation for a specific database
17
+ * class PostgresSequence extends Sequence {
18
+ * constructor(options: SequenceOptions) {
19
+ * super(options);
20
+ * }
21
+ *
22
+ * async next(): Promise<number> {
23
+ * // Implementation to get next value from PostgreSQL sequence
24
+ * const result = await this.options.executor.raw(`SELECT nextval('${this.options.name}')`);
25
+ * return parseInt(result.rows[0].nextval);
26
+ * }
27
+ *
28
+ * async current(): Promise<number> {
29
+ * // Implementation to get current value from PostgreSQL sequence
30
+ * const result = await this.options.executor.raw(`SELECT currval('${this.options.name}')`);
31
+ * return parseInt(result.rows[0].currval);
32
+ * }
33
+ *
34
+ * async range(count: number): Promise<number[]> {
35
+ * // Implementation to get a range of values
36
+ * const values: number[] = [];
37
+ * for (let i = 0; i < count; i++) {
38
+ * values.push(await this.next());
39
+ * }
40
+ * return values;
41
+ * }
42
+ * }
43
+ *
44
+ * // Usage
45
+ * const sequence = new PostgresSequence({
46
+ * name: 'user_id_seq',
47
+ * executor: dbExecutor
48
+ * });
49
+ *
50
+ * const nextId = await sequence.next();
51
+ * ```
52
+ */
5
53
  class Sequence {
54
+ /**
55
+ * @description Accessor for the logger instance
56
+ * @summary Gets or initializes the logger for this sequence
57
+ * @return {Logger} The logger instance
58
+ */
59
+ get log() {
60
+ if (!this.logger)
61
+ this.logger = logging_1.Logging.for(this);
62
+ return this.logger;
63
+ }
64
+ /**
65
+ * @description Creates a new sequence instance
66
+ * @summary Protected constructor that initializes the sequence with the provided options
67
+ */
6
68
  constructor(options) {
7
69
  this.options = options;
8
70
  }
71
+ /**
72
+ * @description Gets the primary key sequence name for a model
73
+ * @summary Utility method that returns the standardized sequence name for a model's primary key
74
+ * @template M - The model type
75
+ * @param {M|Constructor<M>} model - The model instance or constructor
76
+ * @return {string} The sequence name for the model's primary key
77
+ */
9
78
  static pk(model) {
10
79
  return (0, utils_1.sequenceNameForModel)(model, "pk");
11
80
  }
81
+ /**
82
+ * @description Parses a sequence value to the appropriate type
83
+ * @summary Converts a sequence value to the specified type (Number or BigInt)
84
+ * @param {"Number"|"BigInt"|undefined} type - The target type to convert to
85
+ * @param {string|number|bigint} value - The value to convert
86
+ * @return {string|number|bigint} The converted value
87
+ */
88
+ static parseValue(type, value) {
89
+ switch (type) {
90
+ case "Number":
91
+ return typeof value === "string"
92
+ ? parseInt(value)
93
+ : typeof value === "number"
94
+ ? value
95
+ : BigInt(value);
96
+ case "BigInt":
97
+ return BigInt(value);
98
+ default:
99
+ throw new db_decorators_1.InternalError("Should never happen");
100
+ }
101
+ }
12
102
  }
13
103
  exports.Sequence = Sequence;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc2lzdGVuY2UvU2VxdWVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsbURBQXlEO0FBR3pELE1BQXNCLFFBQVE7SUFDNUIsWUFBeUMsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7SUFBRyxDQUFDO0lBV3JFLE1BQU0sQ0FBQyxFQUFFLENBQWtCLEtBQXlCO1FBQ2xELE9BQU8sSUFBQSw0QkFBb0IsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBZkQsNEJBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IFNlcXVlbmNlXG4gKlxuICogQGludGVyZmFjZSBTZXF1ZW5jZVxuICpcbiAqIEBjYXRlZ29yeSBTZXF1ZW5jZXNcbiAqL1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgc2VxdWVuY2VOYW1lRm9yTW9kZWwgfSBmcm9tIFwiLi4vaWRlbnRpdHkvdXRpbHNcIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlcXVlbmNlT3B0aW9uc1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VxdWVuY2Uge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnM6IFNlcXVlbmNlT3B0aW9ucykge31cblxuICAvKipcbiAgICogQHN1bW1hcnkgZ2VuZXJhdGVzIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBzZXF1ZW5jZVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBhYnN0cmFjdCBuZXh0KCk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PjtcbiAgYWJzdHJhY3QgY3VycmVudCgpOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IGJpZ2ludD47XG4gIGFic3RyYWN0IHJhbmdlKGNvdW50OiBudW1iZXIpOiBQcm9taXNlPChudW1iZXIgfCBzdHJpbmcgfCBiaWdpbnQpW10+O1xuXG4gIHN0YXRpYyBwazxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4pIHtcbiAgICByZXR1cm4gc2VxdWVuY2VOYW1lRm9yTW9kZWwobW9kZWwsIFwicGtcIik7XG4gIH1cbn1cbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc2lzdGVuY2UvU2VxdWVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQXlEO0FBRXpELDJEQUF3RDtBQUN4RCwrQ0FBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILE1BQXNCLFFBQVE7SUFPNUI7Ozs7T0FJRztJQUNILElBQWMsR0FBRztRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsSUFBVyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUF5QyxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtJQUFHLENBQUM7SUF3QnJFOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxFQUFFLENBQWtCLEtBQXlCO1FBQ2xELE9BQU8sSUFBQSw0QkFBb0IsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQ2YsSUFBcUMsRUFDckMsS0FBK0I7UUFFL0IsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVE7b0JBQzlCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNqQixDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUTt3QkFDekIsQ0FBQyxDQUFDLEtBQUs7d0JBQ1AsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkI7Z0JBQ0UsTUFBTSxJQUFJLDZCQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaEZELDRCQWdGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHNlcXVlbmNlTmFtZUZvck1vZGVsIH0gZnJvbSBcIi4uL2lkZW50aXR5L3V0aWxzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZU9wdGlvbnNcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBzZXF1ZW5jZSBnZW5lcmF0aW9uXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIGZyYW1ld29yayBmb3IgZ2VuZXJhdGluZyBzZXF1ZW50aWFsIHZhbHVlcyAobGlrZSBwcmltYXJ5IGtleXMpIGluIHRoZSBwZXJzaXN0ZW5jZSBsYXllci5cbiAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGNsYXNzIGhhbmRsZSB0aGUgc3BlY2lmaWNzIG9mIGhvdyBzZXF1ZW5jZXMgYXJlIHN0b3JlZCBhbmQgaW5jcmVtZW50ZWQgaW4gZGlmZmVyZW50XG4gKiBkYXRhYmFzZSBzeXN0ZW1zLlxuICogQHBhcmFtIHtTZXF1ZW5jZU9wdGlvbnN9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzZXF1ZW5jZSBnZW5lcmF0b3JcbiAqIEBjbGFzcyBTZXF1ZW5jZVxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEV4YW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgZGF0YWJhc2VcbiAqIGNsYXNzIFBvc3RncmVzU2VxdWVuY2UgZXh0ZW5kcyBTZXF1ZW5jZSB7XG4gKiAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNlcXVlbmNlT3B0aW9ucykge1xuICogICAgIHN1cGVyKG9wdGlvbnMpO1xuICogICB9XG4gKlxuICogICBhc3luYyBuZXh0KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb24gdG8gZ2V0IG5leHQgdmFsdWUgZnJvbSBQb3N0Z3JlU1FMIHNlcXVlbmNlXG4gKiAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5vcHRpb25zLmV4ZWN1dG9yLnJhdyhgU0VMRUNUIG5leHR2YWwoJyR7dGhpcy5vcHRpb25zLm5hbWV9JylgKTtcbiAqICAgICByZXR1cm4gcGFyc2VJbnQocmVzdWx0LnJvd3NbMF0ubmV4dHZhbCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIGN1cnJlbnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvbiB0byBnZXQgY3VycmVudCB2YWx1ZSBmcm9tIFBvc3RncmVTUUwgc2VxdWVuY2VcbiAqICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuZXhlY3V0b3IucmF3KGBTRUxFQ1QgY3VycnZhbCgnJHt0aGlzLm9wdGlvbnMubmFtZX0nKWApO1xuICogICAgIHJldHVybiBwYXJzZUludChyZXN1bHQucm93c1swXS5jdXJydmFsKTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgcmFuZ2UoY291bnQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvbiB0byBnZXQgYSByYW5nZSBvZiB2YWx1ZXNcbiAqICAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG4gKiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gKiAgICAgICB2YWx1ZXMucHVzaChhd2FpdCB0aGlzLm5leHQoKSk7XG4gKiAgICAgfVxuICogICAgIHJldHVybiB2YWx1ZXM7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBVc2FnZVxuICogY29uc3Qgc2VxdWVuY2UgPSBuZXcgUG9zdGdyZXNTZXF1ZW5jZSh7XG4gKiAgIG5hbWU6ICd1c2VyX2lkX3NlcScsXG4gKiAgIGV4ZWN1dG9yOiBkYkV4ZWN1dG9yXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBuZXh0SWQgPSBhd2FpdCBzZXF1ZW5jZS5uZXh0KCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoaXMgc2VxdWVuY2VcbiAgICogQHN1bW1hcnkgTGF6aWx5IGluaXRpYWxpemVkIGxvZ2dlciBmb3IgdGhlIHNlcXVlbmNlIGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIGxvZ2dlciE6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFjY2Vzc29yIGZvciB0aGUgbG9nZ2VyIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEdldHMgb3IgaW5pdGlhbGl6ZXMgdGhlIGxvZ2dlciBmb3IgdGhpcyBzZXF1ZW5jZVxuICAgKiBAcmV0dXJuIHtMb2dnZXJ9IFRoZSBsb2dnZXIgaW5zdGFuY2VcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgbG9nKCkge1xuICAgIGlmICghdGhpcy5sb2dnZXIpIHRoaXMubG9nZ2VyID0gTG9nZ2luZy5mb3IodGhpcyBhcyBhbnkpO1xuICAgIHJldHVybiB0aGlzLmxvZ2dlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBzZXF1ZW5jZSBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBQcm90ZWN0ZWQgY29uc3RydWN0b3IgdGhhdCBpbml0aWFsaXplcyB0aGUgc2VxdWVuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgb3B0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpIHt9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBzZXF1ZW5jZVxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIG5leHQgdmFsdWUgZnJvbSB0aGUgc2VxdWVuY2UsIGluY3JlbWVudGluZyBpdCBpbiB0aGUgcHJvY2Vzc1xuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBzZXF1ZW5jZVxuICAgKi9cbiAgYWJzdHJhY3QgbmV4dCgpOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IGJpZ2ludD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzZXF1ZW5jZVxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0XG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhlIHNlcXVlbmNlXG4gICAqL1xuICBhYnN0cmFjdCBjdXJyZW50KCk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSByYW5nZSBvZiBzZXF1ZW50aWFsIHZhbHVlc1xuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgbXVsdGlwbGUgc2VxdWVudGlhbCB2YWx1ZXMgYXQgb25jZSwgd2hpY2ggY2FuIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gY2FsbGluZyBuZXh0KCkgbXVsdGlwbGUgdGltZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gVGhlIG51bWJlciBvZiBzZXF1ZW50aWFsIHZhbHVlcyB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHNlcXVlbnRpYWwgdmFsdWVzXG4gICAqL1xuICBhYnN0cmFjdCByYW5nZShjb3VudDogbnVtYmVyKTogUHJvbWlzZTwobnVtYmVyIHwgc3RyaW5nIHwgYmlnaW50KVtdPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHByaW1hcnkga2V5IHNlcXVlbmNlIG5hbWUgZm9yIGEgbW9kZWxcbiAgICogQHN1bW1hcnkgVXRpbGl0eSBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBzdGFuZGFyZGl6ZWQgc2VxdWVuY2UgbmFtZSBmb3IgYSBtb2RlbCdzIHByaW1hcnkga2V5XG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHBhcmFtIHtNfENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZXF1ZW5jZSBuYW1lIGZvciB0aGUgbW9kZWwncyBwcmltYXJ5IGtleVxuICAgKi9cbiAgc3RhdGljIHBrPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPikge1xuICAgIHJldHVybiBzZXF1ZW5jZU5hbWVGb3JNb2RlbChtb2RlbCwgXCJwa1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGEgc2VxdWVuY2UgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGVcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBzZXF1ZW5jZSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHR5cGUgKE51bWJlciBvciBCaWdJbnQpXG4gICAqIEBwYXJhbSB7XCJOdW1iZXJcInxcIkJpZ0ludFwifHVuZGVmaW5lZH0gdHlwZSAtIFRoZSB0YXJnZXQgdHlwZSB0byBjb252ZXJ0IHRvXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAgICogQHJldHVybiB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IFRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAgICovXG4gIHN0YXRpYyBwYXJzZVZhbHVlKFxuICAgIHR5cGU6IFwiTnVtYmVyXCIgfCBcIkJpZ0ludFwiIHwgdW5kZWZpbmVkLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnRcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJOdW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gcGFyc2VJbnQodmFsdWUpXG4gICAgICAgICAgOiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogQmlnSW50KHZhbHVlKTtcbiAgICAgIGNhc2UgXCJCaWdJbnRcIjpcbiAgICAgICAgcmV0dXJuIEJpZ0ludCh2YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIlNob3VsZCBuZXZlciBoYXBwZW5cIik7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,22 +1,103 @@
1
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
2
+ import { SequenceOptions } from "../interfaces/SequenceOptions";
3
+ import { Logger } from "@decaf-ts/logging";
1
4
  /**
2
- * @summary Sequence
5
+ * @description Abstract base class for sequence generation
6
+ * @summary Provides a framework for generating sequential values (like primary keys) in the persistence layer.
7
+ * Implementations of this class handle the specifics of how sequences are stored and incremented in different
8
+ * database systems.
9
+ * @param {SequenceOptions} options - Configuration options for the sequence generator
10
+ * @class Sequence
11
+ * @example
12
+ * ```typescript
13
+ * // Example implementation for a specific database
14
+ * class PostgresSequence extends Sequence {
15
+ * constructor(options: SequenceOptions) {
16
+ * super(options);
17
+ * }
18
+ *
19
+ * async next(): Promise<number> {
20
+ * // Implementation to get next value from PostgreSQL sequence
21
+ * const result = await this.options.executor.raw(`SELECT nextval('${this.options.name}')`);
22
+ * return parseInt(result.rows[0].nextval);
23
+ * }
3
24
  *
4
- * @interface Sequence
25
+ * async current(): Promise<number> {
26
+ * // Implementation to get current value from PostgreSQL sequence
27
+ * const result = await this.options.executor.raw(`SELECT currval('${this.options.name}')`);
28
+ * return parseInt(result.rows[0].currval);
29
+ * }
5
30
  *
6
- * @category Sequences
31
+ * async range(count: number): Promise<number[]> {
32
+ * // Implementation to get a range of values
33
+ * const values: number[] = [];
34
+ * for (let i = 0; i < count; i++) {
35
+ * values.push(await this.next());
36
+ * }
37
+ * return values;
38
+ * }
39
+ * }
40
+ *
41
+ * // Usage
42
+ * const sequence = new PostgresSequence({
43
+ * name: 'user_id_seq',
44
+ * executor: dbExecutor
45
+ * });
46
+ *
47
+ * const nextId = await sequence.next();
48
+ * ```
7
49
  */
8
- import { Constructor, Model } from "@decaf-ts/decorator-validation";
9
- import { SequenceOptions } from "../interfaces/SequenceOptions";
10
50
  export declare abstract class Sequence {
11
51
  protected readonly options: SequenceOptions;
52
+ /**
53
+ * @description Logger instance for this sequence
54
+ * @summary Lazily initialized logger for the sequence instance
55
+ */
56
+ private logger;
57
+ /**
58
+ * @description Accessor for the logger instance
59
+ * @summary Gets or initializes the logger for this sequence
60
+ * @return {Logger} The logger instance
61
+ */
62
+ protected get log(): Logger;
63
+ /**
64
+ * @description Creates a new sequence instance
65
+ * @summary Protected constructor that initializes the sequence with the provided options
66
+ */
12
67
  protected constructor(options: SequenceOptions);
13
68
  /**
14
- * @summary generates the next value in the sequence
15
- *
16
- * @method
69
+ * @description Gets the next value in the sequence
70
+ * @summary Retrieves the next value from the sequence, incrementing it in the process
71
+ * @return A promise that resolves to the next value in the sequence
17
72
  */
18
73
  abstract next(): Promise<string | number | bigint>;
74
+ /**
75
+ * @description Gets the current value of the sequence
76
+ * @summary Retrieves the current value of the sequence without incrementing it
77
+ * @return A promise that resolves to the current value in the sequence
78
+ */
19
79
  abstract current(): Promise<string | number | bigint>;
80
+ /**
81
+ * @description Gets a range of sequential values
82
+ * @summary Retrieves multiple sequential values at once, which can be more efficient than calling next() multiple times
83
+ * @param {number} count - The number of sequential values to retrieve
84
+ * @return A promise that resolves to an array of sequential values
85
+ */
20
86
  abstract range(count: number): Promise<(number | string | bigint)[]>;
87
+ /**
88
+ * @description Gets the primary key sequence name for a model
89
+ * @summary Utility method that returns the standardized sequence name for a model's primary key
90
+ * @template M - The model type
91
+ * @param {M|Constructor<M>} model - The model instance or constructor
92
+ * @return {string} The sequence name for the model's primary key
93
+ */
21
94
  static pk<M extends Model>(model: M | Constructor<M>): string;
95
+ /**
96
+ * @description Parses a sequence value to the appropriate type
97
+ * @summary Converts a sequence value to the specified type (Number or BigInt)
98
+ * @param {"Number"|"BigInt"|undefined} type - The target type to convert to
99
+ * @param {string|number|bigint} value - The value to convert
100
+ * @return {string|number|bigint} The converted value
101
+ */
102
+ static parseValue(type: "Number" | "BigInt" | undefined, value: string | number | bigint): string | number | bigint;
22
103
  }
@@ -1,30 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Roles = exports.PersistenceKeys = void 0;
3
+ exports.PersistenceKeys = void 0;
4
+ /**
5
+ * @description Persistence-related constant keys
6
+ * @summary Enum containing string constants used throughout the persistence layer for metadata, relations, and other persistence-related operations
7
+ * @enum {string}
8
+ * @readonly
9
+ * @memberOf module:core
10
+ */
4
11
  var PersistenceKeys;
5
12
  (function (PersistenceKeys) {
13
+ /** @description Key for index metadata */
6
14
  PersistenceKeys["INDEX"] = "index";
15
+ /** @description Key for unique constraint metadata */
7
16
  PersistenceKeys["UNIQUE"] = "unique";
17
+ /** @description Key for adapter metadata */
8
18
  PersistenceKeys["ADAPTER"] = "adapter";
19
+ /** @description Template for injectable adapter names */
9
20
  PersistenceKeys["INJECTABLE"] = "decaf_{0}_adapter_for_{1}";
21
+ /** @description Key for table name metadata */
10
22
  PersistenceKeys["TABLE"] = "table";
23
+ /** @description Key for column name metadata */
11
24
  PersistenceKeys["COLUMN"] = "column";
25
+ /** @description Key for general metadata storage */
12
26
  PersistenceKeys["METADATA"] = "__metadata";
27
+ /** @description Key for relations metadata storage */
13
28
  PersistenceKeys["RELATIONS"] = "__relations";
29
+ /** @description Key for clause sequence metadata */
14
30
  PersistenceKeys["CLAUSE_SEQUENCE"] = "clause-sequence";
15
31
  // Ownership
32
+ /** @description Key for created-by ownership metadata */
16
33
  PersistenceKeys["CREATED_BY"] = "ownership.created-by";
34
+ /** @description Key for updated-by ownership metadata */
17
35
  PersistenceKeys["UPDATED_BY"] = "ownership.updated-by";
18
36
  // Relations
37
+ /** @description Key for one-to-one relation metadata */
19
38
  PersistenceKeys["ONE_TO_ONE"] = "relations.one-to-one";
39
+ /** @description Key for one-to-many relation metadata */
20
40
  PersistenceKeys["ONE_TO_MANY"] = "relations.one-to-many";
41
+ /** @description Key for many-to-one relation metadata */
21
42
  PersistenceKeys["MANY_TO_ONE"] = "relations.many-to-one";
43
+ /** @description Key for populate metadata */
22
44
  PersistenceKeys["POPULATE"] = "populate";
23
45
  })(PersistenceKeys || (exports.PersistenceKeys = PersistenceKeys = {}));
24
- var Roles;
25
- (function (Roles) {
26
- Roles["ADMIN"] = "admin";
27
- Roles["WRITER"] = "writer";
28
- Roles["READER"] = "reader";
29
- })(Roles || (exports.Roles = Roles = {}));
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNpc3RlbmNlL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLGVBa0JYO0FBbEJELFdBQVksZUFBZTtJQUN6QixrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsc0NBQW1CLENBQUE7SUFDbkIsMkRBQXdDLENBQUE7SUFDeEMsa0NBQWUsQ0FBQTtJQUNmLG9DQUFpQixDQUFBO0lBQ2pCLDBDQUF1QixDQUFBO0lBQ3ZCLDRDQUF5QixDQUFBO0lBQ3pCLHNEQUFtQyxDQUFBO0lBQ25DLFlBQVk7SUFDWixzREFBbUMsQ0FBQTtJQUNuQyxzREFBbUMsQ0FBQTtJQUNuQyxZQUFZO0lBQ1osc0RBQW1DLENBQUE7SUFDbkMsd0RBQXFDLENBQUE7SUFDckMsd0RBQXFDLENBQUE7SUFDckMsd0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQWxCVyxlQUFlLCtCQUFmLGVBQWUsUUFrQjFCO0FBRUQsSUFBWSxLQUlYO0FBSkQsV0FBWSxLQUFLO0lBQ2Ysd0JBQWUsQ0FBQTtJQUNmLDBCQUFpQixDQUFBO0lBQ2pCLDBCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxLQUFLLHFCQUFMLEtBQUssUUFJaEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBQZXJzaXN0ZW5jZUtleXMge1xuICBJTkRFWCA9IFwiaW5kZXhcIixcbiAgVU5JUVVFID0gXCJ1bmlxdWVcIixcbiAgQURBUFRFUiA9IFwiYWRhcHRlclwiLFxuICBJTkpFQ1RBQkxFID0gXCJkZWNhZl97MH1fYWRhcHRlcl9mb3JfezF9XCIsXG4gIFRBQkxFID0gXCJ0YWJsZVwiLFxuICBDT0xVTU4gPSBcImNvbHVtblwiLFxuICBNRVRBREFUQSA9IFwiX19tZXRhZGF0YVwiLFxuICBSRUxBVElPTlMgPSBcIl9fcmVsYXRpb25zXCIsXG4gIENMQVVTRV9TRVFVRU5DRSA9IFwiY2xhdXNlLXNlcXVlbmNlXCIsXG4gIC8vIE93bmVyc2hpcFxuICBDUkVBVEVEX0JZID0gXCJvd25lcnNoaXAuY3JlYXRlZC1ieVwiLFxuICBVUERBVEVEX0JZID0gXCJvd25lcnNoaXAudXBkYXRlZC1ieVwiLFxuICAvLyBSZWxhdGlvbnNcbiAgT05FX1RPX09ORSA9IFwicmVsYXRpb25zLm9uZS10by1vbmVcIixcbiAgT05FX1RPX01BTlkgPSBcInJlbGF0aW9ucy5vbmUtdG8tbWFueVwiLFxuICBNQU5ZX1RPX09ORSA9IFwicmVsYXRpb25zLm1hbnktdG8tb25lXCIsXG4gIFBPUFVMQVRFID0gXCJwb3B1bGF0ZVwiLFxufVxuXG5leHBvcnQgZW51bSBSb2xlcyB7XG4gIEFETUlOID0gXCJhZG1pblwiLFxuICBXUklURVIgPSBcIndyaXRlclwiLFxuICBSRUFERVIgPSBcInJlYWRlclwiLFxufVxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNpc3RlbmNlL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxJQUFZLGVBK0NYO0FBL0NELFdBQVksZUFBZTtJQUN6QiwwQ0FBMEM7SUFDMUMsa0NBQWUsQ0FBQTtJQUVmLHNEQUFzRDtJQUN0RCxvQ0FBaUIsQ0FBQTtJQUVqQiw0Q0FBNEM7SUFDNUMsc0NBQW1CLENBQUE7SUFFbkIseURBQXlEO0lBQ3pELDJEQUF3QyxDQUFBO0lBRXhDLCtDQUErQztJQUMvQyxrQ0FBZSxDQUFBO0lBRWYsZ0RBQWdEO0lBQ2hELG9DQUFpQixDQUFBO0lBRWpCLG9EQUFvRDtJQUNwRCwwQ0FBdUIsQ0FBQTtJQUV2QixzREFBc0Q7SUFDdEQsNENBQXlCLENBQUE7SUFFekIsb0RBQW9EO0lBQ3BELHNEQUFtQyxDQUFBO0lBRW5DLFlBQVk7SUFDWix5REFBeUQ7SUFDekQsc0RBQW1DLENBQUE7SUFFbkMseURBQXlEO0lBQ3pELHNEQUFtQyxDQUFBO0lBRW5DLFlBQVk7SUFDWix3REFBd0Q7SUFDeEQsc0RBQW1DLENBQUE7SUFFbkMseURBQXlEO0lBQ3pELHdEQUFxQyxDQUFBO0lBRXJDLHlEQUF5RDtJQUN6RCx3REFBcUMsQ0FBQTtJQUVyQyw2Q0FBNkM7SUFDN0Msd0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQS9DVyxlQUFlLCtCQUFmLGVBQWUsUUErQzFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gUGVyc2lzdGVuY2UtcmVsYXRlZCBjb25zdGFudCBrZXlzXG4gKiBAc3VtbWFyeSBFbnVtIGNvbnRhaW5pbmcgc3RyaW5nIGNvbnN0YW50cyB1c2VkIHRocm91Z2hvdXQgdGhlIHBlcnNpc3RlbmNlIGxheWVyIGZvciBtZXRhZGF0YSwgcmVsYXRpb25zLCBhbmQgb3RoZXIgcGVyc2lzdGVuY2UtcmVsYXRlZCBvcGVyYXRpb25zXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGVudW0gUGVyc2lzdGVuY2VLZXlzIHtcbiAgLyoqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIGluZGV4IG1ldGFkYXRhICovXG4gIElOREVYID0gXCJpbmRleFwiLFxuXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciB1bmlxdWUgY29uc3RyYWludCBtZXRhZGF0YSAqL1xuICBVTklRVUUgPSBcInVuaXF1ZVwiLFxuXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciBhZGFwdGVyIG1ldGFkYXRhICovXG4gIEFEQVBURVIgPSBcImFkYXB0ZXJcIixcblxuICAvKiogQGRlc2NyaXB0aW9uIFRlbXBsYXRlIGZvciBpbmplY3RhYmxlIGFkYXB0ZXIgbmFtZXMgKi9cbiAgSU5KRUNUQUJMRSA9IFwiZGVjYWZfezB9X2FkYXB0ZXJfZm9yX3sxfVwiLFxuXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciB0YWJsZSBuYW1lIG1ldGFkYXRhICovXG4gIFRBQkxFID0gXCJ0YWJsZVwiLFxuXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciBjb2x1bW4gbmFtZSBtZXRhZGF0YSAqL1xuICBDT0xVTU4gPSBcImNvbHVtblwiLFxuXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciBnZW5lcmFsIG1ldGFkYXRhIHN0b3JhZ2UgKi9cbiAgTUVUQURBVEEgPSBcIl9fbWV0YWRhdGFcIixcblxuICAvKiogQGRlc2NyaXB0aW9uIEtleSBmb3IgcmVsYXRpb25zIG1ldGFkYXRhIHN0b3JhZ2UgKi9cbiAgUkVMQVRJT05TID0gXCJfX3JlbGF0aW9uc1wiLFxuXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciBjbGF1c2Ugc2VxdWVuY2UgbWV0YWRhdGEgKi9cbiAgQ0xBVVNFX1NFUVVFTkNFID0gXCJjbGF1c2Utc2VxdWVuY2VcIixcblxuICAvLyBPd25lcnNoaXBcbiAgLyoqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIGNyZWF0ZWQtYnkgb3duZXJzaGlwIG1ldGFkYXRhICovXG4gIENSRUFURURfQlkgPSBcIm93bmVyc2hpcC5jcmVhdGVkLWJ5XCIsXG5cbiAgLyoqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIHVwZGF0ZWQtYnkgb3duZXJzaGlwIG1ldGFkYXRhICovXG4gIFVQREFURURfQlkgPSBcIm93bmVyc2hpcC51cGRhdGVkLWJ5XCIsXG5cbiAgLy8gUmVsYXRpb25zXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciBvbmUtdG8tb25lIHJlbGF0aW9uIG1ldGFkYXRhICovXG4gIE9ORV9UT19PTkUgPSBcInJlbGF0aW9ucy5vbmUtdG8tb25lXCIsXG5cbiAgLyoqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIG9uZS10by1tYW55IHJlbGF0aW9uIG1ldGFkYXRhICovXG4gIE9ORV9UT19NQU5ZID0gXCJyZWxhdGlvbnMub25lLXRvLW1hbnlcIixcblxuICAvKiogQGRlc2NyaXB0aW9uIEtleSBmb3IgbWFueS10by1vbmUgcmVsYXRpb24gbWV0YWRhdGEgKi9cbiAgTUFOWV9UT19PTkUgPSBcInJlbGF0aW9ucy5tYW55LXRvLW9uZVwiLFxuXG4gIC8qKiBAZGVzY3JpcHRpb24gS2V5IGZvciBwb3B1bGF0ZSBtZXRhZGF0YSAqL1xuICBQT1BVTEFURSA9IFwicG9wdWxhdGVcIixcbn1cbiJdfQ==
@@ -1,22 +1,39 @@
1
+ /**
2
+ * @description Persistence-related constant keys
3
+ * @summary Enum containing string constants used throughout the persistence layer for metadata, relations, and other persistence-related operations
4
+ * @enum {string}
5
+ * @readonly
6
+ * @memberOf module:core
7
+ */
1
8
  export declare enum PersistenceKeys {
9
+ /** @description Key for index metadata */
2
10
  INDEX = "index",
11
+ /** @description Key for unique constraint metadata */
3
12
  UNIQUE = "unique",
13
+ /** @description Key for adapter metadata */
4
14
  ADAPTER = "adapter",
15
+ /** @description Template for injectable adapter names */
5
16
  INJECTABLE = "decaf_{0}_adapter_for_{1}",
17
+ /** @description Key for table name metadata */
6
18
  TABLE = "table",
19
+ /** @description Key for column name metadata */
7
20
  COLUMN = "column",
21
+ /** @description Key for general metadata storage */
8
22
  METADATA = "__metadata",
23
+ /** @description Key for relations metadata storage */
9
24
  RELATIONS = "__relations",
25
+ /** @description Key for clause sequence metadata */
10
26
  CLAUSE_SEQUENCE = "clause-sequence",
27
+ /** @description Key for created-by ownership metadata */
11
28
  CREATED_BY = "ownership.created-by",
29
+ /** @description Key for updated-by ownership metadata */
12
30
  UPDATED_BY = "ownership.updated-by",
31
+ /** @description Key for one-to-one relation metadata */
13
32
  ONE_TO_ONE = "relations.one-to-one",
33
+ /** @description Key for one-to-many relation metadata */
14
34
  ONE_TO_MANY = "relations.one-to-many",
35
+ /** @description Key for many-to-one relation metadata */
15
36
  MANY_TO_ONE = "relations.many-to-one",
37
+ /** @description Key for populate metadata */
16
38
  POPULATE = "populate"
17
39
  }
18
- export declare enum Roles {
19
- ADMIN = "admin",
20
- WRITER = "writer",
21
- READER = "reader"
22
- }
@@ -4,7 +4,17 @@ exports.uses = uses;
4
4
  const reflection_1 = require("@decaf-ts/reflection");
5
5
  const constants_1 = require("./constants.cjs");
6
6
  const Adapter_1 = require("./Adapter.cjs");
7
+ /**
8
+ * @description Specifies which persistence adapter flavor a model should use
9
+ * @summary This decorator applies metadata to a model class to indicate which persistence adapter flavor
10
+ * should be used when performing database operations on instances of the model. The flavor is a string
11
+ * identifier that corresponds to a registered adapter configuration.
12
+ * @param {string} flavour - The identifier of the adapter flavor to use
13
+ * @return {Function} A decorator function that can be applied to a model class
14
+ * @function uses
15
+ * @category Class Decorators
16
+ */
7
17
  function uses(flavour) {
8
18
  return (0, reflection_1.apply)((0, reflection_1.metadata)(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), flavour));
9
19
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJzaXN0ZW5jZS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsb0JBRUM7QUFORCxxREFBdUQ7QUFDdkQsK0NBQThDO0FBQzlDLDJDQUFvQztBQUVwQyxTQUFnQixJQUFJLENBQUMsT0FBZTtJQUNsQyxPQUFPLElBQUEsa0JBQUssRUFBQyxJQUFBLHFCQUFRLEVBQUMsaUJBQU8sQ0FBQyxHQUFHLENBQUMsMkJBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhcHBseSwgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuL0FkYXB0ZXJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXMoZmxhdm91cjogc3RyaW5nKSB7XG4gIHJldHVybiBhcHBseShtZXRhZGF0YShBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksIGZsYXZvdXIpKTtcbn1cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJzaXN0ZW5jZS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0Esb0JBRUM7QUFoQkQscURBQXVEO0FBQ3ZELCtDQUE4QztBQUM5QywyQ0FBb0M7QUFFcEM7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFDLE9BQWU7SUFDbEMsT0FBTyxJQUFBLGtCQUFLLEVBQUMsSUFBQSxxQkFBUSxFQUFDLGlCQUFPLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBwbHksIG1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi9BZGFwdGVyXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGljaCBwZXJzaXN0ZW5jZSBhZGFwdGVyIGZsYXZvciBhIG1vZGVsIHNob3VsZCB1c2VcbiAqIEBzdW1tYXJ5IFRoaXMgZGVjb3JhdG9yIGFwcGxpZXMgbWV0YWRhdGEgdG8gYSBtb2RlbCBjbGFzcyB0byBpbmRpY2F0ZSB3aGljaCBwZXJzaXN0ZW5jZSBhZGFwdGVyIGZsYXZvclxuICogc2hvdWxkIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGRhdGFiYXNlIG9wZXJhdGlvbnMgb24gaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4gVGhlIGZsYXZvciBpcyBhIHN0cmluZ1xuICogaWRlbnRpZmllciB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcmVnaXN0ZXJlZCBhZGFwdGVyIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmxhdm91ciAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBhZGFwdGVyIGZsYXZvciB0byB1c2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgbW9kZWwgY2xhc3NcbiAqIEBmdW5jdGlvbiB1c2VzXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlcyhmbGF2b3VyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGFwcGx5KG1ldGFkYXRhKEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSwgZmxhdm91cikpO1xufVxuIl19
@@ -1 +1,11 @@
1
+ /**
2
+ * @description Specifies which persistence adapter flavor a model should use
3
+ * @summary This decorator applies metadata to a model class to indicate which persistence adapter flavor
4
+ * should be used when performing database operations on instances of the model. The flavor is a string
5
+ * identifier that corresponds to a registered adapter configuration.
6
+ * @param {string} flavour - The identifier of the adapter flavor to use
7
+ * @return {Function} A decorator function that can be applied to a model class
8
+ * @function uses
9
+ * @category Class Decorators
10
+ */
1
11
  export declare function uses(flavour: string): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
@@ -1,17 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnsupportedError = exports.ConnectionError = void 0;
3
+ exports.UnsupportedError = void 0;
4
4
  const db_decorators_1 = require("@decaf-ts/db-decorators");
5
- class ConnectionError extends db_decorators_1.BaseError {
6
- constructor(msg) {
7
- super(ConnectionError.name, msg);
8
- }
9
- }
10
- exports.ConnectionError = ConnectionError;
5
+ /**
6
+ * @description Error thrown when an unsupported operation is attempted
7
+ * @summary This error is thrown when an operation is requested that is not supported by the current
8
+ * persistence adapter or configuration. It extends the BaseError class and sets a 500 status code.
9
+ * @param {string|Error} msg - The error message or an Error object to wrap
10
+ * @class UnsupportedError
11
+ * @example
12
+ * ```typescript
13
+ * // Throwing an UnsupportedError
14
+ * if (!adapter.supportsTransactions()) {
15
+ * throw new UnsupportedError('Transactions are not supported by this adapter');
16
+ * }
17
+ *
18
+ * // Catching an UnsupportedError
19
+ * try {
20
+ * await adapter.beginTransaction();
21
+ * } catch (error) {
22
+ * if (error instanceof UnsupportedError) {
23
+ * console.error('Operation not supported:', error.message);
24
+ * }
25
+ * }
26
+ * ```
27
+ */
11
28
  class UnsupportedError extends db_decorators_1.BaseError {
12
29
  constructor(msg) {
13
- super(UnsupportedError.name, msg);
30
+ super(UnsupportedError.name, msg, 500);
14
31
  }
15
32
  }
16
33
  exports.UnsupportedError = UnsupportedError;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNpc3RlbmNlL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBb0Q7QUFFcEQsTUFBYSxlQUFnQixTQUFRLHlCQUFTO0lBQzVDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBSkQsMENBSUM7QUFFRCxNQUFhLGdCQUFpQixTQUFRLHlCQUFTO0lBQzdDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFKRCw0Q0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKENvbm5lY3Rpb25FcnJvci5uYW1lLCBtc2cpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKFVuc3VwcG9ydGVkRXJyb3IubmFtZSwgbXNnKTtcbiAgfVxufVxuIl19
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNpc3RlbmNlL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHlCQUFTO0lBQzdDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBSkQsNENBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXJyb3IgdGhyb3duIHdoZW4gYW4gdW5zdXBwb3J0ZWQgb3BlcmF0aW9uIGlzIGF0dGVtcHRlZFxuICogQHN1bW1hcnkgVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudFxuICogcGVyc2lzdGVuY2UgYWRhcHRlciBvciBjb25maWd1cmF0aW9uLiBJdCBleHRlbmRzIHRoZSBCYXNlRXJyb3IgY2xhc3MgYW5kIHNldHMgYSA1MDAgc3RhdHVzIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ3xFcnJvcn0gbXNnIC0gVGhlIGVycm9yIG1lc3NhZ2Ugb3IgYW4gRXJyb3Igb2JqZWN0IHRvIHdyYXBcbiAqIEBjbGFzcyBVbnN1cHBvcnRlZEVycm9yXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVGhyb3dpbmcgYW4gVW5zdXBwb3J0ZWRFcnJvclxuICogaWYgKCFhZGFwdGVyLnN1cHBvcnRzVHJhbnNhY3Rpb25zKCkpIHtcbiAqICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1RyYW5zYWN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGFkYXB0ZXInKTtcbiAqIH1cbiAqIFxuICogLy8gQ2F0Y2hpbmcgYW4gVW5zdXBwb3J0ZWRFcnJvclxuICogdHJ5IHtcbiAqICAgYXdhaXQgYWRhcHRlci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBVbnN1cHBvcnRlZEVycm9yKSB7XG4gKiAgICAgY29uc29sZS5lcnJvcignT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQ6JywgZXJyb3IubWVzc2FnZSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihVbnN1cHBvcnRlZEVycm9yLm5hbWUsIG1zZywgNTAwKTtcbiAgfVxufVxuIl19
@@ -1,7 +1,27 @@
1
1
  import { BaseError } from "@decaf-ts/db-decorators";
2
- export declare class ConnectionError extends BaseError {
3
- constructor(msg: string | Error);
4
- }
2
+ /**
3
+ * @description Error thrown when an unsupported operation is attempted
4
+ * @summary This error is thrown when an operation is requested that is not supported by the current
5
+ * persistence adapter or configuration. It extends the BaseError class and sets a 500 status code.
6
+ * @param {string|Error} msg - The error message or an Error object to wrap
7
+ * @class UnsupportedError
8
+ * @example
9
+ * ```typescript
10
+ * // Throwing an UnsupportedError
11
+ * if (!adapter.supportsTransactions()) {
12
+ * throw new UnsupportedError('Transactions are not supported by this adapter');
13
+ * }
14
+ *
15
+ * // Catching an UnsupportedError
16
+ * try {
17
+ * await adapter.beginTransaction();
18
+ * } catch (error) {
19
+ * if (error instanceof UnsupportedError) {
20
+ * console.error('Operation not supported:', error.message);
21
+ * }
22
+ * }
23
+ * ```
24
+ */
5
25
  export declare class UnsupportedError extends BaseError {
6
26
  constructor(msg: string | Error);
7
27
  }
@@ -17,6 +17,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Adapter.cjs"), exports);
18
18
  __exportStar(require("./constants.cjs"), exports);
19
19
  __exportStar(require("./decorators.cjs"), exports);
20
+ __exportStar(require("./Dispatch.cjs"), exports);
20
21
  __exportStar(require("./errors.cjs"), exports);
22
+ __exportStar(require("./ObserverHandler.cjs"), exports);
21
23
  __exportStar(require("./Sequence.cjs"), exports);
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc2lzdGVuY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUEwQjtBQUMxQixrREFBNEI7QUFDNUIsbURBQTZCO0FBQzdCLCtDQUF5QjtBQUN6QixpREFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9BZGFwdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VxdWVuY2VcIjtcbiJdfQ==
24
+ __exportStar(require("./types.cjs"), exports);
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc2lzdGVuY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUEwQjtBQUMxQixrREFBNEI7QUFDNUIsbURBQTZCO0FBQzdCLGlEQUEyQjtBQUMzQiwrQ0FBeUI7QUFDekIsd0RBQWtDO0FBQ2xDLGlEQUEyQjtBQUMzQiw4Q0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9BZGFwdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0Rpc3BhdGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL09ic2VydmVySGFuZGxlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VxdWVuY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG4iXX0=
@@ -1,5 +1,8 @@
1
1
  export * from "./Adapter";
2
2
  export * from "./constants";
3
3
  export * from "./decorators";
4
+ export * from "./Dispatch";
4
5
  export * from "./errors";
6
+ export * from "./ObserverHandler";
5
7
  export * from "./Sequence";
8
+ export * from "./types";
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc2lzdGVuY2UvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cywgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIHJlcHJlc2VudGluZyBwb3NzaWJsZSBJRCBmb3JtYXRzIGZvciBkYXRhYmFzZSBldmVudHNcbiAqIEBzdW1tYXJ5IEEgdW5pb24gdHlwZSB0aGF0IGRlZmluZXMgdGhlIHBvc3NpYmxlIGZvcm1hdHMgZm9yIGV2ZW50IGlkZW50aWZpZXJzIGluIHRoZSBwZXJzaXN0ZW5jZSBsYXllci5cbiAqIFRoZXNlIGNhbiBiZSBzaW5nbGUgdmFsdWVzIChzdHJpbmcsIG51bWJlciwgYmlnaW50KSBvciBhcnJheXMgb2YgdGhlc2UgdHlwZXMuXG4gKiBAdHlwZWRlZiB7KHN0cmluZ3xudW1iZXJ8YmlnaW50fHN0cmluZ1tdfG51bWJlcltdfGJpZ2ludFtdKX0gRXZlbnRJZHNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgdHlwZSBFdmVudElkcyA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYmlnaW50XG4gIHwgc3RyaW5nW11cbiAgfCBudW1iZXJbXVxuICB8IGJpZ2ludFtdO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciBmaWx0ZXJpbmcgb2JzZXJ2ZXIgbm90aWZpY2F0aW9uc1xuICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0eXBlIHRoYXQgZGVmaW5lcyBhIHByZWRpY2F0ZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIG9ic2VydmVyIHNob3VsZCBiZSBub3RpZmllZFxuICogYWJvdXQgYSBzcGVjaWZpYyBkYXRhYmFzZSBldmVudC4gVGhlIGZpbHRlciBleGFtaW5lcyB0aGUgdGFibGUgbmFtZSwgZXZlbnQgdHlwZSwgYW5kIGFmZmVjdGVkIElEcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0YWJsZSB3aGVyZSB0aGUgZXZlbnQgb2NjdXJyZWRcbiAqIEBwYXJhbSB7KE9wZXJhdGlvbktleXN8QnVsa0NydWRPcGVyYXRpb25LZXlzfHN0cmluZyl9IGV2ZW50IC0gVGhlIHR5cGUgb2Ygb3BlcmF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudFxuICogQHBhcmFtIHtFdmVudElkc30gaWQgLSBUaGUgaWRlbnRpZmllcihzKSBvZiB0aGUgYWZmZWN0ZWQgcmVjb3JkKHMpXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBvYnNlcnZlciBzaG91bGQgYmUgbm90aWZpZWQsIGZhbHNlIG90aGVyd2lzZVxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBPYnNlcnZlckZpbHRlclxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCB0eXBlIE9ic2VydmVyRmlsdGVyID0gKFxuICB0YWJsZTogc3RyaW5nLFxuICBldmVudDogT3BlcmF0aW9uS2V5cyB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyB8IHN0cmluZyxcbiAgaWQ6IEV2ZW50SWRzXG4pID0+IGJvb2xlYW47XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { BulkCrudOperationKeys, OperationKeys } from "@decaf-ts/db-decorators";
2
+ /**
3
+ * @description Type representing possible ID formats for database events
4
+ * @summary A union type that defines the possible formats for event identifiers in the persistence layer.
5
+ * These can be single values (string, number, bigint) or arrays of these types.
6
+ * @typedef {(string|number|bigint|string[]|number[]|bigint[])} EventIds
7
+ * @memberOf module:core
8
+ */
9
+ export type EventIds = string | number | bigint | string[] | number[] | bigint[];
10
+ /**
11
+ * @description Function type for filtering observer notifications
12
+ * @summary A function type that defines a predicate used to determine whether an observer should be notified
13
+ * about a specific database event. The filter examines the table name, event type, and affected IDs.
14
+ * @param {string} table - The name of the database table where the event occurred
15
+ * @param {(OperationKeys|BulkCrudOperationKeys|string)} event - The type of operation that triggered the event
16
+ * @param {EventIds} id - The identifier(s) of the affected record(s)
17
+ * @return {boolean} True if the observer should be notified, false otherwise
18
+ * @typedef {Function} ObserverFilter
19
+ * @memberOf module:core
20
+ */
21
+ export type ObserverFilter = (table: string, event: OperationKeys | BulkCrudOperationKeys | string, id: EventIds) => boolean;