@animo-id/pex
Version:
A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification
122 lines • 9.89 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FieldsVB = void 0;
const jsonpath_1 = require("@astronautlabs/jsonpath");
const pex_models_1 = require("@sphereon/pex-models");
const validateFilterv1_js_1 = __importDefault(require("../validateFilterv1.js"));
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const validateFilterv2_js_1 = __importDefault(require("../validateFilterv2.js"));
const validationBundler_1 = require("./validationBundler");
class FieldsVB extends validationBundler_1.ValidationBundler {
constructor(parentTag) {
super(parentTag, 'fields');
this.mustHaveValidJsonPathsMsg = 'field object "path" property must contain array of valid json paths';
this.pathObjMustHaveValidJsonPathMsg = 'field object "path" property must contain valid json paths.';
this.filterMustBeValidJsonSchemaMsg = 'field object "filter" property must be valid json schema';
this.filterIsMustInPresenceOfPredicateMsg = 'field object must have a "filter" property if "predicate" is present';
this.filterIsNotValidJsonSchemaDescriptorMsg = 'could not parse "filter" object as a valid json schema descriptor.';
this.purposeShouldBeANonEmptyStringMsg = 'purpose should be a non empty string';
this.shouldBeKnownOptionMsg = 'Unknown predicate property';
}
getValidations(fields) {
let validations = [];
if (fields) {
for (let srInd = 0; srInd < fields.length; srInd++) {
validations = [...validations, ...this.getValidationsFor(fields[srInd], srInd)];
}
}
return validations;
}
getValidationsFor(field, indx) {
return [
{
tag: this.getMyTag(indx),
target: field,
predicate: this.mustHaveValidJsonPaths(),
message: this.mustHaveValidJsonPathsMsg,
},
{
tag: this.getMyTag(indx),
target: field,
predicate: this.filterMustBeValidJsonSchema(),
message: this.filterMustBeValidJsonSchemaMsg,
},
{
tag: this.getMyTag(indx),
target: field,
predicate: this.filterIsMustInPresenceOfPredicate(),
message: this.filterIsMustInPresenceOfPredicateMsg,
},
{
tag: this.getMyTag(indx),
target: field,
predicate: (field) => FieldsVB.optionalNonEmptyString(field === null || field === void 0 ? void 0 : field.purpose),
message: this.purposeShouldBeANonEmptyStringMsg,
},
{
tag: this.getMyTag(indx),
target: field,
predicate: (field) => FieldsVB.shouldBeKnownOption(field === null || field === void 0 ? void 0 : field.predicate),
message: this.shouldBeKnownOptionMsg,
},
];
}
getMyTag(srInd) {
// TODO extract to make it generic
return this.parentTag + '.' + this.myTag + '[' + srInd + ']';
}
mustHaveValidJsonPaths() {
return (fieldObj) => fieldObj.path != null && fieldObj.path.length > 0 && this._validateJsonPaths(fieldObj.path);
}
_validateJsonPaths(jsonPath) {
const invalidPaths = [];
jsonPath.forEach((path) => {
try {
jsonpath_1.JSONPath.parse(path);
}
catch (err) {
invalidPaths.push(path);
}
});
if (invalidPaths.length > 0) {
throw this.toChecked(this.pathObjMustHaveValidJsonPathMsg + ' Got: ' + JSON.stringify(invalidPaths));
}
return true;
}
filterMustBeValidJsonSchema() {
return (fieldObj) => this._validateFilter(fieldObj.filter);
}
_validateFilter(filter) {
if (filter == null) {
return true;
}
let valid = false;
try {
valid = (0, validateFilterv2_js_1.default)(filter);
if (!valid) {
valid = (0, validateFilterv1_js_1.default)(filter);
}
}
catch (err) {
throw this.toChecked(this.filterIsNotValidJsonSchemaDescriptorMsg + ' Got ' + JSON.stringify(filter));
}
return valid;
}
filterIsMustInPresenceOfPredicate() {
return (fieldObj) => !(fieldObj.predicate != null && fieldObj.filter == null);
}
static optionalNonEmptyString(str) {
// TODO extract to generic utils or use something like lodash
return str == null || str.length > 0;
}
static shouldBeKnownOption(option) {
// TODO can be be extracted as a generic function
return option == null || option == pex_models_1.Optionality.Required || option == pex_models_1.Optionality.Preferred;
}
}
exports.FieldsVB = FieldsVB;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzVkIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvdmFsaWRhdGlvbi9idW5kbGVycy9maWVsZHNWQi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBeUQ7QUFDekQscURBQXlGO0FBS3pGLGlGQUFzRDtBQUN0RCw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLGlGQUFzRDtBQUV0RCwyREFBd0Q7QUFFeEQsTUFBYSxRQUFTLFNBQVEscUNBQXdDO0lBU3BFLFlBQVksU0FBaUI7UUFDM0IsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQVRaLDhCQUF5QixHQUFHLHFFQUFxRSxDQUFDO1FBQ2xHLG9DQUErQixHQUFHLDZEQUE2RCxDQUFDO1FBQ2hHLG1DQUE4QixHQUFHLDBEQUEwRCxDQUFDO1FBQzVGLHlDQUFvQyxHQUFHLHNFQUFzRSxDQUFDO1FBQzlHLDRDQUF1QyxHQUFHLG9FQUFvRSxDQUFDO1FBQy9HLHNDQUFpQyxHQUFHLHNDQUFzQyxDQUFDO1FBQzNFLDJCQUFzQixHQUFHLDRCQUE0QixDQUFDO0lBSXZFLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBNkI7UUFDakQsSUFBSSxXQUFXLEdBQW9DLEVBQUUsQ0FBQztRQUN0RCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsV0FBVyxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBd0IsRUFBRSxJQUFZO1FBQzdE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