UNPKG

@dotbase/hl7-v2-message

Version:

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

40 lines (39 loc) 1.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Hl7Parser = void 0; const tslib_1 = require("tslib"); const messageParser_1 = tslib_1.__importDefault(require("./messageParser")); const fieldParser_1 = tslib_1.__importDefault(require("./fieldParser")); const __1 = tslib_1.__importDefault(require("..")); class Hl7Parser { static parse(rawMessage) { const rawSegments = Hl7Parser.splitSegments(rawMessage); const mshSegment = Hl7Parser.getMessageHeader(rawSegments); const messageType = mshSegment.fields.MSH_9.value; return messageParser_1.default.initMessageSegments(messageType, mshSegment, rawSegments); } static splitSegments(rawMessage) { return rawMessage.split(/(\n|<cr>)/).map((segment) => this.splitSegment(segment)); } static splitSegment(rawSegment) { const type = rawSegment.substring(0, rawSegment.indexOf("|")); let splitValue = rawSegment.substring(rawSegment.indexOf("|") + 1); if (type === "MSH") splitValue = `|${splitValue}`; return { type: type, fields: Hl7Parser.splitFields(splitValue), }; } static splitFields(rawFields) { return rawFields.split("|"); } static getMessageHeader(rawSegments) { const rawMSH = rawSegments.find((segment) => segment.type === "MSH"); if (!rawMSH) throw Error("Missing mandatory segment of type MSH"); return fieldParser_1.default.initSegmentFields(new __1.default.segments.MSH_Segment(), rawMSH); } } exports.Hl7Parser = Hl7Parser; exports.default = Hl7Parser.parse;