@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
@@ -5,18 +5,80 @@ import { IRepository } from "../interfaces";
5
5
  import { Context } from "../repository";
6
6
  import { RepositoryFlags } from "../repository/types";
7
7
  /**
8
- * @summary Static class holding common Operation Functionality
9
- *
8
+ * @description Static utility class for database operation management
9
+ * @summary Provides functionality for registering, retrieving, and managing database operation handlers
10
10
  * @class Operations
11
+ * @template M - Model type
12
+ * @template R - Repository type
13
+ * @template V - Metadata type
14
+ * @template F - Repository flags
15
+ * @template C - Context type
16
+ * @example
17
+ * // Register a handler for a create operation
18
+ * Operations.register(myHandler, OperationKeys.CREATE, targetModel, 'propertyName');
19
+ *
20
+ * // Get handlers for a specific operation
21
+ * const handlers = Operations.get(targetModel.constructor.name, 'propertyName', 'onCreate');
11
22
  *
12
- * @category Operations
23
+ * @mermaid
24
+ * classDiagram
25
+ * class Operations {
26
+ * -registry: OperationsRegistry
27
+ * +getHandlerName(handler)
28
+ * +key(str)
29
+ * +get(targetName, propKey, operation)
30
+ * -getOpRegistry()
31
+ * +register(handler, operation, target, propKey)
32
+ * }
33
+ * Operations --> OperationsRegistry : uses
13
34
  */
14
35
  export declare class Operations {
15
36
  private static registry;
16
37
  private constructor();
38
+ /**
39
+ * @description Gets a unique name for an operation handler
40
+ * @summary Returns the name of the handler function or generates a hash if name is not available
41
+ * @param {OperationHandler<any, any, any, any, any>} handler - The handler function to get the name for
42
+ * @return {string} The name of the handler or a generated hash
43
+ */
17
44
  static getHandlerName(handler: OperationHandler<any, any, any, any, any>): any;
45
+ /**
46
+ * @description Generates a reflection metadata key
47
+ * @summary Creates a fully qualified metadata key by prefixing with the reflection namespace
48
+ * @param {string} str - The operation key string to prefix
49
+ * @return {string} The fully qualified metadata key
50
+ */
18
51
  static key(str: string): string;
52
+ /**
53
+ * @description Retrieves operation handlers for a specific target and operation
54
+ * @summary Gets registered handlers from the operations registry for a given target, property, and operation
55
+ * @template M - Model type extending Model
56
+ * @template R - Repository type extending IRepository
57
+ * @template V - Metadata type, defaults to object
58
+ * @template F - Repository flags extending RepositoryFlags
59
+ * @template C - Context type extending Context<F>
60
+ * @param {string | Record<string, any>} targetName - The target class name or object
61
+ * @param {string} propKey - The property key to get handlers for
62
+ * @param {string} operation - The operation key to get handlers for
63
+ * @return {any} The registered handlers for the specified target, property, and operation
64
+ */
19
65
  static get<M extends Model, R extends IRepository<M, F, C>, V = object, F extends RepositoryFlags = RepositoryFlags, C extends Context<F> = Context<F>>(targetName: string | Record<string, any>, propKey: string, operation: string): OperationHandler<M, R, V, F, C>[] | undefined;
66
+ /**
67
+ * @description Gets or initializes the operations registry
68
+ * @summary Returns the existing registry or creates a new one if it doesn't exist
69
+ * @return {OperationsRegistry} The operations registry instance
70
+ * @private
71
+ */
20
72
  private static getOpRegistry;
73
+ /**
74
+ * @description Registers an operation handler for a specific target and operation
75
+ * @summary Adds a handler to the operations registry for a given target, property, and operation
76
+ * @template V - Model type extending Model
77
+ * @param {OperationHandler<V, any, any>} handler - The handler function to register
78
+ * @param {OperationKeys} operation - The operation key to register the handler for
79
+ * @param {V} target - The target model instance
80
+ * @param {string | symbol} propKey - The property key to register the handler for
81
+ * @return {void}
82
+ */
21
83
  static register<V extends Model>(handler: OperationHandler<V, any, any>, operation: OperationKeys, target: V, propKey: string | symbol): void;
22
84
  }
@@ -3,26 +3,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OperationsRegistry = void 0;
4
4
  const Operations_1 = require("./Operations.cjs");
5
5
  /**
6
- * @summary Holds the registered operation handlers
7
- *
6
+ * @description Registry for database operation handlers
7
+ * @summary Manages and stores operation handlers for different model properties and operations
8
8
  * @class OperationsRegistry
9
- * @implements IRegistry<OperationHandler<any>>
9
+ * @template M - Model type
10
+ * @template R - Repository type
11
+ * @template V - Metadata type
12
+ * @template F - Repository flags
13
+ * @template C - Context type
14
+ * @example
15
+ * // Create a registry and register a handler
16
+ * const registry = new OperationsRegistry();
17
+ * registry.register(myHandler, OperationKeys.CREATE, targetModel, 'propertyName');
10
18
  *
11
- * @see OperationHandler
19
+ * // Get handlers for a specific operation
20
+ * const handlers = registry.get(targetModel.constructor.name, 'propertyName', 'onCreate');
12
21
  *
13
- * @category Operations
22
+ * @mermaid
23
+ * classDiagram
24
+ * class OperationsRegistry {
25
+ * -cache: Record~string, Record~string|symbol, Record~string, Record~string, OperationHandler~~~~
26
+ * +get(target, propKey, operation, accum)
27
+ * +register(handler, operation, target, propKey)
28
+ * }
14
29
  */
