@decaf-ts/db-decorators 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +4 -4
  2. package/dist/db-decorators.bundle.min.js +1 -1
  3. package/dist/esm/db-decorators.bundle.min.esm.js +1 -1
  4. package/lib/esm/identity/decorators.d.ts +1 -1
  5. package/lib/esm/identity/decorators.js +10 -1
  6. package/lib/esm/identity/index.js +4 -1
  7. package/lib/esm/identity/utils.d.ts +6 -9
  8. package/lib/esm/identity/utils.js +63 -1
  9. package/lib/esm/index.js +35 -1
  10. package/lib/esm/interfaces/BulkCrudOperator.js +3 -0
  11. package/lib/esm/interfaces/CrudOperator.js +3 -0
  12. package/lib/esm/interfaces/IRepository.d.ts +2 -3
  13. package/lib/esm/interfaces/IRepository.js +3 -0
  14. package/lib/esm/interfaces/index.js +5 -1
  15. package/lib/esm/model/constants.d.ts +1 -1
  16. package/lib/esm/model/constants.js +39 -1
  17. package/lib/esm/model/decorators.d.ts +5 -7
  18. package/lib/esm/model/decorators.js +69 -1
  19. package/lib/esm/model/index.d.ts +2 -1
  20. package/lib/esm/model/index.js +6 -1
  21. package/lib/esm/model/model.d.ts +8 -0
  22. package/lib/esm/model/model.js +14 -0
  23. package/lib/esm/model/validation.d.ts +1 -2
  24. package/lib/esm/model/validation.js +122 -1
  25. package/lib/esm/operations/Operations.d.ts +3 -4
  26. package/lib/esm/operations/Operations.js +35 -1
  27. package/lib/esm/operations/OperationsRegistry.d.ts +2 -3
  28. package/lib/esm/operations/OperationsRegistry.js +65 -1
  29. package/lib/esm/operations/constants.d.ts +1 -1
  30. package/lib/esm/operations/constants.js +39 -1
  31. package/lib/esm/operations/decorators.js +226 -1
  32. package/lib/esm/operations/index.js +7 -1
  33. package/lib/esm/operations/types.d.ts +4 -5
  34. package/lib/esm/operations/types.js +3 -0
  35. package/lib/esm/repository/BaseRepository.d.ts +2 -3
  36. package/lib/esm/repository/BaseRepository.js +158 -1
  37. package/lib/esm/repository/DataCache.js +32 -1
  38. package/lib/esm/repository/Repository.d.ts +3 -2
  39. package/lib/esm/repository/Repository.js +89 -2
  40. package/lib/esm/repository/errors.js +88 -1
  41. package/lib/esm/repository/index.js +8 -1
  42. package/lib/esm/repository/utils.d.ts +3 -4
  43. package/lib/esm/repository/utils.js +167 -1
  44. package/lib/esm/repository/wrappers.js +90 -1
  45. package/lib/esm/validation/constants.js +33 -1
  46. package/lib/esm/validation/decorators.d.ts +6 -8
  47. package/lib/esm/validation/decorators.js +223 -1
  48. package/lib/esm/validation/index.js +5 -1
  49. package/lib/esm/validation/validators/ReadOnlyValidator.js +52 -1
  50. package/lib/esm/validation/validators/TimestampValidator.js +49 -1
  51. package/lib/esm/validation/validators/UpdateValidator.js +20 -1
  52. package/lib/esm/validation/validators/index.js +5 -1
  53. package/lib/identity/decorators.cjs +13 -1
  54. package/lib/identity/decorators.d.ts +1 -1
  55. package/lib/identity/index.cjs +20 -1
  56. package/lib/identity/utils.cjs +67 -1
  57. package/lib/identity/utils.d.ts +6 -9
  58. package/lib/index.cjs +51 -1
  59. package/lib/interfaces/BulkCrudOperator.cjs +4 -1
  60. package/lib/interfaces/CrudOperator.cjs +4 -1
  61. package/lib/interfaces/IRepository.cjs +4 -1
  62. package/lib/interfaces/IRepository.d.ts +2 -3
  63. package/lib/interfaces/index.cjs +21 -1
  64. package/lib/model/constants.cjs +42 -1
  65. package/lib/model/constants.d.ts +1 -1
  66. package/lib/model/decorators.cjs +76 -1
  67. package/lib/model/decorators.d.ts +5 -7
  68. package/lib/model/index.cjs +22 -1
  69. package/lib/model/index.d.ts +2 -1
  70. package/lib/model/model.cjs +16 -0
  71. package/lib/model/model.d.ts +8 -0
  72. package/lib/model/validation.cjs +125 -1
  73. package/lib/model/validation.d.ts +1 -2
  74. package/lib/operations/Operations.cjs +39 -1
  75. package/lib/operations/Operations.d.ts +3 -4
  76. package/lib/operations/OperationsRegistry.cjs +69 -1
  77. package/lib/operations/OperationsRegistry.d.ts +2 -3
  78. package/lib/operations/constants.cjs +42 -1
  79. package/lib/operations/constants.d.ts +1 -1
  80. package/lib/operations/decorators.cjs +241 -1
  81. package/lib/operations/index.cjs +23 -1
  82. package/lib/operations/types.cjs +4 -1
  83. package/lib/operations/types.d.ts +4 -5
  84. package/lib/repository/BaseRepository.cjs +162 -1
  85. package/lib/repository/BaseRepository.d.ts +2 -3
  86. package/lib/repository/DataCache.cjs +36 -1
  87. package/lib/repository/Repository.cjs +93 -2
  88. package/lib/repository/Repository.d.ts +3 -2
  89. package/lib/repository/errors.cjs +97 -1
  90. package/lib/repository/index.cjs +24 -1
  91. package/lib/repository/utils.cjs +174 -1
  92. package/lib/repository/utils.d.ts +3 -4
  93. package/lib/repository/wrappers.cjs +95 -1
  94. package/lib/validation/constants.cjs +36 -1
  95. package/lib/validation/decorators.cjs +232 -1
  96. package/lib/validation/decorators.d.ts +6 -8
  97. package/lib/validation/index.cjs +21 -1
  98. package/lib/validation/validators/ReadOnlyValidator.cjs +55 -1
  99. package/lib/validation/validators/TimestampValidator.cjs +52 -1
  100. package/lib/validation/validators/UpdateValidator.cjs +24 -1
  101. package/lib/validation/validators/index.cjs +21 -1
  102. package/package.json +22 -18
  103. package/lib/esm/model/DBModel.d.ts +0 -25
  104. package/lib/esm/model/DBModel.js +0 -1
  105. package/lib/esm/validation/comparison.d.ts +0 -1
  106. package/lib/esm/validation/comparison.js +0 -1
  107. package/lib/model/DBModel.cjs +0 -1
  108. package/lib/model/DBModel.d.ts +0 -25
  109. package/lib/validation/comparison.cjs +0 -1
  110. package/lib/validation/comparison.d.ts +0 -1
