@decaf-ts/db-decorators 0.6.1 → 0.6.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 (141) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +571 -10
  3. package/dist/db-decorators.cjs +1352 -322
  4. package/dist/db-decorators.esm.cjs +1352 -323
  5. package/lib/esm/identity/decorators.d.ts +7 -0
  6. package/lib/esm/identity/decorators.js +11 -4
  7. package/lib/esm/identity/index.js +3 -3
  8. package/lib/esm/identity/utils.d.ts +36 -23
  9. package/lib/esm/identity/utils.js +38 -25
  10. package/lib/esm/index.d.ts +12 -27
  11. package/lib/esm/index.js +13 -28
  12. package/lib/esm/interfaces/BulkCrudOperator.d.ts +39 -0
  13. package/lib/esm/interfaces/BulkCrudOperator.js +1 -1
  14. package/lib/esm/interfaces/Contextual.d.ts +17 -0
  15. package/lib/esm/interfaces/Contextual.js +1 -1
  16. package/lib/esm/interfaces/CrudOperator.d.ts +26 -23
  17. package/lib/esm/interfaces/CrudOperator.js +1 -1
  18. package/lib/esm/interfaces/IRepository.d.ts +10 -2
  19. package/lib/esm/interfaces/IRepository.js +1 -1
  20. package/lib/esm/interfaces/index.js +5 -5
  21. package/lib/esm/model/constants.d.ts +11 -13
  22. package/lib/esm/model/constants.js +12 -14
  23. package/lib/esm/model/decorators.d.ts +112 -23
  24. package/lib/esm/model/decorators.js +119 -29
  25. package/lib/esm/model/index.d.ts +1 -0
  26. package/lib/esm/model/index.js +7 -6
  27. package/lib/esm/model/model.d.ts +2 -141
  28. package/lib/esm/model/model.js +2 -13
  29. package/lib/esm/model/overrides.d.ts +1 -0
  30. package/lib/esm/model/overrides.js +23 -0
  31. package/lib/esm/model/utils.d.ts +39 -0
  32. package/lib/esm/model/utils.js +42 -3
  33. package/lib/esm/model/validation.d.ts +26 -8
  34. package/lib/esm/model/validation.js +29 -11
  35. package/lib/esm/operations/Operations.d.ts +65 -3
  36. package/lib/esm/operations/Operations.js +68 -6
  37. package/lib/esm/operations/OperationsRegistry.d.ts +44 -16
  38. package/lib/esm/operations/OperationsRegistry.js +46 -18
  39. package/lib/esm/operations/constants.d.ts +27 -8
  40. package/lib/esm/operations/constants.js +16 -9
  41. package/lib/esm/operations/decorators.d.ts +140 -134
  42. package/lib/esm/operations/decorators.js +152 -137
  43. package/lib/esm/operations/index.js +6 -6
  44. package/lib/esm/operations/types.d.ts +10 -0
  45. package/lib/esm/operations/types.js +1 -1
  46. package/lib/esm/repository/BaseRepository.d.ts +322 -0
  47. package/lib/esm/repository/BaseRepository.js +297 -7
  48. package/lib/esm/repository/Context.d.ts +153 -2
  49. package/lib/esm/repository/Context.js +154 -6
  50. package/lib/esm/repository/Repository.d.ts +89 -0
  51. package/lib/esm/repository/Repository.js +96 -7
  52. package/lib/esm/repository/constants.d.ts +7 -0
  53. package/lib/esm/repository/constants.js +8 -1
  54. package/lib/esm/repository/errors.d.ts +61 -34
  55. package/lib/esm/repository/errors.js +62 -35
  56. package/lib/esm/repository/index.js +9 -9
  57. package/lib/esm/repository/types.d.ts +25 -0
  58. package/lib/esm/repository/types.js +1 -1
  59. package/lib/esm/repository/utils.d.ts +11 -0
  60. package/lib/esm/repository/utils.js +4 -4
  61. package/lib/esm/repository/wrappers.d.ts +2 -2
  62. package/lib/esm/repository/wrappers.js +5 -5
  63. package/lib/esm/validation/constants.d.ts +20 -5
  64. package/lib/esm/validation/constants.js +22 -7
  65. package/lib/esm/validation/decorators.d.ts +101 -19
  66. package/lib/esm/validation/decorators.js +109 -27
  67. package/lib/esm/validation/index.js +5 -5
  68. package/lib/esm/validation/validation.js +10 -2
  69. package/lib/esm/validation/validators/ReadOnlyValidator.d.ts +32 -8
  70. package/lib/esm/validation/validators/ReadOnlyValidator.js +34 -10
  71. package/lib/esm/validation/validators/TimestampValidator.d.ts +37 -3
  72. package/lib/esm/validation/validators/TimestampValidator.js +39 -5
  73. package/lib/esm/validation/validators/UpdateValidator.d.ts +28 -11
  74. package/lib/esm/validation/validators/UpdateValidator.js +23 -8
  75. package/lib/esm/validation/validators/index.js +4 -4
  76. package/lib/identity/decorators.cjs +8 -1
  77. package/lib/identity/decorators.d.ts +7 -0
  78. package/lib/identity/utils.cjs +35 -22
  79. package/lib/identity/utils.d.ts +36 -23
  80. package/lib/index.cjs +14 -28
  81. package/lib/index.d.ts +12 -27
  82. package/lib/interfaces/BulkCrudOperator.cjs +1 -1
  83. package/lib/interfaces/BulkCrudOperator.d.ts +39 -0
  84. package/lib/interfaces/Contextual.cjs +1 -1
  85. package/lib/interfaces/Contextual.d.ts +17 -0
  86. package/lib/interfaces/CrudOperator.cjs +1 -1
  87. package/lib/interfaces/CrudOperator.d.ts +26 -23
  88. package/lib/interfaces/IRepository.cjs +1 -1
  89. package/lib/interfaces/IRepository.d.ts +10 -2
  90. package/lib/model/constants.cjs +12 -14
  91. package/lib/model/constants.d.ts +11 -13
  92. package/lib/model/decorators.cjs +114 -24
  93. package/lib/model/decorators.d.ts +112 -23
  94. package/lib/model/index.cjs +2 -1
  95. package/lib/model/index.d.ts +1 -0
  96. package/lib/model/model.cjs +1 -13
  97. package/lib/model/model.d.ts +2 -141
  98. package/lib/model/overrides.cjs +25 -0
  99. package/lib/model/overrides.d.ts +1 -0
  100. package/lib/model/utils.cjs +40 -1
  101. package/lib/model/utils.d.ts +39 -0
  102. package/lib/model/validation.cjs +27 -9
  103. package/lib/model/validation.d.ts +26 -8
  104. package/lib/operations/Operations.cjs +66 -4
  105. package/lib/operations/Operations.d.ts +65 -3
  106. package/lib/operations/OperationsRegistry.cjs +45 -17
  107. package/lib/operations/OperationsRegistry.d.ts +44 -16
  108. package/lib/operations/constants.cjs +16 -9
  109. package/lib/operations/constants.d.ts +27 -8
  110. package/lib/operations/decorators.cjs +150 -135
  111. package/lib/operations/decorators.d.ts +140 -134
  112. package/lib/operations/types.cjs +1 -1
  113. package/lib/operations/types.d.ts +10 -0
  114. package/lib/repository/BaseRepository.cjs +291 -1
  115. package/lib/repository/BaseRepository.d.ts +322 -0
  116. package/lib/repository/Context.cjs +153 -5
  117. package/lib/repository/Context.d.ts +153 -2
  118. package/lib/repository/Repository.cjs +90 -1
  119. package/lib/repository/Repository.d.ts +89 -0
  120. package/lib/repository/constants.cjs +8 -1
  121. package/lib/repository/constants.d.ts +7 -0
  122. package/lib/repository/errors.cjs +62 -35
  123. package/lib/repository/errors.d.ts +61 -34
  124. package/lib/repository/types.cjs +1 -1
  125. package/lib/repository/types.d.ts +25 -0
  126. package/lib/repository/utils.cjs +1 -1
  127. package/lib/repository/utils.d.ts +11 -0
  128. package/lib/repository/wrappers.cjs +3 -3
  129. package/lib/repository/wrappers.d.ts +2 -2
  130. package/lib/validation/constants.cjs +21 -6
  131. package/lib/validation/constants.d.ts +20 -5
  132. package/lib/validation/decorators.cjs +102 -20
  133. package/lib/validation/decorators.d.ts +101 -19
  134. package/lib/validation/validation.cjs +9 -1
  135. package/lib/validation/validators/ReadOnlyValidator.cjs +33 -9
  136. package/lib/validation/validators/ReadOnlyValidator.d.ts +32 -8
  137. package/lib/validation/validators/TimestampValidator.cjs +38 -4
  138. package/lib/validation/validators/TimestampValidator.d.ts +37 -3
  139. package/lib/validation/validators/UpdateValidator.cjs +23 -8
  140. package/lib/validation/validators/UpdateValidator.d.ts +28 -11
  141. package/package.json +2 -2
