@decaf-ts/db-decorators 0.1.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) 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.d.ts +7 -0
  11. package/lib/esm/interfaces/BulkCrudOperator.js +3 -0
  12. package/lib/esm/interfaces/CrudOperator.d.ts +5 -5
  13. package/lib/esm/interfaces/CrudOperator.js +3 -0
  14. package/lib/esm/interfaces/IRepository.d.ts +4 -5
  15. package/lib/esm/interfaces/IRepository.js +3 -0
  16. package/lib/esm/interfaces/index.d.ts +1 -0
  17. package/lib/esm/interfaces/index.js +5 -1
  18. package/lib/esm/model/constants.d.ts +1 -1
  19. package/lib/esm/model/constants.js +39 -1
  20. package/lib/esm/model/decorators.d.ts +5 -7
  21. package/lib/esm/model/decorators.js +69 -1
  22. package/lib/esm/model/index.d.ts +2 -1
  23. package/lib/esm/model/index.js +6 -1
  24. package/lib/esm/model/model.d.ts +8 -0
  25. package/lib/esm/model/model.js +14 -0
  26. package/lib/esm/model/validation.d.ts +1 -2
  27. package/lib/esm/model/validation.js +122 -1
  28. package/lib/esm/operations/Operations.d.ts +3 -4
  29. package/lib/esm/operations/Operations.js +35 -1
  30. package/lib/esm/operations/OperationsRegistry.d.ts +2 -3
  31. package/lib/esm/operations/OperationsRegistry.js +65 -1
  32. package/lib/esm/operations/constants.d.ts +1 -1
  33. package/lib/esm/operations/constants.js +39 -1
  34. package/lib/esm/operations/decorators.js +226 -1
  35. package/lib/esm/operations/index.js +7 -1
  36. package/lib/esm/operations/types.d.ts +4 -5
  37. package/lib/esm/operations/types.js +3 -0
  38. package/lib/esm/repository/BaseRepository.d.ts +26 -14
  39. package/lib/esm/repository/BaseRepository.js +158 -1
  40. package/lib/esm/repository/DataCache.js +32 -1
  41. package/lib/esm/repository/Repository.d.ts +11 -10
  42. package/lib/esm/repository/Repository.js +89 -1
  43. package/lib/esm/repository/errors.js +88 -1
  44. package/lib/esm/repository/index.js +8 -1
  45. package/lib/esm/repository/utils.d.ts +3 -4
  46. package/lib/esm/repository/utils.js +167 -1
  47. package/lib/esm/repository/wrappers.js +90 -1
  48. package/lib/esm/validation/constants.js +33 -1
  49. package/lib/esm/validation/decorators.d.ts +6 -8
  50. package/lib/esm/validation/decorators.js +223 -1
  51. package/lib/esm/validation/index.js +5 -1
  52. package/lib/esm/validation/validators/ReadOnlyValidator.js +52 -1
  53. package/lib/esm/validation/validators/TimestampValidator.js +49 -1
  54. package/lib/esm/validation/validators/UpdateValidator.js +20 -1
  55. package/lib/esm/validation/validators/index.js +5 -1
  56. package/lib/identity/decorators.cjs +13 -1
  57. package/lib/identity/decorators.d.ts +1 -1
  58. package/lib/identity/index.cjs +20 -1
  59. package/lib/identity/utils.cjs +67 -1
  60. package/lib/identity/utils.d.ts +6 -9
  61. package/lib/index.cjs +51 -1
  62. package/lib/interfaces/BulkCrudOperator.cjs +4 -0
  63. package/lib/interfaces/BulkCrudOperator.d.ts +7 -0
  64. package/lib/interfaces/CrudOperator.cjs +4 -1
  65. package/lib/interfaces/CrudOperator.d.ts +5 -5
  66. package/lib/interfaces/IRepository.cjs +4 -1
  67. package/lib/interfaces/IRepository.d.ts +4 -5
  68. package/lib/interfaces/index.cjs +21 -1
  69. package/lib/interfaces/index.d.ts +1 -0
  70. package/lib/model/constants.cjs +42 -1
  71. package/lib/model/constants.d.ts +1 -1
  72. package/lib/model/decorators.cjs +76 -1
  73. package/lib/model/decorators.d.ts +5 -7
  74. package/lib/model/index.cjs +22 -1
  75. package/lib/model/index.d.ts +2 -1
  76. package/lib/model/model.cjs +16 -0
  77. package/lib/model/model.d.ts +8 -0
  78. package/lib/model/validation.cjs +125 -1
  79. package/lib/model/validation.d.ts +1 -2
  80. package/lib/operations/Operations.cjs +39 -1
  81. package/lib/operations/Operations.d.ts +3 -4
  82. package/lib/operations/OperationsRegistry.cjs +69 -1
  83. package/lib/operations/OperationsRegistry.d.ts +2 -3
  84. package/lib/operations/constants.cjs +42 -1
  85. package/lib/operations/constants.d.ts +1 -1
  86. package/lib/operations/decorators.cjs +241 -1
  87. package/lib/operations/index.cjs +23 -1
  88. package/lib/operations/types.cjs +4 -1
  89. package/lib/operations/types.d.ts +4 -5
  90. package/lib/repository/BaseRepository.cjs +162 -1
  91. package/lib/repository/BaseRepository.d.ts +26 -14
  92. package/lib/repository/DataCache.cjs +36 -1
  93. package/lib/repository/Repository.cjs +93 -1
  94. package/lib/repository/Repository.d.ts +11 -10
  95. package/lib/repository/errors.cjs +97 -1
  96. package/lib/repository/index.cjs +24 -1
  97. package/lib/repository/utils.cjs +174 -1
  98. package/lib/repository/utils.d.ts +3 -4
  99. package/lib/repository/wrappers.cjs +95 -1
  100. package/lib/validation/constants.cjs +36 -1
  101. package/lib/validation/decorators.cjs +232 -1
  102. package/lib/validation/decorators.d.ts +6 -8
  103. package/lib/validation/index.cjs +21 -1
  104. package/lib/validation/validators/ReadOnlyValidator.cjs +55 -1
  105. package/lib/validation/validators/TimestampValidator.cjs +52 -1
  106. package/lib/validation/validators/UpdateValidator.cjs +24 -1
  107. package/lib/validation/validators/index.cjs +21 -1
  108. package/package.json +18 -16
  109. package/lib/esm/model/DBModel.d.ts +0 -25
  110. package/lib/esm/model/DBModel.js +0 -1
  111. package/lib/esm/validation/comparison.d.ts +0 -1
  112. package/lib/esm/validation/comparison.js +0 -1
  113. package/lib/model/DBModel.cjs +0 -1
  114. package/lib/model/DBModel.d.ts +0 -25
  115. package/lib/validation/comparison.cjs +0 -1
  116. package/lib/validation/comparison.d.ts +0 -1
