@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.
- package/README.md +4 -4
- package/dist/db-decorators.bundle.min.js +1 -1
- package/dist/esm/db-decorators.bundle.min.esm.js +1 -1
- package/lib/esm/identity/decorators.d.ts +1 -1
- package/lib/esm/identity/decorators.js +10 -1
- package/lib/esm/identity/index.js +4 -1
- package/lib/esm/identity/utils.d.ts +6 -9
- package/lib/esm/identity/utils.js +63 -1
- package/lib/esm/index.js +35 -1
- package/lib/esm/interfaces/BulkCrudOperator.js +3 -0
- package/lib/esm/interfaces/CrudOperator.js +3 -0
- package/lib/esm/interfaces/IRepository.d.ts +2 -3
- package/lib/esm/interfaces/IRepository.js +3 -0
- package/lib/esm/interfaces/index.js +5 -1
- package/lib/esm/model/constants.d.ts +1 -1
- package/lib/esm/model/constants.js +39 -1
- package/lib/esm/model/decorators.d.ts +5 -7
- package/lib/esm/model/decorators.js +69 -1
- package/lib/esm/model/index.d.ts +2 -1
- package/lib/esm/model/index.js +6 -1
- package/lib/esm/model/model.d.ts +8 -0
- package/lib/esm/model/model.js +14 -0
- package/lib/esm/model/validation.d.ts +1 -2
- package/lib/esm/model/validation.js +122 -1
- package/lib/esm/operations/Operations.d.ts +3 -4
- package/lib/esm/operations/Operations.js +35 -1
- package/lib/esm/operations/OperationsRegistry.d.ts +2 -3
- package/lib/esm/operations/OperationsRegistry.js +65 -1
- package/lib/esm/operations/constants.d.ts +1 -1
- package/lib/esm/operations/constants.js +39 -1
- package/lib/esm/operations/decorators.js +226 -1
- package/lib/esm/operations/index.js +7 -1
- package/lib/esm/operations/types.d.ts +4 -5
- package/lib/esm/operations/types.js +3 -0
- package/lib/esm/repository/BaseRepository.d.ts +2 -3
- package/lib/esm/repository/BaseRepository.js +158 -1
- package/lib/esm/repository/DataCache.js +32 -1
- package/lib/esm/repository/Repository.d.ts +3 -2
- package/lib/esm/repository/Repository.js +89 -2
- package/lib/esm/repository/errors.js +88 -1
- package/lib/esm/repository/index.js +8 -1
- package/lib/esm/repository/utils.d.ts +3 -4
- package/lib/esm/repository/utils.js +167 -1
- package/lib/esm/repository/wrappers.js +90 -1
- package/lib/esm/validation/constants.js +33 -1
- package/lib/esm/validation/decorators.d.ts +6 -8
- package/lib/esm/validation/decorators.js +223 -1
- package/lib/esm/validation/index.js +5 -1
- package/lib/esm/validation/validators/ReadOnlyValidator.js +52 -1
- package/lib/esm/validation/validators/TimestampValidator.js +49 -1
- package/lib/esm/validation/validators/UpdateValidator.js +20 -1
- package/lib/esm/validation/validators/index.js +5 -1
- package/lib/identity/decorators.cjs +13 -1
- package/lib/identity/decorators.d.ts +1 -1
- package/lib/identity/index.cjs +20 -1
- package/lib/identity/utils.cjs +67 -1
- package/lib/identity/utils.d.ts +6 -9
- package/lib/index.cjs +51 -1
- package/lib/interfaces/BulkCrudOperator.cjs +4 -1
- package/lib/interfaces/CrudOperator.cjs +4 -1
- package/lib/interfaces/IRepository.cjs +4 -1
- package/lib/interfaces/IRepository.d.ts +2 -3
- package/lib/interfaces/index.cjs +21 -1
- package/lib/model/constants.cjs +42 -1
- package/lib/model/constants.d.ts +1 -1
- package/lib/model/decorators.cjs +76 -1
- package/lib/model/decorators.d.ts +5 -7
- package/lib/model/index.cjs +22 -1
- package/lib/model/index.d.ts +2 -1
- package/lib/model/model.cjs +16 -0
- package/lib/model/model.d.ts +8 -0
- package/lib/model/validation.cjs +125 -1
- package/lib/model/validation.d.ts +1 -2
- package/lib/operations/Operations.cjs +39 -1
- package/lib/operations/Operations.d.ts +3 -4
- package/lib/operations/OperationsRegistry.cjs +69 -1
- package/lib/operations/OperationsRegistry.d.ts +2 -3
- package/lib/operations/constants.cjs +42 -1
- package/lib/operations/constants.d.ts +1 -1
- package/lib/operations/decorators.cjs +241 -1
- package/lib/operations/index.cjs +23 -1
- package/lib/operations/types.cjs +4 -1
- package/lib/operations/types.d.ts +4 -5
- package/lib/repository/BaseRepository.cjs +162 -1
- package/lib/repository/BaseRepository.d.ts +2 -3
- package/lib/repository/DataCache.cjs +36 -1
- package/lib/repository/Repository.cjs +93 -2
- package/lib/repository/Repository.d.ts +3 -2
- package/lib/repository/errors.cjs +97 -1
- package/lib/repository/index.cjs +24 -1
- package/lib/repository/utils.cjs +174 -1
- package/lib/repository/utils.d.ts +3 -4
- package/lib/repository/wrappers.cjs +95 -1
- package/lib/validation/constants.cjs +36 -1
- package/lib/validation/decorators.cjs +232 -1
- package/lib/validation/decorators.d.ts +6 -8
- package/lib/validation/index.cjs +21 -1
- package/lib/validation/validators/ReadOnlyValidator.cjs +55 -1
- package/lib/validation/validators/TimestampValidator.cjs +52 -1
- package/lib/validation/validators/UpdateValidator.cjs +24 -1
- package/lib/validation/validators/index.cjs +21 -1
- package/package.json +22 -18
- package/lib/esm/model/DBModel.d.ts +0 -25
- package/lib/esm/model/DBModel.js +0 -1
- package/lib/esm/validation/comparison.d.ts +0 -1
- package/lib/esm/validation/comparison.js +0 -1
- package/lib/model/DBModel.cjs +0 -1
- package/lib/model/DBModel.d.ts +0 -25
- package/lib/validation/comparison.cjs +0 -1
- package/lib/validation/comparison.d.ts +0 -1
|
@@ -1 +1,63 @@
|
|
|
1
|
-
import{
|
|
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
|
-
|
|
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,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0J1bGtDcnVkT3BlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbnRlcmZhY2VzL0J1bGtDcnVkT3BlcmF0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcnVkT3BlcmF0b3IgfSBmcm9tIFwiLi9DcnVkT3BlcmF0b3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrQ3J1ZE9wZXJhdG9yPE0+IGV4dGVuZHMgQ3J1ZE9wZXJhdG9yPE0+IHtcbiAgY3JlYXRlQWxsKG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPjtcbiAgcmVhZEFsbChrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPjtcbiAgdXBkYXRlQWxsKG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPjtcbiAgZGVsZXRlQWxsKGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+O1xufVxuIl19
|
|
@@ -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
3
|
import { BulkCrudOperator } from "./BulkCrudOperator";
|
|
5
4
|
/**
|
|
6
5
|
* @summary Interface holding basic CRUD APIs
|
|
7
|
-
* @typedef T extends {@link
|
|
6
|
+
* @typedef T extends {@link Model}
|
|
8
7
|
* @interface IRepository
|
|
9
8
|
*/
|
|
10
|
-
export interface IRepository<M extends
|
|
9
|
+
export interface IRepository<M extends Model> extends BulkCrudOperator<M> {
|
|
11
10
|
readonly cache: DataCache;
|
|
12
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 +1,5 @@
|
|
|
1
|
-
export*from"./BulkCrudOperator";
|
|
1
|
+
export * from "./BulkCrudOperator";
|
|
2
|
+
export * from "./CrudOperator";
|
|
3
|
+
export * from "./IRepository";
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQyIsImZpbGUiOiJpbnRlcmZhY2VzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQnVsa0NydWRPcGVyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ3J1ZE9wZXJhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9JUmVwb3NpdG9yeVwiO1xuIl19
|
|
@@ -1 +1,39 @@
|
|
|
1
|
-
|
|
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
|
|
9
|
-
export declare function
|
|
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
|
|
20
|
-
export declare function composedFromKeys(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string):
|
|
21
|
-
export declare function composed(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string):
|
|
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
|
|
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==
|
package/lib/esm/model/index.d.ts
CHANGED
package/lib/esm/model/index.js
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
export*from"./
|
|
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
|
|
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";
|
|
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
|
|
16
|
-
static get(targetName: string | Record<string, any>, propKey: string, operation: string): OperationHandler<
|
|
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
|
|
17
|
+
static register<V extends Model>(handler: OperationHandler<V, any, any>, operation: OperationKeys, target: V, propKey: string | symbol): void;
|
|
19
18
|
}
|
|
@@ -1 +1,35 @@
|
|
|
1
|
-
import{Hashing}from"@decaf-ts/decorator-validation";
|
|
1
|
+
import { Hashing } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { OperationsRegistry } from "./OperationsRegistry";
|
|
3
|
+
import { OperationKeys } from "./constants";
|
|
4
|
+
/**
|
|
5
|
+
* @summary Static class holding common Operation Functionality
|
|
6
|
+
*
|
|
7
|
+
* @class Operations
|
|
8
|
+
*
|
|
9
|
+
* @category Operations
|
|
10
|
+
*/
|
|
11
|
+
export class Operations {
|
|
12
|
+
constructor() { }
|
|
13
|
+
static getHandlerName(handler) {
|
|
14
|
+
if (handler.name)
|
|
15
|
+
return handler.name;
|
|
16
|
+
console.warn("Handler name not defined. A name will be generated, but this is not desirable. please avoid using anonymous functions");
|
|
17
|
+
return Hashing.hash(handler.toString());
|
|
18
|
+
}
|
|
19
|
+
static key(str) {
|
|
20
|
+
return OperationKeys.REFLECT + str;
|
|
21
|
+
}
|
|
22
|
+
static get(targetName, propKey, operation) {
|
|
23
|
+
return Operations.registry.get(targetName, propKey, operation);
|
|
24
|
+
}
|
|
25
|
+
static getOpRegistry() {
|
|
26
|
+
if (!Operations.registry)
|
|
27
|
+
Operations.registry = new OperationsRegistry();
|
|
28
|
+
return Operations.registry;
|
|
29
|
+
}
|
|
30
|
+
static register(handler, operation, target, propKey) {
|
|
31
|
+
Operations.getOpRegistry().register(handler, operation, target, propKey);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL09wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFHckIsZ0JBQXVCLENBQUM7SUFFeEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUF3QztRQUM1RCxJQUFJLE9BQU8sQ0FBQyxJQUFJO1lBQUUsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBRXRDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUhBQXVILENBQ3hILENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNwQixPQUFPLGFBQWEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUNSLFVBQXdDLEVBQ3hDLE9BQWUsRUFDZixTQUFpQjtRQUVqQixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxhQUFhO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FDYixPQUFzQyxFQUN0QyxTQUF3QixFQUN4QixNQUFTLEVBQ1QsT0FBd0I7UUFFeEIsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FDakMsT0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBQ04sT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJmaWxlIjoib3BlcmF0aW9ucy9PcGVyYXRpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFzaGluZyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE9wZXJhdGlvbkhhbmRsZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uc1JlZ2lzdHJ5IH0gZnJvbSBcIi4vT3BlcmF0aW9uc1JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgU3RhdGljIGNsYXNzIGhvbGRpbmcgY29tbW9uIE9wZXJhdGlvbiBGdW5jdGlvbmFsaXR5XG4gKlxuICogQGNsYXNzIE9wZXJhdGlvbnNcbiAqXG4gKiBAY2F0ZWdvcnkgT3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgc3RhdGljIHJlZ2lzdHJ5OiBPcGVyYXRpb25zUmVnaXN0cnk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGdldEhhbmRsZXJOYW1lKGhhbmRsZXI6IE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIGFueT4pIHtcbiAgICBpZiAoaGFuZGxlci5uYW1lKSByZXR1cm4gaGFuZGxlci5uYW1lO1xuXG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJIYW5kbGVyIG5hbWUgbm90IGRlZmluZWQuIEEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCwgYnV0IHRoaXMgaXMgbm90IGRlc2lyYWJsZS4gcGxlYXNlIGF2b2lkIHVzaW5nIGFub255bW91cyBmdW5jdGlvbnNcIlxuICAgICk7XG4gICAgcmV0dXJuIEhhc2hpbmcuaGFzaChoYW5kbGVyLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgc3RhdGljIGtleShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBPcGVyYXRpb25LZXlzLlJFRkxFQ1QgKyBzdHI7XG4gIH1cblxuICBzdGF0aWMgZ2V0KFxuICAgIHRhcmdldE5hbWU6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcHJvcEtleTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBPcGVyYXRpb25zLnJlZ2lzdHJ5LmdldCh0YXJnZXROYW1lLCBwcm9wS2V5LCBvcGVyYXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0T3BSZWdpc3RyeSgpIHtcbiAgICBpZiAoIU9wZXJhdGlvbnMucmVnaXN0cnkpIE9wZXJhdGlvbnMucmVnaXN0cnkgPSBuZXcgT3BlcmF0aW9uc1JlZ2lzdHJ5KCk7XG4gICAgcmV0dXJuIE9wZXJhdGlvbnMucmVnaXN0cnk7XG4gIH1cblxuICBzdGF0aWMgcmVnaXN0ZXI8ViBleHRlbmRzIE1vZGVsPihcbiAgICBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPFYsIGFueSwgYW55PixcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMsXG4gICAgdGFyZ2V0OiBWLFxuICAgIHByb3BLZXk6IHN0cmluZyB8IHN5bWJvbFxuICApIHtcbiAgICBPcGVyYXRpb25zLmdldE9wUmVnaXN0cnkoKS5yZWdpc3RlcihcbiAgICAgIGhhbmRsZXIgYXMgYW55LFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcEtleVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|