@@ -1,13 +1,61 @@
1
- import { enforceDBDecorators } from "./utils";
2
- import { OperationKeys } from "../operations/constants";
3
- import { InternalError, ValidationError } from "./errors";
4
- import { BaseRepository } from "./BaseRepository";
5
- import { DBKeys } from "../model/constants";
6
- import { Context } from "./Context";
1
+ import { enforceDBDecorators } from "./utils.js";
2
+ import { OperationKeys } from "./../operations/constants.js";
3
+ import { InternalError, ValidationError } from "./errors.js";
4
+ import { BaseRepository } from "./BaseRepository.js";
5
+ import { DBKeys } from "./../model/constants.js";
6
+ import { Context } from "./Context.js";
7
+ /**
8
+ * @description Concrete repository implementation with validation support.
9
+ * @summary The Repository class extends BaseRepository to provide additional validation
10
+ * functionality. It overrides prefix methods to perform model validation before database
11
+ * operations and throws ValidationError when validation fails.
12
+ * @template M - The model type extending Model
13
+ * @template F - The repository flags type, defaults to RepositoryFlags
14
+ * @template C - The context type, defaults to Context<F>
15
+ * @class Repository
16
+ * @example
17
+ * class UserModel extends Model {
18
+ * @id()
19
+ * id: string;
20
+ *
21
+ * @required()
22
+ * @minLength(3)
23
+ * name: string;
24
+ * }
25
+ *
26
+ * class UserRepository extends Repository<UserModel> {
27
+ * constructor() {
28
+ * super(UserModel);
29
+ * }
30
+ *
31
+ * async create(model: UserModel): Promise<UserModel> {
32
+ * // Implementation with automatic validation
33
+ * return model;
34
+ * }
35
+ * }
36
+ *
37
+ * // Using the repository
38
+ * const repo = new UserRepository();
39
+ * try {
40
+ * const user = await repo.create({ name: 'Jo' }); // Will throw ValidationError
41
+ * } catch (error) {
42
+ * console.error(error); // ValidationError: name must be at least 3 characters
43
+ * }
44
+ */
7
45
  export class Repository extends BaseRepository {
8
46
  constructor(clazz) {
9
47
  super(clazz);
10
48
  }
49
+ /**
50
+ * @description Prepares a model for creation with validation.
51
+ * @summary Overrides the base createPrefix method to add validation checks.
52
+ * Creates a context, instantiates a new model, enforces decorators, and validates
53
+ * the model before allowing creation to proceed.
54
+ * @param {M} model - The model instance to prepare for creation
55
+ * @param {any[]} args - Additional arguments for the create operation
56
+ * @return A promise that resolves to an array containing the validated model and context arguments
57
+ * @throws {ValidationError} If the model fails validation
58
+ */
11
59
  async createPrefix(model, ...args) {
12
60
  const contextArgs = await Context.args(OperationKeys.CREATE, this.class, args);
13
61
  model = new this.class(model);
@@ -17,6 +65,16 @@ export class Repository extends BaseRepository {
17
65
  throw new ValidationError(errors.toString());
18
66
  return [model, ...contextArgs.args];
19
67
  }
68
+ /**
69
+ * @description Prepares multiple models for creation with validation.
70
+ * @summary Overrides the base createAllPrefix method to add validation checks for multiple models.
71
+ * Creates a context, instantiates new models, enforces decorators, and validates
72
+ * each model before allowing creation to proceed. Collects validation errors from all models.
73
+ * @param {M[]} models - The array of model instances to prepare for creation
74
+ * @param {any[]} args - Additional arguments for the create operation
75
+ * @return {Promise<any[]>} A promise that resolves to an array containing the validated models and context arguments
76
+ * @throws {ValidationError} If any model fails validation, with details about which models failed
77
+ */
20
78
  async createAllPrefix(models, ...args) {
21
79
  const contextArgs = await Context.args(OperationKeys.CREATE, this.class, args);
22
80
  await Promise.all(models.map(async (m) => {
@@ -38,6 +96,18 @@ export class Repository extends BaseRepository {
38
96
  throw new ValidationError(errors);
39
97
  return [models, ...contextArgs.args];
40
98
  }
99
+ /**
100
+ * @description Prepares a model for update with validation.
101
+ * @summary Overrides the base updatePrefix method to add validation checks.
102
+ * Creates a context, validates the primary key, retrieves the existing model,
103
+ * merges the old and new models, enforces decorators, and validates the model
104
+ * before allowing the update to proceed.
105
+ * @param {M} model - The model instance to prepare for update
106
+ * @param {any[]} args - Additional arguments for the update operation
107
+ * @return A promise that resolves to an array containing the validated model and context arguments
108
+ * @throws {InternalError} If the model doesn't have a primary key value
109
+ * @throws {ValidationError} If the model fails validation
110
+ */
41
111
  async updatePrefix(model, ...args) {
42
112
  const contextArgs = await Context.args(OperationKeys.UPDATE, this.class, args);
43
113
  const pk = model[this.pk];
@@ -51,6 +121,18 @@ export class Repository extends BaseRepository {
51
121
  throw new ValidationError(errors.toString());
52
122
  return [model, ...contextArgs.args];
53
123
  }
124
+ /**
125
+ * @description Prepares multiple models for update with validation.
126
+ * @summary Overrides the base updateAllPrefix method to add validation checks for multiple models.
127
+ * Creates a context, validates primary keys, retrieves existing models, merges old and new models,
128
+ * enforces decorators, and validates each model before allowing updates to proceed.
129
+ * Collects validation errors from all models.
130
+ * @param {M[]} models - The array of model instances to prepare for update
131
+ * @param {any[]} args - Additional arguments for the update operation
132
+ * @return A promise that resolves to an array containing the validated models and context arguments
133
+ * @throws {InternalError} If any model doesn't have a primary key value
134
+ * @throws {ValidationError} If any model fails validation, with details about which models failed
135
+ */
54
136
  async updateAllPrefix(models, ...args) {
55
137
  const contextArgs = await Context.args(OperationKeys.UPDATE, this.class, args);
56
138
  const ids = models.map((m) => {
@@ -76,8 +158,15 @@ export class Repository extends BaseRepository {
76
158
  throw new ValidationError(errors);
77
159
  return [models, ...contextArgs.args];
78
160
  }
161
+ /**
162
+ * @description Creates a reflection key for database operations.
163
+ * @summary Generates a key for storing metadata in the reflection system by prefixing
164
+ * the provided key with the database reflection prefix.
165
+ * @param {string} key - The base key to prefix
166
+ * @return {string} The prefixed reflection key
167
+ */
79
168
  static key(key) {
80
169
  return DBKeys.REFLECT + key;
81
170
  }
82
171
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHcEMsTUFBTSxPQUFnQixVQUlwQixTQUFRLGNBQXVCO0lBQy9CLFlBQXNCLEtBQXNCO1FBQzFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFa0IsS0FBSyxDQUFDLFlBQVksQ0FDbkMsS0FBUSxFQUNSLEdBQUcsSUFBVztRQUVkLE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FDcEMsYUFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQ0wsQ0FBQztRQUNGLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxtQkFBbUIsQ0FDdkIsSUFBSSxFQUNKLFdBQVcsQ0FBQyxPQUFPLEVBQ25CLEtBQUssRUFDTCxhQUFhLENBQUMsTUFBTSxFQUNwQixhQUFhLENBQUMsRUFBRSxDQUNqQixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLElBQUksTUFBTTtZQUFFLE1BQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEs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LENBQUMsQ0FBUSxDQUFDLENBQUM7YUFDL0MsTUFBTSxDQUFDLENBQUMsS0FBeUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDO2dCQUNILEtBQUs7b0JBQ0gsT0FBTyxLQUFLLEtBQUssUUFBUTt3QkFDdkIsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7d0JBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoQixJQUFJLE1BQU07WUFBRSxNQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNwQixPQUFPLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuZm9yY2VEQkRlY29yYXRvcnMgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCIuLi9vcGVyYXRpb25zL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBCYXNlUmVwb3NpdG9yeSB9IGZyb20gXCIuL0Jhc2VSZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEQktleXMgfSBmcm9tIFwiLi4vbW9kZWwvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4vQ29udGV4dFwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlcG9zaXRvcnk8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyA9IFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4gPSBDb250ZXh0PEY+LFxuPiBleHRlbmRzIEJhc2VSZXBvc2l0b3J5PE0sIEYsIEM+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNsYXp6PzogQ29uc3RydWN0b3I8TT4pIHtcbiAgICBzdXBlcihjbGF6eik7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8W00sIC4uLmFueVtdXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJnc1xuICAgICk7XG4gICAgbW9kZWwgPSBuZXcgdGhpcy5jbGFzcyhtb2RlbCk7XG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICApO1xuXG4gICAgY29uc3QgZXJyb3JzID0gbW9kZWwuaGFzRXJyb3JzKCk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gW21vZGVsLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBjcmVhdGVBbGxQcmVmaXgoXG4gICAgbW9kZWxzOiBNW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJnc1xuICAgICk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtb2RlbHMubWFwKGFzeW5jIChtKSA9PiB7XG4gICAgICAgIG0gPSBuZXcgdGhpcy5jbGFzcyhtKTtcbiAgICAgICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfSlcbiAgICApO1xuICAgIGNvbnN0IGVycm9ycyA9IG1vZGVsc1xuICAgICAgLm1hcCgobSkgPT4gbS5oYXNFcnJvcnMoKSlcbiAgICAgIC5yZWR1Y2UoKGFjY3VtOiBzdHJpbmcgfCB1bmRlZmluZWQsIGUsIGkpID0+IHtcbiAgICAgICAgaWYgKGUpXG4gICAgICAgICAgYWNjdW0gPVxuICAgICAgICAgICAgdHlwZW9mIGFjY3VtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gYWNjdW0gKyBgXFxuIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgICA6IGAgLSAke2l9OiAke2UudG9TdHJpbmcoKX1gO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCB1bmRlZmluZWQpO1xuICAgIGlmIChlcnJvcnMpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICByZXR1cm4gW21vZGVscywgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8W00sIC4uLmFyZ3M6IGFueVtdXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJnc1xuICAgICk7XG4gICAgY29uc3QgcGsgPSAobW9kZWwgYXMgYW55KVt0aGlzLnBrXTtcbiAgICBpZiAoIXBrKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB2YWx1ZSBmb3IgdGhlIElkIGlzIGRlZmluZWQgdW5kZXIgdGhlIHByb3BlcnR5ICR7dGhpcy5wayBhcyBzdHJpbmd9YFxuICAgICAgKTtcblxuICAgIGNvbnN0IG9sZE1vZGVsOiBNID0gYXdhaXQgdGhpcy5yZWFkKHBrKTtcblxuICAgIG1vZGVsID0gdGhpcy5tZXJnZShvbGRNb2RlbCwgbW9kZWwpO1xuXG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT04sXG4gICAgICBvbGRNb2RlbFxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBtb2RlbC5oYXNFcnJvcnMob2xkTW9kZWwgYXMgYW55KTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy50b1N0cmluZygpKTtcbiAgICByZXR1cm4gW21vZGVsLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB1cGRhdGVBbGxQcmVmaXgobW9kZWxzOiBNW10sIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzXG4gICAgKTtcbiAgICBjb25zdCBpZHMgPSBtb2RlbHMubWFwKChtKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IG1bdGhpcy5wa107XG4gICAgICBpZiAodHlwZW9mIGlkID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBgTm8gdmFsdWUgZm9yIHRoZSBJZCBpcyBkZWZpbmVkIHVuZGVyIHRoZSBwcm9wZXJ0eSAke3RoaXMucGsgYXMgc3RyaW5nfWBcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBpZCBhcyBzdHJpbmc7XG4gICAgfSk7XG4gICAgY29uc3Qgb2xkTW9kZWxzOiBNW10gPSBhd2FpdCB0aGlzLnJlYWRBbGwoaWRzLCAuLi5jb250ZXh0QXJncy5hcmdzKTtcbiAgICBtb2RlbHMgPSBtb2RlbHMubWFwKChtLCBpKSA9PiB0aGlzLm1lcmdlKG9sZE1vZGVsc1tpXSwgbSkpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcCgobSwgaSkgPT5cbiAgICAgICAgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OLFxuICAgICAgICAgIG9sZE1vZGVsc1tpXVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGVycm9ycyA9IG1vZGVsc1xuICAgICAgLm1hcCgobSwgaSkgPT4gbS5oYXNFcnJvcnMob2xkTW9kZWxzW2ldIGFzIGFueSkpXG4gICAgICAucmVkdWNlKChhY2N1bTogc3RyaW5nIHwgdW5kZWZpbmVkLCBlLCBpKSA9PiB7XG4gICAgICAgIGlmIChlKVxuICAgICAgICAgIGFjY3VtID1cbiAgICAgICAgICAgIHR5cGVvZiBhY2N1bSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IGFjY3VtICsgYFxcbiAtICR7aX06ICR7ZS50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgOiBgIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgdW5kZWZpbmVkKTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycyk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgc3RhdGljIGtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBEQktleXMuUkVGTEVDVCArIGtleTtcbiAgfVxufVxuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFnQjtBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLHFDQUFnQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxvQkFBaUI7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSw0QkFBeUI7QUFFbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxnQ0FBMkI7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxxQkFBa0I7QUFHcEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFDSCxNQUFNLE9BQWdCLFVBSXBCLFNBQVEsY0FBdUI7SUFDL0IsWUFBc0IsS0FBc0I7UUFDMUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNnQixLQUFLLENBQUMsWUFBWSxDQUNuQyxLQUFRLEVBQ1IsR0FBRyxJQUFXO1FBRWQsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUNwQyxhQUFhLENBQUMsTUFBTSxFQUNwQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDTCxDQUFDO1FBQ0YsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLG1CQUFtQixDQUN2QixJQUFJLEVBQ0osV0FBVyxDQUFDLE9BQU8sRUFDbkIsS0FBSyxFQUNMLGFBQWEsQ0FBQyxNQUFNLEVBQ3BCLGFBQWEsQ0FBQyxFQUFFLENBQ2pCLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakMsSUFBSSxNQUFNO1lBQUUsTUFBTSxJQUFJLGVBQWUsQ0FBQyxNQUFN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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxDQUFDLENBQUM7YUFDL0MsTUFBTSxDQUFDLENBQUMsS0FBeUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDO2dCQUNILEtBQUs7b0JBQ0gsT0FBTyxLQUFLLEtBQUssUUFBUTt3QkFDdkIsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7d0JBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoQixJQUFJLE1BQU07WUFBRSxNQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNwQixPQUFPLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuZm9yY2VEQkRlY29yYXRvcnMgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCIuLi9vcGVyYXRpb25zL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBCYXNlUmVwb3NpdG9yeSB9IGZyb20gXCIuL0Jhc2VSZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEQktleXMgfSBmcm9tIFwiLi4vbW9kZWwvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4vQ29udGV4dFwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uY3JldGUgcmVwb3NpdG9yeSBpbXBsZW1lbnRhdGlvbiB3aXRoIHZhbGlkYXRpb24gc3VwcG9ydC5cbiAqIEBzdW1tYXJ5IFRoZSBSZXBvc2l0b3J5IGNsYXNzIGV4dGVuZHMgQmFzZVJlcG9zaXRvcnkgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIHZhbGlkYXRpb25cbiAqIGZ1bmN0aW9uYWxpdHkuIEl0IG92ZXJyaWRlcyBwcmVmaXggbWV0aG9kcyB0byBwZXJmb3JtIG1vZGVsIHZhbGlkYXRpb24gYmVmb3JlIGRhdGFiYXNlXG4gKiBvcGVyYXRpb25zIGFuZCB0aHJvd3MgVmFsaWRhdGlvbkVycm9yIHdoZW4gdmFsaWRhdGlvbiBmYWlscy5cbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGUsIGRlZmF1bHRzIHRvIFJlcG9zaXRvcnlGbGFnc1xuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlLCBkZWZhdWx0cyB0byBDb250ZXh0PEY+XG4gKiBAY2xhc3MgUmVwb3NpdG9yeVxuICogQGV4YW1wbGVcbiAqIGNsYXNzIFVzZXJNb2RlbCBleHRlbmRzIE1vZGVsIHtcbiAqICAgQGlkKClcbiAqICAgaWQ6IHN0cmluZztcbiAqXG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIEBtaW5MZW5ndGgoMylcbiAqICAgbmFtZTogc3RyaW5nO1xuICogfVxuICpcbiAqIGNsYXNzIFVzZXJSZXBvc2l0b3J5IGV4dGVuZHMgUmVwb3NpdG9yeTxVc2VyTW9kZWw+IHtcbiAqICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgc3VwZXIoVXNlck1vZGVsKTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgY3JlYXRlKG1vZGVsOiBVc2VyTW9kZWwpOiBQcm9taXNlPFVzZXJNb2RlbD4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uIHdpdGggYXV0b21hdGljIHZhbGlkYXRpb25cbiAqICAgICByZXR1cm4gbW9kZWw7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBVc2luZyB0aGUgcmVwb3NpdG9yeVxuICogY29uc3QgcmVwbyA9IG5ldyBVc2VyUmVwb3NpdG9yeSgpO1xuICogdHJ5IHtcbiAqICAgY29uc3QgdXNlciA9IGF3YWl0IHJlcG8uY3JlYXRlKHsgbmFtZTogJ0pvJyB9KTsgLy8gV2lsbCB0aHJvdyBWYWxpZGF0aW9uRXJyb3JcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOyAvLyBWYWxpZGF0aW9uRXJyb3I6IG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnNcbiAqIH1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlcG9zaXRvcnk8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyA9IFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4gPSBDb250ZXh0PEY+LFxuPiBleHRlbmRzIEJhc2VSZXBvc2l0b3J5PE0sIEYsIEM+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNsYXp6PzogQ29uc3RydWN0b3I8TT4pIHtcbiAgICBzdXBlcihjbGF6eik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIGNyZWF0aW9uIHdpdGggdmFsaWRhdGlvbi5cbiAgICogQHN1bW1hcnkgT3ZlcnJpZGVzIHRoZSBiYXNlIGNyZWF0ZVByZWZpeCBtZXRob2QgdG8gYWRkIHZhbGlkYXRpb24gY2hlY2tzLlxuICAgKiBDcmVhdGVzIGEgY29udGV4dCwgaW5zdGFudGlhdGVzIGEgbmV3IG1vZGVsLCBlbmZvcmNlcyBkZWNvcmF0b3JzLCBhbmQgdmFsaWRhdGVzXG4gICAqIHRoZSBtb2RlbCBiZWZvcmUgYWxsb3dpbmcgY3JlYXRpb24gdG8gcHJvY2VlZC5cbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB0byBwcmVwYXJlIGZvciBjcmVhdGlvblxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSBjcmVhdGUgb3BlcmF0aW9uXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsaWRhdGVkIG1vZGVsIGFuZCBjb250ZXh0IGFyZ3VtZW50c1xuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIHRoZSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8W00sIC4uLmFueVtdXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJnc1xuICAgICk7XG4gICAgbW9kZWwgPSBuZXcgdGhpcy5jbGFzcyhtb2RlbCk7XG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICApO1xuXG4gICAgY29uc3QgZXJyb3JzID0gbW9kZWwuaGFzRXJyb3JzKCk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gW21vZGVsLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgbXVsdGlwbGUgbW9kZWxzIGZvciBjcmVhdGlvbiB3aXRoIHZhbGlkYXRpb24uXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlcyB0aGUgYmFzZSBjcmVhdGVBbGxQcmVmaXggbWV0aG9kIHRvIGFkZCB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgbXVsdGlwbGUgbW9kZWxzLlxuICAgKiBDcmVhdGVzIGEgY29udGV4dCwgaW5zdGFudGlhdGVzIG5ldyBtb2RlbHMsIGVuZm9yY2VzIGRlY29yYXRvcnMsIGFuZCB2YWxpZGF0ZXNcbiAgICogZWFjaCBtb2RlbCBiZWZvcmUgYWxsb3dpbmcgY3JlYXRpb24gdG8gcHJvY2VlZC4gQ29sbGVjdHMgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBhbGwgbW9kZWxzLlxuICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIGFycmF5IG9mIG1vZGVsIGluc3RhbmNlcyB0byBwcmVwYXJlIGZvciBjcmVhdGlvblxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSBjcmVhdGUgb3BlcmF0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55W10+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSB2YWxpZGF0ZWQgbW9kZWxzIGFuZCBjb250ZXh0IGFyZ3VtZW50c1xuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIGFueSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uLCB3aXRoIGRldGFpbHMgYWJvdXQgd2hpY2ggbW9kZWxzIGZhaWxlZFxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbFByZWZpeChcbiAgICBtb2RlbHM6IE1bXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1vZGVscy5tYXAoYXN5bmMgKG0pID0+IHtcbiAgICAgICAgbSA9IG5ldyB0aGlzLmNsYXNzKG0pO1xuICAgICAgICBhd2FpdCBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgY29udGV4dEFyZ3MuY29udGV4dCxcbiAgICAgICAgICBtLFxuICAgICAgICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgICAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgZXJyb3JzID0gbW9kZWxzXG4gICAgICAubWFwKChtKSA9PiBtLmhhc0Vycm9ycygpKVxuICAgICAgLnJlZHVjZSgoYWNjdW06IHN0cmluZyB8IHVuZGVmaW5lZCwgZSwgaSkgPT4ge1xuICAgICAgICBpZiAoZSlcbiAgICAgICAgICBhY2N1bSA9XG4gICAgICAgICAgICB0eXBlb2YgYWNjdW0gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyBhY2N1bSArIGBcXG4gLSAke2l9OiAke2UudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIDogYCAtICR7aX06ICR7ZS50b1N0cmluZygpfWA7XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sIHVuZGVmaW5lZCk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMpO1xuICAgIHJldHVybiBbbW9kZWxzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgYSBtb2RlbCBmb3IgdXBkYXRlIHdpdGggdmFsaWRhdGlvbi5cbiAgICogQHN1bW1hcnkgT3ZlcnJpZGVzIHRoZSBiYXNlIHVwZGF0ZVByZWZpeCBtZXRob2QgdG8gYWRkIHZhbGlkYXRpb24gY2hlY2tzLlxuICAgKiBDcmVhdGVzIGEgY29udGV4dCwgdmFsaWRhdGVzIHRoZSBwcmltYXJ5IGtleSwgcmV0cmlldmVzIHRoZSBleGlzdGluZyBtb2RlbCxcbiAgICogbWVyZ2VzIHRoZSBvbGQgYW5kIG5ldyBtb2RlbHMsIGVuZm9yY2VzIGRlY29yYXRvcnMsIGFuZCB2YWxpZGF0ZXMgdGhlIG1vZGVsXG4gICAqIGJlZm9yZSBhbGxvd2luZyB0aGUgdXBkYXRlIHRvIHByb2NlZWQuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gcHJlcGFyZSBmb3IgdXBkYXRlXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgdGhlIHVwZGF0ZSBvcGVyYXRpb25cbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSB2YWxpZGF0ZWQgbW9kZWwgYW5kIGNvbnRleHQgYXJndW1lbnRzXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIHRoZSBtb2RlbCBkb2Vzbid0IGhhdmUgYSBwcmltYXJ5IGtleSB2YWx1ZVxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIHRoZSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8W00sIC4uLmFyZ3M6IGFueVtdXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJnc1xuICAgICk7XG4gICAgY29uc3QgcGsgPSAobW9kZWwgYXMgYW55KVt0aGlzLnBrXTtcbiAgICBpZiAoIXBrKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB2YWx1ZSBmb3IgdGhlIElkIGlzIGRlZmluZWQgdW5kZXIgdGhlIHByb3BlcnR5ICR7dGhpcy5wayBhcyBzdHJpbmd9YFxuICAgICAgKTtcblxuICAgIGNvbnN0IG9sZE1vZGVsOiBNID0gYXdhaXQgdGhpcy5yZWFkKHBrKTtcblxuICAgIG1vZGVsID0gdGhpcy5tZXJnZShvbGRNb2RlbCwgbW9kZWwpO1xuXG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT04sXG4gICAgICBvbGRNb2RlbFxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBtb2RlbC5oYXNFcnJvcnMob2xkTW9kZWwgYXMgYW55KTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy50b1N0cmluZygpKTtcbiAgICByZXR1cm4gW21vZGVsLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgbXVsdGlwbGUgbW9kZWxzIGZvciB1cGRhdGUgd2l0aCB2YWxpZGF0aW9uLlxuICAgKiBAc3VtbWFyeSBPdmVycmlkZXMgdGhlIGJhc2UgdXBkYXRlQWxsUHJlZml4IG1ldGhvZCB0byBhZGQgdmFsaWRhdGlvbiBjaGVja3MgZm9yIG11bHRpcGxlIG1vZGVscy5cbiAgICogQ3JlYXRlcyBhIGNvbnRleHQsIHZhbGlkYXRlcyBwcmltYXJ5IGtleXMsIHJldHJpZXZlcyBleGlzdGluZyBtb2RlbHMsIG1lcmdlcyBvbGQgYW5kIG5ldyBtb2RlbHMsXG4gICAqIGVuZm9yY2VzIGRlY29yYXRvcnMsIGFuZCB2YWxpZGF0ZXMgZWFjaCBtb2RlbCBiZWZvcmUgYWxsb3dpbmcgdXBkYXRlcyB0byBwcm9jZWVkLlxuICAgKiBDb2xsZWN0cyB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIGFsbCBtb2RlbHMuXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBUaGUgYXJyYXkgb2YgbW9kZWwgaW5zdGFuY2VzIHRvIHByZXBhcmUgZm9yIHVwZGF0ZVxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSB1cGRhdGUgb3BlcmF0aW9uXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsaWRhdGVkIG1vZGVscyBhbmQgY29udGV4dCBhcmd1bWVudHNcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgYW55IG1vZGVsIGRvZXNuJ3QgaGF2ZSBhIHByaW1hcnkga2V5IHZhbHVlXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gSWYgYW55IG1vZGVsIGZhaWxzIHZhbGlkYXRpb24sIHdpdGggZGV0YWlscyBhYm91dCB3aGljaCBtb2RlbHMgZmFpbGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlQWxsUHJlZml4KG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJnc1xuICAgICk7XG4gICAgY29uc3QgaWRzID0gbW9kZWxzLm1hcCgobSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBtW3RoaXMucGtdO1xuICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYE5vIHZhbHVlIGZvciB0aGUgSWQgaXMgZGVmaW5lZCB1bmRlciB0aGUgcHJvcGVydHkgJHt0aGlzLnBrIGFzIHN0cmluZ31gXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gaWQgYXMgc3RyaW5nO1xuICAgIH0pO1xuICAgIGNvbnN0IG9sZE1vZGVsczogTVtdID0gYXdhaXQgdGhpcy5yZWFkQWxsKGlkcywgLi4uY29udGV4dEFyZ3MuYXJncyk7XG4gICAgbW9kZWxzID0gbW9kZWxzLm1hcCgobSwgaSkgPT4gdGhpcy5tZXJnZShvbGRNb2RlbHNbaV0sIG0pKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1vZGVscy5tYXAoKG0sIGkpID0+XG4gICAgICAgIGVuZm9yY2VEQkRlY29yYXRvcnMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgICAgIG0sXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5PTixcbiAgICAgICAgICBvbGRNb2RlbHNbaV1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBtb2RlbHNcbiAgICAgIC5tYXAoKG0sIGkpID0+IG0uaGFzRXJyb3JzKG9sZE1vZGVsc1tpXSBhcyBhbnkpKVxuICAgICAgLnJlZHVjZSgoYWNjdW06IHN0cmluZyB8IHVuZGVmaW5lZCwgZSwgaSkgPT4ge1xuICAgICAgICBpZiAoZSlcbiAgICAgICAgICBhY2N1bSA9XG4gICAgICAgICAgICB0eXBlb2YgYWNjdW0gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyBhY2N1bSArIGBcXG4gLSAke2l9OiAke2UudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIDogYCAtICR7aX06ICR7ZS50b1N0cmluZygpfWA7XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sIHVuZGVmaW5lZCk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMpO1xuICAgIHJldHVybiBbbW9kZWxzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHJlZmxlY3Rpb24ga2V5IGZvciBkYXRhYmFzZSBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBrZXkgZm9yIHN0b3JpbmcgbWV0YWRhdGEgaW4gdGhlIHJlZmxlY3Rpb24gc3lzdGVtIGJ5IHByZWZpeGluZ1xuICAgKiB0aGUgcHJvdmlkZWQga2V5IHdpdGggdGhlIGRhdGFiYXNlIHJlZmxlY3Rpb24gcHJlZml4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGJhc2Uga2V5IHRvIHByZWZpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmVmaXhlZCByZWZsZWN0aW9uIGtleVxuICAgKi9cbiAgc3RhdGljIGtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBEQktleXMuUkVGTEVDVCArIGtleTtcbiAgfVxufVxuIl19
@@ -1,2 +1,9 @@
1
1
  import { RepositoryFlags } from "./types";
2
+ /**
3
+ * @description Default configuration flags for repository operations.
4
+ * @summary Provides default values for repository operation flags, excluding the timestamp property.
5
+ * These flags control behavior such as context handling, validation, error handling, and more.
6
+ * @const DefaultRepositoryFlags
7
+ * @memberOf module:db-decorators
8
+ */
2
9
  export declare const DefaultRepositoryFlags: Omit<RepositoryFlags, "timestamp">;
@@ -1,3 +1,10 @@
1
+ /**
2
+ * @description Default configuration flags for repository operations.
3
+ * @summary Provides default values for repository operation flags, excluding the timestamp property.
4
+ * These flags control behavior such as context handling, validation, error handling, and more.
5
+ * @const DefaultRepositoryFlags
6
+ * @memberOf module:db-decorators
7
+ */
1
8
  export const DefaultRepositoryFlags = {
2
9
  parentContext: undefined,
3
10
  childContexts: [],
@@ -9,4 +16,4 @@ export const DefaultRepositoryFlags = {
9
16
  breakOnHandlerError: true,
10
17
  rebuildWithTransient: true,
11
18
  };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlcG9zaXRvcnkvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUF1QztJQUN4RSxhQUFhLEVBQUUsU0FBUztJQUN4QixhQUFhLEVBQUUsRUFBRTtJQUNqQiwyQkFBMkIsRUFBRSxFQUFFO0lBQy9CLFFBQVEsRUFBRSxFQUFFO0lBQ1osY0FBYyxFQUFFLEtBQUs7SUFDckIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixvQkFBb0IsRUFBRSxJQUFJO0NBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdFJlcG9zaXRvcnlGbGFnczogT21pdDxSZXBvc2l0b3J5RmxhZ3MsIFwidGltZXN0YW1wXCI+ID0ge1xuICBwYXJlbnRDb250ZXh0OiB1bmRlZmluZWQsXG4gIGNoaWxkQ29udGV4dHM6IFtdLFxuICBpZ25vcmVkVmFsaWRhdGlvblByb3BlcnRpZXM6IFtdLFxuICBjYWxsQXJnczogW10sXG4gIHdyaXRlT3BlcmF0aW9uOiBmYWxzZSxcbiAgYWZmZWN0ZWRUYWJsZXM6IFtdLFxuICBvcGVyYXRpb246IHVuZGVmaW5lZCxcbiAgYnJlYWtPbkhhbmRsZXJFcnJvcjogdHJ1ZSxcbiAgcmVidWlsZFdpdGhUcmFuc2llbnQ6IHRydWUsXG59O1xuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlcG9zaXRvcnkvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUF1QztJQUN4RSxhQUFhLEVBQUUsU0FBUztJQUN4QixhQUFhLEVBQUUsRUFBRTtJQUNqQiwyQkFBMkIsRUFBRSxFQUFFO0lBQy9CLFFBQVEsRUFBRSxFQUFFO0lBQ1osY0FBYyxFQUFFLEtBQUs7SUFDckIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixvQkFBb0IsRUFBRSxJQUFJO0NBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIHJlcG9zaXRvcnkgb3BlcmF0aW9ucy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGRlZmF1bHQgdmFsdWVzIGZvciByZXBvc2l0b3J5IG9wZXJhdGlvbiBmbGFncywgZXhjbHVkaW5nIHRoZSB0aW1lc3RhbXAgcHJvcGVydHkuXG4gKiBUaGVzZSBmbGFncyBjb250cm9sIGJlaGF2aW9yIHN1Y2ggYXMgY29udGV4dCBoYW5kbGluZywgdmFsaWRhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBtb3JlLlxuICogQGNvbnN0IERlZmF1bHRSZXBvc2l0b3J5RmxhZ3NcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFJlcG9zaXRvcnlGbGFnczogT21pdDxSZXBvc2l0b3J5RmxhZ3MsIFwidGltZXN0YW1wXCI+ID0ge1xuICBwYXJlbnRDb250ZXh0OiB1bmRlZmluZWQsXG4gIGNoaWxkQ29udGV4dHM6IFtdLFxuICBpZ25vcmVkVmFsaWRhdGlvblByb3BlcnRpZXM6IFtdLFxuICBjYWxsQXJnczogW10sXG4gIHdyaXRlT3BlcmF0aW9uOiBmYWxzZSxcbiAgYWZmZWN0ZWRUYWJsZXM6IFtdLFxuICBvcGVyYXRpb246IHVuZGVmaW5lZCxcbiAgYnJlYWtPbkhhbmRsZXJFcnJvcjogdHJ1ZSxcbiAgcmVidWlsZFdpdGhUcmFuc2llbnQ6IHRydWUsXG59O1xuIl19
@@ -1,69 +1,96 @@
1
1
  /**
2
- * @summary Base Error
3
- *
4
- * @param {string} msg the error message
5
- *
6
- * @class BaseDLTError
7
- * @extends Error
2
+ * @description Base error class for the repository module
3
+ * @summary Abstract base error class that all other error types extend from. Provides common error handling functionality.
4
+ * @param {string} name - The name of the error
5
+ * @param {string|Error} msg - The error message or Error object
6
+ * @param {number} code - The HTTP status code associated with this error
7
+ * @class BaseError
8
+ * @example
9
+ * // This is an abstract class and should not be instantiated directly
10
+ * // Instead, use one of the concrete error classes:
11
+ * throw new ValidationError('Invalid data provided');
8
12
  */
9
13
  export declare abstract class BaseError extends Error {
10
14
  readonly code: number;
11
15
  protected constructor(name: string, msg: string | Error, code?: number);
12
16
  }
13
17
  /**
14
- * @summary Represents a failure in the Model details
15
- *
16
- * @param {string} msg the error message
17
- *
18
+ * @description Error thrown when validation fails
19
+ * @summary Represents a failure in the Model details, typically thrown when data validation fails
20
+ * @param {string|Error} msg - The error message or Error object
21
+ * @return {ValidationError} A new ValidationError instance
18
22
  * @class ValidationError
19
- * @extends BaseError
23
+ * @example
24
+ * // Throw a validation error when data is invalid
25
+ * if (!isValid(data)) {
26
+ * throw new ValidationError('Invalid data format');
27
+ * }
20
28
  */
21
29
  export declare class ValidationError extends BaseError {
22
30
  constructor(msg: string | Error);
23
31
  }
24
32
  /**
25
- * @summary Represents an internal failure (should mean an error in code)
26
- *
27
- * @param {string} msg the error message
28
- *
33
+ * @description Error thrown for internal system failures
34
+ * @summary Represents an internal failure (should mean an error in code) with HTTP 500 status code
35
+ * @param {string|Error} msg - The error message or Error object
36
+ * @return {InternalError} A new InternalError instance
29
37
  * @class InternalError
30
- * @extends BaseError
38
+ * @example
39
+ * // Throw an internal error when an unexpected condition occurs
40
+ * try {
41
+ * // Some operation
42
+ * } catch (error) {
43
+ * throw new InternalError('Unexpected internal error occurred');
44
+ * }
31
45
  */
32
46
  export declare class InternalError extends BaseError {
33
47
  constructor(msg: string | Error);
34
48
  }
35
49
  /**
36
- * @summary Represents a failure in the Model de/serialization
37
- *
38
- * @param {string} msg the error message
39
- *
50
+ * @description Error thrown when serialization or deserialization fails
51
+ * @summary Represents a failure in the Model de/serialization, typically when converting between data formats
52
+ * @param {string|Error} msg - The error message or Error object
53
+ * @return {SerializationError} A new SerializationError instance
40
54
  * @class SerializationError
41
- * @extends BaseError
42
- *
55
+ * @example
56
+ * // Throw a serialization error when JSON parsing fails
57
+ * try {
58
+ * const data = JSON.parse(invalidJson);
59
+ * } catch (error) {
60
+ * throw new SerializationError('Failed to parse JSON data');
61
+ * }
43
62
  */
44
63
  export declare class SerializationError extends BaseError {
45
64
  constructor(msg: string | Error);
46
65
  }
47
66
  /**
48
- * @summary Represents a failure in finding a model
49
- *
50
- * @param {string} msg the error message
51
- *
67
+ * @description Error thrown when a requested resource is not found
68
+ * @summary Represents a failure in finding a model, resulting in a 404 HTTP status code
69
+ * @param {string|Error} msg - The error message or Error object
70
+ * @return {NotFoundError} A new NotFoundError instance
52
71
  * @class NotFoundError
53
- * @extends BaseError
54
- *
72
+ * @example
73
+ * // Throw a not found error when a record doesn't exist
74
+ * const user = await repository.findById(id);
75
+ * if (!user) {
76
+ * throw new NotFoundError(`User with ID ${id} not found`);
77
+ * }
55
78
  */
56
79
  export declare class NotFoundError extends BaseError {
57
80
  constructor(msg: string | Error);
58
81
  }
59
82
  /**
60
- * @summary Represents a conflict in the storage
61
- *
62
- * @param {string} msg the error message
63
- *
83
+ * @description Error thrown when a conflict occurs in the storage
84
+ * @summary Represents a conflict in the storage, typically when trying to create a duplicate resource
85
+ * @param {string|Error} msg - The error message or Error object
86
+ * @return {ConflictError} A new ConflictError instance
64
87
  * @class ConflictError
65
- * @extends BaseError
66
- *
88
+ * @example
89
+ * // Throw a conflict error when trying to create a duplicate record
90
+ * const existingUser = await repository.findByEmail(email);
91
+ * if (existingUser) {
92
+ * throw new ConflictError(`User with email ${email} already exists`);
93
+ * }
67
94
  */
68
95
  export declare class ConflictError extends BaseError {
69
96
  constructor(msg: string | Error);
@@ -1,10 +1,14 @@
1
1
  /**
2
- * @summary Base Error
3
- *
4
- * @param {string} msg the error message
5
- *
6
- * @class BaseDLTError
7
- * @extends Error
2
+ * @description Base error class for the repository module
3
+ * @summary Abstract base error class that all other error types extend from. Provides common error handling functionality.
4
+ * @param {string} name - The name of the error
5
+ * @param {string|Error} msg - The error message or Error object
6
+ * @param {number} code - The HTTP status code associated with this error
7
+ * @class BaseError
8
+ * @example
9
+ * // This is an abstract class and should not be instantiated directly
10
+ * // Instead, use one of the concrete error classes:
11
+ * throw new ValidationError('Invalid data provided');
8
12
  */
9
13
  export class BaseError extends Error {
10
14
  constructor(name, msg, code = 500) {
@@ -18,12 +22,16 @@ export class BaseError extends Error {
18
22
  }
19
23
  }
20
24
  /**
21
- * @summary Represents a failure in the Model details
22
- *
23
- * @param {string} msg the error message
24
- *
25
+ * @description Error thrown when validation fails
26
+ * @summary Represents a failure in the Model details, typically thrown when data validation fails
27
+ * @param {string|Error} msg - The error message or Error object
28
+ * @return {ValidationError} A new ValidationError instance
25
29
  * @class ValidationError
26
- * @extends BaseError
30
+ * @example
31
+ * // Throw a validation error when data is invalid
32
+ * if (!isValid(data)) {
33
+ * throw new ValidationError('Invalid data format');
34
+ * }
27
35
  */
28
36
  export class ValidationError extends BaseError {
29
37
  constructor(msg) {
@@ -31,12 +39,18 @@ export class ValidationError extends BaseError {
31
39
  }
32
40
  }
33
41
  /**
34
- * @summary Represents an internal failure (should mean an error in code)
35
- *
36
- * @param {string} msg the error message
37
- *
42
+ * @description Error thrown for internal system failures
43
+ * @summary Represents an internal failure (should mean an error in code) with HTTP 500 status code
44
+ * @param {string|Error} msg - The error message or Error object
45
+ * @return {InternalError} A new InternalError instance
38
46
  * @class InternalError
39
- * @extends BaseError
47
+ * @example
48
+ * // Throw an internal error when an unexpected condition occurs
49
+ * try {
50
+ * // Some operation
51
+ * } catch (error) {
52
+ * throw new InternalError('Unexpected internal error occurred');
53
+ * }
40
54
  */
41
55
  export class InternalError extends BaseError {
42
56
  constructor(msg) {
@@ -44,13 +58,18 @@ export class InternalError extends BaseError {
44
58
  }
45
59
  }
46
60
  /**
47
- * @summary Represents a failure in the Model de/serialization
48
- *
49
- * @param {string} msg the error message
50
- *
61
+ * @description Error thrown when serialization or deserialization fails
62
+ * @summary Represents a failure in the Model de/serialization, typically when converting between data formats
63
+ * @param {string|Error} msg - The error message or Error object
64
+ * @return {SerializationError} A new SerializationError instance
51
65
  * @class SerializationError
52
- * @extends BaseError
53
- *
66
+ * @example
67
+ * // Throw a serialization error when JSON parsing fails
68
+ * try {
69
+ * const data = JSON.parse(invalidJson);
70
+ * } catch (error) {
71
+ * throw new SerializationError('Failed to parse JSON data');
72
+ * }
54
73
  */
55
74
  export class SerializationError extends BaseError {
56
75
  constructor(msg) {
@@ -58,13 +77,17 @@ export class SerializationError extends BaseError {
58
77
  }
59
78
  }
60
79
  /**
61
- * @summary Represents a failure in finding a model
62
- *
63
- * @param {string} msg the error message
64
- *
80
+ * @description Error thrown when a requested resource is not found
81
+ * @summary Represents a failure in finding a model, resulting in a 404 HTTP status code
82
+ * @param {string|Error} msg - The error message or Error object
83
+ * @return {NotFoundError} A new NotFoundError instance
65
84
  * @class NotFoundError
66
- * @extends BaseError
67
- *
85
+ * @example
86
+ * // Throw a not found error when a record doesn't exist
87
+ * const user = await repository.findById(id);
88
+ * if (!user) {
89
+ * throw new NotFoundError(`User with ID ${id} not found`);
90
+ * }
68
91
  */
69
92
  export class NotFoundError extends BaseError {
70
93
  constructor(msg) {
@@ -72,17 +95,21 @@ export class NotFoundError extends BaseError {
72
95
  }
73
96
  }
74
97
  /**
75
- * @summary Represents a conflict in the storage
76
- *
77
- * @param {string} msg the error message
78
- *
98
+ * @description Error thrown when a conflict occurs in the storage
99
+ * @summary Represents a conflict in the storage, typically when trying to create a duplicate resource
100
+ * @param {string|Error} msg - The error message or Error object
101
+ * @return {ConflictError} A new ConflictError instance
79
102
  * @class ConflictError
80
- * @extends BaseError
81
- *
103
+ * @example
104
+ * // Throw a conflict error when trying to create a duplicate record
105
+ * const existingUser = await repository.findByEmail(email);
106
+ * if (existingUser) {
107
+ * throw new ConflictError(`User with email ${email} already exists`);
108
+ * }
82
109
  */
83
110
  export class ConflictError extends BaseError {
84
111
  constructor(msg) {
85
112
  super(ConflictError.name, msg, 409);
86
113
  }
87
114
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlcG9zaXRvcnkvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQWdCLFNBQVUsU0FBUSxLQUFLO0lBRTNDLFlBQXNCLElBQVksRUFBRSxHQUFtQixFQUFFLE9BQWUsR0FBRztRQUN6RSxJQUFJLEdBQUcsWUFBWSxTQUFTO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxHQUFHLFlBQVksS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsU0FBUztJQUM1QyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFDRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxTQUFTO0lBQzFDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUNEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQVM7SUFDL0MsWUFBWSxHQUFtQjtRQUM3QixLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsU0FBUztJQUMxQyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFDRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsU0FBUztJQUMxQyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IEJhc2UgRXJyb3JcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIHRoZSBlcnJvciBtZXNzYWdlXG4gKlxuICogQGNsYXNzIEJhc2VETFRFcnJvclxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSE6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgbXNnOiBzdHJpbmcgfCBFcnJvciwgY29kZTogbnVtYmVyID0gNTAwKSB7XG4gICAgaWYgKG1zZyBpbnN0YW5jZW9mIEJhc2VFcnJvcikgcmV0dXJuIG1zZztcbiAgICBjb25zdCBtZXNzYWdlID0gYFske25hbWV9XSAke21zZyBpbnN0YW5jZW9mIEVycm9yID8gbXNnLm1lc3NhZ2UgOiBtc2d9YDtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIGlmIChtc2cgaW5zdGFuY2VvZiBFcnJvcikgdGhpcy5zdGFjayA9IG1zZy5zdGFjaztcbiAgfVxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBmYWlsdXJlIGluIHRoZSBNb2RlbCBkZXRhaWxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyB0aGUgZXJyb3IgbWVzc2FnZVxuICpcbiAqIEBjbGFzcyBWYWxpZGF0aW9uRXJyb3JcbiAqIEBleHRlbmRzIEJhc2VFcnJvclxuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKFZhbGlkYXRpb25FcnJvci5uYW1lLCBtc2csIDQyMik7XG4gIH1cbn1cbi8qKlxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhbiBpbnRlcm5hbCBmYWlsdXJlIChzaG91bGQgbWVhbiBhbiBlcnJvciBpbiBjb2RlKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgdGhlIGVycm9yIG1lc3NhZ2VcbiAqXG4gKiBAY2xhc3MgSW50ZXJuYWxFcnJvclxuICogQGV4dGVuZHMgQmFzZUVycm9yXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKEludGVybmFsRXJyb3IubmFtZSwgbXNnLCA1MDApO1xuICB9XG59XG4vKipcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBmYWlsdXJlIGluIHRoZSBNb2RlbCBkZS9zZXJpYWxpemF0aW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyB0aGUgZXJyb3IgbWVzc2FnZVxuICpcbiAqIEBjbGFzcyBTZXJpYWxpemF0aW9uRXJyb3JcbiAqIEBleHRlbmRzIEJhc2VFcnJvclxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIFNlcmlhbGl6YXRpb25FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihTZXJpYWxpemF0aW9uRXJyb3IubmFtZSwgbXNnLCA0MjIpO1xuICB9XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIGZhaWx1cmUgaW4gZmluZGluZyBhIG1vZGVsXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyB0aGUgZXJyb3IgbWVzc2FnZVxuICpcbiAqIEBjbGFzcyBOb3RGb3VuZEVycm9yXG4gKiBAZXh0ZW5kcyBCYXNlRXJyb3JcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKE5vdEZvdW5kRXJyb3IubmFtZSwgbXNnLCA0MDQpO1xuICB9XG59XG4vKipcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBjb25mbGljdCBpbiB0aGUgc3RvcmFnZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgdGhlIGVycm9yIG1lc3NhZ2VcbiAqXG4gKiBAY2xhc3MgQ29uZmxpY3RFcnJvclxuICogQGV4dGVuZHMgQmFzZUVycm9yXG4gKlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihDb25mbGljdEVycm9yLm5hbWUsIG1zZywgNDA5KTtcbiAgfVxufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlcG9zaXRvcnkvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxPQUFnQixTQUFVLFNBQVEsS0FBSztJQUUzQyxZQUFzQixJQUFZLEVBQUUsR0FBbUIsRUFBRSxPQUFlLEdBQUc7UUFDekUsSUFBSSxHQUFHLFlBQVksU0FBUztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksR0FBRyxZQUFZLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbkQsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxTQUFTO0lBQzVDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUNEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFNBQVM7SUFDMUMsWUFBWSxHQUFtQjtRQUM3QixLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxTQUFTO0lBQy9DLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxTQUFTO0lBQzFDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUNEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsU0FBUztJQUMxQyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIGVycm9yIGNsYXNzIGZvciB0aGUgcmVwb3NpdG9yeSBtb2R1bGVcbiAqIEBzdW1tYXJ5IEFic3RyYWN0IGJhc2UgZXJyb3IgY2xhc3MgdGhhdCBhbGwgb3RoZXIgZXJyb3IgdHlwZXMgZXh0ZW5kIGZyb20uIFByb3ZpZGVzIGNvbW1vbiBlcnJvciBoYW5kbGluZyBmdW5jdGlvbmFsaXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXJyb3JcbiAqIEBwYXJhbSB7c3RyaW5nfEVycm9yfSBtc2cgLSBUaGUgZXJyb3IgbWVzc2FnZSBvciBFcnJvciBvYmplY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIC0gVGhlIEhUVFAgc3RhdHVzIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXJyb3JcbiAqIEBjbGFzcyBCYXNlRXJyb3JcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseVxuICogLy8gSW5zdGVhZCwgdXNlIG9uZSBvZiB0aGUgY29uY3JldGUgZXJyb3IgY2xhc3NlczpcbiAqIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0ludmFsaWQgZGF0YSBwcm92aWRlZCcpO1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlITogbnVtYmVyO1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBtc2c6IHN0cmluZyB8IEVycm9yLCBjb2RlOiBudW1iZXIgPSA1MDApIHtcbiAgICBpZiAobXNnIGluc3RhbmNlb2YgQmFzZUVycm9yKSByZXR1cm4gbXNnO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgWyR7bmFtZX1dICR7bXNnIGluc3RhbmNlb2YgRXJyb3IgPyBtc2cubWVzc2FnZSA6IG1zZ31gO1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgaWYgKG1zZyBpbnN0YW5jZW9mIEVycm9yKSB0aGlzLnN0YWNrID0gbXNnLnN0YWNrO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVycm9yIHRocm93biB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBmYWlsdXJlIGluIHRoZSBNb2RlbCBkZXRhaWxzLCB0eXBpY2FsbHkgdGhyb3duIHdoZW4gZGF0YSB2YWxpZGF0aW9uIGZhaWxzXG4gKiBAcGFyYW0ge3N0cmluZ3xFcnJvcn0gbXNnIC0gVGhlIGVycm9yIG1lc3NhZ2Ugb3IgRXJyb3Igb2JqZWN0XG4gKiBAcmV0dXJuIHtWYWxpZGF0aW9uRXJyb3J9IEEgbmV3IFZhbGlkYXRpb25FcnJvciBpbnN0YW5jZVxuICogQGNsYXNzIFZhbGlkYXRpb25FcnJvclxuICogQGV4YW1wbGVcbiAqIC8vIFRocm93IGEgdmFsaWRhdGlvbiBlcnJvciB3aGVuIGRhdGEgaXMgaW52YWxpZFxuICogaWYgKCFpc1ZhbGlkKGRhdGEpKSB7XG4gKiAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0ludmFsaWQgZGF0YSBmb3JtYXQnKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihWYWxpZGF0aW9uRXJyb3IubmFtZSwgbXNnLCA0MjIpO1xuICB9XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFcnJvciB0aHJvd24gZm9yIGludGVybmFsIHN5c3RlbSBmYWlsdXJlc1xuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhbiBpbnRlcm5hbCBmYWlsdXJlIChzaG91bGQgbWVhbiBhbiBlcnJvciBpbiBjb2RlKSB3aXRoIEhUVFAgNTAwIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0ge3N0cmluZ3xFcnJvcn0gbXNnIC0gVGhlIGVycm9yIG1lc3NhZ2Ugb3IgRXJyb3Igb2JqZWN0XG4gKiBAcmV0dXJuIHtJbnRlcm5hbEVycm9yfSBBIG5ldyBJbnRlcm5hbEVycm9yIGluc3RhbmNlXG4gKiBAY2xhc3MgSW50ZXJuYWxFcnJvclxuICogQGV4YW1wbGVcbiAqIC8vIFRocm93IGFuIGludGVybmFsIGVycm9yIHdoZW4gYW4gdW5leHBlY3RlZCBjb25kaXRpb24gb2NjdXJzXG4gKiB0cnkge1xuICogICAvLyBTb21lIG9wZXJhdGlvblxuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoJ1VuZXhwZWN0ZWQgaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQnKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGNsYXNzIEludGVybmFsRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZyB8IEVycm9yKSB7XG4gICAgc3VwZXIoSW50ZXJuYWxFcnJvci5uYW1lLCBtc2csIDUwMCk7XG4gIH1cbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVycm9yIHRocm93biB3aGVuIHNlcmlhbGl6YXRpb24gb3IgZGVzZXJpYWxpemF0aW9uIGZhaWxzXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIGEgZmFpbHVyZSBpbiB0aGUgTW9kZWwgZGUvc2VyaWFsaXphdGlvbiwgdHlwaWNhbGx5IHdoZW4gY29udmVydGluZyBiZXR3ZWVuIGRhdGEgZm9ybWF0c1xuICogQHBhcmFtIHtzdHJpbmd8RXJyb3J9IG1zZyAtIFRoZSBlcnJvciBtZXNzYWdlIG9yIEVycm9yIG9iamVjdFxuICogQHJldHVybiB7U2VyaWFsaXphdGlvbkVycm9yfSBBIG5ldyBTZXJpYWxpemF0aW9uRXJyb3IgaW5zdGFuY2VcbiAqIEBjbGFzcyBTZXJpYWxpemF0aW9uRXJyb3JcbiAqIEBleGFtcGxlXG4gKiAvLyBUaHJvdyBhIHNlcmlhbGl6YXRpb24gZXJyb3Igd2hlbiBKU09OIHBhcnNpbmcgZmFpbHNcbiAqIHRyeSB7XG4gKiAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGludmFsaWRKc29uKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBKU09OIGRhdGEnKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcmlhbGl6YXRpb25FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihTZXJpYWxpemF0aW9uRXJyb3IubmFtZSwgbXNnLCA0MjIpO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVycm9yIHRocm93biB3aGVuIGEgcmVxdWVzdGVkIHJlc291cmNlIGlzIG5vdCBmb3VuZFxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIGZhaWx1cmUgaW4gZmluZGluZyBhIG1vZGVsLCByZXN1bHRpbmcgaW4gYSA0MDQgSFRUUCBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtzdHJpbmd8RXJyb3J9IG1zZyAtIFRoZSBlcnJvciBtZXNzYWdlIG9yIEVycm9yIG9iamVjdFxuICogQHJldHVybiB7Tm90Rm91bmRFcnJvcn0gQSBuZXcgTm90Rm91bmRFcnJvciBpbnN0YW5jZVxuICogQGNsYXNzIE5vdEZvdW5kRXJyb3JcbiAqIEBleGFtcGxlXG4gKiAvLyBUaHJvdyBhIG5vdCBmb3VuZCBlcnJvciB3aGVuIGEgcmVjb3JkIGRvZXNuJ3QgZXhpc3RcbiAqIGNvbnN0IHVzZXIgPSBhd2FpdCByZXBvc2l0b3J5LmZpbmRCeUlkKGlkKTtcbiAqIGlmICghdXNlcikge1xuICogICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVXNlciB3aXRoIElEICR7aWR9IG5vdCBmb3VuZGApO1xuICogfVxuICovXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihOb3RGb3VuZEVycm9yLm5hbWUsIG1zZywgNDA0KTtcbiAgfVxufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXJyb3IgdGhyb3duIHdoZW4gYSBjb25mbGljdCBvY2N1cnMgaW4gdGhlIHN0b3JhZ2VcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBjb25mbGljdCBpbiB0aGUgc3RvcmFnZSwgdHlwaWNhbGx5IHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBhIGR1cGxpY2F0ZSByZXNvdXJjZVxuICogQHBhcmFtIHtzdHJpbmd8RXJyb3J9IG1zZyAtIFRoZSBlcnJvciBtZXNzYWdlIG9yIEVycm9yIG9iamVjdFxuICogQHJldHVybiB7Q29uZmxpY3RFcnJvcn0gQSBuZXcgQ29uZmxpY3RFcnJvciBpbnN0YW5jZVxuICogQGNsYXNzIENvbmZsaWN0RXJyb3JcbiAqIEBleGFtcGxlXG4gKiAvLyBUaHJvdyBhIGNvbmZsaWN0IGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBhIGR1cGxpY2F0ZSByZWNvcmRcbiAqIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IHJlcG9zaXRvcnkuZmluZEJ5RW1haWwoZW1haWwpO1xuICogaWYgKGV4aXN0aW5nVXNlcikge1xuICogICB0aHJvdyBuZXcgQ29uZmxpY3RFcnJvcihgVXNlciB3aXRoIGVtYWlsICR7ZW1haWx9IGFscmVhZHkgZXhpc3RzYCk7XG4gKiB9XG4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKENvbmZsaWN0RXJyb3IubmFtZSwgbXNnLCA0MDkpO1xuICB9XG59XG4iXX0=
@@ -1,9 +1,9 @@
1
- export * from "./BaseRepository";
2
- export * from "./constants";
3
- export * from "./Context";
4
- export * from "./errors";
5
- export * from "./Repository";
6
- export * from "./types";
7
- export * from "./utils";
8
- export * from "./wrappers";
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3NpdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQmFzZVJlcG9zaXRvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXBvc2l0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dyYXBwZXJzXCI7XG4iXX0=
1
+ export * from "./BaseRepository.js";
2
+ export * from "./constants.js";
3
+ export * from "./Context.js";
4
+ export * from "./errors.js";
5
+ export * from "./Repository.js";
6
+ export * from "./types.js";
7
+ export * from "./utils.js";
8
+ export * from "./wrappers.js";
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3NpdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBaUM7QUFDakMsK0JBQTRCO0FBQzVCLDZCQUEwQjtBQUMxQiw0QkFBeUI7QUFDekIsZ0NBQTZCO0FBQzdCLDJCQUF3QjtBQUN4QiwyQkFBd0I7QUFDeEIsOEJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQmFzZVJlcG9zaXRvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXBvc2l0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dyYXBwZXJzXCI7XG4iXX0=
@@ -1,7 +1,32 @@
1
1
  import { Context } from "./Context";
2
2
  import { Constructor, Model } from "@decaf-ts/decorator-validation";
3
3
  import { OperationKeys } from "../operations";
4
+ /**
5
+ * @description Type utility for ensuring model extension.
6
+ * @summary A conditional type that ensures a type extends the Model class.
7
+ * If the type extends Model, it returns the type; otherwise, it returns never.
8
+ * @template M - The type to check, defaults to Model
9
+ * @typedef {M extends Model ? M : never} ModelExtension
10
+ * @memberOf module:db-decorators
11
+ */
4
12
  type ModelExtension<M extends Model = Model> = M extends Model ? M : never;
13
+ /**
14
+ * @description Configuration flags for repository operations.
15
+ * @summary Defines the configuration options that control repository behavior during operations.
16
+ * These flags manage context relationships, validation behavior, operation metadata, and error handling.
17
+ * @typedef {Object} RepositoryFlags
18
+ * @property {Context} [parentContext] - The parent context for hierarchical operations
19
+ * @property {Context[]} [childContexts] - Child contexts spawned from this context
20
+ * @property {any[]} [callArgs] - Arguments passed to the operation
21
+ * @property {string[]} ignoredValidationProperties - Properties to exclude from validation
22
+ * @property affectedTables - Tables or models affected by the operation
23
+ * @property {boolean} writeOperation - Whether the operation modifies data
24
+ * @property {Date} timestamp - When the operation was initiated
25
+ * @property {OperationKeys} [operation] - The type of operation being performed
26
+ * @property {boolean} breakOnHandlerError - Whether to stop processing on handler errors
27
+ * @property {boolean} rebuildWithTransient - Whether to include transient properties when rebuilding models
28
+ * @memberOf module:db-decorators
29
+ */
5
30
  export type RepositoryFlags = {
6
31
  parentContext?: Context<any>;
7
32
  childContexts?: Context<any>[];
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3NpdG9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuL0NvbnRleHRcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi4vb3BlcmF0aW9uc1wiO1xuXG50eXBlIE1vZGVsRXh0ZW5zaW9uPE0gZXh0ZW5kcyBNb2RlbCA9IE1vZGVsPiA9IE0gZXh0ZW5kcyBNb2RlbCA/IE0gOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUmVwb3NpdG9yeUZsYWdzID0ge1xuICBwYXJlbnRDb250ZXh0PzogQ29udGV4dDxhbnk+O1xuICBjaGlsZENvbnRleHRzPzogQ29udGV4dDxhbnk+W107XG4gIGNhbGxBcmdzPzogYW55W107XG4gIGlnbm9yZWRWYWxpZGF0aW9uUHJvcGVydGllczogc3RyaW5nW107XG4gIGFmZmVjdGVkVGFibGVzOlxuICAgIHwgKHN0cmluZyB8IENvbnN0cnVjdG9yPE1vZGVsRXh0ZW5zaW9uPilbXVxuICAgIHwgc3RyaW5nXG4gICAgfCBDb25zdHJ1Y3RvcjxNb2RlbEV4dGVuc2lvbj47XG4gIHdyaXRlT3BlcmF0aW9uOiBib29sZWFuO1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIG9wZXJhdGlvbj86IE9wZXJhdGlvbktleXM7XG4gIGJyZWFrT25IYW5kbGVyRXJyb3I6IGJvb2xlYW47XG4gIHJlYnVpbGRXaXRoVHJhbnNpZW50OiBib29sZWFuO1xufTtcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3NpdG9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuL0NvbnRleHRcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi4vb3BlcmF0aW9uc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIHV0aWxpdHkgZm9yIGVuc3VyaW5nIG1vZGVsIGV4dGVuc2lvbi5cbiAqIEBzdW1tYXJ5IEEgY29uZGl0aW9uYWwgdHlwZSB0aGF0IGVuc3VyZXMgYSB0eXBlIGV4dGVuZHMgdGhlIE1vZGVsIGNsYXNzLlxuICogSWYgdGhlIHR5cGUgZXh0ZW5kcyBNb2RlbCwgaXQgcmV0dXJucyB0aGUgdHlwZTsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIG5ldmVyLlxuICogQHRlbXBsYXRlIE0gLSBUaGUgdHlwZSB0byBjaGVjaywgZGVmYXVsdHMgdG8gTW9kZWxcbiAqIEB0eXBlZGVmIHtNIGV4dGVuZHMgTW9kZWwgPyBNIDogbmV2ZXJ9IE1vZGVsRXh0ZW5zaW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqL1xudHlwZSBNb2RlbEV4dGVuc2lvbjxNIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD4gPSBNIGV4dGVuZHMgTW9kZWwgPyBNIDogbmV2ZXI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIHJlcG9zaXRvcnkgb3BlcmF0aW9ucy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgcmVwb3NpdG9yeSBiZWhhdmlvciBkdXJpbmcgb3BlcmF0aW9ucy5cbiAqIFRoZXNlIGZsYWdzIG1hbmFnZSBjb250ZXh0IHJlbGF0aW9uc2hpcHMsIHZhbGlkYXRpb24gYmVoYXZpb3IsIG9wZXJhdGlvbiBtZXRhZGF0YSwgYW5kIGVycm9yIGhhbmRsaW5nLlxuICogQHR5cGVkZWYge09iamVjdH0gUmVwb3NpdG9yeUZsYWdzXG4gKiBAcHJvcGVydHkge0NvbnRleHR9IFtwYXJlbnRDb250ZXh0XSAtIFRoZSBwYXJlbnQgY29udGV4dCBmb3IgaGllcmFyY2hpY2FsIG9wZXJhdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Q29udGV4dFtdfSBbY2hpbGRDb250ZXh0c10gLSBDaGlsZCBjb250ZXh0cyBzcGF3bmVkIGZyb20gdGhpcyBjb250ZXh0XG4gKiBAcHJvcGVydHkge2FueVtdfSBbY2FsbEFyZ3NdIC0gQXJndW1lbnRzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBpZ25vcmVkVmFsaWRhdGlvblByb3BlcnRpZXMgLSBQcm9wZXJ0aWVzIHRvIGV4Y2x1ZGUgZnJvbSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkgYWZmZWN0ZWRUYWJsZXMgLSBUYWJsZXMgb3IgbW9kZWxzIGFmZmVjdGVkIGJ5IHRoZSBvcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd3JpdGVPcGVyYXRpb24gLSBXaGV0aGVyIHRoZSBvcGVyYXRpb24gbW9kaWZpZXMgZGF0YVxuICogQHByb3BlcnR5IHtEYXRlfSB0aW1lc3RhbXAgLSBXaGVuIHRoZSBvcGVyYXRpb24gd2FzIGluaXRpYXRlZFxuICogQHByb3BlcnR5IHtPcGVyYXRpb25LZXlzfSBbb3BlcmF0aW9uXSAtIFRoZSB0eXBlIG9mIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYnJlYWtPbkhhbmRsZXJFcnJvciAtIFdoZXRoZXIgdG8gc3RvcCBwcm9jZXNzaW5nIG9uIGhhbmRsZXIgZXJyb3JzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlYnVpbGRXaXRoVHJhbnNpZW50IC0gV2hldGhlciB0byBpbmNsdWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzIHdoZW4gcmVidWlsZGluZyBtb2RlbHNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBSZXBvc2l0b3J5RmxhZ3MgPSB7XG4gIHBhcmVudENvbnRleHQ/OiBDb250ZXh0PGFueT47XG4gIGNoaWxkQ29udGV4dHM/OiBDb250ZXh0PGFueT5bXTtcbiAgY2FsbEFyZ3M/OiBhbnlbXTtcbiAgaWdub3JlZFZhbGlkYXRpb25Qcm9wZXJ0aWVzOiBzdHJpbmdbXTtcbiAgYWZmZWN0ZWRUYWJsZXM6XG4gICAgfCAoc3RyaW5nIHwgQ29uc3RydWN0b3I8TW9kZWxFeHRlbnNpb24+KVtdXG4gICAgfCBzdHJpbmdcbiAgICB8IENvbnN0cnVjdG9yPE1vZGVsRXh0ZW5zaW9uPjtcbiAgd3JpdGVPcGVyYXRpb246IGJvb2xlYW47XG4gIHRpbWVzdGFtcDogRGF0ZTtcbiAgb3BlcmF0aW9uPzogT3BlcmF0aW9uS2V5cztcbiAgYnJlYWtPbkhhbmRsZXJFcnJvcjogYm9vbGVhbjtcbiAgcmVidWlsZFdpdGhUcmFuc2llbnQ6IGJvb2xlYW47XG59O1xuIl19
@@ -3,6 +3,17 @@ import { DecoratorMetadata } from "@decaf-ts/reflection";
3
3
  import { Constructor, Model } from "@decaf-ts/decorator-validation";
4
4
  import { Context } from "./Context";
5
5
  import { RepositoryFlags } from "./types";
6
+ /**
7
+ * @description Context arguments for repository operations.
8
+ * @summary Represents the context and arguments for repository operations.
9
+ * This type is used to pass context and arguments between repository methods.
10
+ * @template F - The repository flags type, defaults to RepositoryFlags
11
+ * @template C - The context type, defaults to Context<F>
12
+ * @typedef {Object} ContextArgs
13
+ * @property {C} context - The operation context
14
+ * @property {any[]} args - The operation arguments
15
+ * @memberOf module:db-decorators
16
+ */
6
17
  export type ContextArgs<F extends RepositoryFlags = RepositoryFlags, C extends Context<F> = Context<F>> = {
7
18
  context: C;
8
19
  args: any[];