@@ -1 +1,63 @@
1
- import{DBModel}from"../model/DBModel";import{getDBKey}from"../model/decorators";import{DBKeys}from"../model/constants";import{getAllPropertyDecoratorsRecursive}from"../repository/utils";import{ModelKeys,sf}from"@decaf-ts/decorator-validation";import{InternalError,NotFoundError}from"../repository/errors";function findPrimaryKey(r){r=getAllPropertyDecoratorsRecursive(r,void 0,getDBKey(DBKeys.ID)),r=Object.entries(r).reduce((r,[e,o])=>{o=o.filter(r=>r.key!==ModelKeys.TYPE);return o&&o.length&&(r[e]=r[e]||[],r[e].push(...o)),r},{});if(r&&Object.keys(r).length){if(1<Object.keys(r).length)throw new InternalError(sf(Object.keys(r).join(", ")));var e=Object.keys(r)[0];if(e)return{id:e,props:r[e][0].props.options}}throw new InternalError("Could not find ID decorated Property")}function findModelId(r,e=!1){var o=findPrimaryKey(r).id,r=r[o];if(r||e)return r;throw new NotFoundError(sf("No value for the Id is defined under the property {0}",o))}async function createOrUpdate(r,e=void 0,o){return e=e||DBModel.findRepository(r.constructor),void 0===r[o=o||findPrimaryKey(r).id]?e.create(r):e.update(r)}export{findPrimaryKey,findModelId,createOrUpdate};
1
+ import { DBKeys } from "../model/constants";
2
+ import { getAllPropertyDecoratorsRecursive } from "../repository/utils";
3
+ import { ModelKeys, sf } from "@decaf-ts/decorator-validation";
4
+ import { InternalError, NotFoundError } from "../repository/errors";
5
+ /**
6
+ * @summary Returns the primary key attribute for a {@link Model}
7
+ * @description searches in all the properties in the object for an {@link id} decorated property
8
+ *
9
+ * @param {Model} model
10
+ *
11
+ * @throws {InternalError} if no property or more than one properties are {@link id} decorated
12
+ * or no value is set in that property
13
+ *
14
+ * @function findPrimaryKey
15
+ *
16
+ * @category managers
17
+ */
18
+ export function findPrimaryKey(model) {
19
+ const decorators = getAllPropertyDecoratorsRecursive(model, undefined, DBKeys.REFLECT + DBKeys.ID);
20
+ const idDecorators = Object.entries(decorators).reduce((accum, [prop, decs]) => {
21
+ const filtered = decs.filter((d) => d.key !== ModelKeys.TYPE);
22
+ if (filtered && filtered.length) {
23
+ accum[prop] = accum[prop] || [];
24
+ accum[prop].push(...filtered);
25
+ }
26
+ return accum;
27
+ }, {});
28
+ if (!idDecorators || !Object.keys(idDecorators).length)
29
+ throw new InternalError("Could not find ID decorated Property");
30
+ if (Object.keys(idDecorators).length > 1)
31
+ throw new InternalError(sf(Object.keys(idDecorators).join(", ")));
32
+ const idProp = Object.keys(idDecorators)[0];
33
+ if (!idProp)
34
+ throw new InternalError("Could not find ID decorated Property");
35
+ return {
36
+ id: idProp,
37
+ props: idDecorators[idProp][0].props.options,
38
+ };
39
+ }
40
+ /**
41
+ * @summary Returns the primary key value for a {@link Model}
42
+ * @description searches in all the properties in the object for an {@link pk} decorated property
43
+ *
44
+ * @param {Model} model
45
+ * @param {boolean} [returnEmpty]
46
+ * @return {string} primary key
47
+ *
48
+ * @throws {InternalError} if no property or more than one properties are {@link pk} decorated
49
+ * @throws {NotFoundError} returnEmpty is false and no value is set on the {@link pk} decorated property
50
+ *
51
+ * @function findModelID
52
+ *
53
+ * @category managers
54
+ */
55
+ export function findModelId(model, returnEmpty = false) {
56
+ const idProp = findPrimaryKey(model).id;
57
+ const modelId = model[idProp];
58
+ if (!modelId && !returnEmpty)
59
+ throw new NotFoundError(sf("No value for the Id is defined under the property {0}", idProp));
60
+ return modelId;
61
+ }
62
+
63
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pZGVudGl0eS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBFOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQWtCLEtBQVE7SUFDdEQsTUFBTSxVQUFVLEdBQUcsaUNBQWlDLENBQ2xELEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUMzQixDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFvQixDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLEtBQW1DLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNwRCxNQUFNLFFBQVEsR0FBSSxJQUEwQixDQUFDLE1BQU0sQ0FDakQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLElBQUksQ0FDaEMsQ0FBQztRQUNGLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBRUYsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTTtRQUNwRCxNQUFNLElBQUksYUFBYSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLElBQUksQ0FBQyxNQUFNO1FBQUUsTUFBTSxJQUFJLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzdFLE9BQU87UUFDTCxFQUFFLEVBQUUsTUFBTTtRQUNWLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU87S0FDN0MsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBWSxFQUFFLFdBQVcsR0FBRyxLQUFLO0lBQzNELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUksS0FBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXO1FBQzFCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxNQUFNLENBQUMsQ0FDcEUsQ0FBQztJQUNKLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJmaWxlIjoiaWRlbnRpdHkvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEQktleXMgfSBmcm9tIFwiLi4vbW9kZWwvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS91dGlsc1wiO1xuaW1wb3J0IHsgTW9kZWxLZXlzLCBzZiB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IsIE5vdEZvdW5kRXJyb3IgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9lcnJvcnNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBwcmltYXJ5IGtleSBhdHRyaWJ1dGUgZm9yIGEge0BsaW5rIE1vZGVsfVxuICogQGRlc2NyaXB0aW9uIHNlYXJjaGVzIGluIGFsbCB0aGUgcHJvcGVydGllcyBpbiB0aGUgb2JqZWN0IGZvciBhbiB7QGxpbmsgaWR9IGRlY29yYXRlZCBwcm9wZXJ0eVxuICpcbiAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsXG4gKlxuICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gaWYgbm8gcHJvcGVydHkgb3IgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0aWVzIGFyZSB7QGxpbmsgaWR9IGRlY29yYXRlZFxuICogb3Igbm8gdmFsdWUgaXMgc2V0IGluIHRoYXQgcHJvcGVydHlcbiAqXG4gKiBAZnVuY3Rpb24gZmluZFByaW1hcnlLZXlcbiAqXG4gKiBAY2F0ZWdvcnkgbWFuYWdlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQcmltYXJ5S2V5PFQgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFQpIHtcbiAgY29uc3QgZGVjb3JhdG9ycyA9IGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1JlY3Vyc2l2ZShcbiAgICBtb2RlbCxcbiAgICB1bmRlZmluZWQsXG4gICAgREJLZXlzLlJFRkxFQ1QgKyBEQktleXMuSURcbiAgKTtcbiAgY29uc3QgaWREZWNvcmF0b3JzID0gT2JqZWN0LmVudHJpZXMoZGVjb3JhdG9ycyBhcyBvYmplY3QpLnJlZHVjZShcbiAgICAoYWNjdW06IHsgW2luZGV4ZXI6IHN0cmluZ106IGFueVtdIH0sIFtwcm9wLCBkZWNzXSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSAoZGVjcyBhcyB7IGtleTogc3RyaW5nIH1bXSkuZmlsdGVyKFxuICAgICAgICAoZCkgPT4gZC5rZXkgIT09IE1vZGVsS2V5cy5UWVBFXG4gICAgICApO1xuICAgICAgaWYgKGZpbHRlcmVkICYmIGZpbHRlcmVkLmxlbmd0aCkge1xuICAgICAgICBhY2N1bVtwcm9wXSA9IGFjY3VtW3Byb3BdIHx8IFtdO1xuICAgICAgICBhY2N1bVtwcm9wXS5wdXNoKC4uLmZpbHRlcmVkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFpZERlY29yYXRvcnMgfHwgIU9iamVjdC5rZXlzKGlkRGVjb3JhdG9ycykubGVuZ3RoKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiQ291bGQgbm90IGZpbmQgSUQgZGVjb3JhdGVkIFByb3BlcnR5XCIpO1xuICBpZiAoT2JqZWN0LmtleXMoaWREZWNvcmF0b3JzKS5sZW5ndGggPiAxKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKHNmKE9iamVjdC5rZXlzKGlkRGVjb3JhdG9ycykuam9pbihcIiwgXCIpKSk7XG4gIGNvbnN0IGlkUHJvcCA9IE9iamVjdC5rZXlzKGlkRGVjb3JhdG9ycylbMF07XG4gIGlmICghaWRQcm9wKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBmaW5kIElEIGRlY29yYXRlZCBQcm9wZXJ0eVwiKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogaWRQcm9wLFxuICAgIHByb3BzOiBpZERlY29yYXRvcnNbaWRQcm9wXVswXS5wcm9wcy5vcHRpb25zLFxuICB9O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHByaW1hcnkga2V5IHZhbHVlIGZvciBhIHtAbGluayBNb2RlbH1cbiAqIEBkZXNjcmlwdGlvbiBzZWFyY2hlcyBpbiBhbGwgdGhlIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBmb3IgYW4ge0BsaW5rIHBrfSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqXG4gKiBAcGFyYW0ge01vZGVsfSBtb2RlbFxuICogQHBhcmFtIHtib29sZWFufSBbcmV0dXJuRW1wdHldXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHByaW1hcnkga2V5XG4gKlxuICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gaWYgbm8gcHJvcGVydHkgb3IgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0aWVzIGFyZSB7QGxpbmsgcGt9IGRlY29yYXRlZFxuICogQHRocm93cyB7Tm90Rm91bmRFcnJvcn0gcmV0dXJuRW1wdHkgaXMgZmFsc2UgYW5kIG5vIHZhbHVlIGlzIHNldCBvbiB0aGUge0BsaW5rIHBrfSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqXG4gKiBAZnVuY3Rpb24gZmluZE1vZGVsSURcbiAqXG4gKiBAY2F0ZWdvcnkgbWFuYWdlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRNb2RlbElkKG1vZGVsOiBNb2RlbCwgcmV0dXJuRW1wdHkgPSBmYWxzZSkge1xuICBjb25zdCBpZFByb3AgPSBmaW5kUHJpbWFyeUtleShtb2RlbCkuaWQ7XG4gIGNvbnN0IG1vZGVsSWQgPSAobW9kZWwgYXMgYW55KVtpZFByb3BdO1xuICBpZiAoIW1vZGVsSWQgJiYgIXJldHVybkVtcHR5KVxuICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgc2YoXCJObyB2YWx1ZSBmb3IgdGhlIElkIGlzIGRlZmluZWQgdW5kZXIgdGhlIHByb3BlcnR5IHswfVwiLCBpZFByb3ApXG4gICAgKTtcbiAgcmV0dXJuIG1vZGVsSWQ7XG59XG4iXX0=
package/lib/esm/index.js CHANGED
@@ -1 +1,35 @@
1
- export*from"./identity";export*from"./interfaces";export*from"./model";export*from"./operations";export*from"./repository";export*from"./validation";
1
+ /**
2
+ * @module db-decorators
3
+ */
4
+ /**
5
+ * @namespace Model
6
+ * @memberOf module:db-decorators
7
+ */
8
+ /**
9
+ * @namespace Operations
10
+ * @memberOf module:db-decorators
11
+ */
12
+ /**
13
+ * @namespace Repository
14
+ * @memberOf module:db-decorators
15
+ */
16
+ /**
17
+ * @namespace Validation
18
+ * @memberOf module:db-decorators
19
+ */
20
+ /**
21
+ * @namespace Validators
22
+ * @memberOf module:db-decorators.Validation
23
+ */
24
+ /**
25
+ * @namespace Utils
26
+ * @memberOf module:db-decorators
27
+ */
28
+ export * from "./identity";
29
+ export * from "./interfaces";
30
+ export * from "./model";
31
+ export * from "./operations";
32
+ export * from "./repository";
33
+ export * from "./validation";
34
+
35
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOzs7R0FHRztBQUVIOzs7R0FHRztBQUVIOzs7R0FHRztBQUVIOzs7R0FHRztBQUVIOzs7R0FHRztBQUVIOzs7R0FHRztBQUNILGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGRiLWRlY29yYXRvcnNcbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgTW9kZWxcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBPcGVyYXRpb25zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUmVwb3NpdG9yeVxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFZhbGlkYXRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBWYWxpZGF0b3JzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnMuVmFsaWRhdGlvblxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL2lkZW50aXR5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3BlcmF0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVwb3NpdG9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuIl19
@@ -0,0 +1,7 @@
1
+ import { CrudOperator } from "./CrudOperator";
2
+ export interface BulkCrudOperator<M> extends CrudOperator<M> {
3
+ createAll(models: M[], ...args: any[]): Promise<M[]>;
4
+ readAll(keys: string[] | number[], ...args: any[]): Promise<M[]>;
5
+ updateAll(models: M[], ...args: any[]): Promise<M[]>;
6
+ deleteAll(keys: string[] | number[], ...args: any[]): Promise<M[]>;
7
+ }
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0J1bGtDcnVkT3BlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbnRlcmZhY2VzL0J1bGtDcnVkT3BlcmF0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcnVkT3BlcmF0b3IgfSBmcm9tIFwiLi9DcnVkT3BlcmF0b3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrQ3J1ZE9wZXJhdG9yPE0+IGV4dGVuZHMgQ3J1ZE9wZXJhdG9yPE0+IHtcbiAgY3JlYXRlQWxsKG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPjtcbiAgcmVhZEFsbChrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPjtcbiAgdXBkYXRlQWxsKG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPjtcbiAgZGVsZXRlQWxsKGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+O1xufVxuIl19
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @category Managers
8
8
  */