@@ -1,5 +1,4 @@
1
1
  import { OperationHandler } from "./types";
2
- import { DBModel } from "../model/DBModel";
3
2
  import { OperationKeys } from "./constants";
4
3
  import { IRepository } from "../interfaces/IRepository";
5
4
  /**
@@ -22,7 +21,7 @@ export declare class OperationsRegistry {
22
21
  * @param accum
23
22
  * @return {OperationHandler | undefined}
24
23
  */
25
- get<T extends DBModel, V extends IRepository<T>, Y>(target: string | Record<string, any>, propKey: string, operation: string, accum?: OperationHandler<T, V, Y>[]): OperationHandler<T, V, Y>[] | undefined;
24
+ get<T extends Model, V extends IRepository<T>, Y>(target: string | Record<string, any>, propKey: string, operation: string, accum?: OperationHandler<T, V, Y>[]): OperationHandler<T, V, Y>[] | undefined;
26
25
  /**
27
26
  * @summary Registers an {@link OperationHandler}
28
27
  * @param {OperationHandler} handler
@@ -30,5 +29,5 @@ export declare class OperationsRegistry {
30
29
  * @param {{}} target
31
30
  * @param {string | symbol} propKey
32
31
  */
33
- register<T extends DBModel, V extends IRepository<T>, Y>(handler: OperationHandler<T, V, Y>, operation: OperationKeys, target: T, propKey: string | symbol): void;
32
+ register<T extends Model, V extends IRepository<T>, Y>(handler: OperationHandler<T, V, Y>, operation: OperationKeys, target: T, propKey: string | symbol): void;
34
33
  }
@@ -1 +1,65 @@
1
- import{Operations}from"./Operations";class OperationsRegistry{constructor(){this.cache={}}get(e,t,c,r){r=r||[];let s;try{s="string"==typeof e?e:e.constructor.name,r.unshift(...Object.values(this.cache[s][t][c]||[]))}catch(t){if("string"==typeof e||e===Object.prototype||Object.getPrototypeOf(e)===Object.prototype)return r}let o=Object.getPrototypeOf(e);return o.constructor.name===s&&(o=Object.getPrototypeOf(o)),this.get(o,t,c,r)}register(t,e,c,r){var c=c.constructor.name,s=Operations.getHandlerName(t);this.cache[c]||(this.cache[c]={}),this.cache[c][r]||(this.cache[c][r]={}),this.cache[c][r][e]||(this.cache[c][r][e]={}),this.cache[c][r][e][s]||(this.cache[c][r][e][s]=t)}}export{OperationsRegistry};
1
+ import { Operations } from "./Operations";
2
+ /**
3
+ * @summary Holds the registered operation handlers
4
+ *
5
+ * @class OperationsRegistry
6
+ * @implements IRegistry<OperationHandler<any>>
7
+ *
8
+ * @see OperationHandler
9
+ *
10
+ * @category Operations
11
+ */
12
+ export class OperationsRegistry {
13
+ constructor() {
14
+ this.cache = {};
15
+ }
16
+ /**
17
+ * @summary retrieves an {@link OperationHandler} if it exists
18
+ * @param {string} target
19
+ * @param {string} propKey
20
+ * @param {string} operation
21
+ * @param accum
22
+ * @return {OperationHandler | undefined}
23
+ */
24
+ get(target, propKey, operation, accum) {
25
+ accum = accum || [];
26
+ let name;
27
+ try {
28
+ name = typeof target === "string" ? target : target.constructor.name;
29
+ accum.unshift(...Object.values(this.cache[name][propKey][operation] || []));
30
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
+ }
32
+ catch (e) {
33
+ if (typeof target === "string" ||
34
+ target === Object.prototype ||
35
+ Object.getPrototypeOf(target) === Object.prototype)
36
+ return accum;
37
+ }
38
+ let proto = Object.getPrototypeOf(target);
39
+ if (proto.constructor.name === name)
40
+ proto = Object.getPrototypeOf(proto);
41
+ return this.get(proto, propKey, operation, accum);
42
+ }
43
+ /**
44
+ * @summary Registers an {@link OperationHandler}
45
+ * @param {OperationHandler} handler
46
+ * @param {string} operation
47
+ * @param {{}} target
48
+ * @param {string | symbol} propKey
49
+ */
50
+ register(handler, operation, target, propKey) {
51
+ const name = target.constructor.name;
52
+ const handlerName = Operations.getHandlerName(handler);
53
+ if (!this.cache[name])
54
+ this.cache[name] = {};
55
+ if (!this.cache[name][propKey])
56
+ this.cache[name][propKey] = {};
57
+ if (!this.cache[name][propKey][operation])
58
+ this.cache[name][propKey][operation] = {};
59
+ if (this.cache[name][propKey][operation][handlerName])
60
+ return;
61
+ this.cache[name][propKey][operation][handlerName] = handler;
62
+ }
63
+ }
64
+
65
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL09wZXJhdGlvbnNSZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTFDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFBL0I7UUFDbUIsVUFBSyxHQU1sQixFQUFFLENBQUM7SUE4RFQsQ0FBQztJQTVEQzs7Ozs7OztPQU9HO0lBQ0gsR0FBRyxDQUNELE1BQW9DLEVBQ3BDLE9BQWUsRUFDZixTQUFpQixFQUNqQixLQUFtQztRQUVuQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQztRQUNULElBQUksQ0FBQztZQUNILElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDckUsS0FBSyxDQUFDLE9BQU8sQ0FDWCxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDN0QsQ0FBQztZQUNGLDZEQUE2RDtRQUMvRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQ0UsT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDMUIsTUFBTSxLQUFLLE1BQU0sQ0FBQyxTQUFTO2dCQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO2dCQUVsRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLElBQUk7WUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsQ0FDTixPQUFrQyxFQUNsQyxTQUF3QixFQUN4QixNQUFTLEVBQ1QsT0FBd0I7UUFFeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU87UUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDOUQsQ0FBQztDQUNGIiwiZmlsZSI6Im9wZXJhdGlvbnMvT3BlcmF0aW9uc1JlZ2lzdHJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BlcmF0aW9uSGFuZGxlciB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL0lSZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25zIH0gZnJvbSBcIi4vT3BlcmF0aW9uc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEhvbGRzIHRoZSByZWdpc3RlcmVkIG9wZXJhdGlvbiBoYW5kbGVyc1xuICpcbiAqIEBjbGFzcyBPcGVyYXRpb25zUmVnaXN0cnlcbiAqIEBpbXBsZW1lbnRzIElSZWdpc3RyeTxPcGVyYXRpb25IYW5kbGVyPGFueT4+XG4gKlxuICogQHNlZSBPcGVyYXRpb25IYW5kbGVyXG4gKlxuICogQGNhdGVnb3J5IE9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbnNSZWdpc3RyeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGU6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgUmVjb3JkPFxuICAgICAgc3RyaW5nIHwgc3ltYm9sLFxuICAgICAgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgYW55Pj4+XG4gICAgPlxuICA+ID0ge307XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHJldHJpZXZlcyBhbiB7QGxpbmsgT3BlcmF0aW9uSGFuZGxlcn0gaWYgaXQgZXhpc3RzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BLZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvblxuICAgKiBAcGFyYW0gYWNjdW1cbiAgICogQHJldHVybiB7T3BlcmF0aW9uSGFuZGxlciB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGdldDxUIGV4dGVuZHMgTW9kZWwsIFYgZXh0ZW5kcyBJUmVwb3NpdG9yeTxUPiwgWT4oXG4gICAgdGFyZ2V0OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHByb3BLZXk6IHN0cmluZyxcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBhY2N1bT86IE9wZXJhdGlvbkhhbmRsZXI8VCwgViwgWT5bXVxuICApOiBPcGVyYXRpb25IYW5kbGVyPFQsIFYsIFk+W10gfCB1bmRlZmluZWQge1xuICAgIGFjY3VtID0gYWNjdW0gfHwgW107XG4gICAgbGV0IG5hbWU7XG4gICAgdHJ5IHtcbiAgICAgIG5hbWUgPSB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiID8gdGFyZ2V0IDogdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICBhY2N1bS51bnNoaWZ0KFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKHRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV1bb3BlcmF0aW9uXSB8fCBbXSlcbiAgICAgICk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHRhcmdldCA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSA9PT0gT2JqZWN0LnByb3RvdHlwZVxuICAgICAgKVxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgfVxuXG4gICAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgaWYgKHByb3RvLmNvbnN0cnVjdG9yLm5hbWUgPT09IG5hbWUpIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcblxuICAgIHJldHVybiB0aGlzLmdldDxULCBWLCBZPihwcm90bywgcHJvcEtleSwgb3BlcmF0aW9uLCBhY2N1bSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIHtAbGluayBPcGVyYXRpb25IYW5kbGVyfVxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkhhbmRsZXJ9IGhhbmRsZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvblxuICAgKiBAcGFyYW0ge3t9fSB0YXJnZXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IHByb3BLZXlcbiAgICovXG4gIHJlZ2lzdGVyPFQgZXh0ZW5kcyBNb2RlbCwgViBleHRlbmRzIElSZXBvc2l0b3J5PFQ+LCBZPihcbiAgICBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPFQsIFYsIFk+LFxuICAgIG9wZXJhdGlvbjogT3BlcmF0aW9uS2V5cyxcbiAgICB0YXJnZXQ6IFQsXG4gICAgcHJvcEtleTogc3RyaW5nIHwgc3ltYm9sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSB0YXJnZXQuY29uc3RydWN0b3IubmFtZTtcbiAgICBjb25zdCBoYW5kbGVyTmFtZSA9IE9wZXJhdGlvbnMuZ2V0SGFuZGxlck5hbWUoaGFuZGxlcik7XG5cbiAgICBpZiAoIXRoaXMuY2FjaGVbbmFtZV0pIHRoaXMuY2FjaGVbbmFtZV0gPSB7fTtcbiAgICBpZiAoIXRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV0pIHRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV0gPSB7fTtcbiAgICBpZiAoIXRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV1bb3BlcmF0aW9uXSlcbiAgICAgIHRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV1bb3BlcmF0aW9uXSA9IHt9O1xuICAgIGlmICh0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldW29wZXJhdGlvbl1baGFuZGxlck5hbWVdKSByZXR1cm47XG4gICAgdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dW2hhbmRsZXJOYW1lXSA9IGhhbmRsZXI7XG4gIH1cbn1cbiJdfQ==
@@ -5,7 +5,7 @@
5
5
  * @memberOf module:db-decorators.Operations
