@decaf-ts/db-decorators 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/lib/cjs/identity/decorators.cjs +5 -4
  2. package/lib/cjs/identity/decorators.cjs.map +1 -0
  3. package/lib/cjs/identity/index.cjs +1 -0
  4. package/lib/cjs/identity/index.cjs.map +1 -0
  5. package/lib/cjs/index.cjs +2 -1
  6. package/lib/cjs/index.cjs.map +1 -0
  7. package/lib/cjs/interfaces/BulkCrudOperator.cjs +1 -0
  8. package/lib/cjs/interfaces/BulkCrudOperator.cjs.map +1 -0
  9. package/lib/cjs/interfaces/Contextual.cjs +1 -0
  10. package/lib/cjs/interfaces/Contextual.cjs.map +1 -0
  11. package/lib/cjs/interfaces/CrudOperator.cjs +1 -0
  12. package/lib/cjs/interfaces/CrudOperator.cjs.map +1 -0
  13. package/lib/cjs/interfaces/IRepository.cjs +1 -0
  14. package/lib/cjs/interfaces/IRepository.cjs.map +1 -0
  15. package/lib/cjs/interfaces/index.cjs +1 -0
  16. package/lib/cjs/interfaces/index.cjs.map +1 -0
  17. package/lib/cjs/model/constants.cjs +1 -0
  18. package/lib/cjs/model/constants.cjs.map +1 -0
  19. package/lib/cjs/model/decorators.cjs +25 -24
  20. package/lib/cjs/model/decorators.cjs.map +1 -0
  21. package/lib/cjs/model/index.cjs +1 -0
  22. package/lib/cjs/model/index.cjs.map +1 -0
  23. package/lib/cjs/model/model.cjs +1 -0
  24. package/lib/cjs/model/model.cjs.map +1 -0
  25. package/lib/cjs/model/validation.cjs +1 -0
  26. package/lib/cjs/model/validation.cjs.map +1 -0
  27. package/lib/cjs/operations/Operations.cjs +6 -5
  28. package/lib/cjs/operations/Operations.cjs.map +1 -0
  29. package/lib/cjs/operations/OperationsRegistry.cjs +1 -0
  30. package/lib/cjs/operations/OperationsRegistry.cjs.map +1 -0
  31. package/lib/cjs/operations/constants.cjs +15 -39
  32. package/lib/cjs/operations/constants.cjs.map +1 -0
  33. package/lib/cjs/operations/decorators.cjs +42 -41
  34. package/lib/cjs/operations/decorators.cjs.map +1 -0
  35. package/lib/cjs/operations/index.cjs +1 -0
  36. package/lib/cjs/operations/index.cjs.map +1 -0
  37. package/lib/cjs/operations/types.cjs +1 -0
  38. package/lib/cjs/operations/types.cjs.map +1 -0
  39. package/lib/cjs/overrides/Metadata.cjs +1 -0
  40. package/lib/cjs/overrides/Metadata.cjs.map +1 -0
  41. package/lib/cjs/overrides/Model.cjs +1 -0
  42. package/lib/cjs/overrides/Model.cjs.map +1 -0
  43. package/lib/cjs/overrides/ModelBuilderExtensions.cjs +8 -7
  44. package/lib/cjs/overrides/ModelBuilderExtensions.cjs.map +1 -0
  45. package/lib/cjs/overrides/index.cjs +1 -0
  46. package/lib/cjs/overrides/index.cjs.map +1 -0
  47. package/lib/cjs/overrides/overrides.cjs +21 -20
  48. package/lib/cjs/overrides/overrides.cjs.map +1 -0
  49. package/lib/cjs/repository/Context.cjs +3 -2
  50. package/lib/cjs/repository/Context.cjs.map +1 -0
  51. package/lib/cjs/repository/Repository.cjs +42 -41
  52. package/lib/cjs/repository/Repository.cjs.map +1 -0
  53. package/lib/cjs/repository/constants.cjs +1 -0
  54. package/lib/cjs/repository/constants.cjs.map +1 -0
  55. package/lib/cjs/repository/errors.cjs +1 -0
  56. package/lib/cjs/repository/errors.cjs.map +1 -0
  57. package/lib/cjs/repository/index.cjs +1 -0
  58. package/lib/cjs/repository/index.cjs.map +1 -0
  59. package/lib/cjs/repository/types.cjs +1 -0
  60. package/lib/cjs/repository/types.cjs.map +1 -0
  61. package/lib/cjs/repository/utils.cjs +10 -9
  62. package/lib/cjs/repository/utils.cjs.map +1 -0
  63. package/lib/cjs/repository/wrappers.cjs +8 -7
  64. package/lib/cjs/repository/wrappers.cjs.map +1 -0
  65. package/lib/cjs/validation/constants.cjs +4 -3
  66. package/lib/cjs/validation/constants.cjs.map +1 -0
  67. package/lib/cjs/validation/decorators.cjs +22 -21
  68. package/lib/cjs/validation/decorators.cjs.map +1 -0
  69. package/lib/cjs/validation/index.cjs +1 -0
  70. package/lib/cjs/validation/index.cjs.map +1 -0
  71. package/lib/cjs/validation/validation.cjs +3 -2
  72. package/lib/cjs/validation/validation.cjs.map +1 -0
  73. package/lib/cjs/validation/validators/ReadOnlyValidator.cjs +14 -8
  74. package/lib/cjs/validation/validators/ReadOnlyValidator.cjs.map +1 -0
  75. package/lib/cjs/validation/validators/TimestampValidator.cjs +14 -8
  76. package/lib/cjs/validation/validators/TimestampValidator.cjs.map +1 -0
  77. package/lib/cjs/validation/validators/UpdateValidator.cjs +1 -0
  78. package/lib/cjs/validation/validators/UpdateValidator.cjs.map +1 -0
  79. package/lib/cjs/validation/validators/index.cjs +1 -0
  80. package/lib/cjs/validation/validators/index.cjs.map +1 -0
  81. package/lib/esm/index.js +1 -1
  82. package/lib/types/identity/decorators.d.cts +8 -0
  83. package/lib/types/identity/decorators.d.mts +8 -0
  84. package/lib/types/identity/index.d.cts +6 -0
  85. package/lib/types/identity/index.d.mts +6 -0
  86. package/lib/types/index.d.cts +15 -0
  87. package/lib/types/index.d.mts +15 -0
  88. package/lib/types/index.d.ts +1 -1
  89. package/lib/types/interfaces/BulkCrudOperator.d.cts +47 -0
  90. package/lib/types/interfaces/BulkCrudOperator.d.mts +47 -0
  91. package/lib/types/interfaces/Contextual.d.cts +23 -0
  92. package/lib/types/interfaces/Contextual.d.mts +23 -0
  93. package/lib/types/interfaces/CrudOperator.d.cts +46 -0
  94. package/lib/types/interfaces/CrudOperator.d.mts +46 -0
  95. package/lib/types/interfaces/IRepository.d.cts +19 -0
  96. package/lib/types/interfaces/IRepository.d.mts +19 -0
  97. package/lib/types/interfaces/index.d.cts +9 -0
  98. package/lib/types/interfaces/index.d.mts +9 -0
  99. package/lib/types/model/constants.d.cts +37 -0
  100. package/lib/types/model/constants.d.mts +37 -0
  101. package/lib/types/model/decorators.d.cts +145 -0
  102. package/lib/types/model/decorators.d.mts +145 -0
  103. package/lib/types/model/index.d.cts +9 -0
  104. package/lib/types/model/index.d.mts +9 -0
  105. package/lib/types/model/model.d.cts +6 -0
  106. package/lib/types/model/model.d.mts +6 -0
  107. package/lib/types/model/validation.d.cts +57 -0
  108. package/lib/types/model/validation.d.mts +57 -0
  109. package/lib/types/operations/Operations.d.cts +80 -0
  110. package/lib/types/operations/Operations.d.mts +80 -0
  111. package/lib/types/operations/OperationsRegistry.d.cts +72 -0
  112. package/lib/types/operations/OperationsRegistry.d.mts +72 -0
  113. package/lib/types/operations/constants.d.cts +106 -0
  114. package/lib/types/operations/constants.d.mts +106 -0
  115. package/lib/types/operations/decorators.d.cts +348 -0
  116. package/lib/types/operations/decorators.d.mts +348 -0
  117. package/lib/types/operations/index.d.cts +10 -0
  118. package/lib/types/operations/index.d.mts +10 -0
  119. package/lib/types/operations/types.d.cts +60 -0
  120. package/lib/types/operations/types.d.mts +60 -0
  121. package/lib/types/overrides/Metadata.d.cts +54 -0
  122. package/lib/types/overrides/Metadata.d.mts +54 -0
  123. package/lib/types/overrides/Model.d.cts +84 -0
  124. package/lib/types/overrides/Model.d.mts +84 -0
  125. package/lib/types/overrides/ModelBuilderExtensions.d.cts +15 -0
  126. package/lib/types/overrides/ModelBuilderExtensions.d.mts +15 -0
  127. package/lib/types/overrides/index.d.cts +10 -0
  128. package/lib/types/overrides/index.d.mts +10 -0
  129. package/lib/types/overrides/overrides.d.cts +1 -0
  130. package/lib/types/overrides/overrides.d.mts +1 -0
  131. package/lib/types/repository/Context.d.cts +112 -0
  132. package/lib/types/repository/Context.d.mts +112 -0
  133. package/lib/types/repository/Repository.d.cts +352 -0
  134. package/lib/types/repository/Repository.d.mts +352 -0
  135. package/lib/types/repository/constants.d.cts +9 -0
  136. package/lib/types/repository/constants.d.mts +9 -0
  137. package/lib/types/repository/errors.d.cts +126 -0
  138. package/lib/types/repository/errors.d.mts +126 -0
  139. package/lib/types/repository/index.d.cts +12 -0
  140. package/lib/types/repository/index.d.mts +12 -0
  141. package/lib/types/repository/types.d.cts +62 -0
  142. package/lib/types/repository/types.d.mts +62 -0
  143. package/lib/types/repository/utils.d.cts +34 -0
  144. package/lib/types/repository/utils.d.mts +34 -0
  145. package/lib/types/repository/wrappers.d.cts +39 -0
  146. package/lib/types/repository/wrappers.d.mts +39 -0
  147. package/lib/types/validation/constants.d.cts +45 -0
  148. package/lib/types/validation/constants.d.mts +45 -0
  149. package/lib/types/validation/decorators.d.cts +143 -0
  150. package/lib/types/validation/decorators.d.mts +143 -0
  151. package/lib/types/validation/index.d.cts +4 -0
  152. package/lib/types/validation/index.d.mts +4 -0
  153. package/lib/types/validation/validation.d.cts +41 -0
  154. package/lib/types/validation/validation.d.mts +41 -0
  155. package/lib/types/validation/validators/ReadOnlyValidator.d.cts +47 -0
  156. package/lib/types/validation/validators/ReadOnlyValidator.d.mts +47 -0
  157. package/lib/types/validation/validators/TimestampValidator.d.cts +48 -0
  158. package/lib/types/validation/validators/TimestampValidator.d.mts +48 -0
  159. package/lib/types/validation/validators/UpdateValidator.d.cts +40 -0
  160. package/lib/types/validation/validators/UpdateValidator.d.mts +40 -0
  161. package/lib/types/validation/validators/index.d.cts +3 -0
  162. package/lib/types/validation/validators/index.d.mts +3 -0
  163. package/package.json +4 -4
  164. package/lib/cjs/identity/decorators.js.map +0 -1
  165. package/lib/cjs/identity/index.js.map +0 -1
  166. package/lib/cjs/index.js.map +0 -1
  167. package/lib/cjs/interfaces/BulkCrudOperator.js.map +0 -1
  168. package/lib/cjs/interfaces/Contextual.js.map +0 -1
  169. package/lib/cjs/interfaces/CrudOperator.js.map +0 -1
  170. package/lib/cjs/interfaces/IRepository.js.map +0 -1
  171. package/lib/cjs/interfaces/index.js.map +0 -1
  172. package/lib/cjs/model/constants.js.map +0 -1
  173. package/lib/cjs/model/decorators.js.map +0 -1
  174. package/lib/cjs/model/index.js.map +0 -1
  175. package/lib/cjs/model/model.js.map +0 -1
  176. package/lib/cjs/model/validation.js.map +0 -1
  177. package/lib/cjs/operations/Operations.js.map +0 -1
  178. package/lib/cjs/operations/OperationsRegistry.js.map +0 -1
  179. package/lib/cjs/operations/constants.js.map +0 -1
  180. package/lib/cjs/operations/decorators.js.map +0 -1
  181. package/lib/cjs/operations/index.js.map +0 -1
  182. package/lib/cjs/operations/types.js.map +0 -1
  183. package/lib/cjs/overrides/Metadata.js.map +0 -1
  184. package/lib/cjs/overrides/Model.js.map +0 -1
  185. package/lib/cjs/overrides/ModelBuilderExtensions.js.map +0 -1
  186. package/lib/cjs/overrides/index.js.map +0 -1
  187. package/lib/cjs/overrides/overrides.js.map +0 -1
  188. package/lib/cjs/repository/Context.js.map +0 -1
  189. package/lib/cjs/repository/Repository.js.map +0 -1
  190. package/lib/cjs/repository/constants.js.map +0 -1
  191. package/lib/cjs/repository/errors.js.map +0 -1
  192. package/lib/cjs/repository/index.js.map +0 -1
  193. package/lib/cjs/repository/types.js.map +0 -1
  194. package/lib/cjs/repository/utils.js.map +0 -1
  195. package/lib/cjs/repository/wrappers.js.map +0 -1
  196. package/lib/cjs/validation/constants.js.map +0 -1
  197. package/lib/cjs/validation/decorators.js.map +0 -1
  198. package/lib/cjs/validation/index.js.map +0 -1
  199. package/lib/cjs/validation/validation.js.map +0 -1
  200. package/lib/cjs/validation/validators/ReadOnlyValidator.js.map +0 -1
  201. package/lib/cjs/validation/validators/TimestampValidator.js.map +0 -1
  202. package/lib/cjs/validation/validators/UpdateValidator.js.map +0 -1
  203. package/lib/cjs/validation/validators/index.js.map +0 -1
