@sphereon/pex
Version:
A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification
99 lines • 8.5 kB
JavaScript
import { ObjectValidationUtils } from '../../utils';
import { ConstraintsVB } from './constraintsVB';
import { ValidationBundler } from './validationBundler';
export class InputDescriptorsV2VB extends ValidationBundler {
idMustBeNonEmptyStringMsg = 'input descriptor id must be non-empty string';
nameShouldBeNonEmptyStringMsg = 'input descriptor name should be non-empty string';
constructor(parentTag) {
super(parentTag, 'input_descriptor');
}
getValidations(inputDescriptors) {
let validations = [];
validations.push({
tag: this.getTag(),
target: inputDescriptors,
predicate: (inDescs) => this.shouldNotHaveSchema(inDescs),
message: 'input descriptor should not have schema property',
}, {
tag: this.getTag(),
target: inputDescriptors,
predicate: (inDescs) => this.shouldHaveUniqueIds(inDescs),
message: 'input descriptor ids must be unique',
}, {
tag: this.getTag(),
target: inputDescriptors,
predicate: (inDescs) => this.shouldHaveUniqueFieldsIds(inDescs),
message: 'fields id must be unique',
});
inputDescriptors.forEach((inputDescriptor, inDescInd) => {
validations = [
...validations,
...this.getValidationFor(inputDescriptor, inDescInd),
...this.constraintsValidations(inputDescriptor, inDescInd),
];
});
return validations;
}
getValidationFor(inputDescriptor, inDescInd) {
return [
{
tag: this.getMyTag(inDescInd),
target: inputDescriptor,
predicate: (inDesc) => ObjectValidationUtils.nonEmptyString(inDesc?.id),
message: this.idMustBeNonEmptyStringMsg,
},
{
tag: this.getMyTag(inDescInd),
target: inputDescriptor,
predicate: (inDesc) => ObjectValidationUtils.optionalNonEmptyString(inDesc?.name),
message: this.nameShouldBeNonEmptyStringMsg,
},
];
}
shouldHaveUniqueFieldsIds(inputDescriptors) {
const nonUniqueInputDescriptorFieldsIds = [];
const uniqueInputDescriptorFieldsIds = new Set();
const tmp = [];
inputDescriptors
.map((e) => e.constraints?.fields)
.forEach((e) => {
if (e) {
tmp.push(...e);
}
});
tmp.forEach((e) => {
if (e.id) {
nonUniqueInputDescriptorFieldsIds.push(e.id);
}
});
nonUniqueInputDescriptorFieldsIds.forEach((id) => uniqueInputDescriptorFieldsIds.add(id));
return nonUniqueInputDescriptorFieldsIds.length === uniqueInputDescriptorFieldsIds.size;
}
shouldHaveUniqueIds(inputDescriptors) {
const nonUniqueInputDescriptorIds = [];
const uniqueInputDescriptorIds = new Set();
inputDescriptors.forEach((e) => nonUniqueInputDescriptorIds.push(e.id));
nonUniqueInputDescriptorIds.forEach((e) => uniqueInputDescriptorIds.add(e));
return nonUniqueInputDescriptorIds.length === uniqueInputDescriptorIds.size;
}
getMyTag(srInd) {
// TODO extract to make it generic
return this.parentTag + '.' + this.myTag + '[' + srInd + ']';
}
constraintsValidations(inputDescriptor, inDescInd) {
if (inputDescriptor.constraints) {
return new ConstraintsVB(this.getMyTag(inDescInd)).getValidations(inputDescriptor.constraints);
}
return [];
}
shouldNotHaveSchema(inputDescriptors) {
let hasSchema = false;
inputDescriptors.forEach((id) => {
if (id['schema']) {
hasSchema = true;
}
});
return !hasSchema;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXREZXNjcmlwdG9yc1YyVkIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvdmFsaWRhdGlvbi9idW5kbGVycy9pbnB1dERlc2NyaXB0b3JzVjJWQi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBc0M7SUFDN0QseUJBQXlCLEdBQUcsOENBQThDLENBQUM7SUFDM0UsNkJBQTZCLEdBQUcsa0RBQWtELENBQUM7SUFFcEcsWUFBWSxTQUFpQjtRQUMzQixLQUFLLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLGNBQWMsQ0FDbkIsZ0JBQXFDO1FBUXJDLElBQUksV0FBVyxHQU1ULEVBQUUsQ0FBQztRQUVULFdBQVcsQ0FBQyxJQUFJLENBQ2Q7WUFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLE9BQTRCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7WUFDOUUsT0FBTyxFQUFFLGtEQUFrRDtTQUM1RCxFQUNEO1lBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEIsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixTQUFTLEVBQUUsQ0FBQyxPQUE0QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1lBQzlFLE9BQU8sRUFBRSxxQ0FBcUM7U0FDL0MsRUFDRDtZQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxF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