UNPKG

@dotbase/hl7-v2-message

Version:

Parses HL7 v2.x messages into typed javascript objects and makes them easily accessable.

38 lines (37 loc) 1.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class FieldParser { static initSegmentFields(segment, rawSegment) { if (!FieldParser.validateFieldLength(segment.fields, rawSegment.fields)) { throw Error(`Number of fields in raw segment ${rawSegment.type} does not match required number of fields`); } return FieldParser.setFieldValues(segment, rawSegment); } static setFieldValues(segment, rawSegment) { rawSegment.fields.forEach((value, index) => FieldParser.setFieldValue(segment, value, index)); return segment; } static setFieldValue(segment, rawValue, index) { for (const field of Object.values(segment.fields)) { if (field.index === index) field.value = rawValue; } return segment; } static validateFieldLength(segmentFields, rawSegmentFields) { const maxFields = Object.entries(segmentFields).length; const minFields = FieldParser.getMandatoryFields(segmentFields) + 1; if (rawSegmentFields.length < minFields || rawSegmentFields.length > maxFields) return false; return true; } static getMandatoryFields(segmentFields) { let minFieldIndex = 0; for (const field of Object.values(segmentFields)) { if (field.isOptional === false && field.index >= minFieldIndex) minFieldIndex = field.index; } return minFieldIndex; } } exports.default = FieldParser;