6
6
  */
7
7
  export declare enum OperationKeys {
8
- REFLECT = "operations.db.",
8
+ REFLECT = "decaf.model.db.operations.",
9
9
  CREATE = "create",
10
10
  READ = "read",
11
11
  UPDATE = "update",
@@ -1 +1,39 @@
1
- var OperationKeys;!function(e){e.REFLECT="operations.db.",e.CREATE="create",e.READ="read",e.UPDATE="update",e.DELETE="delete",e.ON="on.",e.AFTER="after."}(OperationKeys=OperationKeys||{});const DBOperations={CREATE:[OperationKeys.CREATE],READ:[OperationKeys.READ],UPDATE:[OperationKeys.UPDATE],DELETE:[OperationKeys.DELETE],CREATE_UPDATE:[OperationKeys.CREATE,OperationKeys.UPDATE],READ_CREATE:[OperationKeys.READ,OperationKeys.CREATE],ALL:[OperationKeys.CREATE,OperationKeys.READ,OperationKeys.UPDATE,OperationKeys.DELETE]};export{OperationKeys,DBOperations};
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
6
+ */
7
+ export var OperationKeys;
8
+ (function (OperationKeys) {
9
+ OperationKeys["REFLECT"] = "decaf.model.db.operations.";
10
+ OperationKeys["CREATE"] = "create";
11
+ OperationKeys["READ"] = "read";
12
+ OperationKeys["UPDATE"] = "update";
13
+ OperationKeys["DELETE"] = "delete";
14
+ OperationKeys["ON"] = "on.";
15
+ OperationKeys["AFTER"] = "after.";
16
+ })(OperationKeys || (OperationKeys = {}));
17
+ /**
18
+ * @summary Maps out groups of CRUD operations for easier mapping of decorators
19
+ *
20
+ * @constant DBOperations
21
+ *
22
+ * @memberOf module:db-decorators.Operations
23
+ */
24
+ export const DBOperations = {
25
+ CREATE: [OperationKeys.CREATE],
26
+ READ: [OperationKeys.READ],
27
+ UPDATE: [OperationKeys.UPDATE],
28
+ DELETE: [OperationKeys.DELETE],
29
+ CREATE_UPDATE: [OperationKeys.CREATE, OperationKeys.UPDATE],
30
+ READ_CREATE: [OperationKeys.READ, OperationKeys.CREATE],
31
+ ALL: [
32
+ OperationKeys.CREATE,
33
+ OperationKeys.READ,
34
+ OperationKeys.UPDATE,
35
+ OperationKeys.DELETE,
36
+ ],
37
+ };
38
+
39
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDdkIsdURBQXNDLENBQUE7SUFDdEMsa0NBQWlCLENBQUE7SUFDakIsOEJBQWEsQ0FBQTtJQUNiLGtDQUFpQixDQUFBO0lBQ2pCLGtDQUFpQixDQUFBO0lBQ2pCLDJCQUFVLENBQUE7SUFDVixpQ0FBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBUlcsYUFBYSxLQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQW9DO0lBQzNELE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztJQUMxQixNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQzlCLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsYUFBYSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUN2RCxHQUFHLEVBQUU7UUFDSCxhQUFhLENBQUMsTUFBTTtRQUNwQixhQUFhLENBQUMsSUFBSTtRQUNsQixhQUFhLENBQUMsTUFBTTtRQUNwQixhQUFhLENBQUMsTUFBTTtLQUNyQjtDQUNGLENBQUMiLCJmaWxlIjoib3BlcmF0aW9ucy9jb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IFNldCBvZiBjb25zdGFudHMgdG8gZGVmaW5lIGRiIENSVUQgb3BlcmF0aW9ucyBhbmQgdGhlaXIgZXF1aXZhbGVudCAnb24nIGFuZCAnYWZ0ZXInIHBoYXNlc1xuICogQGNvbnN0IE9wZXJhdGlvbktleXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnMuT3BlcmF0aW9uc1xuICovXG5leHBvcnQgZW51bSBPcGVyYXRpb25LZXlzIHtcbiAgUkVGTEVDVCA9IFwiZGVjYWYubW9kZWwuZGIub3BlcmF0aW9ucy5cIixcbiAgQ1JFQVRFID0gXCJjcmVhdGVcIixcbiAgUkVBRCA9IFwicmVhZFwiLFxuICBVUERBVEUgPSBcInVwZGF0ZVwiLFxuICBERUxFVEUgPSBcImRlbGV0ZVwiLFxuICBPTiA9IFwib24uXCIsXG4gIEFGVEVSID0gXCJhZnRlci5cIixcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBNYXBzIG91dCBncm91cHMgb2YgQ1JVRCBvcGVyYXRpb25zIGZvciBlYXNpZXIgbWFwcGluZyBvZiBkZWNvcmF0b3JzXG4gKlxuICogQGNvbnN0YW50IERCT3BlcmF0aW9uc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5PcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBEQk9wZXJhdGlvbnM6IFJlY29yZDxzdHJpbmcsIE9wZXJhdGlvbktleXNbXT4gPSB7XG4gIENSRUFURTogW09wZXJhdGlvbktleXMuQ1JFQVRFXSxcbiAgUkVBRDogW09wZXJhdGlvbktleXMuUkVBRF0sXG4gIFVQREFURTogW09wZXJhdGlvbktleXMuVVBEQVRFXSxcbiAgREVMRVRFOiBbT3BlcmF0aW9uS2V5cy5ERUxFVEVdLFxuICBDUkVBVEVfVVBEQVRFOiBbT3BlcmF0aW9uS2V5cy5DUkVBVEUsIE9wZXJhdGlvbktleXMuVVBEQVRFXSxcbiAgUkVBRF9DUkVBVEU6IFtPcGVyYXRpb25LZXlzLlJFQUQsIE9wZXJhdGlvbktleXMuQ1JFQVRFXSxcbiAgQUxMOiBbXG4gICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgT3BlcmF0aW9uS2V5cy5SRUFELFxuICAgIE9wZXJhdGlvbktleXMuVVBEQVRFLFxuICAgIE9wZXJhdGlvbktleXMuREVMRVRFLFxuICBdLFxufTtcbiJdfQ==
@@ -1 +1,226 @@
1
- import{DBOperations,OperationKeys}from"./constants";import{Operations}from"./Operations";import{apply,metadata}from"@decaf-ts/reflection";function handle(n,r){return(e,t)=>{Operations.register(r,n,e,t)}}function onCreateUpdate(e,t){return on(DBOperations.CREATE_UPDATE,e,t)}function onUpdate(e,t){return on(DBOperations.UPDATE,e,t)}function onCreate(e,t){return on(DBOperations.CREATE,e,t)}function onRead(e,t){return on(DBOperations.READ,e,t)}function onDelete(e,t){return on(DBOperations.DELETE,e,t)}function on(e=DBOperations.ALL,t,n){return operation(OperationKeys.ON,e,t,n)}function afterCreateUpdate(e,t){return after(DBOperations.CREATE_UPDATE,e,t)}function afterUpdate(e,t){return after(DBOperations.UPDATE,e,t)}function afterCreate(e,t){return after(DBOperations.CREATE,e,t)}function afterRead(e,t){return after(DBOperations.READ,e,t)}function afterDelete(e,t){return after(DBOperations.DELETE,e,t)}function after(e=DBOperations.ALL,t,n){return operation(OperationKeys.AFTER,e,t,n)}function operation(p,t=DBOperations.ALL,s,f){return(a,o)=>{const i=a.constructor.name;var e=t.reduce((e,t)=>{var n=p+t;let r=Reflect.getMetadata(Operations.genKey(n),a,o);r=r||{operation:t,handlers:{}};t=Operations.getHandlerName(s);return r.handlers[i]&&r.handlers[i][o]&&t in r.handlers[i][o]||(r.handlers[i]=r.handlers[i]||{},r.handlers[i][o]=r.handlers[i][o]||{},r.handlers[i][o][t]={data:f},e.push(handle(n,s),metadata(Operations.genKey(n),r))),e},[]);return apply(...e)(a,o)}}export{onCreateUpdate,onUpdate,onCreate,onRead,onDelete,on,afterCreateUpdate,afterUpdate,afterCreate,afterRead,afterDelete,after,operation};
1
+ import { DBOperations, OperationKeys } from "./constants";
2
+ import { Operations } from "./Operations";
3
+ import { apply } from "@decaf-ts/reflection";
4
+ import { propMetadata } from "@decaf-ts/decorator-validation";
5
+ function handle(op, handler) {
6
+ return (target, propertyKey) => {
7
+ Operations.register(handler, op, target, propertyKey);
8
+ };
9
+ }
10
+ /**
11
+ * @summary Defines a behaviour to set on the defined {@link DBOperations.CREATE_UPDATE}
12
+ *
13
+ * @param {OnOperationHandler<any>} handler The method called upon the operation
14
+ * @param data
15
+ * @param {any[]} [args] Arguments that will be passed in order to the handler method
16
+ *
17
+ * @see on
18
+ *
19
+ * @function onCreateUpdate
20
+ *
21
+ * @category Decorators
22
+ */
23
+ export function onCreateUpdate(handler, data) {
24
+ return on(DBOperations.CREATE_UPDATE, handler, data);
25
+ }
26
+ /**
27
+ * @summary Defines a behaviour to set on the defined {@link DBOperations.UPDATE}
28
+ *
29
+ * @param {OnOperationHandler<any>} handler The method called upon the operation
30
+ * @param data
31
+ * @param {any[]} [args] Arguments that will be passed in order to the handler method
32
+ *
33
+ * @see on
34
+ *
35
+ * @function onUpdate
36
+ *
37
+ * @category Decorators
38
+ */
39
+ export function onUpdate(handler, data) {
40
+ return on(DBOperations.UPDATE, handler, data);
41
+ }
42
+ /**
43
+ * @summary Defines a behaviour to set on the defined {@link DBOperations.CREATE}
44
+ *
45
+ * @param {OnOperationHandler<any>} handler The method called upon the operation
46
+ * @param data?
47
+ *
48
+ * @see on
49
+ *
50
+ * @function onCreate
51
+ *
52
+ * @category Decorators
53
+ */
54
+ export function onCreate(handler, data) {
55
+ return on(DBOperations.CREATE, handler, data);
56
+ }
57
+ /**
58
+ * @summary Defines a behaviour to set on the defined {@link DBOperations.READ}
59
+ *
60
+ * @param {OnOperationHandler<any>} handler The method called upon the operation
61
+ * @param data
62
+ *
63
+ * @see on
64
+ *
65
+ * @function onRead
66
+ *
67
+ * @category Decorators
68
+ */
69
+ export function onRead(handler, data) {
70
+ return on(DBOperations.READ, handler, data);
71
+ }
72
+ /**
73
+ * @summary Defines a behaviour to set on the defined {@link DBOperations.DELETE}
74
+ *
75
+ * @param {OnOperationHandler<any>} handler The method called upon the operation
76
+ * @param data
77
+ *
78
+ * @see on
79
+ *
80
+ * @function onDelete
81
+ *
82
+ * @category Decorators
83
+ */
84
+ export function onDelete(handler, data) {
85
+ return on(DBOperations.DELETE, handler, data);
86
+ }
87
+ /**
88
+ * @summary Defines a behaviour to set on the defined {@link DBOperations}
89
+ *
90
+ * @param {OperationKeys[] | DBOperations} op One of {@link DBOperations}
91
+ * @param {OnOperationHandler<any>} handler The method called upon the operation
92
+ * @param data
93
+ *
94
+ * ex: handler(...args, ...props.map(p => target[p]))
95
+ *
96
+ * @function on
97
+ *
98
+ * @category Decorators
99
+ */
100
+ export function on(op = DBOperations.ALL, handler, data) {
101
+ return operation(OperationKeys.ON, op, handler, data);
102
+ }
103
+ /**
104
+ * @summary Defines a behaviour to set after the defined {@link DBOperations.CREATE_UPDATE}
105
+ *
106
+ * @param {AfterOperationHandler<any>} handler The method called upon the operation
107
+ * @param data
108
+ *
109
+ * @see after
110
+ *
111
+ * @function afterCreateUpdate
112
+ *
113
+ * @category Decorators
114
+ */
115
+ export function afterCreateUpdate(handler, data) {
116
+ return after(DBOperations.CREATE_UPDATE, handler, data);
117
+ }
118
+ /**
119
+ * @summary Defines a behaviour to set after the defined {@link DBOperations.UPDATE}
120
+ *
121
+ * @param {AfterOperationHandler<any>} handler The method called upon the operation
122
+ * @param data
123
+ *
124
+ * @see after
125
+ *
126
+ * @function afterUpdate
127
+ *
128
+ * @category Decorators
129
+ */
130
+ export function afterUpdate(handler, data) {
131
+ return after(DBOperations.UPDATE, handler, data);
132
+ }
133
+ /**
134
+ * @summary Defines a behaviour to set after the defined {@link DBOperations.CREATE}
135
+ *
136
+ * @param {AfterOperationHandler<any>} handler The method called upon the operation
137
+ * @param data
138
+ *
139
+ * @see after
140
+ *
141
+ * @function afterCreate
142
+ *
143
+ * @category Decorators
144
+ */
145
+ export function afterCreate(handler, data) {
146
+ return after(DBOperations.CREATE, handler, data);
147
+ }
148
+ /**
149
+ * @summary Defines a behaviour to set after the defined {@link DBOperations.READ}
150
+ *
151
+ * @param {AfterOperationHandler<any>} handler The method called upon the operation
152
+ * @param data
153
+ * @param {any[]} [args] Arguments that will be passed in order to the handler method
154
+ *
155
+ * @see after
156
+ *
157
+ * @function afterRead
158
+ *
159
+ * @category Decorators
160
+ */
161
+ export function afterRead(handler, data) {
162
+ return after(DBOperations.READ, handler, data);
163
+ }
164
+ /**
165
+ * @summary Defines a behaviour to set after the defined {@link DBOperations.DELETE}
166
+ *
167
+ * @param {AfterOperationHandler<any>} handler The method called upon the operation
168
+ * @param data
169
+ * @param {any[]} [args] Arguments that will be passed in order to the handler method
170
+ *
171
+ * @see after
172
+ *
173
+ * @function afterDelete
174
+ *
175
+ * @category Decorators
176
+ */
177
+ export function afterDelete(handler, data) {
178
+ return after(DBOperations.DELETE, handler, data);
179
+ }
180
+ /**
181
+ * @summary Defines a behaviour to set on the defined {@link DBOperations}
182
+ *
183
+ * @param {OperationKeys[] | DBOperations} op One of {@link DBOperations}
184
+ * @param {AfterOperationHandler<any>} handler The method called upon the operation
185
+ *
186
+ * ex: handler(...args, ...props.map(p => target[p]))
187
+ *
188
+ * @param data
189
+ * @param args
190
+ * @function after
191
+ *
192
+ * @category Decorators
193
+ */
194
+ export function after(op = DBOperations.ALL, handler, data) {
195
+ return operation(OperationKeys.AFTER, op, handler, data);
196
+ }
197
+ export function operation(baseOp, operation = DBOperations.ALL, handler, dataToAdd) {
198
+ return (target, propertyKey) => {
199
+ const name = target.constructor.name;
200
+ const decorators = operation.reduce((accum, op) => {
201
+ const compoundKey = baseOp + op;
202
+ let data = Reflect.getMetadata(Operations.key(compoundKey), target, propertyKey);
203
+ if (!data)
204
+ data = {
205
+ operation: op,
206
+ handlers: {},
207
+ };
208
+ const handlerKey = Operations.getHandlerName(handler);
209
+ if (!data.handlers[name] ||
210
+ !data.handlers[name][propertyKey] ||
211
+ !(handlerKey in data.handlers[name][propertyKey])) {
212
+ data.handlers[name] = data.handlers[name] || {};
213
+ data.handlers[name][propertyKey] =
214
+ data.handlers[name][propertyKey] || {};
215
+ data.handlers[name][propertyKey][handlerKey] = {
216
+ data: dataToAdd,
217
+ };
218
+ accum.push(handle(compoundKey, handler), propMetadata(Operations.key(compoundKey), data));
219
+ }
220
+ return accum;
221
+ }, []);
222
+ return apply(...decorators)(target, propertyKey);
223
+ };
224
+ }
225
+
226
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlELFNBQVMsTUFBTSxDQUFDLEVBQWlCLEVBQUUsT0FBd0M7SUFDekUsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFFLEVBQUU7UUFDMUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsT0FFdUMsRUFDdkMsSUFBUTtJQUVSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFDRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixPQUE0QyxFQUM1QyxJQUFRO0lBRVIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUNEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsT0FBOEMsRUFDOUMsSUFBUTtJQUVSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUksT0FB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T0FBTyxDQUFDLENBQUM7WUFFdEQsSUFDRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNwQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDakQsQ0FBQztnQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUc7b0JBQzdDLElBQUksRUFBRSxTQUFTO2lCQUNoQixDQUFDO2dCQUVGLEtBQUssQ0FBQyxJQUFJLENBQ1IsTUFBTSxDQUFDLFdBQTRCLEVBQUUsT0FBTyxDQUFDLEVBQzdDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUNoRCxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsImZpbGUiOiJvcGVyYXRpb25zL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJZE9wZXJhdGlvbkhhbmRsZXIsXG4gIE9wZXJhdGlvbkhhbmRsZXIsXG4gIFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcixcbiAgVXBkYXRlT3BlcmF0aW9uSGFuZGxlcixcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IERCT3BlcmF0aW9ucywgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9ucyB9IGZyb20gXCIuL09wZXJhdGlvbnNcIjtcbmltcG9ydCB7IGFwcGx5IH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBwcm9wTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZShvcDogT3BlcmF0aW9uS2V5cywgaGFuZGxlcjogT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgYW55Pikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgT3BlcmF0aW9ucy5yZWdpc3RlcihoYW5kbGVyLCBvcCwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gIH07XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5DUkVBVEVfVVBEQVRFfVxuICpcbiAqIEBwYXJhbSB7T25PcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIEFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIGluIG9yZGVyIHRvIHRoZSBoYW5kbGVyIG1ldGhvZFxuICpcbiAqIEBzZWUgb25cbiAqXG4gKiBAZnVuY3Rpb24gb25DcmVhdGVVcGRhdGVcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25DcmVhdGVVcGRhdGU8VD4oXG4gIGhhbmRsZXI6XG4gICAgfCBTdGFuZGFyZE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+XG4gICAgfCBVcGRhdGVPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gb24oREJPcGVyYXRpb25zLkNSRUFURV9VUERBVEUsIGhhbmRsZXIsIGRhdGEpO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBvbiB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLlVQREFURX1cbiAqXG4gKiBAcGFyYW0ge09uT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXSBBcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbiBvcmRlciB0byB0aGUgaGFuZGxlciBtZXRob2RcbiAqXG4gKiBAc2VlIG9uXG4gKlxuICogQGZ1bmN0aW9uIG9uVXBkYXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uVXBkYXRlPFQ+KFxuICBoYW5kbGVyOiBVcGRhdGVPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gb24oREJPcGVyYXRpb25zLlVQREFURSwgaGFuZGxlciwgZGF0YSk7XG59XG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IG9uIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuQ1JFQVRFfVxuICpcbiAqIEBwYXJhbSB7T25PcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YT9cbiAqXG4gKiBAc2VlIG9uXG4gKlxuICogQGZ1bmN0aW9uIG9uQ3JlYXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uQ3JlYXRlPFQ+KFxuICBoYW5kbGVyOiBTdGFuZGFyZE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBvbihEQk9wZXJhdGlvbnMuQ1JFQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBvbiB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLlJFQUR9XG4gKlxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBvblxuICpcbiAqIEBmdW5jdGlvbiBvblJlYWRcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25SZWFkPFQ+KGhhbmRsZXI6IElkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sIGRhdGE6IFQpIHtcbiAgcmV0dXJuIG9uKERCT3BlcmF0aW9ucy5SRUFELCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBvbiB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLkRFTEVURX1cbiAqXG4gKiBAcGFyYW0ge09uT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBAc2VlIG9uXG4gKlxuICogQGZ1bmN0aW9uIG9uRGVsZXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uRGVsZXRlPFQ+KGhhbmRsZXI6IElkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sIGRhdGE6IFQpIHtcbiAgcmV0dXJuIG9uKERCT3BlcmF0aW9ucy5ERUxFVEUsIGhhbmRsZXIsIGRhdGEpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IG9uIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnN9XG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb25LZXlzW10gfCBEQk9wZXJhdGlvbnN9IG9wIE9uZSBvZiB7QGxpbmsgREJPcGVyYXRpb25zfVxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogZXg6IGhhbmRsZXIoLi4uYXJncywgLi4ucHJvcHMubWFwKHAgPT4gdGFyZ2V0W3BdKSlcbiAqXG4gKiBAZnVuY3Rpb24gb25cbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb248VD4oXG4gIG9wOiBPcGVyYXRpb25LZXlzW10gPSBEQk9wZXJhdGlvbnMuQUxMLFxuICBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gb3BlcmF0aW9uKE9wZXJhdGlvbktleXMuT04sIG9wLCBoYW5kbGVyLCBkYXRhKTtcbn1cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgYWZ0ZXIgdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5DUkVBVEVfVVBEQVRFfVxuICpcbiAqIEBwYXJhbSB7QWZ0ZXJPcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICpcbiAqIEBzZWUgYWZ0ZXJcbiAqXG4gKiBAZnVuY3Rpb24gYWZ0ZXJDcmVhdGVVcGRhdGVcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXJDcmVhdGVVcGRhdGU8VD4oXG4gIGhhbmRsZXI6XG4gICAgfCBTdGFuZGFyZE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+XG4gICAgfCBVcGRhdGVPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YTogVFxuKSB7XG4gIHJldHVybiBhZnRlcihEQk9wZXJhdGlvbnMuQ1JFQVRFX1VQREFURSwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgYWZ0ZXIgdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5VUERBVEV9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlclVwZGF0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlclVwZGF0ZTxUPihcbiAgaGFuZGxlcjogVXBkYXRlT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sXG4gIGRhdGE6IFRcbikge1xuICByZXR1cm4gYWZ0ZXIoREJPcGVyYXRpb25zLlVQREFURSwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgYWZ0ZXIgdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5DUkVBVEV9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlckNyZWF0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlckNyZWF0ZTxUPihcbiAgaGFuZGxlcjogU3RhbmRhcmRPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YTogVFxuKSB7XG4gIHJldHVybiBhZnRlcihEQk9wZXJhdGlvbnMuQ1JFQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBhZnRlciB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLlJFQUR9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gQXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gdGhlIGhhbmRsZXIgbWV0aG9kXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlclJlYWRcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXJSZWFkPFQ+KFxuICBoYW5kbGVyOiBTdGFuZGFyZE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBhZnRlcihEQk9wZXJhdGlvbnMuUkVBRCwgaGFuZGxlciwgZGF0YSk7XG59XG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IGFmdGVyIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuREVMRVRFfVxuICpcbiAqIEBwYXJhbSB7QWZ0ZXJPcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIEFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIGluIG9yZGVyIHRvIHRoZSBoYW5kbGVyIG1ldGhvZFxuICpcbiAqIEBzZWUgYWZ0ZXJcbiAqXG4gKiBAZnVuY3Rpb24gYWZ0ZXJEZWxldGVcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXJEZWxldGU8VD4oXG4gIGhhbmRsZXI6IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sXG4gIGRhdGE/OiBUXG4pIHtcbiAgcmV0dXJuIGFmdGVyKERCT3BlcmF0aW9ucy5ERUxFVEUsIGhhbmRsZXIsIGRhdGEpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IG9uIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnN9XG4gKlxuICogQHBhcmFtIHtPcGVyYXRpb25LZXlzW10gfCBEQk9wZXJhdGlvbnN9IG9wIE9uZSBvZiB7QGxpbmsgREJPcGVyYXRpb25zfVxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqXG4gKiBleDogaGFuZGxlciguLi5hcmdzLCAuLi5wcm9wcy5tYXAocCA9PiB0YXJnZXRbcF0pKVxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0gYXJnc1xuICogQGZ1bmN0aW9uIGFmdGVyXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyPFQ+KFxuICBvcDogT3BlcmF0aW9uS2V5c1tdID0gREJPcGVyYXRpb25zLkFMTCxcbiAgaGFuZGxlcjogT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sXG4gIGRhdGE/OiBUXG4pIHtcbiAgcmV0dXJuIG9wZXJhdGlvbihPcGVyYXRpb25LZXlzLkFGVEVSLCBvcCwgaGFuZGxlciwgZGF0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVyYXRpb248VD4oXG4gIGJhc2VPcDogT3BlcmF0aW9uS2V5cy5PTiB8IE9wZXJhdGlvbktleXMuQUZURVIsXG4gIG9wZXJhdGlvbjogT3BlcmF0aW9uS2V5c1tdID0gREJPcGVyYXRpb25zLkFMTCxcbiAgaGFuZGxlcjogT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sXG4gIGRhdGFUb0FkZD86IFRcbikge1xuICByZXR1cm4gKHRhcmdldDogb2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGNvbnN0IGRlY29yYXRvcnMgPSBvcGVyYXRpb24ucmVkdWNlKChhY2N1bTogYW55W10sIG9wKSA9PiB7XG4gICAgICBjb25zdCBjb21wb3VuZEtleSA9IGJhc2VPcCArIG9wO1xuICAgICAgbGV0IGRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICBPcGVyYXRpb25zLmtleShjb21wb3VuZEtleSksXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgcHJvcGVydHlLZXlcbiAgICAgICk7XG4gICAgICBpZiAoIWRhdGEpXG4gICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgb3BlcmF0aW9uOiBvcCxcbiAgICAgICAgICBoYW5kbGVyczoge30sXG4gICAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBPcGVyYXRpb25zLmdldEhhbmRsZXJOYW1lKGhhbmRsZXIpO1xuXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhLmhhbmRsZXJzW25hbWVdIHx8XG4gICAgICAgICFkYXRhLmhhbmRsZXJzW25hbWVdW3Byb3BlcnR5S2V5XSB8fFxuICAgICAgICAhKGhhbmRsZXJLZXkgaW4gZGF0YS5oYW5kbGVyc1tuYW1lXVtwcm9wZXJ0eUtleV0pXG4gICAgICApIHtcbiAgICAgICAgZGF0YS5oYW5kbGVyc1tuYW1lXSA9IGRhdGEuaGFuZGxlcnNbbmFtZV0gfHwge307XG4gICAgICAgIGRhdGEuaGFuZGxlcnNbbmFtZV1bcHJvcGVydHlLZXldID1cbiAgICAgICAgICBkYXRhLmhhbmRsZXJzW25hbWVdW3Byb3BlcnR5S2V5XSB8fCB7fTtcbiAgICAgICAgZGF0YS5oYW5kbGVyc1tuYW1lXVtwcm9wZXJ0eUtleV1baGFuZGxlcktleV0gPSB7XG4gICAgICAgICAgZGF0YTogZGF0YVRvQWRkLFxuICAgICAgICB9O1xuXG4gICAgICAgIGFjY3VtLnB1c2goXG4gICAgICAgICAgaGFuZGxlKGNvbXBvdW5kS2V5IGFzIE9wZXJhdGlvbktleXMsIGhhbmRsZXIpLFxuICAgICAgICAgIHByb3BNZXRhZGF0YShPcGVyYXRpb25zLmtleShjb21wb3VuZEtleSksIGRhdGEpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBhcHBseSguLi5kZWNvcmF0b3JzKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgfTtcbn1cbiJdfQ==
@@ -1 +1,7 @@
1
- export*from"./constants";export*from"./decorators";export*from"./Operations";export*from"./OperationsRegistry";export*from"./types";
1
+ export * from "./constants";
2
+ export * from "./decorators";
3
+ export * from "./Operations";
4
+ export * from "./OperationsRegistry";
5
+ export * from "./types";
6
+
7
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxTQUFTLENBQUMiLCJmaWxlIjoib3BlcmF0aW9ucy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vT3BlcmF0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vT3BlcmF0aW9uc1JlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl19
@@ -1,4 +1,3 @@
1
- import { DBModel } from "../model/DBModel";
2
1
  import { OperationKeys } from "./constants";
3
2
  import { IRepository } from "../interfaces/IRepository";
4
3
  export type OperationMetadata<T> = {
@@ -10,19 +9,19 @@ export type OperationMetadata<T> = {
10
9
  * @typedef OperationHandler
11
10
  * @memberOf db-decorators.operations
12
11
  */
13
- export type OperationHandler<T extends DBModel, Y extends IRepository<T>, V> = StandardOperationHandler<T, Y, V> | UpdateOperationHandler<T, Y, V> | IdOperationHandler<T, Y, V>;
12
+ export type OperationHandler<T extends Model, Y extends IRepository<T>, V> = StandardOperationHandler<T, Y, V> | UpdateOperationHandler<T, Y, V> | IdOperationHandler<T, Y, V>;
14
13
  /**
15
14
  * @typedef OnOperationHandler
16
15
  * @memberOf db-decorators.operations
17
16
  */
18
- export type StandardOperationHandler<T extends DBModel, Y extends IRepository<T>, V> = (this: Y, metadata: V, key: any, model: T) => Promise<void> | void;
17
+ export type StandardOperationHandler<T extends Model, Y extends IRepository<T>, V> = (this: Y, metadata: V, key: any, model: T) => Promise<void> | void;
19
18
  /**
20
19
  * @typedef IdOperationHandler
21
20
  * @memberOf db-decorators.operations
22
21
  */
23
- export type IdOperationHandler<T extends DBModel, Y extends IRepository<T>, V> = (this: Y, decorator: V, key: any, id: string) => Promise<void> | void;
22
+ export type IdOperationHandler<T extends Model, Y extends IRepository<T>, V> = (this: Y, decorator: V, key: any, id: string) => Promise<void> | void;
24
23
  /**
25
24
  * @typedef AfterOperationHandler
26
25
  * @memberOf db-decorators.operations
27
26
  */
28
- export type UpdateOperationHandler<T extends DBModel, Y extends IRepository<T>, V> = (this: Y, decorator: V, key: any, model: T, oldModel: T) => Promise<void> | void;
27
+ export type UpdateOperationHandler<T extends Model, Y extends IRepository<T>, V> = (this: Y, decorator: V, key: any, model: T, oldModel: T) => Promise<void> | void;
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoib3BlcmF0aW9ucy90eXBlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvSVJlcG9zaXRvcnlcIjtcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uTWV0YWRhdGE8VD4gPSB7XG4gIG9wZXJhdGlvbjogT3BlcmF0aW9uS2V5cztcbiAgaGFuZGxlcjogc3RyaW5nO1xuICBtZXRhZGF0YT86IFQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIE9wZXJhdGlvbkhhbmRsZXJcbiAqIEBtZW1iZXJPZiBkYi1kZWNvcmF0b3JzLm9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgT3BlcmF0aW9uSGFuZGxlcjxUIGV4dGVuZHMgTW9kZWwsIFkgZXh0ZW5kcyBJUmVwb3NpdG9yeTxUPiwgVj4gPVxuICB8IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxULCBZLCBWPlxuICB8IFVwZGF0ZU9wZXJhdGlvbkhhbmRsZXI8VCwgWSwgVj5cbiAgfCBJZE9wZXJhdGlvbkhhbmRsZXI8VCwgWSwgVj47XG5cbi8qKlxuICogQHR5cGVkZWYgT25PcGVyYXRpb25IYW5kbGVyXG4gKiBAbWVtYmVyT2YgZGItZGVjb3JhdG9ycy5vcGVyYXRpb25zXG4gKi9cbmV4cG9ydCB0eXBlIFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxcbiAgVCBleHRlbmRzIE1vZGVsLFxuICBZIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sXG4gIFYsXG4+ID0gKHRoaXM6IFksIG1ldGFkYXRhOiBWLCBrZXk6IGFueSwgbW9kZWw6IFQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4vKipcbiAqIEB0eXBlZGVmIElkT3BlcmF0aW9uSGFuZGxlclxuICogQG1lbWJlck9mIGRiLWRlY29yYXRvcnMub3BlcmF0aW9uc1xuICovXG5leHBvcnQgdHlwZSBJZE9wZXJhdGlvbkhhbmRsZXI8VCBleHRlbmRzIE1vZGVsLCBZIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sIFY+ID0gKFxuICB0aGlzOiBZLFxuICBkZWNvcmF0b3I6IFYsXG4gIGtleTogYW55LFxuICBpZDogc3RyaW5nXG4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4vKipcbiAqIEB0eXBlZGVmIEFmdGVyT3BlcmF0aW9uSGFuZGxlclxuICogQG1lbWJlck9mIGRiLWRlY29yYXRvcnMub3BlcmF0aW9uc1xuICovXG5leHBvcnQgdHlwZSBVcGRhdGVPcGVyYXRpb25IYW5kbGVyPFxuICBUIGV4dGVuZHMgTW9kZWwsXG4gIFkgZXh0ZW5kcyBJUmVwb3NpdG9yeTxUPixcbiAgVixcbj4gPSAoXG4gIHRoaXM6IFksXG4gIGRlY29yYXRvcjogVixcbiAga2V5OiBhbnksXG4gIG1vZGVsOiBULFxuICBvbGRNb2RlbDogVFxuKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiJdfQ==
@@ -1,15 +1,14 @@
1
1
  import { IRepository } from "../interfaces/IRepository";
2
- import { DBModel } from "../model/DBModel";
3
2
  import { Constructor } from "@decaf-ts/decorator-validation";
4
3
  import { DataCache } from "./DataCache";
5
- export declare abstract class BaseRepository<M extends DBModel> implements IRepository<M> {
4
+ export declare abstract class BaseRepository<M extends Model> implements IRepository<M> {
6
5
  private readonly _class;
7
6
  private _cache?;
8
7
  get class(): Constructor<M>;
9
8
  get cache(): DataCache;
10
9
  protected constructor(clazz?: Constructor<M>);
11
10
  create(model: M, ...args: any[]): Promise<M>;
12
- createAll(models: M[], ...args: any[]): Promise<Awaited<M>[]>;
11
+ createAll(models: M[], ...args: any[]): Promise<M[]>;
13
12
  protected createPrefix(model: M, ...args: any[]): Promise<any[]>;
14
13
  protected createSuffix(model: M): Promise<M>;
15
14
  protected createAllPrefix(models: M[], ...args: any[]): Promise<any[]>;