9
- export interface CrudOperator<T> {
9
+ export interface CrudOperator<M> {
10
10
  /**
11
11
  * @summary Create a new model
12
12
  * @param {T} model
@@ -14,7 +14,7 @@ export interface CrudOperator<T> {
14
14
  *
15
15
  * @method
16
16
  */
17
- create(model: T, ...args: any[]): Promise<T>;
17
+ create(model: M, ...args: any[]): Promise<M>;
18
18
  /**
19
19
  * @summary Read a model
20
20
  * @param {string} key
@@ -22,7 +22,7 @@ export interface CrudOperator<T> {
22
22
  *
23
23
  * @method
24
24
  */
25
- read(key: string, ...args: any[]): Promise<T>;
25
+ read(key: string | number, ...args: any[]): Promise<M>;
26
26
  /**
27
27
  * @summary update a model
28
28
  * @param {T} model
@@ -30,7 +30,7 @@ export interface CrudOperator<T> {
30
30
  *
31
31
  * @method
32
32
  */
33
- update(model: T, ...args: any[]): Promise<T>;
33
+ update(model: M, ...args: any[]): Promise<M>;
34
34
  /**
35
35
  * @summary delete a model
36
36
  * @param {string} key
@@ -38,5 +38,5 @@ export interface CrudOperator<T> {
38
38
  *
39
39
  * @method
40
40
  */
41
- delete(key: string, ...args: any[]): Promise<T>;
41
+ delete(key: string | number, ...args: any[]): Promise<M>;
42
42
  }
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0NydWRPcGVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6ImludGVyZmFjZXMvQ3J1ZE9wZXJhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAc3VtbWFyeSBDcnVkIEFQSVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgYSBDUlVEIEFQSVxuICpcbiAqIEBpbnRlcmZhY2UgQ3J1ZE9wZXJhdG9yXG4gKlxuICogQGNhdGVnb3J5IE1hbmFnZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3J1ZE9wZXJhdG9yPE0+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZSBhIG5ldyBtb2RlbFxuICAgKiBAcGFyYW0ge1R9IG1vZGVsXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBjcmVhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlYWQgYSBtb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICByZWFkKGtleTogc3RyaW5nIHwgbnVtYmVyLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSB1cGRhdGUgYSBtb2RlbFxuICAgKiBAcGFyYW0ge1R9IG1vZGVsXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICB1cGRhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGRlbGV0ZSBhIG1vZGVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdXG4gICAqXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGRlbGV0ZShrZXk6IHN0cmluZyB8IG51bWJlciwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+O1xufVxuIl19
@@ -1,13 +1,12 @@
1
- import { DBModel } from "../model/DBModel";
2
1
  import { DataCache } from "../repository/DataCache";
3
2
  import { Constructor } from "@decaf-ts/decorator-validation";
4
- import { CrudOperator } from "./CrudOperator";
3
+ import { BulkCrudOperator } from "./BulkCrudOperator";
5
4
  /**
6
5
  * @summary Interface holding basic CRUD APIs
7
- * @typedef T extends {@link DBModel}
6
+ * @typedef T extends {@link Model}
8
7
  * @interface IRepository
9
8
  */
10
- export interface IRepository<T extends DBModel> extends CrudOperator<T> {
9
+ export interface IRepository<M extends Model> extends BulkCrudOperator<M> {
11
10
  readonly cache: DataCache;
12
- readonly class: Constructor<T>;
11
+ readonly class: Constructor<M>;
13
12
  }
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0lSZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiaW50ZXJmYWNlcy9JUmVwb3NpdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFDYWNoZSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L0RhdGFDYWNoZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBCdWxrQ3J1ZE9wZXJhdG9yIH0gZnJvbSBcIi4vQnVsa0NydWRPcGVyYXRvclwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEludGVyZmFjZSBob2xkaW5nIGJhc2ljIENSVUQgQVBJc1xuICogQHR5cGVkZWYgVCBleHRlbmRzIHtAbGluayBNb2RlbH1cbiAqIEBpbnRlcmZhY2UgSVJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgQnVsa0NydWRPcGVyYXRvcjxNPiB7XG4gIHJlYWRvbmx5IGNhY2hlOiBEYXRhQ2FjaGU7XG4gIHJlYWRvbmx5IGNsYXNzOiBDb25zdHJ1Y3RvcjxNPjtcbn1cbiJdfQ==
@@ -1,2 +1,3 @@
1
+ export * from "./BulkCrudOperator";
1
2
  export * from "./CrudOperator";
2
3
  export * from "./IRepository";
@@ -1 +1,5 @@
1
- export*from"./CrudOperator";export*from"./IRepository";
1
+ export * from "./BulkCrudOperator";
2
+ export * from "./CrudOperator";
3
+ export * from "./IRepository";
4
+
5
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQyIsImZpbGUiOiJpbnRlcmZhY2VzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQnVsa0NydWRPcGVyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ3J1ZE9wZXJhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9JUmVwb3NpdG9yeVwiO1xuIl19
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @summary Holds the DBModel reflection keys
2
+ * @summary Holds the Model reflection keys
3
3
  * @const DBKeys
4
4
  *
5
5
  * @memberOf module:db-decorators.Model
@@ -1 +1,39 @@
1
- const DBKeys={REFLECT:"model.db.",REPOSITORY:"repository",CLASS:"_class",ID:"id",INDEX:"index",UNIQUE:"unique",SERIALIZE:"serialize",READONLY:"readonly",TIMESTAMP:"timestamp",HASH:"hash",COMPOSED:"composed",ORIGINAL:"__originalObj"},DefaultSeparator="_",DEFAULT_TIMESTAMP_FORMAT="dd/MM/yyyy HH:mm:ss:S";export{DBKeys,DefaultSeparator,DEFAULT_TIMESTAMP_FORMAT};
1
+ import { ModelKeys } from "@decaf-ts/decorator-validation";
2
+ /**
3
+ * @summary Holds the Model reflection keys
4
+ * @const DBKeys
5
+ *
6
+ * @memberOf module:db-decorators.Model
7
+ */
8
+ export const DBKeys = {
9
+ REFLECT: `${ModelKeys.REFLECT}persistence.`,
10
+ REPOSITORY: "repository",
11
+ CLASS: "_class",
12
+ ID: "id",
13
+ INDEX: "index",
14
+ UNIQUE: "unique",
15
+ SERIALIZE: "serialize",
16
+ READONLY: "readonly",
17
+ TIMESTAMP: "timestamp",
18
+ HASH: "hash",
19
+ COMPOSED: "composed",
20
+ ORIGINAL: "__originalObj",
21
+ };
22
+ /**
23
+ * @summary The default separator when concatenating indexes
24
+ *
25
+ * @const DefaultIndexSeparator
26
+ *
27
+ * @category Managers
28
+ * @subcategory Constants
29
+ */
30
+ export const DefaultSeparator = "_";
31
+ /**
32
+ * @summary Holds the default timestamp date format
33
+ * @constant DEFAULT_TIMESTAMP_FORMAT
34
+ *
35
+ * @memberOf module:db-decorators.Model
36
+ */
37
+ export const DEFAULT_TIMESTAMP_FORMAT = "dd/MM/yyyy HH:mm:ss:S";
38
+
39
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLGNBQWM7SUFDM0MsVUFBVSxFQUFFLFlBQVk7SUFDeEIsS0FBSyxFQUFFLFFBQVE7SUFDZixFQUFFLEVBQUUsSUFBSTtJQUNSLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLFFBQVE7SUFDaEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsVUFBVTtJQUNwQixRQUFRLEVBQUUsZUFBZTtDQUMxQixDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUVwQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHVCQUF1QixDQUFDIiwiZmlsZSI6Im1vZGVsL2NvbnN0YW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBIb2xkcyB0aGUgTW9kZWwgcmVmbGVjdGlvbiBrZXlzXG4gKiBAY29uc3QgREJLZXlzXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLk1vZGVsXG4gKi9cbmV4cG9ydCBjb25zdCBEQktleXMgPSB7XG4gIFJFRkxFQ1Q6IGAke01vZGVsS2V5cy5SRUZMRUNUfXBlcnNpc3RlbmNlLmAsXG4gIFJFUE9TSVRPUlk6IFwicmVwb3NpdG9yeVwiLFxuICBDTEFTUzogXCJfY2xhc3NcIixcbiAgSUQ6IFwiaWRcIixcbiAgSU5ERVg6IFwiaW5kZXhcIixcbiAgVU5JUVVFOiBcInVuaXF1ZVwiLFxuICBTRVJJQUxJWkU6IFwic2VyaWFsaXplXCIsXG4gIFJFQURPTkxZOiBcInJlYWRvbmx5XCIsXG4gIFRJTUVTVEFNUDogXCJ0aW1lc3RhbXBcIixcbiAgSEFTSDogXCJoYXNoXCIsXG4gIENPTVBPU0VEOiBcImNvbXBvc2VkXCIsXG4gIE9SSUdJTkFMOiBcIl9fb3JpZ2luYWxPYmpcIixcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIGRlZmF1bHQgc2VwYXJhdG9yIHdoZW4gY29uY2F0ZW5hdGluZyBpbmRleGVzXG4gKlxuICogQGNvbnN0IERlZmF1bHRJbmRleFNlcGFyYXRvclxuICpcbiAqIEBjYXRlZ29yeSBNYW5hZ2Vyc1xuICogQHN1YmNhdGVnb3J5IENvbnN0YW50c1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFNlcGFyYXRvciA9IFwiX1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEhvbGRzIHRoZSBkZWZhdWx0IHRpbWVzdGFtcCBkYXRlIGZvcm1hdFxuICogQGNvbnN0YW50IERFRkFVTFRfVElNRVNUQU1QX0ZPUk1BVFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5Nb2RlbFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FU1RBTVBfRk9STUFUID0gXCJkZC9NTS95eXl5IEhIOm1tOnNzOlNcIjtcbiJdfQ==
@@ -1,13 +1,11 @@
1
- import { DBModel } from "./DBModel";
2
1
  import { IRepository } from "../interfaces/IRepository";
3
2
  /**
4
3
  *
5
4
  * @param {str} str
6
5
  * @memberOf db-decorators.model
7
6
  */
8
- export declare function getDBKey(str: string): string;
9
- export declare function hashOnCreateUpdate<T extends DBModel, V extends IRepository<T>, Y = any>(this: V, data: Y, key: string, model: T, oldModel?: T): void;
10
- export declare function hash(): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
7
+ export declare function hashOnCreateUpdate<M extends Model, R extends IRepository<M>, Y = any>(this: R, data: Y, key: string, model: M, oldModel?: M): void;
8
+ export declare function hash(): (target: object, propertyKey?: any, descriptor?: any) => void;
11
9
  export type ComposedFromMetadata = {
12
10
  args: string[];
13
11
  separator: string;
@@ -16,6 +14,6 @@ export type ComposedFromMetadata = {
16
14
  prefix?: string;
17
15
  suffix?: string;
18
16
  };
19
- export declare function composedFromCreateUpdate<T extends DBModel, V extends IRepository<T>>(this: V, data: ComposedFromMetadata, key: string, model: T): void;
20
- export declare function composedFromKeys(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
21
- export declare function composed(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
17
+ export declare function composedFromCreateUpdate<T extends Model, V extends IRepository<T>>(this: V, data: ComposedFromMetadata, key: string, model: T): void;
18
+ export declare function composedFromKeys(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string): (target: object, propertyKey?: any, descriptor?: any) => void;
19
+ export declare function composed(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string): (target: object, propertyKey?: any, descriptor?: any) => void;
@@ -1 +1,69 @@
1
- import{DBKeys,DefaultSeparator}from"./constants";import{apply,metadata}from"@decaf-ts/reflection";import{Hashing,sf}from"@decaf-ts/decorator-validation";import{onCreateUpdate}from"../operations/decorators";import{InternalError}from"../repository/errors";function getDBKey(e){return DBKeys.REFLECT+e}function hashOnCreateUpdate(e,r,o,t){var a;o[r]&&(a=Hashing.hash(o[r]),t&&o[r]===a||(o[r]=a))}function hash(){return apply(onCreateUpdate(hashOnCreateUpdate),metadata(getDBKey(DBKeys.HASH),{}))}function composedFromCreateUpdate(e,r,o){try{const{args:a,type:s,prefix:n,suffix:p,separator:m}=e;var t=a.map(e=>{if(!(e in o))throw new InternalError(sf("Property {0} not found to compose from",e));if("keys"===s)return e;if(void 0===o[e])throw new InternalError(sf("Property {0} does not contain a value to compose from",e));return o[e].toString()});n&&t.unshift(n),p&&t.push(p),o[r]=t.join(m)}catch(e){throw new InternalError("Failed to compose value: "+e)}}function composedFrom(e,r=!1,o=DefaultSeparator,t="values",a="",s=""){e={args:e,hashResult:r,separator:o,type:t,prefix:a,suffix:s},o=[onCreateUpdate(composedFromCreateUpdate,e),metadata(getDBKey(DBKeys.COMPOSED),e)];return r&&o.push(hash()),apply(...o)}function composedFromKeys(e,r=DefaultSeparator,o=!1,t="",a=""){return composedFrom(e,o,r,"keys",t,a)}function composed(e,r=DefaultSeparator,o=!1,t="",a=""){return composedFrom(e,o,r,"values",t,a)}export{getDBKey,hashOnCreateUpdate,hash,composedFromCreateUpdate,composedFromKeys,composed};
1
+ import { DBKeys, DefaultSeparator } from "./constants";
2
+ import { apply } from "@decaf-ts/reflection";
3
+ import { Hashing, propMetadata, sf } from "@decaf-ts/decorator-validation";
4
+ import { onCreateUpdate } from "../operations/decorators";
5
+ import { InternalError } from "../repository/errors";
6
+ import { Repository } from "../repository/Repository";
7
+ /**
8
+ *
9
+ * @param {str} str
10
+ * @memberOf db-decorators.model
11
+ */
12
+ export function hashOnCreateUpdate(data, key, model, oldModel) {
13
+ if (!model[key])
14
+ return;
15
+ const hash = Hashing.hash(model[key]);
16
+ if (oldModel && model[key] === hash)
17
+ return;
18
+ model[key] = hash;
19
+ }
20
+ export function hash() {
21
+ return apply(onCreateUpdate(hashOnCreateUpdate), propMetadata(Repository.key(DBKeys.HASH), {}));
22
+ }
23
+ export function composedFromCreateUpdate(data, key, model) {
24
+ try {
25
+ const { args, type, prefix, suffix, separator } = data;
26
+ const composed = args.map((arg) => {
27
+ if (!(arg in model))
28
+ throw new InternalError(sf("Property {0} not found to compose from", arg));
29
+ if (type === "keys")
30
+ return arg;
31
+ if (typeof model[arg] === "undefined")
32
+ throw new InternalError(sf("Property {0} does not contain a value to compose from", arg));
33
+ return model[arg].toString();
34
+ });
35
+ if (prefix)
36
+ composed.unshift(prefix);
37
+ if (suffix)
38
+ composed.push(suffix);
39
+ model[key] = composed.join(separator);
40
+ }
41
+ catch (e) {
42
+ throw new InternalError(`Failed to compose value: ${e}`);
43
+ }
44
+ }
45
+ function composedFrom(args, hashResult = false, separator = DefaultSeparator, type = "values", prefix = "", suffix = "") {
46
+ const data = {
47
+ args: args,
48
+ hashResult: hashResult,
49
+ separator: separator,
50
+ type: type,
51
+ prefix: prefix,
52
+ suffix: suffix,
53
+ };
54
+ const decorators = [
55
+ onCreateUpdate(composedFromCreateUpdate, data),
56
+ propMetadata(Repository.key(DBKeys.COMPOSED), data),
57
+ ];
58
+ if (hashResult)
59
+ decorators.push(hash());
60
+ return apply(...decorators);
61
+ }
62
+ export function composedFromKeys(args, separator = DefaultSeparator, hash = false, prefix = "", suffix = "") {
63
+ return composedFrom(args, hash, separator, "keys", prefix, suffix);
64
+ }
65
+ export function composed(args, separator = DefaultSeparator, hash = false, prefix = "", suffix = "") {
66
+ return composedFrom(args, hash, separator, "values", prefix, suffix);
67
+ }
68
+
69
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXREOzs7O0dBSUc7QUFFSCxNQUFNLFVBQVUsa0JBQWtCLENBSXZCLElBQU8sRUFBRSxHQUFXLEVBQUUsS0FBUSxFQUFFLFFBQVk7SUFDckQsSUFBSSxDQUFFLEtBQWEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUUsS0FBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxRQUFRLElBQUssS0FBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUk7UUFBRSxPQUFPO0lBQ3BELEtBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxJQUFJO0lBQ2xCLE9BQU8sS0FBSyxDQUNWLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNsQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQzlDLENBQUM7QUFDSixDQUFDO0FBV0QsTUFBTSxVQUFVLHdCQUF3QixDQUc3QixJQUEwQixFQUFFLEdBQVcsRUFBRSxLQUFRO0lBQzFELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO2dCQUNqQixNQUFNLElBQUksYUFBYSxDQUNyQixFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQ2xELENBQUM7WUFDSixJQUFJLElBQUksS0FBSyxNQUFNO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBQ2hDLElBQUksT0FBUSxLQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssV0FBVztnQkFDNUMsTUFBTSxJQUFJLGFBQWEsQ0FDckIsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsQ0FBQyxDQUNqRSxDQUFDO1lBQ0osT0FBUyxLQUFhLENBQUMsR0FBRyxDQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU07WUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksTUFBTTtZQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakMsS0FBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixJQUFjLEVBQ2QsYUFBc0IsS0FBSyxFQUMzQixZQUFvQixnQkFBZ0IsRUFDcEMsT0FBMEIsUUFBUSxFQUNsQyxNQUFNLEdBQUcsRUFBRSxFQUNYLE1BQU0sR0FBRyxFQUFFO0lBRVgsTUFBTSxJQUFJLEdBQXlCO1FBQ2pDLElBQUksRUFBRSxJQUFJO1FBQ1YsVUFBVSxFQUFFLFVBQVU7UUFDdEIsU0FBUyxFQUFFLFNBQVM7UUFDcEIsSUFBSSxFQUFFLElBQUk7UUFDVixNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxNQUFNO0tBQ2YsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUM7UUFDOUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQztLQUNwRCxDQUFDO0lBQ0YsSUFBSSxVQUFVO1FBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsSUFBYyxFQUNkLFlBQW9CLGdCQUFnQixFQUNwQyxPQUFnQixLQUFLLEVBQ3JCLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLEVBQUU7SUFFWCxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUN0QixJQUFjLEVBQ2QsWUFBb0IsZ0JBQWdCLEVBQ3BDLE9BQWdCLEtBQUssRUFDckIsTUFBTSxHQUFHLEVBQUUsRUFDWCxNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkUsQ0FBQyIsImZpbGUiOiJtb2RlbC9kZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREJLZXlzLCBEZWZhdWx0U2VwYXJhdG9yIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBhcHBseSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgSGFzaGluZywgcHJvcE1ldGFkYXRhLCBzZiB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IG9uQ3JlYXRlVXBkYXRlIH0gZnJvbSBcIi4uL29wZXJhdGlvbnMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgSVJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9JUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2Vycm9yc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJ9IHN0clxuICogQG1lbWJlck9mIGRiLWRlY29yYXRvcnMubW9kZWxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzaE9uQ3JlYXRlVXBkYXRlPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBJUmVwb3NpdG9yeTxNPixcbiAgWSA9IGFueSxcbj4odGhpczogUiwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBNLCBvbGRNb2RlbD86IE0pOiB2b2lkIHtcbiAgaWYgKCEobW9kZWwgYXMgYW55KVtrZXldKSByZXR1cm47XG4gIGNvbnN0IGhhc2ggPSBIYXNoaW5nLmhhc2goKG1vZGVsIGFzIGFueSlba2V5XSk7XG4gIGlmIChvbGRNb2RlbCAmJiAobW9kZWwgYXMgYW55KVtrZXldID09PSBoYXNoKSByZXR1cm47XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBoYXNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaCgpIHtcbiAgcmV0dXJuIGFwcGx5KFxuICAgIG9uQ3JlYXRlVXBkYXRlKGhhc2hPbkNyZWF0ZVVwZGF0ZSksXG4gICAgcHJvcE1ldGFkYXRhKFJlcG9zaXRvcnkua2V5KERCS2V5cy5IQVNIKSwge30pXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIENvbXBvc2VkRnJvbU1ldGFkYXRhID0ge1xuICBhcmdzOiBzdHJpbmdbXTtcbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIGhhc2hSZXN1bHQ6IGJvb2xlYW47XG4gIHR5cGU6IFwia2V5c1wiIHwgXCJ2YWx1ZXNcIjtcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBzdWZmaXg/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZWRGcm9tQ3JlYXRlVXBkYXRlPFxuICBUIGV4dGVuZHMgTW9kZWwsXG4gIFYgZXh0ZW5kcyBJUmVwb3NpdG9yeTxUPixcbj4odGhpczogViwgZGF0YTogQ29tcG9zZWRGcm9tTWV0YWRhdGEsIGtleTogc3RyaW5nLCBtb2RlbDogVCkge1xuICB0cnkge1xuICAgIGNvbnN0IHsgYXJncywgdHlwZSwgcHJlZml4LCBzdWZmaXgsIHNlcGFyYXRvciB9ID0gZGF0YTtcbiAgICBjb25zdCBjb21wb3NlZCA9IGFyZ3MubWFwKChhcmc6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCEoYXJnIGluIG1vZGVsKSlcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgc2YoXCJQcm9wZXJ0eSB7MH0gbm90IGZvdW5kIHRvIGNvbXBvc2UgZnJvbVwiLCBhcmcpXG4gICAgICAgICk7XG4gICAgICBpZiAodHlwZSA9PT0gXCJrZXlzXCIpIHJldHVybiBhcmc7XG4gICAgICBpZiAodHlwZW9mIChtb2RlbCBhcyBhbnkpW2FyZ10gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIHNmKFwiUHJvcGVydHkgezB9IGRvZXMgbm90IGNvbnRhaW4gYSB2YWx1ZSB0byBjb21wb3NlIGZyb21cIiwgYXJnKVxuICAgICAgICApO1xuICAgICAgcmV0dXJuICgobW9kZWwgYXMgYW55KVthcmddIGFzIGFueSkudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGlmIChwcmVmaXgpIGNvbXBvc2VkLnVuc2hpZnQocHJlZml4KTtcbiAgICBpZiAoc3VmZml4KSBjb21wb3NlZC5wdXNoKHN1ZmZpeCk7XG5cbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gY29tcG9zZWQuam9pbihzZXBhcmF0b3IpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgRmFpbGVkIHRvIGNvbXBvc2UgdmFsdWU6ICR7ZX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wb3NlZEZyb20oXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBoYXNoUmVzdWx0OiBib29sZWFuID0gZmFsc2UsXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gRGVmYXVsdFNlcGFyYXRvcixcbiAgdHlwZTogXCJrZXlzXCIgfCBcInZhbHVlc1wiID0gXCJ2YWx1ZXNcIixcbiAgcHJlZml4ID0gXCJcIixcbiAgc3VmZml4ID0gXCJcIlxuKSB7XG4gIGNvbnN0IGRhdGE6IENvbXBvc2VkRnJvbU1ldGFkYXRhID0ge1xuICAgIGFyZ3M6IGFyZ3MsXG4gICAgaGFzaFJlc3VsdDogaGFzaFJlc3VsdCxcbiAgICBzZXBhcmF0b3I6IHNlcGFyYXRvcixcbiAgICB0eXBlOiB0eXBlLFxuICAgIHByZWZpeDogcHJlZml4LFxuICAgIHN1ZmZpeDogc3VmZml4LFxuICB9O1xuXG4gIGNvbnN0IGRlY29yYXRvcnMgPSBbXG4gICAgb25DcmVhdGVVcGRhdGUoY29tcG9zZWRGcm9tQ3JlYXRlVXBkYXRlLCBkYXRhKSxcbiAgICBwcm9wTWV0YWRhdGEoUmVwb3NpdG9yeS5rZXkoREJLZXlzLkNPTVBPU0VEKSwgZGF0YSksXG4gIF07XG4gIGlmIChoYXNoUmVzdWx0KSBkZWNvcmF0b3JzLnB1c2goaGFzaCgpKTtcbiAgcmV0dXJuIGFwcGx5KC4uLmRlY29yYXRvcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZWRGcm9tS2V5cyhcbiAgYXJnczogc3RyaW5nW10sXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gRGVmYXVsdFNlcGFyYXRvcixcbiAgaGFzaDogYm9vbGVhbiA9IGZhbHNlLFxuICBwcmVmaXggPSBcIlwiLFxuICBzdWZmaXggPSBcIlwiXG4pIHtcbiAgcmV0dXJuIGNvbXBvc2VkRnJvbShhcmdzLCBoYXNoLCBzZXBhcmF0b3IsIFwia2V5c1wiLCBwcmVmaXgsIHN1ZmZpeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlZChcbiAgYXJnczogc3RyaW5nW10sXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gRGVmYXVsdFNlcGFyYXRvcixcbiAgaGFzaDogYm9vbGVhbiA9IGZhbHNlLFxuICBwcmVmaXggPSBcIlwiLFxuICBzdWZmaXggPSBcIlwiXG4pIHtcbiAgcmV0dXJuIGNvbXBvc2VkRnJvbShhcmdzLCBoYXNoLCBzZXBhcmF0b3IsIFwidmFsdWVzXCIsIHByZWZpeCwgc3VmZml4KTtcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ export * from "./validation";
1
2
  export * from "./constants";
2
- export * from "./DBModel";
3
3
  export * from "./decorators";
4
+ export * from "./model";
@@ -1 +1,6 @@
1
- export*from"./constants";export*from"./DBModel";export*from"./decorators";
1
+ export * from "./validation";
2
+ export * from "./constants";
3
+ export * from "./decorators";
4
+ export * from "./model";
5
+
6
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFNBQVMsQ0FBQyIsImZpbGUiOiJtb2RlbC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ import { Comparable, Hashable, ModelArg, ModelErrorDefinition, Serializable, Validatable } from "@decaf-ts/decorator-validation";
2
+ declare global {
3
+ export abstract class Model implements Validatable, Serializable, Hashable, Comparable<Model> {
4
+ protected constructor(arg?: ModelArg<Model>);
5
+ hasErrors(...exclusions: any[]): ModelErrorDefinition | undefined;
6
+ hasErrors(previousVersion?: Model | any, ...exclusions: any[]): ModelErrorDefinition | undefined;
7
+ }
8
+ }
@@ -0,0 +1,14 @@
1
+ import { Model, validate, } from "@decaf-ts/decorator-validation";
2
+ import { validateCompare } from "./validation";
3
+ Model.prototype.hasErrors = function (previousVersion, ...exclusions) {
4
+ if (previousVersion && !(previousVersion instanceof Model)) {
5
+ exclusions.unshift(previousVersion);
6
+ previousVersion = undefined;
7
+ }
8
+ const errs = validate(this, ...exclusions);
9
+ if (errs || !previousVersion)
10
+ return errs;
11
+ return validateCompare(previousVersion, this, ...exclusions);
12
+ };
13
+
14
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBT0wsS0FBSyxFQUNMLFFBQVEsR0FDVCxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFFMUIsZUFBeUIsRUFDekIsR0FBRyxVQUFpQjtJQUVwQixJQUFJLGVBQWUsSUFBSSxDQUFDLENBQUMsZUFBZSxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFMUMsT0FBTyxlQUFlLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQyIsImZpbGUiOiJtb2RlbC9tb2RlbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBhcmFibGUsXG4gIEhhc2hhYmxlLFxuICBNb2RlbEFyZyxcbiAgTW9kZWxFcnJvckRlZmluaXRpb24sXG4gIFNlcmlhbGl6YWJsZSxcbiAgVmFsaWRhdGFibGUsXG4gIE1vZGVsLFxuICB2YWxpZGF0ZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdmFsaWRhdGVDb21wYXJlIH0gZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuXG5Nb2RlbC5wcm90b3R5cGUuaGFzRXJyb3JzID0gZnVuY3Rpb24gPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIHRoaXM6IE0sXG4gIHByZXZpb3VzVmVyc2lvbj86IE0gfCBhbnksXG4gIC4uLmV4Y2x1c2lvbnM6IGFueVtdXG4pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChwcmV2aW91c1ZlcnNpb24gJiYgIShwcmV2aW91c1ZlcnNpb24gaW5zdGFuY2VvZiBNb2RlbCkpIHtcbiAgICBleGNsdXNpb25zLnVuc2hpZnQocHJldmlvdXNWZXJzaW9uKTtcbiAgICBwcmV2aW91c1ZlcnNpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBlcnJzID0gdmFsaWRhdGUodGhpcywgLi4uZXhjbHVzaW9ucyk7XG4gIGlmIChlcnJzIHx8ICFwcmV2aW91c1ZlcnNpb24pIHJldHVybiBlcnJzO1xuXG4gIHJldHVybiB2YWxpZGF0ZUNvbXBhcmUocHJldmlvdXNWZXJzaW9uLCB0aGlzLCAuLi5leGNsdXNpb25zKTtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIE1vZGVsXG4gICAgaW1wbGVtZW50cyBWYWxpZGF0YWJsZSwgU2VyaWFsaXphYmxlLCBIYXNoYWJsZSwgQ29tcGFyYWJsZTxNb2RlbD5cbiAge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihhcmc/OiBNb2RlbEFyZzxNb2RlbD4pO1xuXG4gICAgaGFzRXJyb3JzKC4uLmV4Y2x1c2lvbnM6IGFueVtdKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG4gICAgaGFzRXJyb3JzKFxuICAgICAgcHJldmlvdXNWZXJzaW9uPzogTW9kZWwgfCBhbnksXG4gICAgICAuLi5leGNsdXNpb25zOiBhbnlbXVxuICAgICk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,4 @@
1
1
  import { ModelErrorDefinition } from "@decaf-ts/decorator-validation";
2
- import { DBModel } from "./DBModel";
3
2
  /**
4
3
  * @summary Validates the update of a model
5
4
  *
@@ -12,4 +11,4 @@ import { DBModel } from "./DBModel";
12
11
  *
13
12
  * @memberOf module:db-decorators.Model
14
13
  */
15
- export declare function validateCompare<T extends DBModel>(oldModel: T, newModel: T, ...exceptions: string[]): ModelErrorDefinition | undefined;
14
+ export declare function validateCompare<T extends Model>(oldModel: T, newModel: T, ...exceptions: string[]): ModelErrorDefinition | undefined;
@@ -1 +1,122 @@
1
- import{ModelErrorDefinition,ModelKeys,ReservedModels,sf,Validation,ValidationKeys}from"@decaf-ts/decorator-validation";import{getPropertyDecorators}from"@decaf-ts/reflection";import{UpdateValidationKeys}from"../validation";import{findModelId}from"../identity";function validateCompare(r,a,...e){var o=[];for(const p in a)a.hasOwnProperty(p)&&-1===e.indexOf(p)&&o.push(getPropertyDecorators(UpdateValidationKeys.REFLECT,a,p));let t=void 0;for(const c of o){var{prop:i,decorators:s}=c;if(s.shift(),s&&s.length){let e=void 0;for(const y of s){var d=Validation.get(y.key);d?(d=d.updateHasErrors(a[i.toString()],r[i.toString()],...Object.values(y.props)))&&((e=e||{})[y.key]=d):console.error(`Could not find Matching validator for ${y.key} for property `+String(c.prop))}e&&((t=t||{})[c.prop.toString()]=e)}}for(const v of Object.keys(a).filter(e=>!t||!t[e])){let o;var n=getPropertyDecorators(ValidationKeys.REFLECT,a,v).decorators,l=getPropertyDecorators(ValidationKeys.REFLECT,a,v).decorators.filter(e=>-1!==[ModelKeys.TYPE,ValidationKeys.TYPE].indexOf(e.key));if(l&&l.length){var l=l.pop(),l=l.props.name?[l.props.name]:Array.isArray(l.props.customTypes)?l.props.customTypes:[l.props.customTypes],f=Object.values(ReservedModels).map(e=>e.toLowerCase());for(const m of l){if(-1===f.indexOf(m.toLowerCase()))switch(m){case Array.name:case Set.name:if(n.length)if(n.find(e=>e.key===ValidationKeys.LIST)){let e,t;switch(m){case Array.name:e=a[v],t=r[v];break;case Set.name:e=a[v].values(),t=r[v].values();break;default:throw new Error("Invalid attribute type "+m)}(o=e.map(e=>{const o=findModelId(e,!0);var r;return o?(r=t.find(e=>o===findModelId(e,!0)))?e.hasErrors(r):void 0:"Failed to find model id"}).filter(e=>!!e))?.length||(o=void 0)}break;default:try{a[v]&&r[v]&&(o=a[v].hasErrors(r[v]))}catch(e){console.warn(sf("Model should be validatable but its not"))}}o&&((t=t||{})[v]=o)}}}return t?new ModelErrorDefinition(t):void 0}export{validateCompare};
1
+ import { ModelErrorDefinition, ModelKeys, ReservedModels, sf, Validation, ValidationKeys, } from "@decaf-ts/decorator-validation";
2
+ import { getPropertyDecorators } from "@decaf-ts/reflection";
3
+ import { UpdateValidationKeys } from "../validation";
4
+ import { findModelId } from "../identity";
5
+ /**
6
+ * @summary Validates the update of a model
7
+ *
8
+ * @param {T} oldModel
9
+ * @param {T} newModel
10
+ * @param {string[]} [exceptions]
11
+ *
12
+ * @function validateCompare
13
+ * @return {ModelErrorDefinition | undefined}
14
+ *
15
+ * @memberOf module:db-decorators.Model
16
+ */
17
+ export function validateCompare(oldModel, newModel, ...exceptions) {
18
+ const decoratedProperties = [];
19
+ for (const prop in newModel)
20
+ if (Object.prototype.hasOwnProperty.call(newModel, prop) &&
21
+ exceptions.indexOf(prop) === -1)
22
+ decoratedProperties.push(getPropertyDecorators(UpdateValidationKeys.REFLECT, newModel, prop));
23
+ let result = undefined;
24
+ for (const decoratedProperty of decoratedProperties) {
25
+ const { prop, decorators } = decoratedProperty;
26
+ decorators.shift(); // remove the design:type decorator, since the type will already be checked
27
+ if (!decorators || !decorators.length)
28
+ continue;
29
+ let errs = undefined;
30
+ for (const decorator of decorators) {
31
+ const validator = Validation.get(decorator.key);
32
+ if (!validator) {
33
+ console.error(`Could not find Matching validator for ${decorator.key} for property ${String(decoratedProperty.prop)}`);
34
+ continue;
35
+ }
36
+ const err = validator.updateHasErrors(newModel[prop.toString()], oldModel[prop.toString()], ...Object.values(decorator.props));
37
+ if (err) {
38
+ errs = errs || {};
39
+ errs[decorator.key] = err;
40
+ }
41
+ }
42
+ if (errs) {
43
+ result = result || {};
44
+ result[decoratedProperty.prop.toString()] = errs;
45
+ }
46
+ }
47
+ // tests nested classes
48
+ for (const prop of Object.keys(newModel).filter((k) => !result || !result[k])) {
49
+ let err;
50
+ // if a nested Model
51
+ const allDecorators = getPropertyDecorators(ValidationKeys.REFLECT, newModel, prop).decorators;
52
+ const decorators = getPropertyDecorators(ValidationKeys.REFLECT, newModel, prop).decorators.filter((d) => [ModelKeys.TYPE, ValidationKeys.TYPE].indexOf(d.key) !== -1);
53
+ if (!decorators || !decorators.length)
54
+ continue;
55
+ const dec = decorators.pop();
56
+ const clazz = dec.props.name
57
+ ? [dec.props.name]
58
+ : Array.isArray(dec.props.customTypes)
59
+ ? dec.props.customTypes
60
+ : [dec.props.customTypes];
61
+ const reserved = Object.values(ReservedModels).map((v) => v.toLowerCase());
62
+ for (const c of clazz) {
63
+ if (reserved.indexOf(c.toLowerCase()) === -1) {
64
+ switch (c) {
65
+ case Array.name:
66
+ case Set.name:
67
+ if (allDecorators.length) {
68
+ const listDec = allDecorators.find((d) => d.key === ValidationKeys.LIST);
69
+ if (listDec) {
70
+ let currentList, oldList;
71
+ switch (c) {
72
+ case Array.name:
73
+ currentList = newModel[prop];
74
+ oldList = oldModel[prop];
75
+ break;
76
+ case Set.name:
77
+ currentList = newModel[prop].values();
78
+ oldList = oldModel[prop].values();
79
+ break;
80
+ default:
81
+ throw new Error(`Invalid attribute type ${c}`);
82
+ }
83
+ err = currentList
84
+ .map((v) => {
85
+ const id = findModelId(v, true);
86
+ if (!id)
87
+ return "Failed to find model id";
88
+ const oldModel = oldList.find((el) => id === findModelId(el, true));
89
+ if (!oldModel)
90
+ return; // nothing to compare with
91
+ return v.hasErrors(oldModel);
92
+ })
93
+ .filter((e) => !!e);
94
+ if (!err?.length) {
95
+ // if the result is an empty list...
96
+ err = undefined;
97
+ }
98
+ }
99
+ }
100
+ break;
101
+ default:
102
+ try {
103
+ if (newModel[prop] &&
104
+ oldModel[prop])
105
+ err = newModel[prop].hasErrors(oldModel[prop]);
106
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
107
+ }
108
+ catch (e) {
109
+ console.warn(sf("Model should be validatable but its not"));
110
+ }
111
+ }
112
+ }
113
+ if (err) {
114
+ result = result || {};
115
+ result[prop] = err;
116
+ }
117
+ }
118
+ }
119
+ return result ? new ModelErrorDefinition(result) : undefined;
120
+ }
121
+
122
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxvQkFBb0IsRUFFcEIsU0FBUyxFQUNULGNBQWMsRUFDZCxFQUFFLEVBRUYsVUFBVSxFQUNWLGNBQWMsR0FFZixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBcUIscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsb0JBQW9CLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixRQUFXLEVBQ1gsUUFBVyxFQUNYLEdBQUcsVUFBb0I7SUFFdkIsTUFBTSxtQkFBbUIsR0FBNEMsRUFBRSxDQUFDO0lBQ3hFLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUTtRQUN6QixJQUNFLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1lBQ3BELFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRS9CLG1CQUFtQixDQUFDLElBQUksQ0FDdEIscUJBQXFCLENBQ25CLG9CQUFvQixDQUFDLE9BQU8sRUFDNUIsUUFBUSxFQUNSLElBQUksQ0FDb0MsQ0FDM0MsQ0FBQztJQUVOLElBQUksTUFBTSxHQUE0QixTQUFTLENBQUM7SUFFaEQsS0FBSyxNQUFNLGlCQUFpQixJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDcEQsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztRQUUvQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQywyRUFBMkU7UUFFL0YsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQUUsU0FBUztRQUNoRCxJQUFJ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QUFJLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0QsQ0FBQyIsImZpbGUiOiJtb2RlbC92YWxpZGF0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTW9kZWxFcnJvckRlZmluaXRpb24sXG4gIE1vZGVsRXJyb3JzLFxuICBNb2RlbEtleXMsXG4gIFJlc2VydmVkTW9kZWxzLFxuICBzZixcbiAgVmFsaWRhdGFibGUsXG4gIFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb25LZXlzLFxuICBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEZWNvcmF0b3JNZXRhZGF0YSwgZ2V0UHJvcGVydHlEZWNvcmF0b3JzIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBVcGRhdGVWYWxpZGF0aW9uS2V5cywgVXBkYXRlVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGZpbmRNb2RlbElkIH0gZnJvbSBcIi4uL2lkZW50aXR5XCI7XG5cbi8qKlxuICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSB1cGRhdGUgb2YgYSBtb2RlbFxuICpcbiAqIEBwYXJhbSB7VH0gb2xkTW9kZWxcbiAqIEBwYXJhbSB7VH0gbmV3TW9kZWxcbiAqIEBwYXJhbSB7c3RyaW5nW119IFtleGNlcHRpb25zXVxuICpcbiAqIEBmdW5jdGlvbiB2YWxpZGF0ZUNvbXBhcmVcbiAqIEByZXR1cm4ge01vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkfVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5Nb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb21wYXJlPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIG9sZE1vZGVsOiBULFxuICBuZXdNb2RlbDogVCxcbiAgLi4uZXhjZXB0aW9uczogc3RyaW5nW11cbik6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVjb3JhdGVkUHJvcGVydGllczogVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbltdID0gW107XG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdNb2RlbClcbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3TW9kZWwsIHByb3ApICYmXG4gICAgICBleGNlcHRpb25zLmluZGV4T2YocHJvcCkgPT09IC0xXG4gICAgKVxuICAgICAgZGVjb3JhdGVkUHJvcGVydGllcy5wdXNoKFxuICAgICAgICBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICAgICAgVXBkYXRlVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgICAgICBuZXdNb2RlbCxcbiAgICAgICAgICBwcm9wXG4gICAgICAgICkgYXMgVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvblxuICAgICAgKTtcblxuICBsZXQgcmVzdWx0OiBNb2RlbEVycm9ycyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGRlY29yYXRlZFByb3BlcnR5IG9mIGRlY29yYXRlZFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCB7IHByb3AsIGRlY29yYXRvcnMgfSA9IGRlY29yYXRlZFByb3BlcnR5O1xuXG4gICAgZGVjb3JhdG9ycy5zaGlmdCgpOyAvLyByZW1vdmUgdGhlIGRlc2lnbjp0eXBlIGRlY29yYXRvciwgc2luY2UgdGhlIHR5cGUgd2lsbCBhbHJlYWR5IGJlIGNoZWNrZWRcblxuICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgIGxldCBlcnJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgZm9yIChjb25zdCBkZWNvcmF0b3Igb2YgZGVjb3JhdG9ycykge1xuICAgICAgY29uc3QgdmFsaWRhdG9yOiBVcGRhdGVWYWxpZGF0b3IgPSBWYWxpZGF0aW9uLmdldChcbiAgICAgICAgZGVjb3JhdG9yLmtleVxuICAgICAgKSBhcyBVcGRhdGVWYWxpZGF0b3I7XG4gICAgICBpZiAoIXZhbGlkYXRvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBNYXRjaGluZyB2YWxpZGF0b3IgZm9yICR7ZGVjb3JhdG9yLmtleX0gZm9yIHByb3BlcnR5ICR7U3RyaW5nKGRlY29yYXRlZFByb3BlcnR5LnByb3ApfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdmFsaWRhdG9yLnVwZGF0ZUhhc0Vycm9ycyhcbiAgICAgICAgKG5ld01vZGVsIGFzIGFueSlbcHJvcC50b1N0cmluZygpXSxcbiAgICAgICAgKG9sZE1vZGVsIGFzIGFueSlbcHJvcC50b1N0cmluZygpXSxcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhkZWNvcmF0b3IucHJvcHMpXG4gICAgICApO1xuXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVycnMgPSBlcnJzIHx8IHt9O1xuICAgICAgICBlcnJzW2RlY29yYXRvci5rZXldID0gZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHRbZGVjb3JhdGVkUHJvcGVydHkucHJvcC50b1N0cmluZygpXSA9IGVycnM7XG4gICAgfVxuICB9XG4gIC8vIHRlc3RzIG5lc3RlZCBjbGFzc2VzXG4gIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhuZXdNb2RlbCkuZmlsdGVyKFxuICAgIChrKSA9PiAhcmVzdWx0IHx8ICFyZXN1bHRba11cbiAgKSkge1xuICAgIGxldCBlcnI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBpZiBhIG5lc3RlZCBNb2RlbFxuICAgIGNvbnN0IGFsbERlY29yYXRvcnMgPSBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgbmV3TW9kZWwsXG4gICAgICBwcm9wXG4gICAgKS5kZWNvcmF0b3JzO1xuICAgIGNvbnN0IGRlY29yYXRvcnMgPSBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgbmV3TW9kZWwsXG4gICAgICBwcm9wXG4gICAgKS5kZWNvcmF0b3JzLmZpbHRlcihcbiAgICAgIChkKSA9PiBbTW9kZWxLZXlzLlRZUEUsIFZhbGlkYXRpb25LZXlzLlRZUEVdLmluZGV4T2YoZC5rZXkpICE9PSAtMVxuICAgICk7XG4gICAgaWYgKCFkZWNvcmF0b3JzIHx8ICFkZWNvcmF0b3JzLmxlbmd0aCkgY29udGludWU7XG4gICAgY29uc3QgZGVjID0gZGVjb3JhdG9ycy5wb3AoKSBhcyBEZWNvcmF0b3JNZXRhZGF0YTtcbiAgICBjb25zdCBjbGF6eiA9IGRlYy5wcm9wcy5uYW1lXG4gICAgICA/IFtkZWMucHJvcHMubmFtZV1cbiAgICAgIDogQXJyYXkuaXNBcnJheShkZWMucHJvcHMuY3VzdG9tVHlwZXMpXG4gICAgICAgID8gZGVjLnByb3BzLmN1c3RvbVR5cGVzXG4gICAgICAgIDogW2RlYy5wcm9wcy5jdXN0b21UeXBlc107XG4gICAgY29uc3QgcmVzZXJ2ZWQgPSBPYmplY3QudmFsdWVzKFJlc2VydmVkTW9kZWxzKS5tYXAoKHYpID0+XG4gICAgICB2LnRvTG93ZXJDYXNlKClcbiAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCBjIG9mIGNsYXp6KSB7XG4gICAgICBpZiAocmVzZXJ2ZWQuaW5kZXhPZihjLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlIEFycmF5Lm5hbWU6XG4gICAgICAgICAgY2FzZSBTZXQubmFtZTpcbiAgICAgICAgICAgIGlmIChhbGxEZWNvcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBsaXN0RGVjID0gYWxsRGVjb3JhdG9ycy5maW5kKFxuICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAobGlzdERlYykge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TGlzdCwgb2xkTGlzdDtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgICAgY2FzZSBBcnJheS5uYW1lOlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGlzdCA9IChuZXdNb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgb2xkTGlzdCA9IChvbGRNb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFNldC5uYW1lOlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGlzdCA9IChuZXdNb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wXG4gICAgICAgICAgICAgICAgICAgIF0udmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIG9sZExpc3QgPSAob2xkTW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0udmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGF0dHJpYnV0ZSB0eXBlICR7Y31gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlcnIgPSBjdXJyZW50TGlzdFxuICAgICAgICAgICAgICAgICAgLm1hcCgodjogVmFsaWRhdGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBmaW5kTW9kZWxJZCh2IGFzIGFueSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWQpIHJldHVybiBcIkZhaWxlZCB0byBmaW5kIG1vZGVsIGlkXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZE1vZGVsID0gb2xkTGlzdC5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgIChlbDogYW55KSA9PiBpZCA9PT0gZmluZE1vZGVsSWQoZWwsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvbGRNb2RlbCkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGNvbXBhcmUgd2l0aFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5oYXNFcnJvcnMob2xkTW9kZWwpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGU6IGFueSkgPT4gISFlKSBhcyBhbnk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWVycj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVzdWx0IGlzIGFuIGVtcHR5IGxpc3QuLi5cbiAgICAgICAgICAgICAgICAgIGVyciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG5ld01vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdICYmXG4gICAgICAgICAgICAgICAgKG9sZE1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBlcnIgPSAobmV3TW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0uaGFzRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgKG9sZE1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihzZihcIk1vZGVsIHNob3VsZCBiZSB2YWxpZGF0YWJsZSBidXQgaXRzIG5vdFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHRbcHJvcF0gPSBlcnIgYXMgYW55O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ID8gbmV3IE1vZGVsRXJyb3JEZWZpbml0aW9uKHJlc3VsdCkgOiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -1,5 +1,4 @@
1
1
  import { OperationHandler } from "./types";
2
- import { DBModel } from "../model/DBModel";
3
2
  import { OperationKeys } from "./constants";
4
3
  /**
5
4
  * @summary Static class holding common Operation Functionality
@@ -12,8 +11,8 @@ export declare class Operations {
12
11
  private static registry;
13
12
  private constructor();
14
13
  static getHandlerName(handler: OperationHandler<any, any, any>): any;
15
- static genKey(str: string): string;
16
- static get(targetName: string | Record<string, any>, propKey: string, operation: string): OperationHandler<DBModel, import("..").IRepository<DBModel>, unknown>[] | undefined;
14
+ static key(str: string): string;
15
+ static get(targetName: string | Record<string, any>, propKey: string, operation: string): OperationHandler<Model, import("..").IRepository<Model>, unknown>[] | undefined;
17
16
  private static getOpRegistry;
18
- static register<V extends DBModel>(handler: OperationHandler<V, any, any>, operation: OperationKeys, target: V, propKey: string | symbol): void;
17
+ static register<V extends Model>(handler: OperationHandler<V, any, any>, operation: OperationKeys, target: V, propKey: string | symbol): void;
19
18
  }