@@ -0,0 +1,145 @@
1
+ import { Model } from "@decaf-ts/decorator-validation";
2
+ import { IRepository } from "../interfaces/IRepository.cjs";
3
+ import { CrudOperations, GroupSort } from "../operations/index.cjs";
4
+ import { ContextOfRepository } from "../repository/index.cjs";
5
+ export declare function generated(type?: string): (target: object, prop?: any) => void;
6
+ /**
7
+ * @description Hashes a property value during create or update operations
8
+ * @summary Callback function used by the hash decorator to apply hashing to a property value
9
+ * @template M - Type extending Model
10
+ * @template R - Type extending IRepository
11
+ * @template V - Type for metadata
12
+ * @template F - Type extending RepositoryFlags
13
+ * @template C - Type extending Context
14
+ * @param {C} context - The operation context
15
+ * @param {V} data - Metadata for the operation
16
+ * @param key - The property key to hash
17
+ * @param {M} model - The model being processed
18
+ * @param {M} [oldModel] - The previous model state (for updates)
19
+ * @return {void}
20
+ * @function hashOnCreateUpdate
21
+ * @memberOf module:db-decorators
22
+ */
23
+ export declare function hashOnCreateUpdate<M extends Model, R extends IRepository<M, any>, V extends object>(this: R, context: ContextOfRepository<R>, data: V, key: keyof M, model: M, oldModel?: M): void;
24
+ /**
25
+ * @description Creates a decorator that hashes a property value
26
+ * @summary Decorator that automatically hashes a property value during create and update operations
27
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
28
+ * @function hash
29
+ * @category Property Decorators
30
+ */
31
+ export declare function hash(): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor | number) => void;
32
+ /**
33
+ * @description Metadata for composed property decorators
34
+ * @summary Configuration options for property composition from other properties
35
+ * @typedef {Object} ComposedFromMetadata
36
+ * @property {string[]} args - Property names to compose from
37
+ * @property {string} separator - Character used to join the composed values
38
+ * @property {boolean} hashResult - Whether to hash the composed result
39
+ * @property {"keys"|"values"} type - Whether to use property keys or values
40
+ * @property {string} [prefix] - Optional prefix to add to the composed value
41
+ * @property {string} [suffix] - Optional suffix to add to the composed value
42
+ * @memberOf module:db-decorators
43
+ */
44
+ export type ComposedFromMetadata = {
45
+ args: string[];
46
+ separator: string;
47
+ hashResult: boolean;
48
+ type: "keys" | "values";
49
+ prefix?: string;
50
+ suffix?: string;
51
+ filterEmpty: boolean | string[];
52
+ };
53
+ export declare function composeAttributeValue<M extends Model>(model: M, metadata: ComposedFromMetadata): any;
54
+ /**
55
+ * @description Composes a property value from other properties during create or update operations
56
+ * @summary Callback function used by composed decorators to generate a property value from other properties
57
+ * @template M - Type extending Model
58
+ * @template R - Type extending IRepository
59
+ * @template V - Type extending ComposedFromMetadata
60
+ * @template F - Type extending RepositoryFlags
61
+ * @template C - Type extending Context
62
+ * @param {C} context - The operation context
63
+ * @param {V} data - Metadata for the composition
64
+ * @param key - The property key to set the composed value on
65
+ * @param {M} model - The model being processed
66
+ * @return {void}
67
+ * @function composedFromCreateUpdate
68
+ * @memberOf module:db-decorators
69
+ */
70
+ export declare function composedFromCreateUpdate<M extends Model, R extends IRepository<M, any>, V extends ComposedFromMetadata>(this: R, context: ContextOfRepository<R>, data: V, key: keyof M, model: M): void;
71
+ /**
72
+ * @description Creates a decorator that composes a property value from property keys
73
+ * @summary Decorator that generates a property value by joining the names of other properties
74
+ * @param {string[]} args - Property names to compose from
75
+ * @param {string} [separator=DefaultSeparator] - Character used to join the property names
76
+ * @param {boolean} [hash=false] - Whether to hash the composed result
77
+ * @param {string} [prefix=""] - Optional prefix to add to the composed value
78
+ * @param {string} [suffix=""] - Optional suffix to add to the composed value
79
+ * @param {GroupSort} groupsort - GroupSort configuration
80
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
81
+ * @function composedFromKeys
82
+ * @category PropertyDecorators
83
+ */
84
+ export declare function composedFromKeys(args: string[], separator?: string, filterEmpty?: boolean | string[], hash?: boolean, prefix?: string, suffix?: string, groupsort?: GroupSort): (target: any, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
85
+ /**
86
+ * @description Creates a decorator that composes a property value from property values
87
+ * @summary Decorator that generates a property value by joining the values of other properties
88
+ * @param {string[]} args - Property names whose values will be composed
89
+ * @param {string} [separator=DefaultSeparator] - Character used to join the property values
90
+ * @param {boolean} [hash=false] - Whether to hash the composed result
91
+ * @param {string} [prefix=""] - Optional prefix to add to the composed value
92
+ * @param {string} [suffix=""] - Optional suffix to add to the composed value
93
+ * @param {GroupSort} groupsort - GroupSort configuration
94
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
95
+ * @function composed
96
+ * @category PropertyDecorators
97
+ */
98
+ export declare function composed(args: string[], separator?: string, filterEmpty?: boolean | string[], hash?: boolean, prefix?: string, suffix?: string, groupsort?: GroupSort): (target: any, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
99
+ /**
100
+ * @description Creates a function that updates a version property during operations
101
+ * @summary Factory function that generates a callback for incrementing version numbers
102
+ * @param {CrudOperations} operation - The type of operation (CREATE or UPDATE)
103
+ * @return {Function} A callback function that updates the version property
104
+ * @template M - Type extending Model
105
+ * @template R - Type extending IRepository
106
+ * @template V - Type for metadata
107
+ * @template F - Type extending RepositoryFlags
108
+ * @template C - Type extending Context
109
+ * @function versionCreateUpdate
110
+ * @memberOf module:db-decorators
111
+ * @mermaid
112
+ * sequenceDiagram
113
+ * participant Caller
114
+ * participant versionCreateUpdate
115
+ *
116
+ * Caller->>versionCreateUpdate: operation
117
+ * versionCreateUpdate-->>Caller: callback function
118
+ * Note over Caller,versionCreateUpdate: When callback is executed:
119
+ * Caller->>versionCreateUpdate: context, data, key, model
120
+ * alt operation is CREATE
121
+ * versionCreateUpdate->>versionCreateUpdate: set version to 1
122
+ * else operation is UPDATE
123
+ * versionCreateUpdate->>versionCreateUpdate: increment version
124
+ * else invalid operation
125
+ * versionCreateUpdate->>versionCreateUpdate: throw error
126
+ * end
127
+ * versionCreateUpdate-->>Caller: void
128
+ */
129
+ export declare function versionCreateUpdate(operation: CrudOperations): <M extends Model, R extends IRepository<M>, V extends object>(this: R, context: ContextOfRepository<R>, data: V, key: keyof M, model: M, oldModel?: M) => void;
130
+ /**
131
+ * @description Creates a decorator for versioning a property in a model
132
+ * @summary This decorator applies multiple sub-decorators to handle version management during create and update operations
133
+ * @return {PropertyDecorator} A composite decorator that sets the type to Number, manages version updates, and adds versioning metadata
134
+ * @function version
135
+ * @category PropertyDecorators
136
+ */
137
+ export declare function version(): (target: any, propertyKey?: any) => any;
138
+ /**
139
+ * @description Creates a decorator that marks a property as transient
140
+ * @summary Decorator that indicates a property should not be persisted to the database
141
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
142
+ * @function transient
143
+ * @category PropertyDecorators
144
+ */
145
+ export declare function transient(): (target: any, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
@@ -0,0 +1,145 @@
1
+ import { Model } from "@decaf-ts/decorator-validation";
2
+ import { IRepository } from "../interfaces/IRepository.js";
3
+ import { CrudOperations, GroupSort } from "../operations/index.js";
4
+ import { ContextOfRepository } from "../repository/index.js";
5
+ export declare function generated(type?: string): (target: object, prop?: any) => void;
6
+ /**
7
+ * @description Hashes a property value during create or update operations
8
+ * @summary Callback function used by the hash decorator to apply hashing to a property value
9
+ * @template M - Type extending Model
10
+ * @template R - Type extending IRepository
11
+ * @template V - Type for metadata
12
+ * @template F - Type extending RepositoryFlags
13
+ * @template C - Type extending Context
14
+ * @param {C} context - The operation context
15
+ * @param {V} data - Metadata for the operation
16
+ * @param key - The property key to hash
17
+ * @param {M} model - The model being processed
18
+ * @param {M} [oldModel] - The previous model state (for updates)
19
+ * @return {void}
20
+ * @function hashOnCreateUpdate
21
+ * @memberOf module:db-decorators
22
+ */
23
+ export declare function hashOnCreateUpdate<M extends Model, R extends IRepository<M, any>, V extends object>(this: R, context: ContextOfRepository<R>, data: V, key: keyof M, model: M, oldModel?: M): void;
24
+ /**
25
+ * @description Creates a decorator that hashes a property value
26
+ * @summary Decorator that automatically hashes a property value during create and update operations
27
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
28
+ * @function hash
29
+ * @category Property Decorators
30
+ */
31
+ export declare function hash(): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor | number) => void;
32
+ /**
33
+ * @description Metadata for composed property decorators
34
+ * @summary Configuration options for property composition from other properties
35
+ * @typedef {Object} ComposedFromMetadata
36
+ * @property {string[]} args - Property names to compose from
37
+ * @property {string} separator - Character used to join the composed values
38
+ * @property {boolean} hashResult - Whether to hash the composed result
39
+ * @property {"keys"|"values"} type - Whether to use property keys or values
40
+ * @property {string} [prefix] - Optional prefix to add to the composed value
41
+ * @property {string} [suffix] - Optional suffix to add to the composed value
42
+ * @memberOf module:db-decorators
43
+ */
44
+ export type ComposedFromMetadata = {
45
+ args: string[];
46
+ separator: string;
47
+ hashResult: boolean;
48
+ type: "keys" | "values";
49
+ prefix?: string;
50
+ suffix?: string;
51
+ filterEmpty: boolean | string[];
52
+ };
53
+ export declare function composeAttributeValue<M extends Model>(model: M, metadata: ComposedFromMetadata): any;
54
+ /**
55
+ * @description Composes a property value from other properties during create or update operations
56
+ * @summary Callback function used by composed decorators to generate a property value from other properties
57
+ * @template M - Type extending Model
58
+ * @template R - Type extending IRepository
59
+ * @template V - Type extending ComposedFromMetadata
60
+ * @template F - Type extending RepositoryFlags
61
+ * @template C - Type extending Context
62
+ * @param {C} context - The operation context
63
+ * @param {V} data - Metadata for the composition
64
+ * @param key - The property key to set the composed value on
65
+ * @param {M} model - The model being processed
66
+ * @return {void}
67
+ * @function composedFromCreateUpdate
68
+ * @memberOf module:db-decorators
69
+ */
70
+ export declare function composedFromCreateUpdate<M extends Model, R extends IRepository<M, any>, V extends ComposedFromMetadata>(this: R, context: ContextOfRepository<R>, data: V, key: keyof M, model: M): void;
71
+ /**
72
+ * @description Creates a decorator that composes a property value from property keys
73
+ * @summary Decorator that generates a property value by joining the names of other properties
74
+ * @param {string[]} args - Property names to compose from
75
+ * @param {string} [separator=DefaultSeparator] - Character used to join the property names
76
+ * @param {boolean} [hash=false] - Whether to hash the composed result
77
+ * @param {string} [prefix=""] - Optional prefix to add to the composed value
78
+ * @param {string} [suffix=""] - Optional suffix to add to the composed value
79
+ * @param {GroupSort} groupsort - GroupSort configuration
80
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
81
+ * @function composedFromKeys
82
+ * @category PropertyDecorators
83
+ */
84
+ export declare function composedFromKeys(args: string[], separator?: string, filterEmpty?: boolean | string[], hash?: boolean, prefix?: string, suffix?: string, groupsort?: GroupSort): (target: any, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
85
+ /**
86
+ * @description Creates a decorator that composes a property value from property values
87
+ * @summary Decorator that generates a property value by joining the values of other properties
88
+ * @param {string[]} args - Property names whose values will be composed
89
+ * @param {string} [separator=DefaultSeparator] - Character used to join the property values
90
+ * @param {boolean} [hash=false] - Whether to hash the composed result
91
+ * @param {string} [prefix=""] - Optional prefix to add to the composed value
92
+ * @param {string} [suffix=""] - Optional suffix to add to the composed value
93
+ * @param {GroupSort} groupsort - GroupSort configuration
94
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
95
+ * @function composed
96
+ * @category PropertyDecorators
97
+ */
98
+ export declare function composed(args: string[], separator?: string, filterEmpty?: boolean | string[], hash?: boolean, prefix?: string, suffix?: string, groupsort?: GroupSort): (target: any, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
99
+ /**
100
+ * @description Creates a function that updates a version property during operations
101
+ * @summary Factory function that generates a callback for incrementing version numbers
102
+ * @param {CrudOperations} operation - The type of operation (CREATE or UPDATE)
103
+ * @return {Function} A callback function that updates the version property
104
+ * @template M - Type extending Model
105
+ * @template R - Type extending IRepository
106
+ * @template V - Type for metadata
107
+ * @template F - Type extending RepositoryFlags
108
+ * @template C - Type extending Context
109
+ * @function versionCreateUpdate
110
+ * @memberOf module:db-decorators
111
+ * @mermaid
112
+ * sequenceDiagram
113
+ * participant Caller
114
+ * participant versionCreateUpdate
115
+ *
116
+ * Caller->>versionCreateUpdate: operation
117
+ * versionCreateUpdate-->>Caller: callback function
118
+ * Note over Caller,versionCreateUpdate: When callback is executed:
119
+ * Caller->>versionCreateUpdate: context, data, key, model
120
+ * alt operation is CREATE
121
+ * versionCreateUpdate->>versionCreateUpdate: set version to 1
122
+ * else operation is UPDATE
123
+ * versionCreateUpdate->>versionCreateUpdate: increment version
124
+ * else invalid operation
125
+ * versionCreateUpdate->>versionCreateUpdate: throw error
126
+ * end
127
+ * versionCreateUpdate-->>Caller: void
128
+ */
129
+ export declare function versionCreateUpdate(operation: CrudOperations): <M extends Model, R extends IRepository<M>, V extends object>(this: R, context: ContextOfRepository<R>, data: V, key: keyof M, model: M, oldModel?: M) => void;
130
+ /**
131
+ * @description Creates a decorator for versioning a property in a model
132
+ * @summary This decorator applies multiple sub-decorators to handle version management during create and update operations
133
+ * @return {PropertyDecorator} A composite decorator that sets the type to Number, manages version updates, and adds versioning metadata
134
+ * @function version
135
+ * @category PropertyDecorators
136
+ */
137
+ export declare function version(): (target: any, propertyKey?: any) => any;
138
+ /**
139
+ * @description Creates a decorator that marks a property as transient
140
+ * @summary Decorator that indicates a property should not be persisted to the database
141
+ * @return {PropertyDecorator} A decorator that can be applied to class properties
142
+ * @function transient
143
+ * @category PropertyDecorators
144
+ */
145
+ export declare function transient(): (target: any, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description Exports for the model module.
3
+ * @summary This file exports all the necessary components for the model functionality, including constants, decorators, and the model itself.
4
+ * @module db-decorators/model
5
+ */
6
+ export * from "./constants.cjs";
7
+ export * from "./decorators.cjs";
8
+ export * from "./model.cjs";
9
+ export * from "./validation.cjs";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description Exports for the model module.
3
+ * @summary This file exports all the necessary components for the model functionality, including constants, decorators, and the model itself.
4
+ * @module db-decorators/model
5
+ */
6
+ export * from "./constants.js";
7
+ export * from "./decorators.js";
8
+ export * from "./model.js";
9
+ export * from "./validation.js";
@@ -0,0 +1,6 @@
1
+ import { ConditionalAsync, ModelErrorDefinition } from "@decaf-ts/decorator-validation";
2
+ declare module "@decaf-ts/decorator-validation" {
3
+ interface Model<Async extends boolean = false> {
4
+ hasErrors(previousVersion?: Model | any, ...exclusions: any[]): ConditionalAsync<Async, ModelErrorDefinition | undefined>;
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ import { ConditionalAsync, ModelErrorDefinition } from "@decaf-ts/decorator-validation";
2
+ declare module "@decaf-ts/decorator-validation" {
3
+ interface Model<Async extends boolean = false> {
4
+ hasErrors(previousVersion?: Model | any, ...exclusions: any[]): ConditionalAsync<Async, ModelErrorDefinition | undefined>;
5
+ }
6
+ }
@@ -0,0 +1,57 @@
1
+ import { ConditionalAsync, Model, ModelConditionalAsync } from "@decaf-ts/decorator-validation";
2
+ /**
3
+ * @description
4
+ * Retrieves validation decorator definitions from a model for update operations, including
5
+ * support for special handling of list decorators.
6
+ *
7
+ * @summary
8
+ * Iterates over the model's own enumerable properties and filters out those specified in the
9
+ * `propsToIgnore` array. For each remaining property, retrieves validation decorators specific
10
+ * to update operations using the `UpdateValidationKeys.REFLECT` key. Additionally, it explicitly
11
+ * checks for and appends any `LIST` type decorators to ensure proper validation of collection types.
12
+ *
13
+ * @template M - A generic parameter extending the `Model` class, representing the model type being inspected.
14
+ *
15
+ * @param {M} model - The model instance whose properties are being inspected for update-related validations.
16
+ * @param {string[]} propsToIgnore - A list of property names to exclude from the validation decorator retrieval process.
17
+ *
18
+ * @return {ValidationPropertyDecoratorDefinition[]} An array of validation decorator definitions, including both
19
+ * update-specific and list-type decorators, excluding those for ignored properties.
20
+ *
21
+ * @function getValidatableUpdateProps
22
+ */
23
+ export declare function getValidatableUpdateProps<M extends Model>(model: M, propsToIgnore: string[]): any[];
24
+ export declare function validateDecorator<M extends Model, Async extends boolean = false>(newModel: M, oldModel: M, prop: string, decorator: any, async?: Async): ConditionalAsync<Async, string | undefined>;
25
+ export declare function validateDecorators<M extends Model, Async extends boolean = false>(newModel: M, oldModel: M, prop: string, decorators: any, async?: Async): ConditionalAsync<Async, Record<string, string>> | undefined;
26
+ /**
27
+ * @description Validates changes between two model versions
28
+ * @summary Compares an old and new model version to validate update operations
29
+ * @template M - Type extending Model
30
+ * @param {M} oldModel - The original model version
31
+ * @param {M} newModel - The updated model version
32
+ * @param {boolean} async - A flag indicating whether validation should be asynchronous.
33
+ * @param {...string[]} propsToIgnore - Properties to exclude from validation
34
+ * @return {ModelErrorDefinition|undefined} Error definition if validation fails, undefined otherwise
35
+ * @function validateCompare
36
+ * @memberOf module:db-decorators
37
+ * @mermaid
38
+ * sequenceDiagram
39
+ * participant Caller
40
+ * participant validateCompare
41
+ * participant Reflection
42
+ * participant Validation
43
+ *
44
+ * Caller->>validateCompare: oldModel, newModel, propsToIgnore
45
+ * validateCompare->>Reflection: get decorated properties
46
+ * Reflection-->>validateCompare: property decorators
47
+ * loop For each decorated property
48
+ * validateCompare->>Validation: get validator
49
+ * Validation-->>validateCompare: validator
50
+ * validateCompare->>validateCompare: validate property update
51
+ * end
52
+ * loop For nested models
53
+ * validateCompare->>validateCompare: validate nested models
54
+ * end
55
+ * validateCompare-->>Caller: validation errors or undefined
56
+ */
57
+ export declare function validateCompare<M extends Model<any>>(oldModel: M, newModel: M, async: boolean, ...propsToIgnore: string[]): ModelConditionalAsync<M>;
@@ -0,0 +1,57 @@
1
+ import { ConditionalAsync, Model, ModelConditionalAsync } from "@decaf-ts/decorator-validation";
2
+ /**
3
+ * @description
4
+ * Retrieves validation decorator definitions from a model for update operations, including
5
+ * support for special handling of list decorators.
6
+ *
7
+ * @summary
8
+ * Iterates over the model's own enumerable properties and filters out those specified in the
9
+ * `propsToIgnore` array. For each remaining property, retrieves validation decorators specific
10
+ * to update operations using the `UpdateValidationKeys.REFLECT` key. Additionally, it explicitly
11
+ * checks for and appends any `LIST` type decorators to ensure proper validation of collection types.
12
+ *
13
+ * @template M - A generic parameter extending the `Model` class, representing the model type being inspected.
14
+ *
15
+ * @param {M} model - The model instance whose properties are being inspected for update-related validations.
16
+ * @param {string[]} propsToIgnore - A list of property names to exclude from the validation decorator retrieval process.
17
+ *
18
+ * @return {ValidationPropertyDecoratorDefinition[]} An array of validation decorator definitions, including both
19
+ * update-specific and list-type decorators, excluding those for ignored properties.
20
+ *
21
+ * @function getValidatableUpdateProps
22
+ */
23
+ export declare function getValidatableUpdateProps<M extends Model>(model: M, propsToIgnore: string[]): any[];
24
+ export declare function validateDecorator<M extends Model, Async extends boolean = false>(newModel: M, oldModel: M, prop: string, decorator: any, async?: Async): ConditionalAsync<Async, string | undefined>;
25
+ export declare function validateDecorators<M extends Model, Async extends boolean = false>(newModel: M, oldModel: M, prop: string, decorators: any, async?: Async): ConditionalAsync<Async, Record<string, string>> | undefined;
26
+ /**
27
+ * @description Validates changes between two model versions
28
+ * @summary Compares an old and new model version to validate update operations
29
+ * @template M - Type extending Model
30
+ * @param {M} oldModel - The original model version
31
+ * @param {M} newModel - The updated model version
32
+ * @param {boolean} async - A flag indicating whether validation should be asynchronous.
33
+ * @param {...string[]} propsToIgnore - Properties to exclude from validation
34
+ * @return {ModelErrorDefinition|undefined} Error definition if validation fails, undefined otherwise
35
+ * @function validateCompare
36
+ * @memberOf module:db-decorators
37
+ * @mermaid
38
+ * sequenceDiagram
39
+ * participant Caller
40
+ * participant validateCompare
41
+ * participant Reflection
42
+ * participant Validation
43
+ *
44
+ * Caller->>validateCompare: oldModel, newModel, propsToIgnore
45
+ * validateCompare->>Reflection: get decorated properties
46
+ * Reflection-->>validateCompare: property decorators
47
+ * loop For each decorated property
48
+ * validateCompare->>Validation: get validator
49
+ * Validation-->>validateCompare: validator
50
+ * validateCompare->>validateCompare: validate property update
51
+ * end
52
+ * loop For nested models
53
+ * validateCompare->>validateCompare: validate nested models
54
+ * end
55
+ * validateCompare-->>Caller: validation errors or undefined
56
+ */
57
+ export declare function validateCompare<M extends Model<any>>(oldModel: M, newModel: M, async: boolean, ...propsToIgnore: string[]): ModelConditionalAsync<M>;
@@ -0,0 +1,80 @@
1
+ import { Model } from "@decaf-ts/decorator-validation";
2
+ import { OperationHandler } from "./types.cjs";
3
+ import { OperationKeys } from "./constants.cjs";
4
+ import { IRepository } from "../interfaces/index.cjs";
5
+ /**
6
+ * @description Static utility class for database operation management
7
+ * @summary Provides functionality for registering, retrieving, and managing database operation handlers
8
+ * @class Operations
9
+ * @template M - Model type
10
+ * @template R - Repository type
11
+ * @template V - Metadata type
12
+ * @example
13
+ * // Register a handler for a create operation
14
+ * Operations.register(myHandler, OperationKeys.CREATE, targetModel, 'propertyName');
15
+ *
16
+ * // Get handlers for a specific operation
17
+ * const handlers = Operations.get(targetModel.constructor.name, 'propertyName', 'onCreate');
18
+ *
19
+ * @mermaid
20
+ * classDiagram
21
+ * class Operations {
22
+ * -registry: OperationsRegistry
23
+ * +getHandlerName(handler)
24
+ * +key(str)
25
+ * +get(targetName, propKey, operation)
26
+ * -getOpRegistry()
27
+ * +register(handler, operation, target, propKey)
28
+ * }
29
+ * Operations --> OperationsRegistry : uses
30
+ */
31
+ export declare class Operations {
32
+ private static registry;
33
+ private constructor();
34
+ /**
35
+ * @description Gets a unique name for an operation handler
36
+ * @summary Returns the name of the handler function or generates a hash if name is not available
37
+ * @param {OperationHandler<any, any, any>} handler - The handler function to get the name for
38
+ * @return {string} The name of the handler or a generated hash
39
+ */
40
+ static getHandlerName(handler: OperationHandler<any, any, any>): any;
41
+ /**
42
+ * @description Generates a reflection metadata key
43
+ * @summary Creates a fully qualified metadata key by prefixing with the reflection namespace
44
+ * @param {string} str - The operation key string to prefix
45
+ * @return {string} The fully qualified metadata key
46
+ */
47
+ static key(str: string): string;
48
+ /**
49
+ * @description Retrieves operation handlers for a specific target and operation
50
+ * @summary Gets registered handlers from the operations registry for a given target, property, and operation
51
+ * @template M - Model type extending Model
52
+ * @template R - Repository type extending IRepository
53
+ * @template V - Metadata type, defaults to object
54
+ * @template F - Repository flags extending RepositoryFlags
55
+ * @template C - Context type extending Context<F>
56
+ * @param {string | Record<string, any>} targetName - The target class name or object
57
+ * @param {string} propKey - The property key to get handlers for
58
+ * @param {string} operation - The operation key to get handlers for
59
+ * @return {any} The registered handlers for the specified target, property, and operation
60
+ */
61
+ static get<M extends Model, R extends IRepository<M, any>, V = object>(targetName: string | Record<string, any>, propKey: string, operation: string): OperationHandler<M, R, V>[] | undefined;
62
+ /**
63
+ * @description Gets or initializes the operations registry
64
+ * @summary Returns the existing registry or creates a new one if it doesn't exist
65
+ * @return {OperationsRegistry} The operations registry instance
66
+ * @private
67
+ */
68
+ private static getOpRegistry;
69
+ /**
70
+ * @description Registers an operation handler for a specific target and operation
71
+ * @summary Adds a handler to the operations registry for a given target, property, and operation
72
+ * @template V - Model type extending Model
73
+ * @param {OperationHandler<V, any, any>} handler - The handler function to register
74
+ * @param {OperationKeys} operation - The operation key to register the handler for
75
+ * @param {V} target - The target model instance
76
+ * @param {string | symbol} propKey - The property key to register the handler for
77
+ * @return {void}
78
+ */
79
+ static register<V extends Model>(handler: OperationHandler<V, any, any>, operation: OperationKeys, target: V, propKey: string | symbol): void;
80
+ }
@@ -0,0 +1,80 @@
1
+ import { Model } from "@decaf-ts/decorator-validation";
2
+ import { OperationHandler } from "./types.js";
3
+ import { OperationKeys } from "./constants.js";
4
+ import { IRepository } from "../interfaces/index.js";
5
+ /**
6
+ * @description Static utility class for database operation management
7
+ * @summary Provides functionality for registering, retrieving, and managing database operation handlers
8
+ * @class Operations
9
+ * @template M - Model type
10
+ * @template R - Repository type
11
+ * @template V - Metadata type
12
+ * @example
13
+ * // Register a handler for a create operation
14
+ * Operations.register(myHandler, OperationKeys.CREATE, targetModel, 'propertyName');
15
+ *
16
+ * // Get handlers for a specific operation
17
+ * const handlers = Operations.get(targetModel.constructor.name, 'propertyName', 'onCreate');
18
+ *
19
+ * @mermaid
20
+ * classDiagram
21
+ * class Operations {
22
+ * -registry: OperationsRegistry
23
+ * +getHandlerName(handler)
24
+ * +key(str)
25
+ * +get(targetName, propKey, operation)
26
+ * -getOpRegistry()
27
+ * +register(handler, operation, target, propKey)
28
+ * }
29
+ * Operations --> OperationsRegistry : uses
30
+ */
31
+ export declare class Operations {
32
+ private static registry;
33
+ private constructor();
34
+ /**
35
+ * @description Gets a unique name for an operation handler
36
+ * @summary Returns the name of the handler function or generates a hash if name is not available
37
+ * @param {OperationHandler<any, any, any>} handler - The handler function to get the name for
38
+ * @return {string} The name of the handler or a generated hash
39
+ */
40
+ static getHandlerName(handler: OperationHandler<any, any, any>): any;
41
+ /**
42
+ * @description Generates a reflection metadata key
43
+ * @summary Creates a fully qualified metadata key by prefixing with the reflection namespace
44
+ * @param {string} str - The operation key string to prefix
45
+ * @return {string} The fully qualified metadata key
46
+ */
47
+ static key(str: string): string;
48
+ /**
49
+ * @description Retrieves operation handlers for a specific target and operation
50
+ * @summary Gets registered handlers from the operations registry for a given target, property, and operation
51
+ * @template M - Model type extending Model
52
+ * @template R - Repository type extending IRepository
53
+ * @template V - Metadata type, defaults to object
54
+ * @template F - Repository flags extending RepositoryFlags
55
+ * @template C - Context type extending Context<F>
56
+ * @param {string | Record<string, any>} targetName - The target class name or object
57
+ * @param {string} propKey - The property key to get handlers for
58
+ * @param {string} operation - The operation key to get handlers for
59
+ * @return {any} The registered handlers for the specified target, property, and operation
60
+ */
61
+ static get<M extends Model, R extends IRepository<M, any>, V = object>(targetName: string | Record<string, any>, propKey: string, operation: string): OperationHandler<M, R, V>[] | undefined;
62
+ /**
63
+ * @description Gets or initializes the operations registry
64
+ * @summary Returns the existing registry or creates a new one if it doesn't exist
65
+ * @return {OperationsRegistry} The operations registry instance
66
+ * @private
67
+ */
68
+ private static getOpRegistry;
69
+ /**
70
+ * @description Registers an operation handler for a specific target and operation
71
+ * @summary Adds a handler to the operations registry for a given target, property, and operation
72
+ * @template V - Model type extending Model
73
+ * @param {OperationHandler<V, any, any>} handler - The handler function to register
74
+ * @param {OperationKeys} operation - The operation key to register the handler for
75
+ * @param {V} target - The target model instance
76
+ * @param {string | symbol} propKey - The property key to register the handler for
77
+ * @return {void}
78
+ */
79
+ static register<V extends Model>(handler: OperationHandler<V, any, any>, operation: OperationKeys, target: V, propKey: string | symbol): void;
80
+ }