@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.
- 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.d.ts +7 -0
- package/lib/esm/interfaces/BulkCrudOperator.js +3 -0
- package/lib/esm/interfaces/CrudOperator.d.ts +5 -5
- package/lib/esm/interfaces/CrudOperator.js +3 -0
- package/lib/esm/interfaces/IRepository.d.ts +4 -5
- package/lib/esm/interfaces/IRepository.js +3 -0
- package/lib/esm/interfaces/index.d.ts +1 -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 +26 -14
- package/lib/esm/repository/BaseRepository.js +158 -1
- package/lib/esm/repository/DataCache.js +32 -1
- package/lib/esm/repository/Repository.d.ts +11 -10
- package/lib/esm/repository/Repository.js +89 -1
- 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 -0
- package/lib/interfaces/BulkCrudOperator.d.ts +7 -0
- package/lib/interfaces/CrudOperator.cjs +4 -1
- package/lib/interfaces/CrudOperator.d.ts +5 -5
- package/lib/interfaces/IRepository.cjs +4 -1
- package/lib/interfaces/IRepository.d.ts +4 -5
- package/lib/interfaces/index.cjs +21 -1
- package/lib/interfaces/index.d.ts +1 -0
- 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 +26 -14
- package/lib/repository/DataCache.cjs +36 -1
- package/lib/repository/Repository.cjs +93 -1
- package/lib/repository/Repository.d.ts +11 -10
- 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 +18 -16
- 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
package/lib/model/decorators.cjs
CHANGED
|
@@ -1 +1,76 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hashOnCreateUpdate = hashOnCreateUpdate;
|
|
4
|
+
exports.hash = hash;
|
|
5
|
+
exports.composedFromCreateUpdate = composedFromCreateUpdate;
|
|
6
|
+
exports.composedFromKeys = composedFromKeys;
|
|
7
|
+
exports.composed = composed;
|
|
8
|
+
const constants_1 = require("./constants.cjs");
|
|
9
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
10
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
11
|
+
const decorators_1 = require("../operations/decorators.cjs");
|
|
12
|
+
const errors_1 = require("../repository/errors.cjs");
|
|
13
|
+
const Repository_1 = require("../repository/Repository.cjs");
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param {str} str
|
|
17
|
+
* @memberOf db-decorators.model
|
|
18
|
+
*/
|
|
19
|
+
function hashOnCreateUpdate(data, key, model, oldModel) {
|
|
20
|
+
if (!model[key])
|
|
21
|
+
return;
|
|
22
|
+
const hash = decorator_validation_1.Hashing.hash(model[key]);
|
|
23
|
+
if (oldModel && model[key] === hash)
|
|
24
|
+
return;
|
|
25
|
+
model[key] = hash;
|
|
26
|
+
}
|
|
27
|
+
function hash() {
|
|
28
|
+
return (0, reflection_1.apply)((0, decorators_1.onCreateUpdate)(hashOnCreateUpdate), (0, decorator_validation_1.propMetadata)(Repository_1.Repository.key(constants_1.DBKeys.HASH), {}));
|
|
29
|
+
}
|
|
30
|
+
function composedFromCreateUpdate(data, key, model) {
|
|
31
|
+
try {
|
|
32
|
+
const { args, type, prefix, suffix, separator } = data;
|
|
33
|
+
const composed = args.map((arg) => {
|
|
34
|
+
if (!(arg in model))
|
|
35
|
+
throw new errors_1.InternalError((0, decorator_validation_1.sf)("Property {0} not found to compose from", arg));
|
|
36
|
+
if (type === "keys")
|
|
37
|
+
return arg;
|
|
38
|
+
if (typeof model[arg] === "undefined")
|
|
39
|
+
throw new errors_1.InternalError((0, decorator_validation_1.sf)("Property {0} does not contain a value to compose from", arg));
|
|
40
|
+
return model[arg].toString();
|
|
41
|
+
});
|
|
42
|
+
if (prefix)
|
|
43
|
+
composed.unshift(prefix);
|
|
44
|
+
if (suffix)
|
|
45
|
+
composed.push(suffix);
|
|
46
|
+
model[key] = composed.join(separator);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
throw new errors_1.InternalError(`Failed to compose value: ${e}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function composedFrom(args, hashResult = false, separator = constants_1.DefaultSeparator, type = "values", prefix = "", suffix = "") {
|
|
53
|
+
const data = {
|
|
54
|
+
args: args,
|
|
55
|
+
hashResult: hashResult,
|
|
56
|
+
separator: separator,
|
|
57
|
+
type: type,
|
|
58
|
+
prefix: prefix,
|
|
59
|
+
suffix: suffix,
|
|
60
|
+
};
|
|
61
|
+
const decorators = [
|
|
62
|
+
(0, decorators_1.onCreateUpdate)(composedFromCreateUpdate, data),
|
|
63
|
+
(0, decorator_validation_1.propMetadata)(Repository_1.Repository.key(constants_1.DBKeys.COMPOSED), data),
|
|
64
|
+
];
|
|
65
|
+
if (hashResult)
|
|
66
|
+
decorators.push(hash());
|
|
67
|
+
return (0, reflection_1.apply)(...decorators);
|
|
68
|
+
}
|
|
69
|
+
function composedFromKeys(args, separator = constants_1.DefaultSeparator, hash = false, prefix = "", suffix = "") {
|
|
70
|
+
return composedFrom(args, hash, separator, "keys", prefix, suffix);
|
|
71
|
+
}
|
|
72
|
+
function composed(args, separator = constants_1.DefaultSeparator, hash = false, prefix = "", suffix = "") {
|
|
73
|
+
return composedFrom(args, hash, separator, "values", prefix, suffix);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFNO0tBQ2YsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUEsMkJBQWMsRUFBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUM7UUFDOUMsSUFBQSxtQ0FBWSxFQUFDLHVCQUFVLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDO0tBQ3BELENBQUM7SUFDRixJQUFJLFVBQVU7UUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsT0FBTyxJQUFBLGtCQUFLLEVBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLElBQWMsRUFDZCxZQUFvQiw0QkFBZ0IsRUFDcEMsT0FBZ0IsS0FBSyxFQUNyQixNQUFNLEdBQUcsRUFBRSxFQUNYLE1BQU0sR0FBRyxFQUFFO0lBRVgsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsU0FBZ0IsUUFBUSxDQUN0QixJQUFjLEVBQ2QsWUFBb0IsNEJBQWdCLEVBQ3BDLE9BQWdCLEtBQUssRUFDckIsTUFBTSxHQUFHLEVBQUUsRUFDWCxNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkUsQ0FBQyIsImZpbGUiOiJtb2RlbC9kZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREJLZXlzLCBEZWZhdWx0U2VwYXJhdG9yIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBhcHBseSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgSGFzaGluZywgcHJvcE1ldGFkYXRhLCBzZiB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IG9uQ3JlYXRlVXBkYXRlIH0gZnJvbSBcIi4uL29wZXJhdGlvbnMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgSVJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9JUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2Vycm9yc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJ9IHN0clxuICogQG1lbWJlck9mIGRiLWRlY29yYXRvcnMubW9kZWxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzaE9uQ3JlYXRlVXBkYXRlPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBJUmVwb3NpdG9yeTxNPixcbiAgWSA9IGFueSxcbj4odGhpczogUiwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBNLCBvbGRNb2RlbD86IE0pOiB2b2lkIHtcbiAgaWYgKCEobW9kZWwgYXMgYW55KVtrZXldKSByZXR1cm47XG4gIGNvbnN0IGhhc2ggPSBIYXNoaW5nLmhhc2goKG1vZGVsIGFzIGFueSlba2V5XSk7XG4gIGlmIChvbGRNb2RlbCAmJiAobW9kZWwgYXMgYW55KVtrZXldID09PSBoYXNoKSByZXR1cm47XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBoYXNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaCgpIHtcbiAgcmV0dXJuIGFwcGx5KFxuICAgIG9uQ3JlYXRlVXBkYXRlKGhhc2hPbkNyZWF0ZVVwZGF0ZSksXG4gICAgcHJvcE1ldGFkYXRhKFJlcG9zaXRvcnkua2V5KERCS2V5cy5IQVNIKSwge30pXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIENvbXBvc2VkRnJvbU1ldGFkYXRhID0ge1xuICBhcmdzOiBzdHJpbmdbXTtcbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIGhhc2hSZXN1bHQ6IGJvb2xlYW47XG4gIHR5cGU6IFwia2V5c1wiIHwgXCJ2YWx1ZXNcIjtcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBzdWZmaXg/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZWRGcm9tQ3JlYXRlVXBkYXRlPFxuICBUIGV4dGVuZHMgTW9kZWwsXG4gIFYgZXh0ZW5kcyBJUmVwb3NpdG9yeTxUPixcbj4odGhpczogViwgZGF0YTogQ29tcG9zZWRGcm9tTWV0YWRhdGEsIGtleTogc3RyaW5nLCBtb2RlbDogVCkge1xuICB0cnkge1xuICAgIGNvbnN0IHsgYXJncywgdHlwZSwgcHJlZml4LCBzdWZmaXgsIHNlcGFyYXRvciB9ID0gZGF0YTtcbiAgICBjb25zdCBjb21wb3NlZCA9IGFyZ3MubWFwKChhcmc6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCEoYXJnIGluIG1vZGVsKSlcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgc2YoXCJQcm9wZXJ0eSB7MH0gbm90IGZvdW5kIHRvIGNvbXBvc2UgZnJvbVwiLCBhcmcpXG4gICAgICAgICk7XG4gICAgICBpZiAodHlwZSA9PT0gXCJrZXlzXCIpIHJldHVybiBhcmc7XG4gICAgICBpZiAodHlwZW9mIChtb2RlbCBhcyBhbnkpW2FyZ10gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIHNmKFwiUHJvcGVydHkgezB9IGRvZXMgbm90IGNvbnRhaW4gYSB2YWx1ZSB0byBjb21wb3NlIGZyb21cIiwgYXJnKVxuICAgICAgICApO1xuICAgICAgcmV0dXJuICgobW9kZWwgYXMgYW55KVthcmddIGFzIGFueSkudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGlmIChwcmVmaXgpIGNvbXBvc2VkLnVuc2hpZnQocHJlZml4KTtcbiAgICBpZiAoc3VmZml4KSBjb21wb3NlZC5wdXNoKHN1ZmZpeCk7XG5cbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gY29tcG9zZWQuam9pbihzZXBhcmF0b3IpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgRmFpbGVkIHRvIGNvbXBvc2UgdmFsdWU6ICR7ZX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wb3NlZEZyb20oXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBoYXNoUmVzdWx0OiBib29sZWFuID0gZmFsc2UsXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gRGVmYXVsdFNlcGFyYXRvcixcbiAgdHlwZTogXCJrZXlzXCIgfCBcInZhbHVlc1wiID0gXCJ2YWx1ZXNcIixcbiAgcHJlZml4ID0gXCJcIixcbiAgc3VmZml4ID0gXCJcIlxuKSB7XG4gIGNvbnN0IGRhdGE6IENvbXBvc2VkRnJvbU1ldGFkYXRhID0ge1xuICAgIGFyZ3M6IGFyZ3MsXG4gICAgaGFzaFJlc3VsdDogaGFzaFJlc3VsdCxcbiAgICBzZXBhcmF0b3I6IHNlcGFyYXRvcixcbiAgICB0eXBlOiB0eXBlLFxuICAgIHByZWZpeDogcHJlZml4LFxuICAgIHN1ZmZpeDogc3VmZml4LFxuICB9O1xuXG4gIGNvbnN0IGRlY29yYXRvcnMgPSBbXG4gICAgb25DcmVhdGVVcGRhdGUoY29tcG9zZWRGcm9tQ3JlYXRlVXBkYXRlLCBkYXRhKSxcbiAgICBwcm9wTWV0YWRhdGEoUmVwb3NpdG9yeS5rZXkoREJLZXlzLkNPTVBPU0VEKSwgZGF0YSksXG4gIF07XG4gIGlmIChoYXNoUmVzdWx0KSBkZWNvcmF0b3JzLnB1c2goaGFzaCgpKTtcbiAgcmV0dXJuIGFwcGx5KC4uLmRlY29yYXRvcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZWRGcm9tS2V5cyhcbiAgYXJnczogc3RyaW5nW10sXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gRGVmYXVsdFNlcGFyYXRvcixcbiAgaGFzaDogYm9vbGVhbiA9IGZhbHNlLFxuICBwcmVmaXggPSBcIlwiLFxuICBzdWZmaXggPSBcIlwiXG4pIHtcbiAgcmV0dXJuIGNvbXBvc2VkRnJvbShhcmdzLCBoYXNoLCBzZXBhcmF0b3IsIFwia2V5c1wiLCBwcmVmaXgsIHN1ZmZpeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlZChcbiAgYXJnczogc3RyaW5nW10sXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gRGVmYXVsdFNlcGFyYXRvcixcbiAgaGFzaDogYm9vbGVhbiA9IGZhbHNlLFxuICBwcmVmaXggPSBcIlwiLFxuICBzdWZmaXggPSBcIlwiXG4pIHtcbiAgcmV0dXJuIGNvbXBvc2VkRnJvbShhcmdzLCBoYXNoLCBzZXBhcmF0b3IsIFwidmFsdWVzXCIsIHByZWZpeCwgc3VmZml4KTtcbn1cbiJdfQ==
|
|
@@ -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;
|
package/lib/model/index.cjs
CHANGED
|
@@ -1 +1,22 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./validation.cjs"), exports);
|
|
18
|
+
__exportStar(require("./constants.cjs"), exports);
|
|
19
|
+
__exportStar(require("./decorators.cjs"), exports);
|
|
20
|
+
__exportStar(require("./model.cjs"), exports);
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQTZCO0FBQzdCLDhDQUE0QjtBQUM1QiwrQ0FBNkI7QUFDN0IsMENBQXdCIiwiZmlsZSI6Im1vZGVsL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuIl19
|
package/lib/model/index.d.ts
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
4
|
+
const validation_1 = require("./validation.cjs");
|
|
5
|
+
decorator_validation_1.Model.prototype.hasErrors = function (previousVersion, ...exclusions) {
|
|
6
|
+
if (previousVersion && !(previousVersion instanceof decorator_validation_1.Model)) {
|
|
7
|
+
exclusions.unshift(previousVersion);
|
|
8
|
+
previousVersion = undefined;
|
|
9
|
+
}
|
|
10
|
+
const errs = (0, decorator_validation_1.validate)(this, ...exclusions);
|
|
11
|
+
if (errs || !previousVersion)
|
|
12
|
+
return errs;
|
|
13
|
+
return (0, validation_1.validateCompare)(previousVersion, this, ...exclusions);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlFQVN3QztBQUN4Qyw2Q0FBK0M7QUFFL0MsNEJBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBRTFCLGVBQXlCLEVBQ3pCLEdBQUcsVUFBaUI7SUFFcEIsSUFBSSxlQUFlLElBQUksQ0FBQyxDQUFDLGVBQWUsWUFBWSw0QkFBSyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUEsK0JBQVEsRUFBQyxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUxQyxPQUFPLElBQUEsNEJBQWUsRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDIiwiZmlsZSI6Im1vZGVsL21vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcGFyYWJsZSxcbiAgSGFzaGFibGUsXG4gIE1vZGVsQXJnLFxuICBNb2RlbEVycm9yRGVmaW5pdGlvbixcbiAgU2VyaWFsaXphYmxlLFxuICBWYWxpZGF0YWJsZSxcbiAgTW9kZWwsXG4gIHZhbGlkYXRlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUNvbXBhcmUgfSBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5cbk1vZGVsLnByb3RvdHlwZS5oYXNFcnJvcnMgPSBmdW5jdGlvbiA8TSBleHRlbmRzIE1vZGVsPihcbiAgdGhpczogTSxcbiAgcHJldmlvdXNWZXJzaW9uPzogTSB8IGFueSxcbiAgLi4uZXhjbHVzaW9uczogYW55W11cbik6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHByZXZpb3VzVmVyc2lvbiAmJiAhKHByZXZpb3VzVmVyc2lvbiBpbnN0YW5jZW9mIE1vZGVsKSkge1xuICAgIGV4Y2x1c2lvbnMudW5zaGlmdChwcmV2aW91c1ZlcnNpb24pO1xuICAgIHByZXZpb3VzVmVyc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGVycnMgPSB2YWxpZGF0ZSh0aGlzLCAuLi5leGNsdXNpb25zKTtcbiAgaWYgKGVycnMgfHwgIXByZXZpb3VzVmVyc2lvbikgcmV0dXJuIGVycnM7XG5cbiAgcmV0dXJuIHZhbGlkYXRlQ29tcGFyZShwcmV2aW91c1ZlcnNpb24sIHRoaXMsIC4uLmV4Y2x1c2lvbnMpO1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgTW9kZWxcbiAgICBpbXBsZW1lbnRzIFZhbGlkYXRhYmxlLCBTZXJpYWxpemFibGUsIEhhc2hhYmxlLCBDb21wYXJhYmxlPE1vZGVsPlxuICB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPE1vZGVsPik7XG5cbiAgICBoYXNFcnJvcnMoLi4uZXhjbHVzaW9uczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBoYXNFcnJvcnMoXG4gICAgICBwcmV2aW91c1ZlcnNpb24/OiBNb2RlbCB8IGFueSxcbiAgICAgIC4uLmV4Y2x1c2lvbnM6IGFueVtdXG4gICAgKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -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
|
+
}
|
package/lib/model/validation.cjs
CHANGED
|
@@ -1 +1,125 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateCompare = validateCompare;
|
|
4
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
5
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
6
|
+
const validation_1 = require("../validation/index.cjs");
|
|
7
|
+
const identity_1 = require("../identity/index.cjs");
|
|
8
|
+
/**
|
|
9
|
+
* @summary Validates the update of a model
|
|
10
|
+
*
|
|
11
|
+
* @param {T} oldModel
|
|
12
|
+
* @param {T} newModel
|
|
13
|
+
* @param {string[]} [exceptions]
|
|
14
|
+
*
|
|
15
|
+
* @function validateCompare
|
|
16
|
+
* @return {ModelErrorDefinition | undefined}
|
|
17
|
+
*
|
|
18
|
+
* @memberOf module:db-decorators.Model
|
|
19
|
+
*/
|
|
20
|
+
function validateCompare(oldModel, newModel, ...exceptions) {
|
|
21
|
+
const decoratedProperties = [];
|
|
22
|
+
for (const prop in newModel)
|
|
23
|
+
if (Object.prototype.hasOwnProperty.call(newModel, prop) &&
|
|
24
|
+
exceptions.indexOf(prop) === -1)
|
|
25
|
+
decoratedProperties.push((0, reflection_1.getPropertyDecorators)(validation_1.UpdateValidationKeys.REFLECT, newModel, prop));
|
|
26
|
+
let result = undefined;
|
|
27
|
+
for (const decoratedProperty of decoratedProperties) {
|
|
28
|
+
const { prop, decorators } = decoratedProperty;
|
|
29
|
+
decorators.shift(); // remove the design:type decorator, since the type will already be checked
|
|
30
|
+
if (!decorators || !decorators.length)
|
|
31
|
+
continue;
|
|
32
|
+
let errs = undefined;
|
|
33
|
+
for (const decorator of decorators) {
|
|
34
|
+
const validator = decorator_validation_1.Validation.get(decorator.key);
|
|
35
|
+
if (!validator) {
|
|
36
|
+
console.error(`Could not find Matching validator for ${decorator.key} for property ${String(decoratedProperty.prop)}`);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const err = validator.updateHasErrors(newModel[prop.toString()], oldModel[prop.toString()], ...Object.values(decorator.props));
|
|
40
|
+
if (err) {
|
|
41
|
+
errs = errs || {};
|
|
42
|
+
errs[decorator.key] = err;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (errs) {
|
|
46
|
+
result = result || {};
|
|
47
|
+
result[decoratedProperty.prop.toString()] = errs;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// tests nested classes
|
|
51
|
+
for (const prop of Object.keys(newModel).filter((k) => !result || !result[k])) {
|
|
52
|
+
let err;
|
|
53
|
+
// if a nested Model
|
|
54
|
+
const allDecorators = (0, reflection_1.getPropertyDecorators)(decorator_validation_1.ValidationKeys.REFLECT, newModel, prop).decorators;
|
|
55
|
+
const decorators = (0, reflection_1.getPropertyDecorators)(decorator_validation_1.ValidationKeys.REFLECT, newModel, prop).decorators.filter((d) => [decorator_validation_1.ModelKeys.TYPE, decorator_validation_1.ValidationKeys.TYPE].indexOf(d.key) !== -1);
|
|
56
|
+
if (!decorators || !decorators.length)
|
|
57
|
+
continue;
|
|
58
|
+
const dec = decorators.pop();
|
|
59
|
+
const clazz = dec.props.name
|
|
60
|
+
? [dec.props.name]
|
|
61
|
+
: Array.isArray(dec.props.customTypes)
|
|
62
|
+
? dec.props.customTypes
|
|
63
|
+
: [dec.props.customTypes];
|
|
64
|
+
const reserved = Object.values(decorator_validation_1.ReservedModels).map((v) => v.toLowerCase());
|
|
65
|
+
for (const c of clazz) {
|
|
66
|
+
if (reserved.indexOf(c.toLowerCase()) === -1) {
|
|
67
|
+
switch (c) {
|
|
68
|
+
case Array.name:
|
|
69
|
+
case Set.name:
|
|
70
|
+
if (allDecorators.length) {
|
|
71
|
+
const listDec = allDecorators.find((d) => d.key === decorator_validation_1.ValidationKeys.LIST);
|
|
72
|
+
if (listDec) {
|
|
73
|
+
let currentList, oldList;
|
|
74
|
+
switch (c) {
|
|
75
|
+
case Array.name:
|
|
76
|
+
currentList = newModel[prop];
|
|
77
|
+
oldList = oldModel[prop];
|
|
78
|
+
break;
|
|
79
|
+
case Set.name:
|
|
80
|
+
currentList = newModel[prop].values();
|
|
81
|
+
oldList = oldModel[prop].values();
|
|
82
|
+
break;
|
|
83
|
+
default:
|
|
84
|
+
throw new Error(`Invalid attribute type ${c}`);
|
|
85
|
+
}
|
|
86
|
+
err = currentList
|
|
87
|
+
.map((v) => {
|
|
88
|
+
const id = (0, identity_1.findModelId)(v, true);
|
|
89
|
+
if (!id)
|
|
90
|
+
return "Failed to find model id";
|
|
91
|
+
const oldModel = oldList.find((el) => id === (0, identity_1.findModelId)(el, true));
|
|
92
|
+
if (!oldModel)
|
|
93
|
+
return; // nothing to compare with
|
|
94
|
+
return v.hasErrors(oldModel);
|
|
95
|
+
})
|
|
96
|
+
.filter((e) => !!e);
|
|
97
|
+
if (!err?.length) {
|
|
98
|
+
// if the result is an empty list...
|
|
99
|
+
err = undefined;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
default:
|
|
105
|
+
try {
|
|
106
|
+
if (newModel[prop] &&
|
|
107
|
+
oldModel[prop])
|
|
108
|
+
err = newModel[prop].hasErrors(oldModel[prop]);
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
console.warn((0, decorator_validation_1.sf)("Model should be validatable but its not"));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (err) {
|
|
117
|
+
result = result || {};
|
|
118
|
+
result[prop] = err;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return result ? new decorator_validation_1.ModelErrorDefinition(result) : undefined;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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TW9kZWxFcnJvckRlZmluaXRpb24sXG4gIE1vZGVsRXJyb3JzLFxuICBNb2RlbEtleXMsXG4gIFJlc2VydmVkTW9kZWxzLFxuICBzZixcbiAgVmFsaWRhdGFibGUsXG4gIFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb25LZXlzLFxuICBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEZWNvcmF0b3JNZXRhZGF0YSwgZ2V0UHJvcGVydHlEZWNvcmF0b3JzIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBVcGRhdGVWYWxpZGF0aW9uS2V5cywgVXBkYXRlVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGZpbmRNb2RlbElkIH0gZnJvbSBcIi4uL2lkZW50aXR5XCI7XG5cbi8qKlxuICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSB1cGRhdGUgb2YgYSBtb2RlbFxuICpcbiAqIEBwYXJhbSB7VH0gb2xkTW9kZWxcbiAqIEBwYXJhbSB7VH0gbmV3TW9kZWxcbiAqIEBwYXJhbSB7c3RyaW5nW119IFtleGNlcHRpb25zXVxuICpcbiAqIEBmdW5jdGlvbiB2YWxpZGF0ZUNvbXBhcmVcbiAqIEByZXR1cm4ge01vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkfVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5Nb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb21wYXJlPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIG9sZE1vZGVsOiBULFxuICBuZXdNb2RlbDogVCxcbiAgLi4uZXhjZXB0aW9uczogc3RyaW5nW11cbik6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVjb3JhdGVkUHJvcGVydGllczogVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbltdID0gW107XG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdNb2RlbClcbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3TW9kZWwsIHByb3ApICYmXG4gICAgICBleGNlcHRpb25zLmluZGV4T2YocHJvcCkgPT09IC0xXG4gICAgKVxuICAgICAgZGVjb3JhdGVkUHJvcGVydGllcy5wdXNoKFxuICAgICAgICBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICAgICAgVXBkYXRlVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgICAgICBuZXdNb2RlbCxcbiAgICAgICAgICBwcm9wXG4gICAgICAgICkgYXMgVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvblxuICAgICAgKTtcblxuICBsZXQgcmVzdWx0OiBNb2RlbEVycm9ycyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGRlY29yYXRlZFByb3BlcnR5IG9mIGRlY29yYXRlZFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCB7IHByb3AsIGRlY29yYXRvcnMgfSA9IGRlY29yYXRlZFByb3BlcnR5O1xuXG4gICAgZGVjb3JhdG9ycy5zaGlmdCgpOyAvLyByZW1vdmUgdGhlIGRlc2lnbjp0eXBlIGRlY29yYXRvciwgc2luY2UgdGhlIHR5cGUgd2lsbCBhbHJlYWR5IGJlIGNoZWNrZWRcblxuICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgIGxldCBlcnJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgZm9yIChjb25zdCBkZWNvcmF0b3Igb2YgZGVjb3JhdG9ycykge1xuICAgICAgY29uc3QgdmFsaWRhdG9yOiBVcGRhdGVWYWxpZGF0b3IgPSBWYWxpZGF0aW9uLmdldChcbiAgICAgICAgZGVjb3JhdG9yLmtleVxuICAgICAgKSBhcyBVcGRhdGVWYWxpZGF0b3I7XG4gICAgICBpZiAoIXZhbGlkYXRvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBNYXRjaGluZyB2YWxpZGF0b3IgZm9yICR7ZGVjb3JhdG9yLmtleX0gZm9yIHByb3BlcnR5ICR7U3RyaW5nKGRlY29yYXRlZFByb3BlcnR5LnByb3ApfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdmFsaWRhdG9yLnVwZGF0ZUhhc0Vycm9ycyhcbiAgICAgICAgKG5ld01vZGVsIGFzIGFueSlbcHJvcC50b1N0cmluZygpXSxcbiAgICAgICAgKG9sZE1vZGVsIGFzIGFueSlbcHJvcC50b1N0cmluZygpXSxcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhkZWNvcmF0b3IucHJvcHMpXG4gICAgICApO1xuXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVycnMgPSBlcnJzIHx8IHt9O1xuICAgICAgICBlcnJzW2RlY29yYXRvci5rZXldID0gZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHRbZGVjb3JhdGVkUHJvcGVydHkucHJvcC50b1N0cmluZygpXSA9IGVycnM7XG4gICAgfVxuICB9XG4gIC8vIHRlc3RzIG5lc3RlZCBjbGFzc2VzXG4gIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhuZXdNb2RlbCkuZmlsdGVyKFxuICAgIChrKSA9PiAhcmVzdWx0IHx8ICFyZXN1bHRba11cbiAgKSkge1xuICAgIGxldCBlcnI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBpZiBhIG5lc3RlZCBNb2RlbFxuICAgIGNvbnN0IGFsbERlY29yYXRvcnMgPSBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgbmV3TW9kZWwsXG4gICAgICBwcm9wXG4gICAgKS5kZWNvcmF0b3JzO1xuICAgIGNvbnN0IGRlY29yYXRvcnMgPSBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgbmV3TW9kZWwsXG4gICAgICBwcm9wXG4gICAgKS5kZWNvcmF0b3JzLmZpbHRlcihcbiAgICAgIChkKSA9PiBbTW9kZWxLZXlzLlRZUEUsIFZhbGlkYXRpb25LZXlzLlRZUEVdLmluZGV4T2YoZC5rZXkpICE9PSAtMVxuICAgICk7XG4gICAgaWYgKCFkZWNvcmF0b3JzIHx8ICFkZWNvcmF0b3JzLmxlbmd0aCkgY29udGludWU7XG4gICAgY29uc3QgZGVjID0gZGVjb3JhdG9ycy5wb3AoKSBhcyBEZWNvcmF0b3JNZXRhZGF0YTtcbiAgICBjb25zdCBjbGF6eiA9IGRlYy5wcm9wcy5uYW1lXG4gICAgICA/IFtkZWMucHJvcHMubmFtZV1cbiAgICAgIDogQXJyYXkuaXNBcnJheShkZWMucHJvcHMuY3VzdG9tVHlwZXMpXG4gICAgICAgID8gZGVjLnByb3BzLmN1c3RvbVR5cGVzXG4gICAgICAgIDogW2RlYy5wcm9wcy5jdXN0b21UeXBlc107XG4gICAgY29uc3QgcmVzZXJ2ZWQgPSBPYmplY3QudmFsdWVzKFJlc2VydmVkTW9kZWxzKS5tYXAoKHYpID0+XG4gICAgICB2LnRvTG93ZXJDYXNlKClcbiAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCBjIG9mIGNsYXp6KSB7XG4gICAgICBpZiAocmVzZXJ2ZWQuaW5kZXhPZihjLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlIEFycmF5Lm5hbWU6XG4gICAgICAgICAgY2FzZSBTZXQubmFtZTpcbiAgICAgICAgICAgIGlmIChhbGxEZWNvcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBsaXN0RGVjID0gYWxsRGVjb3JhdG9ycy5maW5kKFxuICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAobGlzdERlYykge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TGlzdCwgb2xkTGlzdDtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgICAgY2FzZSBBcnJheS5uYW1lOlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGlzdCA9IChuZXdNb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgb2xkTGlzdCA9IChvbGRNb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFNldC5uYW1lOlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGlzdCA9IChuZXdNb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wXG4gICAgICAgICAgICAgICAgICAgIF0udmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIG9sZExpc3QgPSAob2xkTW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0udmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGF0dHJpYnV0ZSB0eXBlICR7Y31gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlcnIgPSBjdXJyZW50TGlzdFxuICAgICAgICAgICAgICAgICAgLm1hcCgodjogVmFsaWRhdGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBmaW5kTW9kZWxJZCh2IGFzIGFueSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWQpIHJldHVybiBcIkZhaWxlZCB0byBmaW5kIG1vZGVsIGlkXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZE1vZGVsID0gb2xkTGlzdC5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgIChlbDogYW55KSA9PiBpZCA9PT0gZmluZE1vZGVsSWQoZWwsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvbGRNb2RlbCkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGNvbXBhcmUgd2l0aFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5oYXNFcnJvcnMob2xkTW9kZWwpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGU6IGFueSkgPT4gISFlKSBhcyBhbnk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWVycj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVzdWx0IGlzIGFuIGVtcHR5IGxpc3QuLi5cbiAgICAgICAgICAgICAgICAgIGVyciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG5ld01vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdICYmXG4gICAgICAgICAgICAgICAgKG9sZE1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBlcnIgPSAobmV3TW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0uaGFzRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgKG9sZE1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihzZihcIk1vZGVsIHNob3VsZCBiZSB2YWxpZGF0YWJsZSBidXQgaXRzIG5vdFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHRbcHJvcF0gPSBlcnIgYXMgYW55O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ID8gbmV3IE1vZGVsRXJyb3JEZWZpbml0aW9uKHJlc3VsdCkgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -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,39 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Operations = void 0;
|
|
4
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
5
|
+
const OperationsRegistry_1 = require("./OperationsRegistry.cjs");
|
|
6
|
+
const constants_1 = require("./constants.cjs");
|
|
7
|
+
/**
|
|
8
|
+
* @summary Static class holding common Operation Functionality
|
|
9
|
+
*
|
|
10
|
+
* @class Operations
|
|
11
|
+
*
|
|
12
|
+
* @category Operations
|
|
13
|
+
*/
|
|
14
|
+
class Operations {
|
|
15
|
+
constructor() { }
|
|
16
|
+
static getHandlerName(handler) {
|
|
17
|
+
if (handler.name)
|
|
18
|
+
return handler.name;
|
|
19
|
+
console.warn("Handler name not defined. A name will be generated, but this is not desirable. please avoid using anonymous functions");
|
|
20
|
+
return decorator_validation_1.Hashing.hash(handler.toString());
|
|
21
|
+
}
|
|
22
|
+
static key(str) {
|
|
23
|
+
return constants_1.OperationKeys.REFLECT + str;
|
|
24
|
+
}
|
|
25
|
+
static get(targetName, propKey, operation) {
|
|
26
|
+
return Operations.registry.get(targetName, propKey, operation);
|
|
27
|
+
}
|
|
28
|
+
static getOpRegistry() {
|
|
29
|
+
if (!Operations.registry)
|
|
30
|
+
Operations.registry = new OperationsRegistry_1.OperationsRegistry();
|
|
31
|
+
return Operations.registry;
|
|
32
|
+
}
|
|
33
|
+
static register(handler, operation, target, propKey) {
|
|
34
|
+
Operations.getOpRegistry().register(handler, operation, target, propKey);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.Operations = Operations;
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL09wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXlEO0FBRXpELDZEQUEwRDtBQUMxRCwyQ0FBNEM7QUFFNUM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxVQUFVO0lBR3JCLGdCQUF1QixDQUFDO0lBRXhCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBd0M7UUFDNUQsSUFBSSxPQUFPLENBQUMsSUFBSTtZQUFFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztRQUV0QyxPQUFPLENBQUMsSUFBSSxDQUNWLHVIQUF1SCxDQUN4SCxDQUFDO1FBQ0YsT0FBTyw4QkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8seUJBQWEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUNSLFVBQXdDLEVBQ3hDLE9BQWUsRUFDZixTQUFpQjtRQUVqQixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxhQUFhO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSx1Q0FBa0IsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FDYixPQUFzQyxFQUN0QyxTQUF3QixFQUN4QixNQUFTLEVBQ1QsT0FBd0I7UUFFeEIsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FDakMsT0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBQ04sT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE1Q0QsZ0NBNENDIiwiZmlsZSI6Im9wZXJhdGlvbnMvT3BlcmF0aW9ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhc2hpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25IYW5kbGVyIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbnNSZWdpc3RyeSB9IGZyb20gXCIuL09wZXJhdGlvbnNSZWdpc3RyeVwiO1xuaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFN0YXRpYyBjbGFzcyBob2xkaW5nIGNvbW1vbiBPcGVyYXRpb24gRnVuY3Rpb25hbGl0eVxuICpcbiAqIEBjbGFzcyBPcGVyYXRpb25zXG4gKlxuICogQGNhdGVnb3J5IE9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbnMge1xuICBwcml2YXRlIHN0YXRpYyByZWdpc3RyeTogT3BlcmF0aW9uc1JlZ2lzdHJ5O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHN0YXRpYyBnZXRIYW5kbGVyTmFtZShoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBhbnk+KSB7XG4gICAgaWYgKGhhbmRsZXIubmFtZSkgcmV0dXJuIGhhbmRsZXIubmFtZTtcblxuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiSGFuZGxlciBuYW1lIG5vdCBkZWZpbmVkLiBBIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQsIGJ1dCB0aGlzIGlzIG5vdCBkZXNpcmFibGUuIHBsZWFzZSBhdm9pZCB1c2luZyBhbm9ueW1vdXMgZnVuY3Rpb25zXCJcbiAgICApO1xuICAgIHJldHVybiBIYXNoaW5nLmhhc2goaGFuZGxlci50b1N0cmluZygpKTtcbiAgfVxuXG4gIHN0YXRpYyBrZXkoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT3BlcmF0aW9uS2V5cy5SRUZMRUNUICsgc3RyO1xuICB9XG5cbiAgc3RhdGljIGdldChcbiAgICB0YXJnZXROYW1lOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHByb3BLZXk6IHN0cmluZyxcbiAgICBvcGVyYXRpb246IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gT3BlcmF0aW9ucy5yZWdpc3RyeS5nZXQodGFyZ2V0TmFtZSwgcHJvcEtleSwgb3BlcmF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldE9wUmVnaXN0cnkoKSB7XG4gICAgaWYgKCFPcGVyYXRpb25zLnJlZ2lzdHJ5KSBPcGVyYXRpb25zLnJlZ2lzdHJ5ID0gbmV3IE9wZXJhdGlvbnNSZWdpc3RyeSgpO1xuICAgIHJldHVybiBPcGVyYXRpb25zLnJlZ2lzdHJ5O1xuICB9XG5cbiAgc3RhdGljIHJlZ2lzdGVyPFYgZXh0ZW5kcyBNb2RlbD4oXG4gICAgaGFuZGxlcjogT3BlcmF0aW9uSGFuZGxlcjxWLCBhbnksIGFueT4sXG4gICAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzLFxuICAgIHRhcmdldDogVixcbiAgICBwcm9wS2V5OiBzdHJpbmcgfCBzeW1ib2xcbiAgKSB7XG4gICAgT3BlcmF0aW9ucy5nZXRPcFJlZ2lzdHJ5KCkucmVnaXN0ZXIoXG4gICAgICBoYW5kbGVyIGFzIGFueSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIHRhcmdldCxcbiAgICAgIHByb3BLZXlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -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,69 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OperationsRegistry = void 0;
|
|
4
|
+
const Operations_1 = require("./Operations.cjs");
|
|
5
|
+
/**
|
|
6
|
+
* @summary Holds the registered operation handlers
|
|
7
|
+
*
|
|
8
|
+
* @class OperationsRegistry
|
|
9
|
+
* @implements IRegistry<OperationHandler<any>>
|
|
10
|
+
*
|
|
11
|
+
* @see OperationHandler
|
|
12
|
+
*
|
|
13
|
+
* @category Operations
|
|
14
|
+
*/
|
|
15
|
+
class OperationsRegistry {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.cache = {};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @summary retrieves an {@link OperationHandler} if it exists
|
|
21
|
+
* @param {string} target
|
|
22
|
+
* @param {string} propKey
|
|
23
|
+
* @param {string} operation
|
|
24
|
+
* @param accum
|
|
25
|
+
* @return {OperationHandler | undefined}
|
|
26
|
+
*/
|
|
27
|
+
get(target, propKey, operation, accum) {
|
|
28
|
+
accum = accum || [];
|
|
29
|
+
let name;
|
|
30
|
+
try {
|
|
31
|
+
name = typeof target === "string" ? target : target.constructor.name;
|
|
32
|
+
accum.unshift(...Object.values(this.cache[name][propKey][operation] || []));
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
if (typeof target === "string" ||
|
|
37
|
+
target === Object.prototype ||
|
|
38
|
+
Object.getPrototypeOf(target) === Object.prototype)
|
|
39
|
+
return accum;
|
|
40
|
+
}
|
|
41
|
+
let proto = Object.getPrototypeOf(target);
|
|
42
|
+
if (proto.constructor.name === name)
|
|
43
|
+
proto = Object.getPrototypeOf(proto);
|
|
44
|
+
return this.get(proto, propKey, operation, accum);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @summary Registers an {@link OperationHandler}
|
|
48
|
+
* @param {OperationHandler} handler
|
|
49
|
+
* @param {string} operation
|
|
50
|
+
* @param {{}} target
|
|
51
|
+
* @param {string | symbol} propKey
|
|
52
|
+
*/
|
|
53
|
+
register(handler, operation, target, propKey) {
|
|
54
|
+
const name = target.constructor.name;
|
|
55
|
+
const handlerName = Operations_1.Operations.getHandlerName(handler);
|
|
56
|
+
if (!this.cache[name])
|
|
57
|
+
this.cache[name] = {};
|
|
58
|
+
if (!this.cache[name][propKey])
|
|
59
|
+
this.cache[name][propKey] = {};
|
|
60
|
+
if (!this.cache[name][propKey][operation])
|
|
61
|
+
this.cache[name][propKey][operation] = {};
|
|
62
|
+
if (this.cache[name][propKey][operation][handlerName])
|
|
63
|
+
return;
|
|
64
|
+
this.cache[name][propKey][operation][handlerName] = handler;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.OperationsRegistry = OperationsRegistry;
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL09wZXJhdGlvbnNSZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSw2Q0FBMEM7QUFFMUM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxrQkFBa0I7SUFBL0I7UUFDbUIsVUFBSyxHQU1sQixFQUFFLENBQUM7SUE4RFQsQ0FBQztJQTVEQzs7Ozs7OztPQU9HO0lBQ0gsR0FBRyxDQUNELE1BQW9DLEVBQ3BDLE9BQWUsRUFDZixTQUFpQixFQUNqQixLQUFtQztRQUVuQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQztRQUNULElBQUksQ0FBQztZQUNILElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDckUsS0FBSyxDQUFDLE9BQU8sQ0FDWCxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDN0QsQ0FBQztZQUNGLDZEQUE2RDtRQUMvRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQ0UsT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDMUIsTUFBTSxLQUFLLE1BQU0sQ0FBQyxTQUFTO2dCQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO2dCQUVsRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLElBQUk7WUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsQ0FDTixPQUFrQyxFQUNsQyxTQUF3QixFQUN4QixNQUFTLEVBQ1QsT0FBd0I7UUFFeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsdUJBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPO1FBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzlELENBQUM7Q0FDRjtBQXJFRCxnREFxRUMiLCJmaWxlIjoib3BlcmF0aW9ucy9PcGVyYXRpb25zUmVnaXN0cnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRpb25IYW5kbGVyIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvSVJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IE9wZXJhdGlvbnMgfSBmcm9tIFwiLi9PcGVyYXRpb25zXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgSG9sZHMgdGhlIHJlZ2lzdGVyZWQgb3BlcmF0aW9uIGhhbmRsZXJzXG4gKlxuICogQGNsYXNzIE9wZXJhdGlvbnNSZWdpc3RyeVxuICogQGltcGxlbWVudHMgSVJlZ2lzdHJ5PE9wZXJhdGlvbkhhbmRsZXI8YW55Pj5cbiAqXG4gKiBAc2VlIE9wZXJhdGlvbkhhbmRsZXJcbiAqXG4gKiBAY2F0ZWdvcnkgT3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uc1JlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBSZWNvcmQ8XG4gICAgICBzdHJpbmcgfCBzeW1ib2wsXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBhbnk+Pj5cbiAgICA+XG4gID4gPSB7fTtcblxuICAvKipcbiAgICogQHN1bW1hcnkgcmV0cmlldmVzIGFuIHtAbGluayBPcGVyYXRpb25IYW5kbGVyfSBpZiBpdCBleGlzdHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcEtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBhY2N1bVxuICAgKiBAcmV0dXJuIHtPcGVyYXRpb25IYW5kbGVyIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgZ2V0PFQgZXh0ZW5kcyBNb2RlbCwgViBleHRlbmRzIElSZXBvc2l0b3J5PFQ+LCBZPihcbiAgICB0YXJnZXQ6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcHJvcEtleTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIGFjY3VtPzogT3BlcmF0aW9uSGFuZGxlcjxULCBWLCBZPltdXG4gICk6IE9wZXJhdGlvbkhhbmRsZXI8VCwgViwgWT5bXSB8IHVuZGVmaW5lZCB7XG4gICAgYWNjdW0gPSBhY2N1bSB8fCBbXTtcbiAgICBsZXQgbmFtZTtcbiAgICB0cnkge1xuICAgICAgbmFtZSA9IHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIgPyB0YXJnZXQgOiB0YXJnZXQuY29uc3RydWN0b3IubmFtZTtcbiAgICAgIGFjY3VtLnVuc2hpZnQoXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXModGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dIHx8IFtdKVxuICAgICAgKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdGFyZ2V0ID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpID09PSBPYmplY3QucHJvdG90eXBlXG4gICAgICApXG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9XG5cbiAgICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICBpZiAocHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gbmFtZSkgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0PFQsIFYsIFk+KHByb3RvLCBwcm9wS2V5LCBvcGVyYXRpb24sIGFjY3VtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYW4ge0BsaW5rIE9wZXJhdGlvbkhhbmRsZXJ9XG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uSGFuZGxlcn0gaGFuZGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSB7e319IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcEtleVxuICAgKi9cbiAgcmVnaXN0ZXI8VCBleHRlbmRzIE1vZGVsLCBWIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sIFk+KFxuICAgIGhhbmRsZXI6IE9wZXJhdGlvbkhhbmRsZXI8VCwgViwgWT4sXG4gICAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzLFxuICAgIHRhcmdldDogVCxcbiAgICBwcm9wS2V5OiBzdHJpbmcgfCBzeW1ib2xcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGNvbnN0IGhhbmRsZXJOYW1lID0gT3BlcmF0aW9ucy5nZXRIYW5kbGVyTmFtZShoYW5kbGVyKTtcblxuICAgIGlmICghdGhpcy5jYWNoZVtuYW1lXSkgdGhpcy5jYWNoZVtuYW1lXSA9IHt9O1xuICAgIGlmICghdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XSkgdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XSA9IHt9O1xuICAgIGlmICghdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dKVxuICAgICAgdGhpcy5jYWNoZVtuYW1lXVtwcm9wS2V5XVtvcGVyYXRpb25dID0ge307XG4gICAgaWYgKHRoaXMuY2FjaGVbbmFtZV1bcHJvcEtleV1bb3BlcmF0aW9uXVtoYW5kbGVyTmFtZV0pIHJldHVybjtcbiAgICB0aGlzLmNhY2hlW25hbWVdW3Byb3BLZXldW29wZXJhdGlvbl1baGFuZGxlck5hbWVdID0gaGFuZGxlcjtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { OperationHandler } from "./types";
|
|
2
|
-
import { DBModel } from "../model/DBModel";
|
|
3
2
|
import { OperationKeys } from "./constants";
|
|
4
3
|
import { IRepository } from "../interfaces/IRepository";
|
|
5
4
|
/**
|
|
@@ -22,7 +21,7 @@ export declare class OperationsRegistry {
|
|
|
22
21
|
* @param accum
|
|
23
22
|
* @return {OperationHandler | undefined}
|
|
24
23
|
*/
|
|
25
|
-
get<T extends
|
|
24
|
+
get<T extends Model, V extends IRepository<T>, Y>(target: string | Record<string, any>, propKey: string, operation: string, accum?: OperationHandler<T, V, Y>[]): OperationHandler<T, V, Y>[] | undefined;
|
|
26
25
|
/**
|
|
27
26
|
* @summary Registers an {@link OperationHandler}
|
|
28
27
|
* @param {OperationHandler} handler
|
|
@@ -30,5 +29,5 @@ export declare class OperationsRegistry {
|
|
|
30
29
|
* @param {{}} target
|
|
31
30
|
* @param {string | symbol} propKey
|
|
32
31
|
*/
|
|
33
|
-
register<T extends
|
|
32
|
+
register<T extends Model, V extends IRepository<T>, Y>(handler: OperationHandler<T, V, Y>, operation: OperationKeys, target: T, propKey: string | symbol): void;
|
|
34
33
|
}
|
|
@@ -1 +1,42 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DBOperations = exports.OperationKeys = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @summary Set of constants to define db CRUD operations and their equivalent 'on' and 'after' phases
|
|
6
|
+
* @const OperationKeys
|
|
7
|
+
*
|
|
8
|
+
* @memberOf module:db-decorators.Operations
|
|
9
|
+
*/
|
|
10
|
+
var OperationKeys;
|
|
11
|
+
(function (OperationKeys) {
|
|
12
|
+
OperationKeys["REFLECT"] = "decaf.model.db.operations.";
|
|
13
|
+
OperationKeys["CREATE"] = "create";
|
|
14
|
+
OperationKeys["READ"] = "read";
|
|
15
|
+
OperationKeys["UPDATE"] = "update";
|
|
16
|
+
OperationKeys["DELETE"] = "delete";
|
|
17
|
+
OperationKeys["ON"] = "on.";
|
|
18
|
+
OperationKeys["AFTER"] = "after.";
|
|
19
|
+
})(OperationKeys || (exports.OperationKeys = OperationKeys = {}));
|
|
20
|
+
/**
|
|
21
|
+
* @summary Maps out groups of CRUD operations for easier mapping of decorators
|
|
22
|
+
*
|
|
23
|
+
* @constant DBOperations
|
|
24
|
+
*
|
|
25
|
+
* @memberOf module:db-decorators.Operations
|
|
26
|
+
*/
|
|
27
|
+
exports.DBOperations = {
|
|
28
|
+
CREATE: [OperationKeys.CREATE],
|
|
29
|
+
READ: [OperationKeys.READ],
|
|
30
|
+
UPDATE: [OperationKeys.UPDATE],
|
|
31
|
+
DELETE: [OperationKeys.DELETE],
|
|
32
|
+
CREATE_UPDATE: [OperationKeys.CREATE, OperationKeys.UPDATE],
|
|
33
|
+
READ_CREATE: [OperationKeys.READ, OperationKeys.CREATE],
|
|
34
|
+
ALL: [
|
|
35
|
+
OperationKeys.CREATE,
|
|
36
|
+
OperationKeys.READ,
|
|
37
|
+
OperationKeys.UPDATE,
|
|
38
|
+
OperationKeys.DELETE,
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILElBQVksYUFRWDtBQVJELFdBQVksYUFBYTtJQUN2Qix1REFBc0MsQ0FBQTtJQUN0QyxrQ0FBaUIsQ0FBQTtJQUNqQiw4QkFBYSxDQUFBO0lBQ2Isa0NBQWlCLENBQUE7SUFDakIsa0NBQWlCLENBQUE7SUFDakIsMkJBQVUsQ0FBQTtJQUNWLGlDQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7O0dBTUc7QUFDVSxRQUFBLFlBQVksR0FBb0M7SUFDM0QsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQzFCLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixhQUFhLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3ZELEdBQUcsRUFBRTtRQUNILGFBQWEsQ0FBQyxNQUFNO1FBQ3BCLGFBQWEsQ0FBQyxJQUFJO1FBQ2xCLGFBQWEsQ0FBQyxNQUFNO1FBQ3BCLGFBQWEsQ0FBQyxNQUFNO0tBQ3JCO0NBQ0YsQ0FBQyIsImZpbGUiOiJvcGVyYXRpb25zL2NvbnN0YW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHN1bW1hcnkgU2V0IG9mIGNvbnN0YW50cyB0byBkZWZpbmUgZGIgQ1JVRCBvcGVyYXRpb25zIGFuZCB0aGVpciBlcXVpdmFsZW50ICdvbicgYW5kICdhZnRlcicgcGhhc2VzXG4gKiBAY29uc3QgT3BlcmF0aW9uS2V5c1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5PcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBlbnVtIE9wZXJhdGlvbktleXMge1xuICBSRUZMRUNUID0gXCJkZWNhZi5tb2RlbC5kYi5vcGVyYXRpb25zLlwiLFxuICBDUkVBVEUgPSBcImNyZWF0ZVwiLFxuICBSRUFEID0gXCJyZWFkXCIsXG4gIFVQREFURSA9IFwidXBkYXRlXCIsXG4gIERFTEVURSA9IFwiZGVsZXRlXCIsXG4gIE9OID0gXCJvbi5cIixcbiAgQUZURVIgPSBcImFmdGVyLlwiLFxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IE1hcHMgb3V0IGdyb3VwcyBvZiBDUlVEIG9wZXJhdGlvbnMgZm9yIGVhc2llciBtYXBwaW5nIG9mIGRlY29yYXRvcnNcbiAqXG4gKiBAY29uc3RhbnQgREJPcGVyYXRpb25zXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLk9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IERCT3BlcmF0aW9uczogUmVjb3JkPHN0cmluZywgT3BlcmF0aW9uS2V5c1tdPiA9IHtcbiAgQ1JFQVRFOiBbT3BlcmF0aW9uS2V5cy5DUkVBVEVdLFxuICBSRUFEOiBbT3BlcmF0aW9uS2V5cy5SRUFEXSxcbiAgVVBEQVRFOiBbT3BlcmF0aW9uS2V5cy5VUERBVEVdLFxuICBERUxFVEU6IFtPcGVyYXRpb25LZXlzLkRFTEVURV0sXG4gIENSRUFURV9VUERBVEU6IFtPcGVyYXRpb25LZXlzLkNSRUFURSwgT3BlcmF0aW9uS2V5cy5VUERBVEVdLFxuICBSRUFEX0NSRUFURTogW09wZXJhdGlvbktleXMuUkVBRCwgT3BlcmF0aW9uS2V5cy5DUkVBVEVdLFxuICBBTEw6IFtcbiAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gIF0sXG59O1xuIl19
|