UNPKG

@sphereon/pex

Version:

A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification

99 lines 8.5 kB
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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