15
30
  class OperationsRegistry {
16
31
  constructor() {
17
32
  this.cache = {};
18
33
  }
19
34
  /**
20
- * @summary retrieves an {@link OperationHandler} if it exists
21
- * @param {string} target
22
- * @param {string} propKey
23
- * @param {string} operation
24
- * @param accum
25
- * @return {OperationHandler | undefined}
35
+ * @description Retrieves operation handlers for a specific target and operation
36
+ * @summary Finds all registered handlers for a given target, property, and operation, including from parent classes
37
+ * @template M - Model type extending Model
38
+ * @template R - Repository type extending IRepository
39
+ * @template V - Metadata type
40
+ * @template F - Repository flags extending RepositoryFlags
41
+ * @template C - Context type extending Context<F>
42
+ * @param {string | Record<string, any>} target - The target class name or object
43
+ * @param {string} propKey - The property key to get handlers for
44
+ * @param {string} operation - The operation key to get handlers for
45
+ * @param {OperationHandler[]} [accum] - Accumulator for recursive calls
46
+ * @return {OperationHandler[] | undefined} Array of handlers or undefined if none found
26
47
  */
27
48
  get(target, propKey, operation, accum) {
28
49
  accum = accum || [];
@@ -44,11 +65,18 @@ class OperationsRegistry {
44
65
  return this.get(proto, propKey, operation, accum);
45
66
  }
46
67
  /**
47
- * @summary Registers an {@link OperationHandler}
48
- * @param {OperationHandler} handler
49
- * @param {string} operation
50
- * @param {{}} target
51
- * @param {string | symbol} propKey
68
+ * @description Registers an operation handler for a specific target and operation
69
+ * @summary Stores a handler in the registry for a given target, property, and operation
70
+ * @template M - Model type extending Model
71
+ * @template R - Repository type extending IRepository
72
+ * @template V - Metadata type
73
+ * @template F - Repository flags extending RepositoryFlags
74
+ * @template C - Context type extending Context<F>
75
+ * @param {OperationHandler} handler - The handler function to register
76
+ * @param {OperationKeys} operation - The operation key to register the handler for
77
+ * @param {M} target - The target model instance
78
+ * @param {string | symbol} propKey - The property key to register the handler for
79
+ * @return {void}
52
80
  */
53
81
  register(handler, operation, target, propKey) {
54
82
  const name = target.constructor.name;
@@ -65,4 +93,4 @@ class OperationsRegistry {
65
93
  }
66
94
  }
67
95
  exports.OperationsRegistry = OperationsRegistry;
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uc1JlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvT3BlcmF0aW9uc1JlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLGlEQUEwQztBQUsxQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLGtCQUFrQjtJQUEvQjtRQUNtQixVQUFLLEdBTWxCLEVBQUUsQ0FBQztJQTBFVCxDQUFDO0lBeEVDOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBT0QsTUFBb0MsRUFDcEMsT0FBZSxFQUNmLFNBQWlCLEVBQ2pCLEtBQXlDO1FBRXpDLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxDQUFDO1lBQ0gsSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNyRSxLQUFLLENBQUMsT0FBTyxDQUNYLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUM3RCxDQUFDO1lBQ0YsNkRBQTZEO1FBQy9ELENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQ0UsT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDMUIsTUFBTSxLQUFLLE1BQU0sQ0FBQyxTQUFTO2dCQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO2dCQUVsRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLElBQUk7WUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQWdCLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBT04sT0FBd0MsRUFDeEMsU0FBd0IsRUFDeEIsTUFBUyxFQUNULE9BQXdCO1FBRXhCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLHVCQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTztRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUFqRkQsZ0RBaUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BlcmF0aW9uSGFuZGxlciB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL0lSZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25zIH0gZnJvbSBcIi4vT3BlcmF0aW9uc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnlGbGFncyB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgSG9sZHMgdGhlIHJlZ2lzdGVyZWQgb3BlcmF0aW9uIGhhbmRsZXJzXG4gKlxuICogQGNsYXNzIE9wZXJhdGlvbnNSZWdpc3RyeVxuICogQGltcGxlbWVudHMgSVJlZ2lzdHJ5PE9wZXJhdGlvbkhhbmRsZXI8YW55Pj5cbiAqXG4gKiBAc2VlIE9wZXJhdGlvbkhhbmRsZXJcbiAqXG4gKiBAY2F0ZWdvcnkgT3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uc1JlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBSZWNvcmQ8XG4gICAgICBzdHJpbmcgfCBzeW1ib2wsXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBhbnksIGFueSwgYW55Pj4+XG4gICAgPlxuICA+ID0ge307XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHJldHJpZXZlcyBhbiB7QGxpbmsgT3BlcmF0aW9uSGFuZGxlcn0gaWYgaXQgZXhpc3RzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BLZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvblxuICAgKiBAcGFyYW0gYWNjdW1cbiAgICogQHJldHVybiB7T3BlcmF0aW9uSGFuZGxlciB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGdldDxcbiAgICBNIGV4dGVuZHMgTW9kZWwsXG4gICAgUiBleHRlbmRzIElSZXBvc2l0b3J5PE0sIEYsIEM+LFxuICAgIFYsXG4gICAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbiAgPihcbiAgICB0YXJnZXQ6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcHJvcEtleTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIGFjY3VtPzogT3BlcmF0aW9uSGFuZGxlcjxNLCBSLCBWLCBGLCBDPltdXG4gICk6IE9wZXJhdGlvbkhhbmRsZXI8TSwgUiwgViwgRiwgQz5bXSB8IHVuZGVmaW5lZCB7XG4gICAgYWNjdW0gPSBhY2N1bSB8fCBbXTtcbiAgICBsZXQgbmFtZTtcbiAgICB0cnkge1xuICAgICAgbmFtZSA9IHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIgPyB0YXJnZXQgOiB0YXJnZXQuY29uc3RydWN0b3IubmFtZTtcbiAgICAgIGFjY3VtLnVuc2hpZnQoXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXModGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dIHx8IFtdKVxuICAgICAgKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdGFyZ2V0ID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpID09PSBPYmplY3QucHJvdG90eXBlXG4gICAgICApXG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9XG5cbiAgICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICBpZiAocHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gbmFtZSkgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0PE0sIFIsIFYsIEYsIEM+KHByb3RvLCBwcm9wS2V5LCBvcGVyYXRpb24sIGFjY3VtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYW4ge0BsaW5rIE9wZXJhdGlvbkhhbmRsZXJ9XG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uSGFuZGxlcn0gaGFuZGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSB7e319IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcEtleVxuICAgKi9cbiAgcmVnaXN0ZXI8XG4gICAgTSBleHRlbmRzIE1vZGVsLFxuICAgIFIgZXh0ZW5kcyBJUmVwb3NpdG9yeTxNLCBGLCBDPixcbiAgICBWLFxuICAgIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gICAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4gID4oXG4gICAgaGFuZGxlcjogT3BlcmF0aW9uSGFuZGxlcjxNLCBSLCBWLCBGLCBDPixcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMsXG4gICAgdGFyZ2V0OiBNLFxuICAgIHByb3BLZXk6IHN0cmluZyB8IHN5bWJvbFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3QgaGFuZGxlck5hbWUgPSBPcGVyYXRpb25zLmdldEhhbmRsZXJOYW1lKGhhbmRsZXIpO1xuXG4gICAgaWYgKCF0aGlzLmNhY2hlW25hbWVdKSB0aGlzLmNhY2hlW25hbWVdID0ge307XG4gICAgaWYgKCF0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldKSB0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldID0ge307XG4gICAgaWYgKCF0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldW29wZXJhdGlvbl0pXG4gICAgICB0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldW29wZXJhdGlvbl0gPSB7fTtcbiAgICBpZiAodGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dW2hhbmRsZXJOYW1lXSkgcmV0dXJuO1xuICAgIHRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV1bb3BlcmF0aW9uXVtoYW5kbGVyTmFtZV0gPSBoYW5kbGVyO1xuICB9XG59XG4iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uc1JlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvT3BlcmF0aW9uc1JlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLGlEQUEwQztBQUsxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBYSxrQkFBa0I7SUFBL0I7UUFDbUIsVUFBSyxHQU1sQixFQUFFLENBQUM7SUF1RlQsQ0FBQztJQXJGQzs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsR0FBRyxDQU9ELE1BQW9DLEVBQ3BDLE9BQWUsRUFDZixTQUFpQixFQUNqQixLQUF5QztRQUV6QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQztRQUNULElBQUksQ0FBQztZQUNILElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDckUsS0FBSyxDQUFDLE9BQU8sQ0FDWCxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDN0QsQ0FBQztZQUNGLDZEQUE2RDtRQUMvRCxDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixJQUNFLE9BQU8sTUFBTSxLQUFLLFFBQVE7Z0JBQzFCLE1BQU0sS0FBSyxNQUFNLENBQUMsU0FBUztnQkFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztnQkFFbEQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJO1lBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFnQixLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFFBQVEsQ0FPTixPQUF3QyxFQUN4QyxTQUF3QixFQUN4QixNQUFTLEVBQ1QsT0FBd0I7UUFFeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsdUJBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPO1FBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzlELENBQUM7Q0FDRjtBQTlGRCxnREE4RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRpb25IYW5kbGVyIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvSVJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IE9wZXJhdGlvbnMgfSBmcm9tIFwiLi9PcGVyYXRpb25zXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVnaXN0cnkgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbiBoYW5kbGVyc1xuICogQHN1bW1hcnkgTWFuYWdlcyBhbmQgc3RvcmVzIG9wZXJhdGlvbiBoYW5kbGVycyBmb3IgZGlmZmVyZW50IG1vZGVsIHByb3BlcnRpZXMgYW5kIG9wZXJhdGlvbnNcbiAqIEBjbGFzcyBPcGVyYXRpb25zUmVnaXN0cnlcbiAqIEB0ZW1wbGF0ZSBNIC0gTW9kZWwgdHlwZVxuICogQHRlbXBsYXRlIFIgLSBSZXBvc2l0b3J5IHR5cGVcbiAqIEB0ZW1wbGF0ZSBWIC0gTWV0YWRhdGEgdHlwZVxuICogQHRlbXBsYXRlIEYgLSBSZXBvc2l0b3J5IGZsYWdzXG4gKiBAdGVtcGxhdGUgQyAtIENvbnRleHQgdHlwZVxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIHJlZ2lzdHJ5IGFuZCByZWdpc3RlciBhIGhhbmRsZXJcbiAqIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IE9wZXJhdGlvbnNSZWdpc3RyeSgpO1xuICogcmVnaXN0cnkucmVnaXN0ZXIobXlIYW5kbGVyLCBPcGVyYXRpb25LZXlzLkNSRUFURSwgdGFyZ2V0TW9kZWwsICdwcm9wZXJ0eU5hbWUnKTtcbiAqXG4gKiAvLyBHZXQgaGFuZGxlcnMgZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uXG4gKiBjb25zdCBoYW5kbGVycyA9IHJlZ2lzdHJ5LmdldCh0YXJnZXRNb2RlbC5jb25zdHJ1Y3Rvci5uYW1lLCAncHJvcGVydHlOYW1lJywgJ29uQ3JlYXRlJyk7XG4gKlxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBPcGVyYXRpb25zUmVnaXN0cnkge1xuICogICAgIC1jYWNoZTogUmVjb3JkfnN0cmluZywgUmVjb3JkfnN0cmluZ3xzeW1ib2wsIFJlY29yZH5zdHJpbmcsIFJlY29yZH5zdHJpbmcsIE9wZXJhdGlvbkhhbmRsZXJ+fn5+XG4gKiAgICAgK2dldCh0YXJnZXQsIHByb3BLZXksIG9wZXJhdGlvbiwgYWNjdW0pXG4gKiAgICAgK3JlZ2lzdGVyKGhhbmRsZXIsIG9wZXJhdGlvbiwgdGFyZ2V0LCBwcm9wS2V5KVxuICogICB9XG4gKi9cbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25zUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxcbiAgICAgIHN0cmluZyB8IHN5bWJvbCxcbiAgICAgIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIGFueSwgYW55LCBhbnk+Pj5cbiAgICA+XG4gID4gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvcGVyYXRpb24gaGFuZGxlcnMgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0IGFuZCBvcGVyYXRpb25cbiAgICogQHN1bW1hcnkgRmluZHMgYWxsIHJlZ2lzdGVyZWQgaGFuZGxlcnMgZm9yIGEgZ2l2ZW4gdGFyZ2V0LCBwcm9wZXJ0eSwgYW5kIG9wZXJhdGlvbiwgaW5jbHVkaW5nIGZyb20gcGFyZW50IGNsYXNzZXNcbiAgICogQHRlbXBsYXRlIE0gLSBNb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAdGVtcGxhdGUgUiAtIFJlcG9zaXRvcnkgdHlwZSBleHRlbmRpbmcgSVJlcG9zaXRvcnlcbiAgICogQHRlbXBsYXRlIFYgLSBNZXRhZGF0YSB0eXBlXG4gICAqIEB0ZW1wbGF0ZSBGIC0gUmVwb3NpdG9yeSBmbGFncyBleHRlbmRpbmcgUmVwb3NpdG9yeUZsYWdzXG4gICAqIEB0ZW1wbGF0ZSBDIC0gQ29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gdGFyZ2V0IC0gVGhlIHRhcmdldCBjbGFzcyBuYW1lIG9yIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcEtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gZ2V0IGhhbmRsZXJzIGZvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiBrZXkgdG8gZ2V0IGhhbmRsZXJzIGZvclxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkhhbmRsZXJbXX0gW2FjY3VtXSAtIEFjY3VtdWxhdG9yIGZvciByZWN1cnNpdmUgY2FsbHNcbiAgICogQHJldHVybiB7T3BlcmF0aW9uSGFuZGxlcltdIHwgdW5kZWZpbmVkfSBBcnJheSBvZiBoYW5kbGVycyBvciB1bmRlZmluZWQgaWYgbm9uZSBmb3VuZFxuICAgKi9cbiAgZ2V0PFxuICAgIE0gZXh0ZW5kcyBNb2RlbCxcbiAgICBSIGV4dGVuZHMgSVJlcG9zaXRvcnk8TSwgRiwgQz4sXG4gICAgVixcbiAgICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICAgIEMgZXh0ZW5kcyBDb250ZXh0PEY+LFxuICA+KFxuICAgIHRhcmdldDogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwcm9wS2V5OiBzdHJpbmcsXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgYWNjdW0/OiBPcGVyYXRpb25IYW5kbGVyPE0sIFIsIFYsIEYsIEM+W11cbiAgKTogT3BlcmF0aW9uSGFuZGxlcjxNLCBSLCBWLCBGLCBDPltdIHwgdW5kZWZpbmVkIHtcbiAgICBhY2N1bSA9IGFjY3VtIHx8IFtdO1xuICAgIGxldCBuYW1lO1xuICAgIHRyeSB7XG4gICAgICBuYW1lID0gdHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIiA/IHRhcmdldCA6IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgYWNjdW0udW5zaGlmdChcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldW29wZXJhdGlvbl0gfHwgW10pXG4gICAgICApO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0YXJnZXQgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCkgPT09IE9iamVjdC5wcm90b3R5cGVcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH1cblxuICAgIGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgIGlmIChwcm90by5jb25zdHJ1Y3Rvci5uYW1lID09PSBuYW1lKSBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXQ8TSwgUiwgViwgRiwgQz4ocHJvdG8sIHByb3BLZXksIG9wZXJhdGlvbiwgYWNjdW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYW4gb3BlcmF0aW9uIGhhbmRsZXIgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0IGFuZCBvcGVyYXRpb25cbiAgICogQHN1bW1hcnkgU3RvcmVzIGEgaGFuZGxlciBpbiB0aGUgcmVnaXN0cnkgZm9yIGEgZ2l2ZW4gdGFyZ2V0LCBwcm9wZXJ0eSwgYW5kIG9wZXJhdGlvblxuICAgKiBAdGVtcGxhdGUgTSAtIE1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gICAqIEB0ZW1wbGF0ZSBSIC0gUmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBJUmVwb3NpdG9yeVxuICAgKiBAdGVtcGxhdGUgViAtIE1ldGFkYXRhIHR5cGVcbiAgICogQHRlbXBsYXRlIEYgLSBSZXBvc2l0b3J5IGZsYWdzIGV4dGVuZGluZyBSZXBvc2l0b3J5RmxhZ3NcbiAgICogQHRlbXBsYXRlIEMgLSBDb250ZXh0IHR5cGUgZXh0ZW5kaW5nIENvbnRleHQ8Rj5cbiAgICogQHBhcmFtIHtPcGVyYXRpb25IYW5kbGVyfSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzfSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIGtleSB0byByZWdpc3RlciB0aGUgaGFuZGxlciBmb3JcbiAgICogQHBhcmFtIHtNfSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG1vZGVsIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSBwcm9wS2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byByZWdpc3RlciB0aGUgaGFuZGxlciBmb3JcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHJlZ2lzdGVyPFxuICAgIE0gZXh0ZW5kcyBNb2RlbCxcbiAgICBSIGV4dGVuZHMgSVJlcG9zaXRvcnk8TSwgRiwgQz4sXG4gICAgVixcbiAgICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICAgIEMgZXh0ZW5kcyBDb250ZXh0PEY+LFxuICA+KFxuICAgIGhhbmRsZXI6IE9wZXJhdGlvbkhhbmRsZXI8TSwgUiwgViwgRiwgQz4sXG4gICAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzLFxuICAgIHRhcmdldDogTSxcbiAgICBwcm9wS2V5OiBzdHJpbmcgfCBzeW1ib2xcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGNvbnN0IGhhbmRsZXJOYW1lID0gT3BlcmF0aW9ucy5nZXRIYW5kbGVyTmFtZShoYW5kbGVyKTtcblxuICAgIGlmICghdGhpcy5jYWNoZVtuYW1lXSkgdGhpcy5jYWNoZVtuYW1lXSA9IHt9O1xuICAgIGlmICghdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XSkgdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XSA9IHt9O1xuICAgIGlmICghdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dKVxuICAgICAgdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dID0ge307XG4gICAgaWYgKHRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV1bb3BlcmF0aW9uXVtoYW5kbGVyTmFtZV0pIHJldHVybjtcbiAgICB0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldW29wZXJhdGlvbl1baGFuZGxlck5hbWVdID0gaGFuZGxlcjtcbiAgfVxufVxuIl19
@@ -5,32 +5,60 @@ import { Model } from "@decaf-ts/decorator-validation";
5
5
  import { Context } from "../repository";
6
6
  import { RepositoryFlags } from "../repository/types";
7
7
  /**
8
- * @summary Holds the registered operation handlers
9
- *
8
+ * @description Registry for database operation handlers
9
+ * @summary Manages and stores operation handlers for different model properties and operations
10
10
  * @class OperationsRegistry
11
- * @implements IRegistry<OperationHandler<any>>
11
+ * @template M - Model type
12
+ * @template R - Repository type
13
+ * @template V - Metadata type
14
+ * @template F - Repository flags
15
+ * @template C - Context type
16
+ * @example
17
+ * // Create a registry and register a handler
18
+ * const registry = new OperationsRegistry();
19
+ * registry.register(myHandler, OperationKeys.CREATE, targetModel, 'propertyName');
12
20
  *
13
- * @see OperationHandler
21
+ * // Get handlers for a specific operation
22
+ * const handlers = registry.get(targetModel.constructor.name, 'propertyName', 'onCreate');
14
23
  *
15
- * @category Operations
24
+ * @mermaid
25
+ * classDiagram
26
+ * class OperationsRegistry {
27
+ * -cache: Record~string, Record~string|symbol, Record~string, Record~string, OperationHandler~~~~
28
+ * +get(target, propKey, operation, accum)
29
+ * +register(handler, operation, target, propKey)
30
+ * }
16
31
  */
17
32
  export declare class OperationsRegistry {
18
33
  private readonly cache;
19
34
  /**
20
- * @summary retrieves an {@link OperationHandler} if it exists
21
- * @param {string} target
22
- * @param {string} propKey
23
- * @param {string} operation
24
- * @param accum
25
- * @return {OperationHandler | undefined}
35
+ * @description Retrieves operation handlers for a specific target and operation
36
+ * @summary Finds all registered handlers for a given target, property, and operation, including from parent classes
37
+ * @template M - Model type extending Model
38
+ * @template R - Repository type extending IRepository
39
+ * @template V - Metadata type
40
+ * @template F - Repository flags extending RepositoryFlags
41
+ * @template C - Context type extending Context<F>
42
+ * @param {string | Record<string, any>} target - The target class name or object
43
+ * @param {string} propKey - The property key to get handlers for
44
+ * @param {string} operation - The operation key to get handlers for
45
+ * @param {OperationHandler[]} [accum] - Accumulator for recursive calls
46
+ * @return {OperationHandler[] | undefined} Array of handlers or undefined if none found
26
47
  */
27
48
  get<M extends Model, R extends IRepository<M, F, C>, V, F extends RepositoryFlags, C extends Context<F>>(target: string | Record<string, any>, propKey: string, operation: string, accum?: OperationHandler<M, R, V, F, C>[]): OperationHandler<M, R, V, F, C>[] | undefined;
28
49
  /**
29
- * @summary Registers an {@link OperationHandler}
30
- * @param {OperationHandler} handler
31
- * @param {string} operation
32
- * @param {{}} target
33
- * @param {string | symbol} propKey
50
+ * @description Registers an operation handler for a specific target and operation
51
+ * @summary Stores a handler in the registry for a given target, property, and operation
52
+ * @template M - Model type extending Model
53
+ * @template R - Repository type extending IRepository
54
+ * @template V - Metadata type
55
+ * @template F - Repository flags extending RepositoryFlags
56
+ * @template C - Context type extending Context<F>
57
+ * @param {OperationHandler} handler - The handler function to register
58
+ * @param {OperationKeys} operation - The operation key to register the handler for
59
+ * @param {M} target - The target model instance
60
+ * @param {string | symbol} propKey - The property key to register the handler for
61
+ * @return {void}
34
62
  */
35
63
  register<M extends Model, R extends IRepository<M, F, C>, V, F extends RepositoryFlags, C extends Context<F>>(handler: OperationHandler<M, R, V, F, C>, operation: OperationKeys, target: M, propKey: string | symbol): void;
36
64
  }
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DBOperations = exports.BulkCrudOperationKeys = exports.OperationKeys = void 0;
4
4
  /**
5
- * @summary Set of constants to define db CRUD operations and their equivalent 'on' and 'after' phases
6
- * @const OperationKeys
7
- *
8
- * @memberOf module:db-decorators.Operations
5
+ * @description Database operation key constants
6
+ * @summary Enum defining CRUD operations and their lifecycle phases
7
+ * @enum {string}
8
+ * @readonly
9
+ * @memberOf module:db-decorators
9
10
  */
10
11
  var OperationKeys;
11
12
  (function (OperationKeys) {
@@ -17,6 +18,13 @@ var OperationKeys;
17
18
  OperationKeys["ON"] = "on.";
18
19
  OperationKeys["AFTER"] = "after.";
19
20
  })(OperationKeys || (exports.OperationKeys = OperationKeys = {}));
21
+ /**
22
+ * @description Bulk database operation key constants
23
+ * @summary Enum defining bulk CRUD operations for handling multiple records at once
24
+ * @enum {string}
25
+ * @readonly
26
+ * @memberOf module:db-decorators
27
+ */
20
28
  var BulkCrudOperationKeys;
21
29
  (function (BulkCrudOperationKeys) {
22
30
  BulkCrudOperationKeys["CREATE_ALL"] = "createAll";
@@ -25,11 +33,10 @@ var BulkCrudOperationKeys;
25
33
  BulkCrudOperationKeys["DELETE_ALL"] = "deleteAll";
26
34
  })(BulkCrudOperationKeys || (exports.BulkCrudOperationKeys = BulkCrudOperationKeys = {}));
27
35
  /**
36
+ * @description Grouped CRUD operations for decorator mapping
28
37
  * @summary Maps out groups of CRUD operations for easier mapping of decorators
29
- *
30
- * @constant DBOperations
31
- *
32
- * @memberOf module:db-decorators.Operations
38
+ * @const DBOperations
39
+ * @memberOf module:db-decorators
33
40
  */
34
41
  exports.DBOperations = {
35
42
  CREATE: [OperationKeys.CREATE],
@@ -45,4 +52,4 @@ exports.DBOperations = {
45
52
  OperationKeys.DELETE,
46
53
  ],
47
54
  };
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7OztHQUtHO0FBQ0gsSUFBWSxhQVFYO0FBUkQsV0FBWSxhQUFhO0lBQ3ZCLHVEQUFzQyxDQUFBO0lBQ3RDLGtDQUFpQixDQUFBO0lBQ2pCLDhCQUFhLENBQUE7SUFDYixrQ0FBaUIsQ0FBQTtJQUNqQixrQ0FBaUIsQ0FBQTtJQUNqQiwyQkFBVSxDQUFBO0lBQ1YsaUNBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQVJXLGFBQWEsNkJBQWIsYUFBYSxRQVF4QjtBQVFELElBQVkscUJBS1g7QUFMRCxXQUFZLHFCQUFxQjtJQUMvQixpREFBd0IsQ0FBQTtJQUN4Qiw2Q0FBb0IsQ0FBQTtJQUNwQixpREFBd0IsQ0FBQTtJQUN4QixpREFBd0IsQ0FBQTtBQUMxQixDQUFDLEVBTFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFLaEM7QUFRRDs7Ozs7O0dBTUc7QUFDVSxRQUFBLFlBQVksR0FBcUM7SUFDNUQsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQzFCLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixhQUFhLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3ZELEdBQUcsRUFBRTtRQUNILGFBQWEsQ0FBQyxNQUFNO1FBQ3BCLGFBQWEsQ0FBQyxJQUFJO1FBQ2xCLGFBQWEsQ0FBQyxNQUFNO1FBQ3BCLGFBQWEsQ0FBQyxNQUFNO0tBQ3JCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHN1bW1hcnkgU2V0IG9mIGNvbnN0YW50cyB0byBkZWZpbmUgZGIgQ1JVRCBvcGVyYXRpb25zIGFuZCB0aGVpciBlcXVpdmFsZW50ICdvbicgYW5kICdhZnRlcicgcGhhc2VzXG4gKiBAY29uc3QgT3BlcmF0aW9uS2V5c1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5PcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBlbnVtIE9wZXJhdGlvbktleXMge1xuICBSRUZMRUNUID0gXCJkZWNhZi5tb2RlbC5kYi5vcGVyYXRpb25zLlwiLFxuICBDUkVBVEUgPSBcImNyZWF0ZVwiLFxuICBSRUFEID0gXCJyZWFkXCIsXG4gIFVQREFURSA9IFwidXBkYXRlXCIsXG4gIERFTEVURSA9IFwiZGVsZXRlXCIsXG4gIE9OID0gXCJvbi5cIixcbiAgQUZURVIgPSBcImFmdGVyLlwiLFxufVxuXG5leHBvcnQgdHlwZSBDcnVkT3BlcmF0aW9ucyA9XG4gIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgfCBPcGVyYXRpb25LZXlzLlJFQURcbiAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICB8IE9wZXJhdGlvbktleXMuREVMRVRFO1xuXG5leHBvcnQgZW51bSBCdWxrQ3J1ZE9wZXJhdGlvbktleXMge1xuICBDUkVBVEVfQUxMID0gXCJjcmVhdGVBbGxcIixcbiAgUkVBRF9BTEwgPSBcInJlYWRBbGxcIixcbiAgVVBEQVRFX0FMTCA9IFwidXBkYXRlQWxsXCIsXG4gIERFTEVURV9BTEwgPSBcImRlbGV0ZUFsbFwiLFxufVxuXG5leHBvcnQgdHlwZSBCdWxrQ3J1ZE9wZXJhdGlvbnMgPVxuICB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5DUkVBVEVfQUxMXG4gIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMXG4gIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzLlVQREFURV9BTExcbiAgfCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuREVMRVRFX0FMTDtcblxuLyoqXG4gKiBAc3VtbWFyeSBNYXBzIG91dCBncm91cHMgb2YgQ1JVRCBvcGVyYXRpb25zIGZvciBlYXNpZXIgbWFwcGluZyBvZiBkZWNvcmF0b3JzXG4gKlxuICogQGNvbnN0YW50IERCT3BlcmF0aW9uc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5PcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBEQk9wZXJhdGlvbnM6IFJlY29yZDxzdHJpbmcsIENydWRPcGVyYXRpb25zW10+ID0ge1xuICBDUkVBVEU6IFtPcGVyYXRpb25LZXlzLkNSRUFURV0sXG4gIFJFQUQ6IFtPcGVyYXRpb25LZXlzLlJFQURdLFxuICBVUERBVEU6IFtPcGVyYXRpb25LZXlzLlVQREFURV0sXG4gIERFTEVURTogW09wZXJhdGlvbktleXMuREVMRVRFXSxcbiAgQ1JFQVRFX1VQREFURTogW09wZXJhdGlvbktleXMuQ1JFQVRFLCBPcGVyYXRpb25LZXlzLlVQREFURV0sXG4gIFJFQURfQ1JFQVRFOiBbT3BlcmF0aW9uS2V5cy5SRUFELCBPcGVyYXRpb25LZXlzLkNSRUFURV0sXG4gIEFMTDogW1xuICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgXSxcbn07XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7R0FNRztBQUNILElBQVksYUFRWDtBQVJELFdBQVksYUFBYTtJQUN2Qix1REFBc0MsQ0FBQTtJQUN0QyxrQ0FBaUIsQ0FBQTtJQUNqQiw4QkFBYSxDQUFBO0lBQ2Isa0NBQWlCLENBQUE7SUFDakIsa0NBQWlCLENBQUE7SUFDakIsMkJBQVUsQ0FBQTtJQUNWLGlDQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFjRDs7Ozs7O0dBTUc7QUFDSCxJQUFZLHFCQUtYO0FBTEQsV0FBWSxxQkFBcUI7SUFDL0IsaURBQXdCLENBQUE7SUFDeEIsNkNBQW9CLENBQUE7SUFDcEIsaURBQXdCLENBQUE7SUFDeEIsaURBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUxXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBS2hDO0FBY0Q7Ozs7O0dBS0c7QUFDVSxRQUFBLFlBQVksR0FBcUM7SUFDNUQsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQzFCLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixhQUFhLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3ZELEdBQUcsRUFBRTtRQUNILGFBQWEsQ0FBQyxNQUFNO1FBQ3BCLGFBQWEsQ0FBQyxJQUFJO1FBQ2xCLGFBQWEsQ0FBQyxNQUFNO1FBQ3BCLGFBQWEsQ0FBQyxNQUFNO0tBQ3JCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIERhdGFiYXNlIG9wZXJhdGlvbiBrZXkgY29uc3RhbnRzXG4gKiBAc3VtbWFyeSBFbnVtIGRlZmluaW5nIENSVUQgb3BlcmF0aW9ucyBhbmQgdGhlaXIgbGlmZWN5Y2xlIHBoYXNlc1xuICogQGVudW0ge3N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBlbnVtIE9wZXJhdGlvbktleXMge1xuICBSRUZMRUNUID0gXCJkZWNhZi5tb2RlbC5kYi5vcGVyYXRpb25zLlwiLFxuICBDUkVBVEUgPSBcImNyZWF0ZVwiLFxuICBSRUFEID0gXCJyZWFkXCIsXG4gIFVQREFURSA9IFwidXBkYXRlXCIsXG4gIERFTEVURSA9IFwiZGVsZXRlXCIsXG4gIE9OID0gXCJvbi5cIixcbiAgQUZURVIgPSBcImFmdGVyLlwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGZvciBiYXNpYyBDUlVEIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IFVuaW9uIHR5cGUgb2YgdGhlIGZvdXIgYmFzaWMgZGF0YWJhc2Ugb3BlcmF0aW9uczogY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZVxuICogQHR5cGVkZWYge3N0cmluZ30gQ3J1ZE9wZXJhdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBDcnVkT3BlcmF0aW9ucyA9XG4gIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgfCBPcGVyYXRpb25LZXlzLlJFQURcbiAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICB8IE9wZXJhdGlvbktleXMuREVMRVRFO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCdWxrIGRhdGFiYXNlIG9wZXJhdGlvbiBrZXkgY29uc3RhbnRzXG4gKiBAc3VtbWFyeSBFbnVtIGRlZmluaW5nIGJ1bGsgQ1JVRCBvcGVyYXRpb25zIGZvciBoYW5kbGluZyBtdWx0aXBsZSByZWNvcmRzIGF0IG9uY2VcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgZW51bSBCdWxrQ3J1ZE9wZXJhdGlvbktleXMge1xuICBDUkVBVEVfQUxMID0gXCJjcmVhdGVBbGxcIixcbiAgUkVBRF9BTEwgPSBcInJlYWRBbGxcIixcbiAgVVBEQVRFX0FMTCA9IFwidXBkYXRlQWxsXCIsXG4gIERFTEVURV9BTEwgPSBcImRlbGV0ZUFsbFwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGZvciBidWxrIENSVUQgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgVW5pb24gdHlwZSBvZiB0aGUgZm91ciBidWxrIGRhdGFiYXNlIG9wZXJhdGlvbnMgZm9yIGhhbmRsaW5nIG11bHRpcGxlIHJlY29yZHMgYXQgb25jZVxuICogQHR5cGVkZWYge3N0cmluZ30gQnVsa0NydWRPcGVyYXRpb25zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgQnVsa0NydWRPcGVyYXRpb25zID1cbiAgfCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTFxuICB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5SRUFEX0FMTFxuICB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMXG4gIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzLkRFTEVURV9BTEw7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdyb3VwZWQgQ1JVRCBvcGVyYXRpb25zIGZvciBkZWNvcmF0b3IgbWFwcGluZ1xuICogQHN1bW1hcnkgTWFwcyBvdXQgZ3JvdXBzIG9mIENSVUQgb3BlcmF0aW9ucyBmb3IgZWFzaWVyIG1hcHBpbmcgb2YgZGVjb3JhdG9yc1xuICogQGNvbnN0IERCT3BlcmF0aW9uc1xuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBEQk9wZXJhdGlvbnM6IFJlY29yZDxzdHJpbmcsIENydWRPcGVyYXRpb25zW10+ID0ge1xuICBDUkVBVEU6IFtPcGVyYXRpb25LZXlzLkNSRUFURV0sXG4gIFJFQUQ6IFtPcGVyYXRpb25LZXlzLlJFQURdLFxuICBVUERBVEU6IFtPcGVyYXRpb25LZXlzLlVQREFURV0sXG4gIERFTEVURTogW09wZXJhdGlvbktleXMuREVMRVRFXSxcbiAgQ1JFQVRFX1VQREFURTogW09wZXJhdGlvbktleXMuQ1JFQVRFLCBPcGVyYXRpb25LZXlzLlVQREFURV0sXG4gIFJFQURfQ1JFQVRFOiBbT3BlcmF0aW9uS2V5cy5SRUFELCBPcGVyYXRpb25LZXlzLkNSRUFURV0sXG4gIEFMTDogW1xuICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgXSxcbn07XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  /**
2
- * @summary Set of constants to define db CRUD operations and their equivalent 'on' and 'after' phases
3
- * @const OperationKeys
4
- *
5
- * @memberOf module:db-decorators.Operations
2
+ * @description Database operation key constants
3
+ * @summary Enum defining CRUD operations and their lifecycle phases
4
+ * @enum {string}
5
+ * @readonly
6
+ * @memberOf module:db-decorators
6
7
  */
7
8
  export declare enum OperationKeys {
8
9
  REFLECT = "decaf.model.db.operations.",
@@ -13,19 +14,37 @@ export declare enum OperationKeys {
13
14
  ON = "on.",
14
15
  AFTER = "after."
15
16
  }
17
+ /**
18
+ * @description Type for basic CRUD operations
19
+ * @summary Union type of the four basic database operations: create, read, update, delete
20
+ * @typedef {string} CrudOperations
21
+ * @memberOf module:db-decorators
22
+ */
16
23
  export type CrudOperations = OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE;
24
+ /**
25
+ * @description Bulk database operation key constants
26
+ * @summary Enum defining bulk CRUD operations for handling multiple records at once
27
+ * @enum {string}
28
+ * @readonly
29
+ * @memberOf module:db-decorators
30
+ */
17
31
  export declare enum BulkCrudOperationKeys {
18
32
  CREATE_ALL = "createAll",
19
33
  READ_ALL = "readAll",
20
34
  UPDATE_ALL = "updateAll",
21
35
  DELETE_ALL = "deleteAll"
22
36
  }
37
+ /**
38
+ * @description Type for bulk CRUD operations
39
+ * @summary Union type of the four bulk database operations for handling multiple records at once
40
+ * @typedef {string} BulkCrudOperations
41
+ * @memberOf module:db-decorators
42
+ */
23
43
  export type BulkCrudOperations = BulkCrudOperationKeys.CREATE_ALL | BulkCrudOperationKeys.READ_ALL | BulkCrudOperationKeys.UPDATE_ALL | BulkCrudOperationKeys.DELETE_ALL;
24
44
  /**
45
+ * @description Grouped CRUD operations for decorator mapping
25
46
  * @summary Maps out groups of CRUD operations for easier mapping of decorators
26
- *
27
- * @constant DBOperations
28
- *
29
- * @memberOf module:db-decorators.Operations
47
+ * @const DBOperations
48
+ * @memberOf module:db-decorators
30
49
  */
31
50
  export declare const DBOperations: Record<string, CrudOperations[]>;