@animo-id/pex
Version:
A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification
108 lines • 9.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SubmissionRequirementVB = void 0;
const validationBundler_1 = require("./validationBundler");
class SubmissionRequirementVB extends validationBundler_1.ValidationBundler {
constructor(parentTag) {
super(parentTag, 'submission_requirements');
this.ruleIsMandatoryMsg = 'rule is a mandatory field';
this.needsOneFromOrFromNestedMsg = 'needs exactly one of from or from_nested';
this.fromNestedShouldBeArrayMsg = 'The value of the from_nested property MUST be an array';
this.isCountPositiveIntMsg = 'count must be a practical positive number';
this.isMinPositiveIntMsg = 'min must be a practical positive number';
this.isMaxPositiveIntMsg = 'max must be a practical positive number';
this.ruleShouldBePickOrAllMsg = 'rule should be either pick or all';
}
getValidations(srs) {
let validations = [];
if (srs != null && srs.length > 0) {
for (let srInd = 0; srInd < srs.length; srInd++) {
validations = [...validations, ...this.getMyValidations(srInd, srs), ...this.getSubValidations(srInd, srs)];
}
}
return validations;
}
getMyValidations(srInd, srs) {
return [
{
tag: this.getMyTag(srInd),
target: srs[srInd],
predicate: SubmissionRequirementVB.ruleIsMandatory,
message: this.ruleIsMandatoryMsg,
}, // Validation 4.2.1.A
{
tag: this.getMyTag(srInd),
target: srs[srInd],
predicate: SubmissionRequirementVB.needsOneFromOrFromNested,
message: this.needsOneFromOrFromNestedMsg,
}, // Validation 4.2.1.B.A
{
tag: this.getMyTag(srInd),
target: srs[srInd],
predicate: SubmissionRequirementVB.fromNestedShouldBeArray,
message: this.fromNestedShouldBeArrayMsg,
}, // Validation 4.2.1.D
// TODO Validation 4.2.1.E All objects in from_nested should be of type SubmissionRequirement
// See if it can be implemented in pe-api yamls. currently in typescript type of this variable is 'any'
// i.e. from_nested?: Array<object>;
{
tag: this.getMyTag(srInd),
target: srs[srInd],
predicate: this.isCountPositiveInt,
message: this.isCountPositiveIntMsg,
}, // Validation 4.2.2.B.A.A
{
tag: this.getMyTag(srInd),
target: srs[srInd],
predicate: this.isMinPositiveInt,
message: this.isMinPositiveIntMsg,
}, // Validation 4.2.2.B.B.A
{
tag: this.getMyTag(srInd),
target: srs[srInd],
predicate: this.isMaxPositiveInt,
message: this.isMaxPositiveIntMsg,
}, // Validation 4.2.2.B.C.A
{
tag: this.getMyTag(srInd),
target: srs[srInd],
predicate: SubmissionRequirementVB.ruleShouldBePickOrAll,
message: this.ruleShouldBePickOrAllMsg,
}, // Validation 4.2.4
];
}
getMyTag(srInd) {
// TODO extract to make it generic
return this.parentTag + '.' + this.myTag + '[' + srInd + ']';
}
getSubValidations(srInd, srs) {
const fromNested = srs[srInd].from_nested;
return fromNested != null ? new SubmissionRequirementVB(this.getFromNestedTag(srInd)).getValidations(fromNested) : [];
}
getFromNestedTag(srInd) {
return this.getMyTag(srInd) + '.' + 'from_nested';
}
isCountPositiveInt(sr) {
return sr.rule !== 'pick' || sr.count == null || 0 < sr.count;
}
isMinPositiveInt(sr) {
return sr.rule !== 'pick' || sr.min == null || 0 <= sr.min;
}
isMaxPositiveInt(sr) {
return sr.rule !== 'pick' || sr.max == null || 0 < sr.max;
}
static ruleIsMandatory(sr) {
return sr.rule != null;
}
static needsOneFromOrFromNested(sr) {
return (sr.from == null) !== (sr.from_nested == null); // XOR
}
static fromNestedShouldBeArray(sr) {
return sr.from_nested == null || Array.isArray(sr.from_nested);
}
static ruleShouldBePickOrAll(sr) {
return sr.rule === 'pick' || sr.rule === 'all';
}
}
exports.SubmissionRequirementVB = SubmissionRequirementVB;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWlzc2lvblJlcXVpcmVtZW50VkIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvdmFsaWRhdGlvbi9idW5kbGVycy9zdWJtaXNzaW9uUmVxdWlyZW1lbnRWQi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSwyREFBd0Q7QUFFeEQsTUFBYSx1QkFBd0IsU0FBUSxxQ0FBd0M7SUFTbkYsWUFBWSxTQUFpQjtRQUMzQixLQUFLLENBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFUN0IsdUJBQWtCLEdBQUcsMkJBQTJCLENBQUM7UUFDakQsZ0NBQTJCLEdBQUcsMENBQTBDLENBQUM7UUFDekUsK0JBQTBCLEdBQUcsd0RBQXdELENBQUM7UUFDdEYsMEJBQXFCLEdBQUcsMkNBQTJDLENBQUM7UUFDcEUsd0JBQW1CLEdBQUcseUNBQXlDLENBQUM7UUFDaEUsd0JBQW1CLEdBQUcseUNBQXlDLENBQUM7UUFDaEUsNkJBQXdCLEdBQUcsbUNBQW1DLENBQUM7SUFJaEYsQ0FBQztJQUVNLGNBQWMsQ0FBQyxHQUE0QjtRQUNoRCxJQUFJLFdBQVcsR0FBd0MsRUFBRSxDQUFDO1FBQzFELElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ2hELFdBQVcsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsR0FBNEI7UUFDbEUsT0FBTztZQUNMO2dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDekIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xCLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxlQUFlO2dCQUNsRCxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjthQUNqQyxFQUFFLHFCQUFxQjtZQUN4QjtnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNsQixTQUFTLEVBQUUsdUJBQXVCLENBQUMsd0JBQXdCO2dCQUMzRCxPQUFPLEVBQUUsSUFBSSxDQUFDLDJCQUEyQjthQUMxQyxFQUFFLHVCQUF1QjtZQUMxQjtnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNsQixTQUFTLEVBQUUsdUJBQXVCLENBQUMsdUJBQXVCO2dCQUMxRCxPQUFPLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjthQUN6QyxFQUFFLHFCQUFxQjtZQUV4Qiw2RkFBNkY7WUFDN0YsNEdBQTRHO1lBQzVHLHlDQUF5QztZQUV6QztnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDbEMsT0FBTyxFQUFFLElBQUksQ0FBQyxxQkFBcUI7YUFDcEMsRUFBRSx5QkFBeUI7WUFDNUI7Z0JBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUN6QixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CO2FBQ2xDLEVBQUUseUJBQXlCO1lBQzVCO2dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDekIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjthQUNsQyxFQUFFLHlCQUF5QjtZQUM1QjtnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNsQixTQUFTLEVBQUUsdUJBQXVCLENBQUMscUJBQXFCO2dCQUN4RCxPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjthQUN2QyxFQUFFLG1CQUFtQjtTQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVTLFFBQVEsQ0FBQyxLQUFhO1FBQzlCLGtDQUFrQztRQUNsQyxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDL0QsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxHQUE0QjtRQUNuRSxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBc0MsQ0FBQztRQUNyRSxPQUFPLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEgsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWE7UUFDcEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxhQUFhLENBQUM7SUFDcEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQXlCO1FBQzFDLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDaEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQXlCO1FBQ3hDLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDN0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQXlCO1FBQ3hDLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBeUI7UUFDdEQsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU8sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEVBQXlCO1FBQy9ELE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07SUFDL0QsQ0FBQztJQUVPLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxFQUF5QjtRQUM5RCxPQUFPLEVBQUUsQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBeUI7UUFDNUQsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFwSEQsMERBb0hDIn0=