hl7-tstd 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -96,7 +96,7 @@ var Segment = class {
96
96
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
97
97
  if (!field || !/^[A-Z\d]{3}(\.\d+){1,2}$/.test(field))
98
98
  throw new Error(`Invalid parameter: 'field' [${field}]`);
99
- if (!value || typeof value !== "string")
99
+ if (value == null || typeof value !== "string")
100
100
  throw new Error(`Invalid parameter: 'value' [${value}]`);
101
101
  if (typeof repeatingIndex !== "number" && repeatingIndex < 0)
102
102
  throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\ntype TSegmentType =\n | 'DG1'\n | 'EVN'\n | 'GT1'\n | 'IN1'\n | 'MSH'\n | 'NK1'\n | 'NTE'\n | 'OBR'\n | 'OBX'\n | 'ORC'\n | 'PID'\n | 'PR1'\n | 'PV1'\n | 'PV2'\n | (string & {});\n\ntype TSegmentData = Record<string, Array<Record<string, Array<string>>>>;\n\ntype TParseOptions = {\n fieldDelim: string;\n repeatingDelim: string;\n componentDelim: string;\n subCompDelim: string;\n eolDelim: '\\r?\\n|\\r' | '\\r\\n' | '\\n' | '\\r';\n buildEolChar: '\\r\\n' | '\\n' | '\\r';\n};\n\nclass Node<T> {\n constructor(\n public readonly data: T,\n public next: Node<T> | null = null,\n public prev: Node<T> | null = null\n ) {}\n}\n\nclass Segment {\n private parseOptions: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>;\n\n constructor(\n public readonly type: TSegmentType,\n public data: TSegmentData | null = null,\n parseOptions?: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>\n ) {\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n };\n }\n\n get(field: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!this.data) return null;\n\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){0,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (typeof repeatingIndex !== 'number' || repeatingIndex < -1)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' || subComponentIndex < -1)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot get [${field}] from [${this.type}] segment.`\n );\n\n if (fieldIdx && compIdx) {\n if (subComponentIndex === -1) {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[\n `${type}.${fieldIdx}.${compIdx}`\n ]?.join(subCompDelim) ?? null\n );\n } else {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n subComponentIndex\n ] ?? null\n );\n }\n } else if (fieldIdx) {\n let field =\n repeatingIndex === -1\n ? this.data[`${type}.${fieldIdx}`]\n : [this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]];\n const repeatingFieldsArr: string[] = [];\n\n if (!field || !field[0]) return null;\n\n for (const repeatingField of field) {\n const componentsArr: string[] = [];\n\n for (const compKey in repeatingField) {\n componentsArr.push(repeatingField[compKey]!.join(subCompDelim));\n }\n\n repeatingFieldsArr.push(componentsArr.join(componentDelim));\n }\n\n return repeatingFieldsArr.join(repeatingDelim);\n } else {\n if (!this.data) return null;\n\n const fieldsArr = [this.type];\n\n for (const fieldKey in this.data) {\n const repeatingCompsArr = [];\n\n for (const repeatingField of this.data[fieldKey]!) {\n const compsArr = [];\n\n for (const compKey in repeatingField) {\n compsArr.push(repeatingField[compKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n return fieldsArr.join(fieldDelim);\n }\n }\n\n set(field: string, value: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){1,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (!value || typeof value !== 'string')\n throw new Error(`Invalid parameter: 'value' [${value}]`);\n if (typeof repeatingIndex !== 'number' && repeatingIndex < 0)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' && subComponentIndex < 0)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot set [${field}] from [${this.type}] segment.`\n );\n\n if (!fieldIdx) throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n if (!this.data) this.data = {};\n\n for (let i = type === 'MSH' ? 2 : 1; i <= parseInt(fieldIdx, 10); i++) {\n if (this.data[`${type}.${i}`]?.[0]?.[`${type}.${i}.${1}`] == null)\n this.data[`${type}.${i}`] = [{ [`${type}.${i}.${1}`]: [''] }];\n }\n\n for (let i = 0; i <= repeatingIndex; i++) {\n if (this.data[`${type}.${fieldIdx}`]?.[i]?.[`${type}.${fieldIdx}.${1}`] == null)\n this.data[`${type}.${fieldIdx}`]![i] = { [`${type}.${fieldIdx}.${1}`]: [''] };\n }\n\n if (compIdx) {\n for (let i = 1; i <= parseInt(compIdx, 10); i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${i}`] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${i}`] = [''];\n }\n\n for (let i = 0; i <= subComponentIndex; i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n i\n ] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![i] =\n '';\n }\n\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![\n subComponentIndex\n ] = value;\n } else {\n this.data[`${type}.${fieldIdx}`]![repeatingIndex] = {\n [`${type}.${fieldIdx}.${1}`]: [value],\n };\n }\n }\n}\n\nclass HL7 {\n raw: string;\n parseOptions: TParseOptions;\n private head: Node<Segment> | null = null;\n private tail: Node<Segment> | null = null;\n\n constructor(hl7Msg: string, parseOptions?: Prettify<Partial<TParseOptions>>) {\n this.raw = typeof hl7Msg === 'string' ? hl7Msg : '';\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n eolDelim: parseOptions?.eolDelim ?? '\\r?\\n|\\r',\n buildEolChar: parseOptions?.buildEolChar ?? '\\r\\n',\n };\n\n this.transform();\n }\n\n /**\n * @deprecated This method is triggered internally and doesnt need to be invoked manually.\n */\n transform() {\n if (!this.raw.startsWith('MSH')) {\n throw new Error(\n 'Expected raw msg to be HL7 message. Message does not start with MSH segment.'\n );\n }\n\n const segmentsStr = this.raw\n .split(RegExp(this.parseOptions.eolDelim))\n .filter((segmentStr) => /^[A-Z\\d]{3}\\|/.test(segmentStr));\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n\n for (const segmentStr of segmentsStr) {\n const type = segmentStr.substring(0, 3);\n const segment = new Segment(type, null, this.parseOptions);\n const fields = segmentStr.split(fieldDelim);\n segment.data = {};\n\n for (let i = 1; i < fields.length; i++) {\n const fieldIdx = type === 'MSH' ? i + 1 : i;\n const repeatingComps = fields[i]!.split(repeatingDelim);\n segment.data[`${type}.${fieldIdx}`] = [];\n\n for (let j = 0; j < repeatingComps.length; j++) {\n const components = repeatingComps[j]!.split(componentDelim);\n segment.data[`${type}.${fieldIdx}`]![j] = {};\n\n for (let k = 0; k < components.length; k++) {\n const subComps = components[k]!.split(subCompDelim);\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`] = [];\n\n for (let l = 0; l < subComps.length; l++) {\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`]![l] =\n subComps[l]!;\n }\n }\n }\n }\n\n if (type === 'MSH') {\n segment.data['MSH.2'] = [\n { 'MSH.2.1': [`${componentDelim}${repeatingDelim}\\\\${subCompDelim}`] },\n ];\n }\n\n this.appendSegmentNode(segment);\n }\n }\n\n build() {\n const segments = this.getSegments();\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim, buildEolChar } =\n this.parseOptions;\n const segmentsStrArr = [];\n\n for (const segment of segments) {\n const fieldsArr = [segment.type];\n\n for (const fieldKey in segment.data) {\n const repeatingCompsArr = [];\n\n for (const component of segment.data[fieldKey]!) {\n const compsArr = [];\n\n for (const subCompsKey in component) {\n compsArr.push(component[subCompsKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n segmentsStrArr.push(fieldsArr.join(fieldDelim));\n }\n\n return segmentsStrArr.join(buildEolChar);\n }\n\n getSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data.type === type) return curr.data;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n getSegments(type?: TSegmentType) {\n if (type && !/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n const segments = [];\n let curr = this.head;\n\n while (curr) {\n if (type) {\n if (type === curr.data.type) segments.push(curr.data);\n } else {\n segments.push(curr.data);\n }\n\n curr = curr.next;\n }\n\n return segments;\n }\n\n getSegmentsAfter(\n startSegment: Segment,\n type: TSegmentType,\n stopSegmentType: TSegmentType[] = [],\n consecutive = false\n ) {\n if (!startSegment || !(startSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'startSegment'`);\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!stopSegmentType || !Array.isArray(stopSegmentType))\n throw new Error(`Invalid parameter: 'stopSegmentType'`);\n if (typeof consecutive !== 'boolean')\n throw new Error(`Invalid parameter: 'consecutive' [${consecutive}]`);\n\n const startNode = this.getNode(startSegment);\n\n if (!startNode) throw new Error(`Failed to locate: 'startSegment' [${startSegment.type}]`);\n\n const res = [];\n let curr = startNode.next;\n\n while (curr) {\n if (stopSegmentType.length && stopSegmentType.includes(curr.data.type)) break;\n\n if (curr.data.type === type) res.push(curr.data);\n else if (consecutive && res.length) break;\n\n curr = curr.next;\n }\n\n return res;\n }\n\n createSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions));\n }\n\n createSegmentAfter(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n createSegmentBefore(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.prependSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n deleteSegment(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n\n this.deleteSegments([segment]);\n }\n\n deleteSegments(segments: Segment[]) {\n for (const segment of segments) {\n if (!segment || !(segment instanceof Segment))\n throw new Error(`Invalid parameter: 'segments'`);\n }\n\n for (const segment of segments) {\n const node = this.getNode(segment);\n\n if (!node) break;\n\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n if (this.head === node) this.head = this.head.next;\n if (this.tail === node) this.tail = this.tail.prev;\n\n node.next = null;\n node.prev = null;\n }\n }\n\n moveSegmentAfter(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.head) this.head = this.head.next;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode.next;\n node.prev = targetNode;\n targetNode.next = node;\n\n if (node.next?.prev) node.next.prev = node;\n\n if (targetNode === this.tail) this.tail = this.tail.next;\n }\n\n moveSegmentBefore(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.tail) this.tail = this.tail.prev;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode;\n node.prev = targetNode.prev;\n targetNode.prev = node;\n\n if (node.prev?.next) node.prev.next = node;\n\n if (targetNode === this.head) this.head = this.head.prev;\n }\n\n reindexSegments(\n resetRules: { [k in TSegmentType]?: TSegmentType[] },\n startIndex = 1,\n field = '1.1'\n ) {\n if (!resetRules || typeof resetRules !== 'object')\n throw new Error(`Invalid parameter: 'resetRules'`);\n if (!startIndex || typeof startIndex !== 'number')\n throw new Error(`Invalid parameter: 'startIndex' [${startIndex}]`);\n if (field && !/^(\\d+)(\\.\\d+){0,1}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n let curr = this.head;\n const indexMap: Record<string, number> = {};\n\n for (const key of Object.keys(resetRules)) {\n if (!Array.isArray(resetRules[key]))\n throw new Error(\n `Invalid parameter: 'resetRules'. Expected key [${key}] value to be an array.`\n );\n\n indexMap[key] = startIndex;\n }\n\n while (curr) {\n const segment = curr.data;\n\n if (segment.type in resetRules)\n segment.set(`${segment.type}.${field}`, String(indexMap[segment.type]!++));\n\n for (const [segmentType, resetTriggers] of Object.entries(resetRules)) {\n for (const resetTrigger of resetTriggers!) {\n if (segment.type === resetTrigger) {\n indexMap[segmentType] = startIndex;\n break;\n }\n }\n }\n\n curr = curr.next;\n }\n }\n\n private getNode(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) {\n throw new Error(`Invalid parameter: 'segment'`);\n }\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data === segment) return curr;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n private appendSegmentNode(newSegment: Segment, targetSegment?: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (targetSegment && !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const newNode = new Node(newSegment);\n\n if (targetSegment) {\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n newNode.next = targetNode.next;\n newNode.prev = targetNode;\n targetNode.next = newNode;\n\n if (newNode.next?.prev) newNode.next.prev = newNode;\n if (targetNode === this.tail) this.tail = this.tail.next;\n } else if (!this.head) {\n this.head = newNode;\n this.tail = newNode;\n } else if (this.tail) {\n newNode.prev = this.tail;\n this.tail.next = newNode;\n this.tail = this.tail.next;\n } else {\n throw new Error(`Failed to append segment: ${newSegment.type}`);\n }\n\n return newSegment;\n }\n\n private prependSegmentNode(newSegment: Segment, targetSegment: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n const newNode = new Node(newSegment);\n\n newNode.next = targetNode;\n newNode.prev = targetNode.prev;\n targetNode.prev = newNode;\n\n if (newNode.prev?.next) newNode.prev.next = newNode;\n if (targetNode === this.head) this.head = this.head.prev;\n\n return newSegment;\n }\n}\n\nexport type { Segment };\nexport default HL7;\n"],"mappings":"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","names":["field"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\ntype TSegmentType =\n | 'DG1'\n | 'EVN'\n | 'GT1'\n | 'IN1'\n | 'MSH'\n | 'NK1'\n | 'NTE'\n | 'OBR'\n | 'OBX'\n | 'ORC'\n | 'PID'\n | 'PR1'\n | 'PV1'\n | 'PV2'\n | (string & {});\n\ntype TSegmentData = Record<string, Array<Record<string, Array<string>>>>;\n\ntype TParseOptions = {\n fieldDelim: string;\n repeatingDelim: string;\n componentDelim: string;\n subCompDelim: string;\n eolDelim: '\\r?\\n|\\r' | '\\r\\n' | '\\n' | '\\r';\n buildEolChar: '\\r\\n' | '\\n' | '\\r';\n};\n\nclass Node<T> {\n constructor(\n public readonly data: T,\n public next: Node<T> | null = null,\n public prev: Node<T> | null = null\n ) {}\n}\n\nclass Segment {\n private parseOptions: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>;\n\n constructor(\n public readonly type: TSegmentType,\n public data: TSegmentData | null = null,\n parseOptions?: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>\n ) {\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n };\n }\n\n get(field: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!this.data) return null;\n\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){0,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (typeof repeatingIndex !== 'number' || repeatingIndex < -1)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' || subComponentIndex < -1)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot get [${field}] from [${this.type}] segment.`\n );\n\n if (fieldIdx && compIdx) {\n if (subComponentIndex === -1) {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[\n `${type}.${fieldIdx}.${compIdx}`\n ]?.join(subCompDelim) ?? null\n );\n } else {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n subComponentIndex\n ] ?? null\n );\n }\n } else if (fieldIdx) {\n let field =\n repeatingIndex === -1\n ? this.data[`${type}.${fieldIdx}`]\n : [this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]];\n const repeatingFieldsArr: string[] = [];\n\n if (!field || !field[0]) return null;\n\n for (const repeatingField of field) {\n const componentsArr: string[] = [];\n\n for (const compKey in repeatingField) {\n componentsArr.push(repeatingField[compKey]!.join(subCompDelim));\n }\n\n repeatingFieldsArr.push(componentsArr.join(componentDelim));\n }\n\n return repeatingFieldsArr.join(repeatingDelim);\n } else {\n if (!this.data) return null;\n\n const fieldsArr = [this.type];\n\n for (const fieldKey in this.data) {\n const repeatingCompsArr = [];\n\n for (const repeatingField of this.data[fieldKey]!) {\n const compsArr = [];\n\n for (const compKey in repeatingField) {\n compsArr.push(repeatingField[compKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n return fieldsArr.join(fieldDelim);\n }\n }\n\n set(field: string, value: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){1,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (value == null || typeof value !== 'string')\n throw new Error(`Invalid parameter: 'value' [${value}]`);\n if (typeof repeatingIndex !== 'number' && repeatingIndex < 0)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' && subComponentIndex < 0)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot set [${field}] from [${this.type}] segment.`\n );\n\n if (!fieldIdx) throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n if (!this.data) this.data = {};\n\n for (let i = type === 'MSH' ? 2 : 1; i <= parseInt(fieldIdx, 10); i++) {\n if (this.data[`${type}.${i}`]?.[0]?.[`${type}.${i}.${1}`] == null)\n this.data[`${type}.${i}`] = [{ [`${type}.${i}.${1}`]: [''] }];\n }\n\n for (let i = 0; i <= repeatingIndex; i++) {\n if (this.data[`${type}.${fieldIdx}`]?.[i]?.[`${type}.${fieldIdx}.${1}`] == null)\n this.data[`${type}.${fieldIdx}`]![i] = { [`${type}.${fieldIdx}.${1}`]: [''] };\n }\n\n if (compIdx) {\n for (let i = 1; i <= parseInt(compIdx, 10); i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${i}`] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${i}`] = [''];\n }\n\n for (let i = 0; i <= subComponentIndex; i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n i\n ] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![i] =\n '';\n }\n\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![\n subComponentIndex\n ] = value;\n } else {\n this.data[`${type}.${fieldIdx}`]![repeatingIndex] = {\n [`${type}.${fieldIdx}.${1}`]: [value],\n };\n }\n }\n}\n\nclass HL7 {\n raw: string;\n parseOptions: TParseOptions;\n private head: Node<Segment> | null = null;\n private tail: Node<Segment> | null = null;\n\n constructor(hl7Msg: string, parseOptions?: Prettify<Partial<TParseOptions>>) {\n this.raw = typeof hl7Msg === 'string' ? hl7Msg : '';\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n eolDelim: parseOptions?.eolDelim ?? '\\r?\\n|\\r',\n buildEolChar: parseOptions?.buildEolChar ?? '\\r\\n',\n };\n\n this.transform();\n }\n\n /**\n * @deprecated This method is triggered internally and doesnt need to be invoked manually.\n */\n transform() {\n if (!this.raw.startsWith('MSH')) {\n throw new Error(\n 'Expected raw msg to be HL7 message. Message does not start with MSH segment.'\n );\n }\n\n const segmentsStr = this.raw\n .split(RegExp(this.parseOptions.eolDelim))\n .filter((segmentStr) => /^[A-Z\\d]{3}\\|/.test(segmentStr));\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n\n for (const segmentStr of segmentsStr) {\n const type = segmentStr.substring(0, 3);\n const segment = new Segment(type, null, this.parseOptions);\n const fields = segmentStr.split(fieldDelim);\n segment.data = {};\n\n for (let i = 1; i < fields.length; i++) {\n const fieldIdx = type === 'MSH' ? i + 1 : i;\n const repeatingComps = fields[i]!.split(repeatingDelim);\n segment.data[`${type}.${fieldIdx}`] = [];\n\n for (let j = 0; j < repeatingComps.length; j++) {\n const components = repeatingComps[j]!.split(componentDelim);\n segment.data[`${type}.${fieldIdx}`]![j] = {};\n\n for (let k = 0; k < components.length; k++) {\n const subComps = components[k]!.split(subCompDelim);\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`] = [];\n\n for (let l = 0; l < subComps.length; l++) {\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`]![l] =\n subComps[l]!;\n }\n }\n }\n }\n\n if (type === 'MSH') {\n segment.data['MSH.2'] = [\n { 'MSH.2.1': [`${componentDelim}${repeatingDelim}\\\\${subCompDelim}`] },\n ];\n }\n\n this.appendSegmentNode(segment);\n }\n }\n\n build() {\n const segments = this.getSegments();\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim, buildEolChar } =\n this.parseOptions;\n const segmentsStrArr = [];\n\n for (const segment of segments) {\n const fieldsArr = [segment.type];\n\n for (const fieldKey in segment.data) {\n const repeatingCompsArr = [];\n\n for (const component of segment.data[fieldKey]!) {\n const compsArr = [];\n\n for (const subCompsKey in component) {\n compsArr.push(component[subCompsKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n segmentsStrArr.push(fieldsArr.join(fieldDelim));\n }\n\n return segmentsStrArr.join(buildEolChar);\n }\n\n getSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data.type === type) return curr.data;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n getSegments(type?: TSegmentType) {\n if (type && !/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n const segments = [];\n let curr = this.head;\n\n while (curr) {\n if (type) {\n if (type === curr.data.type) segments.push(curr.data);\n } else {\n segments.push(curr.data);\n }\n\n curr = curr.next;\n }\n\n return segments;\n }\n\n getSegmentsAfter(\n startSegment: Segment,\n type: TSegmentType,\n stopSegmentType: TSegmentType[] = [],\n consecutive = false\n ) {\n if (!startSegment || !(startSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'startSegment'`);\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!stopSegmentType || !Array.isArray(stopSegmentType))\n throw new Error(`Invalid parameter: 'stopSegmentType'`);\n if (typeof consecutive !== 'boolean')\n throw new Error(`Invalid parameter: 'consecutive' [${consecutive}]`);\n\n const startNode = this.getNode(startSegment);\n\n if (!startNode) throw new Error(`Failed to locate: 'startSegment' [${startSegment.type}]`);\n\n const res = [];\n let curr = startNode.next;\n\n while (curr) {\n if (stopSegmentType.length && stopSegmentType.includes(curr.data.type)) break;\n\n if (curr.data.type === type) res.push(curr.data);\n else if (consecutive && res.length) break;\n\n curr = curr.next;\n }\n\n return res;\n }\n\n createSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions));\n }\n\n createSegmentAfter(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n createSegmentBefore(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.prependSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n deleteSegment(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n\n this.deleteSegments([segment]);\n }\n\n deleteSegments(segments: Segment[]) {\n for (const segment of segments) {\n if (!segment || !(segment instanceof Segment))\n throw new Error(`Invalid parameter: 'segments'`);\n }\n\n for (const segment of segments) {\n const node = this.getNode(segment);\n\n if (!node) break;\n\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n if (this.head === node) this.head = this.head.next;\n if (this.tail === node) this.tail = this.tail.prev;\n\n node.next = null;\n node.prev = null;\n }\n }\n\n moveSegmentAfter(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.head) this.head = this.head.next;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode.next;\n node.prev = targetNode;\n targetNode.next = node;\n\n if (node.next?.prev) node.next.prev = node;\n\n if (targetNode === this.tail) this.tail = this.tail.next;\n }\n\n moveSegmentBefore(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.tail) this.tail = this.tail.prev;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode;\n node.prev = targetNode.prev;\n targetNode.prev = node;\n\n if (node.prev?.next) node.prev.next = node;\n\n if (targetNode === this.head) this.head = this.head.prev;\n }\n\n reindexSegments(\n resetRules: { [k in TSegmentType]?: TSegmentType[] },\n startIndex = 1,\n field = '1.1'\n ) {\n if (!resetRules || typeof resetRules !== 'object')\n throw new Error(`Invalid parameter: 'resetRules'`);\n if (!startIndex || typeof startIndex !== 'number')\n throw new Error(`Invalid parameter: 'startIndex' [${startIndex}]`);\n if (field && !/^(\\d+)(\\.\\d+){0,1}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n let curr = this.head;\n const indexMap: Record<string, number> = {};\n\n for (const key of Object.keys(resetRules)) {\n if (!Array.isArray(resetRules[key]))\n throw new Error(\n `Invalid parameter: 'resetRules'. Expected key [${key}] value to be an array.`\n );\n\n indexMap[key] = startIndex;\n }\n\n while (curr) {\n const segment = curr.data;\n\n if (segment.type in resetRules)\n segment.set(`${segment.type}.${field}`, String(indexMap[segment.type]!++));\n\n for (const [segmentType, resetTriggers] of Object.entries(resetRules)) {\n for (const resetTrigger of resetTriggers!) {\n if (segment.type === resetTrigger) {\n indexMap[segmentType] = startIndex;\n break;\n }\n }\n }\n\n curr = curr.next;\n }\n }\n\n private getNode(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) {\n throw new Error(`Invalid parameter: 'segment'`);\n }\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data === segment) return curr;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n private appendSegmentNode(newSegment: Segment, targetSegment?: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (targetSegment && !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const newNode = new Node(newSegment);\n\n if (targetSegment) {\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n newNode.next = targetNode.next;\n newNode.prev = targetNode;\n targetNode.next = newNode;\n\n if (newNode.next?.prev) newNode.next.prev = newNode;\n if (targetNode === this.tail) this.tail = this.tail.next;\n } else if (!this.head) {\n this.head = newNode;\n this.tail = newNode;\n } else if (this.tail) {\n newNode.prev = this.tail;\n this.tail.next = newNode;\n this.tail = this.tail.next;\n } else {\n throw new Error(`Failed to append segment: ${newSegment.type}`);\n }\n\n return newSegment;\n }\n\n private prependSegmentNode(newSegment: Segment, targetSegment: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n const newNode = new Node(newSegment);\n\n newNode.next = targetNode;\n newNode.prev = targetNode.prev;\n targetNode.prev = newNode;\n\n if (newNode.prev?.next) newNode.prev.next = newNode;\n if (targetNode === this.head) this.head = this.head.prev;\n\n return newSegment;\n }\n}\n\nexport type { Segment };\nexport default HL7;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCA,IAAM,OAAN,MAAc;AAAA,EACZ,YACkB,MACT,OAAuB,MACvB,OAAuB,MAC9B;AAHgB;AACT;AACA;AAAA,EACN;AACL;AAEA,IAAM,UAAN,MAAc;AAAA,EAGZ,YACkB,MACT,OAA4B,MACnC,cACA;AAHgB;AACT;AA7CX;AAgDI,SAAK,eAAe;AAAA,MAClB,aAAY,kDAAc,eAAd,YAA4B;AAAA,MACxC,iBAAgB,kDAAc,mBAAd,YAAgC;AAAA,MAChD,iBAAgB,kDAAc,mBAAd,YAAgC;AAAA,MAChD,eAAc,kDAAc,iBAAd,YAA8B;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,IAAI,OAAe,iBAAiB,GAAG,oBAAoB,GAAG;AAxDhE;AAyDI,QAAI,CAAC,KAAK,KAAM,QAAO;AAEvB,QAAI,CAAC,SAAS,CAAC,2BAA2B,KAAK,KAAK;AAClD,YAAM,IAAI,MAAM,+BAA+B,KAAK,GAAG;AACzD,QAAI,OAAO,mBAAmB,YAAY,iBAAiB;AACzD,YAAM,IAAI,MAAM,wCAAwC,cAAc,GAAG;AAC3E,QAAI,OAAO,sBAAsB,YAAY,oBAAoB;AAC/D,YAAM,IAAI,MAAM,2CAA2C,iBAAiB,GAAG;AAEjF,UAAM,EAAE,YAAY,gBAAgB,gBAAgB,aAAa,IAAI,KAAK;AAC1E,UAAM,CAAC,MAAM,UAAU,OAAO,IAAI,MAAM,MAAM,GAAG;AAEjD,QAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,YAAM,IAAI;AAAA,QACR,+BAA+B,KAAK,kBAAkB,KAAK,WAAW,KAAK,IAAI;AAAA,MACjF;AAEF,QAAI,YAAY,SAAS;AACvB,UAAI,sBAAsB,IAAI;AAC5B,gBACE,4BAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,MAA/B,mBAAmC,oBAAnC,mBACE,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,QADhC,mBAEG,KAAK,kBAFR,YAEyB;AAAA,MAE7B,OAAO;AACL,gBACE,4BAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,MAA/B,mBAAmC,oBAAnC,mBAAqD,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,QAAnF,mBACE,uBADF,YAEK;AAAA,MAET;AAAA,IACF,WAAW,UAAU;AACnB,UAAIA,SACF,mBAAmB,KACf,KAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,IAC/B,EAAC,UAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,MAA/B,mBAAmC,eAAe;AACzD,YAAM,qBAA+B,CAAC;AAEtC,UAAI,CAACA,UAAS,CAACA,OAAM,CAAC,EAAG,QAAO;AAEhC,iBAAW,kBAAkBA,QAAO;AAClC,cAAM,gBAA0B,CAAC;AAEjC,mBAAW,WAAW,gBAAgB;AACpC,wBAAc,KAAK,eAAe,OAAO,EAAG,KAAK,YAAY,CAAC;AAAA,QAChE;AAEA,2BAAmB,KAAK,cAAc,KAAK,cAAc,CAAC;AAAA,MAC5D;AAEA,aAAO,mBAAmB,KAAK,cAAc;AAAA,IAC/C,OAAO;AACL,UAAI,CAAC,KAAK,KAAM,QAAO;AAEvB,YAAM,YAAY,CAAC,KAAK,IAAI;AAE5B,iBAAW,YAAY,KAAK,MAAM;AAChC,cAAM,oBAAoB,CAAC;AAE3B,mBAAW,kBAAkB,KAAK,KAAK,QAAQ,GAAI;AACjD,gBAAM,WAAW,CAAC;AAElB,qBAAW,WAAW,gBAAgB;AACpC,qBAAS,MAAK,oBAAe,OAAO,MAAtB,mBAAyB,KAAK,aAAa;AAAA,UAC3D;AAEA,4BAAkB,KAAK,SAAS,KAAK,cAAc,CAAC;AAAA,QACtD;AAEA,kBAAU,KAAK,kBAAkB,KAAK,cAAc,CAAC;AAAA,MACvD;AAEA,aAAO,UAAU,KAAK,UAAU;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,IAAI,OAAe,OAAe,iBAAiB,GAAG,oBAAoB,GAAG;AArI/E;AAsII,QAAI,CAAC,SAAS,CAAC,2BAA2B,KAAK,KAAK;AAClD,YAAM,IAAI,MAAM,+BAA+B,KAAK,GAAG;AACzD,QAAI,SAAS,QAAQ,OAAO,UAAU;AACpC,YAAM,IAAI,MAAM,+BAA+B,KAAK,GAAG;AACzD,QAAI,OAAO,mBAAmB,YAAY,iBAAiB;AACzD,YAAM,IAAI,MAAM,wCAAwC,cAAc,GAAG;AAC3E,QAAI,OAAO,sBAAsB,YAAY,oBAAoB;AAC/D,YAAM,IAAI,MAAM,2CAA2C,iBAAiB,GAAG;AAEjF,UAAM,CAAC,MAAM,UAAU,OAAO,IAAI,MAAM,MAAM,GAAG;AAEjD,QAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,YAAM,IAAI;AAAA,QACR,+BAA+B,KAAK,kBAAkB,KAAK,WAAW,KAAK,IAAI;AAAA,MACjF;AAEF,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,+BAA+B,KAAK,GAAG;AAEtE,QAAI,CAAC,KAAK,KAAM,MAAK,OAAO,CAAC;AAE7B,aAAS,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK,SAAS,UAAU,EAAE,GAAG,KAAK;AACrE,YAAI,gBAAK,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,MAAxB,mBAA4B,OAA5B,mBAAiC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAO;AAC3D,aAAK,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AAAA,IAChE;AAEA,aAAS,IAAI,GAAG,KAAK,gBAAgB,KAAK;AACxC,YAAI,gBAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,MAA/B,mBAAmC,OAAnC,mBAAwC,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,QAAO;AACzE,aAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;AAAA,IAChF;AAEA,QAAI,SAAS;AACX,eAAS,IAAI,GAAG,KAAK,SAAS,SAAS,EAAE,GAAG,KAAK;AAC/C,cACE,gBAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,MAA/B,mBAAmC,oBAAnC,mBAAqD,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,QAAO;AAEpF,eAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,cAAc,EAAG,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;AAAA,MACxF;AAEA,eAAS,IAAI,GAAG,KAAK,mBAAmB,KAAK;AAC3C,cACE,sBAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,MAA/B,mBAAmC,oBAAnC,mBAAqD,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,QAAnF,mBACE,OACG;AAEL,eAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,cAAc,EAAG,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,EAAE,EAAG,CAAC,IACrF;AAAA,MACN;AAEA,WAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,cAAc,EAAG,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,EAAE,EACjF,iBACF,IAAI;AAAA,IACN,OAAO;AACL,WAAK,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,cAAc,IAAI;AAAA,QAClD,CAAC,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,MAAN,MAAU;AAAA,EAMR,YAAY,QAAgB,cAAiD;AAH7E,SAAQ,OAA6B;AACrC,SAAQ,OAA6B;AArMvC;AAwMI,SAAK,MAAM,OAAO,WAAW,WAAW,SAAS;AACjD,SAAK,eAAe;AAAA,MAClB,aAAY,kDAAc,eAAd,YAA4B;AAAA,MACxC,iBAAgB,kDAAc,mBAAd,YAAgC;AAAA,MAChD,iBAAgB,kDAAc,mBAAd,YAAgC;AAAA,MAChD,eAAc,kDAAc,iBAAd,YAA8B;AAAA,MAC5C,WAAU,kDAAc,aAAd,YAA0B;AAAA,MACpC,eAAc,kDAAc,iBAAd,YAA8B;AAAA,IAC9C;AAEA,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY;AACV,QAAI,CAAC,KAAK,IAAI,WAAW,KAAK,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,KAAK,IACtB,MAAM,OAAO,KAAK,aAAa,QAAQ,CAAC,EACxC,OAAO,CAAC,eAAe,gBAAgB,KAAK,UAAU,CAAC;AAE1D,UAAM,EAAE,YAAY,gBAAgB,gBAAgB,aAAa,IAAI,KAAK;AAE1E,eAAW,cAAc,aAAa;AACpC,YAAM,OAAO,WAAW,UAAU,GAAG,CAAC;AACtC,YAAM,UAAU,IAAI,QAAQ,MAAM,MAAM,KAAK,YAAY;AACzD,YAAM,SAAS,WAAW,MAAM,UAAU;AAC1C,cAAQ,OAAO,CAAC;AAEhB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,cAAM,WAAW,SAAS,QAAQ,IAAI,IAAI;AAC1C,cAAM,iBAAiB,OAAO,CAAC,EAAG,MAAM,cAAc;AACtD,gBAAQ,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,IAAI,CAAC;AAEvC,iBAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,gBAAM,aAAa,eAAe,CAAC,EAAG,MAAM,cAAc;AAC1D,kBAAQ,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,CAAC,IAAI,CAAC;AAE3C,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,kBAAM,WAAW,WAAW,CAAC,EAAG,MAAM,YAAY;AAClD,oBAAQ,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,CAAC,EAAG,GAAG,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;AAE5E,qBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,sBAAQ,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAG,CAAC,EAAG,GAAG,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAG,CAAC,IACzE,SAAS,CAAC;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,SAAS,OAAO;AAClB,gBAAQ,KAAK,OAAO,IAAI;AAAA,UACtB,EAAE,WAAW,CAAC,GAAG,cAAc,GAAG,cAAc,KAAK,YAAY,EAAE,EAAE;AAAA,QACvE;AAAA,MACF;AAEA,WAAK,kBAAkB,OAAO;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,QAAQ;AA1QV;AA2QI,UAAM,WAAW,KAAK,YAAY;AAClC,UAAM,EAAE,YAAY,gBAAgB,gBAAgB,cAAc,aAAa,IAC7E,KAAK;AACP,UAAM,iBAAiB,CAAC;AAExB,eAAW,WAAW,UAAU;AAC9B,YAAM,YAAY,CAAC,QAAQ,IAAI;AAE/B,iBAAW,YAAY,QAAQ,MAAM;AACnC,cAAM,oBAAoB,CAAC;AAE3B,mBAAW,aAAa,QAAQ,KAAK,QAAQ,GAAI;AAC/C,gBAAM,WAAW,CAAC;AAElB,qBAAW,eAAe,WAAW;AACnC,qBAAS,MAAK,eAAU,WAAW,MAArB,mBAAwB,KAAK,aAAa;AAAA,UAC1D;AAEA,4BAAkB,KAAK,SAAS,KAAK,cAAc,CAAC;AAAA,QACtD;AAEA,kBAAU,KAAK,kBAAkB,KAAK,cAAc,CAAC;AAAA,MACvD;AAEA,qBAAe,KAAK,UAAU,KAAK,UAAU,CAAC;AAAA,IAChD;AAEA,WAAO,eAAe,KAAK,YAAY;AAAA,EACzC;AAAA,EAEA,WAAW,MAAoB;AAC7B,QAAI,CAAC,eAAe,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,8BAA8B,IAAI,GAAG;AAErF,QAAI,OAAO,KAAK;AAEhB,WAAO,MAAM;AACX,UAAI,KAAK,KAAK,SAAS,KAAM,QAAO,KAAK;AAEzC,aAAO,KAAK;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,MAAqB;AAC/B,QAAI,QAAQ,CAAC,eAAe,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,8BAA8B,IAAI,GAAG;AAE7F,UAAM,WAAW,CAAC;AAClB,QAAI,OAAO,KAAK;AAEhB,WAAO,MAAM;AACX,UAAI,MAAM;AACR,YAAI,SAAS,KAAK,KAAK,KAAM,UAAS,KAAK,KAAK,IAAI;AAAA,MACtD,OAAO;AACL,iBAAS,KAAK,KAAK,IAAI;AAAA,MACzB;AAEA,aAAO,KAAK;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,iBACE,cACA,MACA,kBAAkC,CAAC,GACnC,cAAc,OACd;AACA,QAAI,CAAC,gBAAgB,EAAE,wBAAwB;AAC7C,YAAM,IAAI,MAAM,mCAAmC;AACrD,QAAI,CAAC,eAAe,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,8BAA8B,IAAI,GAAG;AACrF,QAAI,CAAC,mBAAmB,CAAC,MAAM,QAAQ,eAAe;AACpD,YAAM,IAAI,MAAM,sCAAsC;AACxD,QAAI,OAAO,gBAAgB;AACzB,YAAM,IAAI,MAAM,qCAAqC,WAAW,GAAG;AAErE,UAAM,YAAY,KAAK,QAAQ,YAAY;AAE3C,QAAI,CAAC,UAAW,OAAM,IAAI,MAAM,qCAAqC,aAAa,IAAI,GAAG;AAEzF,UAAM,MAAM,CAAC;AACb,QAAI,OAAO,UAAU;AAErB,WAAO,MAAM;AACX,UAAI,gBAAgB,UAAU,gBAAgB,SAAS,KAAK,KAAK,IAAI,EAAG;AAExE,UAAI,KAAK,KAAK,SAAS,KAAM,KAAI,KAAK,KAAK,IAAI;AAAA,eACtC,eAAe,IAAI,OAAQ;AAEpC,aAAO,KAAK;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,MAAoB;AAChC,QAAI,CAAC,eAAe,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,8BAA8B,IAAI,GAAG;AAErF,WAAO,KAAK,kBAAkB,IAAI,QAAQ,MAAM,MAAM,KAAK,YAAY,CAAC;AAAA,EAC1E;AAAA,EAEA,mBAAmB,MAAoB,eAAwB;AAC7D,QAAI,CAAC,eAAe,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,8BAA8B,IAAI,GAAG;AACrF,QAAI,CAAC,iBAAiB,EAAE,yBAAyB;AAC/C,YAAM,IAAI,MAAM,oCAAoC;AAEtD,WAAO,KAAK,kBAAkB,IAAI,QAAQ,MAAM,MAAM,KAAK,YAAY,GAAG,aAAa;AAAA,EACzF;AAAA,EAEA,oBAAoB,MAAoB,eAAwB;AAC9D,QAAI,CAAC,eAAe,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,8BAA8B,IAAI,GAAG;AACrF,QAAI,CAAC,iBAAiB,EAAE,yBAAyB;AAC/C,YAAM,IAAI,MAAM,oCAAoC;AAEtD,WAAO,KAAK,mBAAmB,IAAI,QAAQ,MAAM,MAAM,KAAK,YAAY,GAAG,aAAa;AAAA,EAC1F;AAAA,EAEA,cAAc,SAAkB;AAC9B,QAAI,CAAC,WAAW,EAAE,mBAAmB,SAAU,OAAM,IAAI,MAAM,8BAA8B;AAE7F,SAAK,eAAe,CAAC,OAAO,CAAC;AAAA,EAC/B;AAAA,EAEA,eAAe,UAAqB;AAvYtC;AAwYI,eAAW,WAAW,UAAU;AAC9B,UAAI,CAAC,WAAW,EAAE,mBAAmB;AACnC,cAAM,IAAI,MAAM,+BAA+B;AAAA,IACnD;AAEA,eAAW,WAAW,UAAU;AAC9B,YAAM,OAAO,KAAK,QAAQ,OAAO;AAEjC,UAAI,CAAC,KAAM;AAEX,WAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO,KAAK;AAC3C,WAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO,KAAK;AAC3C,UAAI,KAAK,SAAS,KAAM,MAAK,OAAO,KAAK,KAAK;AAC9C,UAAI,KAAK,SAAS,KAAM,MAAK,OAAO,KAAK,KAAK;AAE9C,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AAAA,EAEA,iBAAiB,SAAkB,eAAwB;AA5Z7D;AA6ZI,QAAI,CAAC,WAAW,EAAE,mBAAmB,SAAU,OAAM,IAAI,MAAM,8BAA8B;AAC7F,QAAI,CAAC,iBAAiB,EAAE,yBAAyB;AAC/C,YAAM,IAAI,MAAM,oCAAoC;AAEtD,QAAI,YAAY,cAAe;AAE/B,UAAM,OAAO,KAAK,QAAQ,OAAO;AAEjC,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,gCAAgC,QAAQ,IAAI,GAAG;AAE1E,UAAM,aAAa,KAAK,QAAQ,aAAa;AAE7C,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,sCAAsC,cAAc,IAAI,GAAG;AAE5F,QAAI,SAAS,KAAK,KAAM,MAAK,OAAO,KAAK,KAAK;AAC9C,SAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO,KAAK;AAC3C,SAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO,KAAK;AAE3C,SAAK,OAAO,WAAW;AACvB,SAAK,OAAO;AACZ,eAAW,OAAO;AAElB,SAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO;AAEtC,QAAI,eAAe,KAAK,KAAM,MAAK,OAAO,KAAK,KAAK;AAAA,EACtD;AAAA,EAEA,kBAAkB,SAAkB,eAAwB;AAxb9D;AAybI,QAAI,CAAC,WAAW,EAAE,mBAAmB,SAAU,OAAM,IAAI,MAAM,8BAA8B;AAC7F,QAAI,CAAC,iBAAiB,EAAE,yBAAyB;AAC/C,YAAM,IAAI,MAAM,oCAAoC;AAEtD,QAAI,YAAY,cAAe;AAE/B,UAAM,OAAO,KAAK,QAAQ,OAAO;AAEjC,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,gCAAgC,QAAQ,IAAI,GAAG;AAE1E,UAAM,aAAa,KAAK,QAAQ,aAAa;AAE7C,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,sCAAsC,cAAc,IAAI,GAAG;AAE5F,QAAI,SAAS,KAAK,KAAM,MAAK,OAAO,KAAK,KAAK;AAC9C,SAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO,KAAK;AAC3C,SAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO,KAAK;AAE3C,SAAK,OAAO;AACZ,SAAK,OAAO,WAAW;AACvB,eAAW,OAAO;AAElB,SAAI,UAAK,SAAL,mBAAW,KAAM,MAAK,KAAK,OAAO;AAEtC,QAAI,eAAe,KAAK,KAAM,MAAK,OAAO,KAAK,KAAK;AAAA,EACtD;AAAA,EAEA,gBACE,YACA,aAAa,GACb,QAAQ,OACR;AACA,QAAI,CAAC,cAAc,OAAO,eAAe;AACvC,YAAM,IAAI,MAAM,iCAAiC;AACnD,QAAI,CAAC,cAAc,OAAO,eAAe;AACvC,YAAM,IAAI,MAAM,oCAAoC,UAAU,GAAG;AACnE,QAAI,SAAS,CAAC,sBAAsB,KAAK,KAAK;AAC5C,YAAM,IAAI,MAAM,+BAA+B,KAAK,GAAG;AAEzD,QAAI,OAAO,KAAK;AAChB,UAAM,WAAmC,CAAC;AAE1C,eAAW,OAAO,OAAO,KAAK,UAAU,GAAG;AACzC,UAAI,CAAC,MAAM,QAAQ,WAAW,GAAG,CAAC;AAChC,cAAM,IAAI;AAAA,UACR,kDAAkD,GAAG;AAAA,QACvD;AAEF,eAAS,GAAG,IAAI;AAAA,IAClB;AAEA,WAAO,MAAM;AACX,YAAM,UAAU,KAAK;AAErB,UAAI,QAAQ,QAAQ;AAClB,gBAAQ,IAAI,GAAG,QAAQ,IAAI,IAAI,KAAK,IAAI,OAAO,SAAS,QAAQ,IAAI,GAAI,CAAC;AAE3E,iBAAW,CAAC,aAAa,aAAa,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrE,mBAAW,gBAAgB,eAAgB;AACzC,cAAI,QAAQ,SAAS,cAAc;AACjC,qBAAS,WAAW,IAAI;AACxB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA,EAEQ,QAAQ,SAAkB;AAChC,QAAI,CAAC,WAAW,EAAE,mBAAmB,UAAU;AAC7C,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAEA,QAAI,OAAO,KAAK;AAEhB,WAAO,MAAM;AACX,UAAI,KAAK,SAAS,QAAS,QAAO;AAElC,aAAO,KAAK;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,YAAqB,eAAyB;AA/gB1E;AAghBI,QAAI,CAAC,cAAc,EAAE,sBAAsB;AACzC,YAAM,IAAI,MAAM,iCAAiC;AAEnD,QAAI,iBAAiB,EAAE,yBAAyB;AAC9C,YAAM,IAAI,MAAM,oCAAoC;AAEtD,UAAM,UAAU,IAAI,KAAK,UAAU;AAEnC,QAAI,eAAe;AACjB,YAAM,aAAa,KAAK,QAAQ,aAAa;AAE7C,UAAI,CAAC,WAAY,OAAM,IAAI,MAAM,sCAAsC,cAAc,IAAI,GAAG;AAE5F,cAAQ,OAAO,WAAW;AAC1B,cAAQ,OAAO;AACf,iBAAW,OAAO;AAElB,WAAI,aAAQ,SAAR,mBAAc,KAAM,SAAQ,KAAK,OAAO;AAC5C,UAAI,eAAe,KAAK,KAAM,MAAK,OAAO,KAAK,KAAK;AAAA,IACtD,WAAW,CAAC,KAAK,MAAM;AACrB,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACd,WAAW,KAAK,MAAM;AACpB,cAAQ,OAAO,KAAK;AACpB,WAAK,KAAK,OAAO;AACjB,WAAK,OAAO,KAAK,KAAK;AAAA,IACxB,OAAO;AACL,YAAM,IAAI,MAAM,6BAA6B,WAAW,IAAI,EAAE;AAAA,IAChE;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,YAAqB,eAAwB;AAjjB1E;AAkjBI,QAAI,CAAC,cAAc,EAAE,sBAAsB;AACzC,YAAM,IAAI,MAAM,iCAAiC;AAEnD,QAAI,CAAC,iBAAiB,EAAE,yBAAyB;AAC/C,YAAM,IAAI,MAAM,oCAAoC;AAEtD,UAAM,aAAa,KAAK,QAAQ,aAAa;AAE7C,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,sCAAsC,cAAc,IAAI,GAAG;AAE5F,UAAM,UAAU,IAAI,KAAK,UAAU;AAEnC,YAAQ,OAAO;AACf,YAAQ,OAAO,WAAW;AAC1B,eAAW,OAAO;AAElB,SAAI,aAAQ,SAAR,mBAAc,KAAM,SAAQ,KAAK,OAAO;AAC5C,QAAI,eAAe,KAAK,KAAM,MAAK,OAAO,KAAK,KAAK;AAEpD,WAAO;AAAA,EACT;AACF;AAGA,IAAO,gBAAQ;","names":["field"]}
package/dist/index.js CHANGED
@@ -72,7 +72,7 @@ var Segment = class {
72
72
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
73
73
  if (!field || !/^[A-Z\d]{3}(\.\d+){1,2}$/.test(field))
74
74
  throw new Error(`Invalid parameter: 'field' [${field}]`);
75
- if (!value || typeof value !== "string")
75
+ if (value == null || typeof value !== "string")
76
76
  throw new Error(`Invalid parameter: 'value' [${value}]`);
77
77
  if (typeof repeatingIndex !== "number" && repeatingIndex < 0)
78
78
  throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\ntype TSegmentType =\n | 'DG1'\n | 'EVN'\n | 'GT1'\n | 'IN1'\n | 'MSH'\n | 'NK1'\n | 'NTE'\n | 'OBR'\n | 'OBX'\n | 'ORC'\n | 'PID'\n | 'PR1'\n | 'PV1'\n | 'PV2'\n | (string & {});\n\ntype TSegmentData = Record<string, Array<Record<string, Array<string>>>>;\n\ntype TParseOptions = {\n fieldDelim: string;\n repeatingDelim: string;\n componentDelim: string;\n subCompDelim: string;\n eolDelim: '\\r?\\n|\\r' | '\\r\\n' | '\\n' | '\\r';\n buildEolChar: '\\r\\n' | '\\n' | '\\r';\n};\n\nclass Node<T> {\n constructor(\n public readonly data: T,\n public next: Node<T> | null = null,\n public prev: Node<T> | null = null\n ) {}\n}\n\nclass Segment {\n private parseOptions: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>;\n\n constructor(\n public readonly type: TSegmentType,\n public data: TSegmentData | null = null,\n parseOptions?: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>\n ) {\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n };\n }\n\n get(field: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!this.data) return null;\n\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){0,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (typeof repeatingIndex !== 'number' || repeatingIndex < -1)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' || subComponentIndex < -1)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot get [${field}] from [${this.type}] segment.`\n );\n\n if (fieldIdx && compIdx) {\n if (subComponentIndex === -1) {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[\n `${type}.${fieldIdx}.${compIdx}`\n ]?.join(subCompDelim) ?? null\n );\n } else {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n subComponentIndex\n ] ?? null\n );\n }\n } else if (fieldIdx) {\n let field =\n repeatingIndex === -1\n ? this.data[`${type}.${fieldIdx}`]\n : [this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]];\n const repeatingFieldsArr: string[] = [];\n\n if (!field || !field[0]) return null;\n\n for (const repeatingField of field) {\n const componentsArr: string[] = [];\n\n for (const compKey in repeatingField) {\n componentsArr.push(repeatingField[compKey]!.join(subCompDelim));\n }\n\n repeatingFieldsArr.push(componentsArr.join(componentDelim));\n }\n\n return repeatingFieldsArr.join(repeatingDelim);\n } else {\n if (!this.data) return null;\n\n const fieldsArr = [this.type];\n\n for (const fieldKey in this.data) {\n const repeatingCompsArr = [];\n\n for (const repeatingField of this.data[fieldKey]!) {\n const compsArr = [];\n\n for (const compKey in repeatingField) {\n compsArr.push(repeatingField[compKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n return fieldsArr.join(fieldDelim);\n }\n }\n\n set(field: string, value: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){1,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (!value || typeof value !== 'string')\n throw new Error(`Invalid parameter: 'value' [${value}]`);\n if (typeof repeatingIndex !== 'number' && repeatingIndex < 0)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' && subComponentIndex < 0)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot set [${field}] from [${this.type}] segment.`\n );\n\n if (!fieldIdx) throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n if (!this.data) this.data = {};\n\n for (let i = type === 'MSH' ? 2 : 1; i <= parseInt(fieldIdx, 10); i++) {\n if (this.data[`${type}.${i}`]?.[0]?.[`${type}.${i}.${1}`] == null)\n this.data[`${type}.${i}`] = [{ [`${type}.${i}.${1}`]: [''] }];\n }\n\n for (let i = 0; i <= repeatingIndex; i++) {\n if (this.data[`${type}.${fieldIdx}`]?.[i]?.[`${type}.${fieldIdx}.${1}`] == null)\n this.data[`${type}.${fieldIdx}`]![i] = { [`${type}.${fieldIdx}.${1}`]: [''] };\n }\n\n if (compIdx) {\n for (let i = 1; i <= parseInt(compIdx, 10); i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${i}`] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${i}`] = [''];\n }\n\n for (let i = 0; i <= subComponentIndex; i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n i\n ] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![i] =\n '';\n }\n\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![\n subComponentIndex\n ] = value;\n } else {\n this.data[`${type}.${fieldIdx}`]![repeatingIndex] = {\n [`${type}.${fieldIdx}.${1}`]: [value],\n };\n }\n }\n}\n\nclass HL7 {\n raw: string;\n parseOptions: TParseOptions;\n private head: Node<Segment> | null = null;\n private tail: Node<Segment> | null = null;\n\n constructor(hl7Msg: string, parseOptions?: Prettify<Partial<TParseOptions>>) {\n this.raw = typeof hl7Msg === 'string' ? hl7Msg : '';\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n eolDelim: parseOptions?.eolDelim ?? '\\r?\\n|\\r',\n buildEolChar: parseOptions?.buildEolChar ?? '\\r\\n',\n };\n\n this.transform();\n }\n\n /**\n * @deprecated This method is triggered internally and doesnt need to be invoked manually.\n */\n transform() {\n if (!this.raw.startsWith('MSH')) {\n throw new Error(\n 'Expected raw msg to be HL7 message. Message does not start with MSH segment.'\n );\n }\n\n const segmentsStr = this.raw\n .split(RegExp(this.parseOptions.eolDelim))\n .filter((segmentStr) => /^[A-Z\\d]{3}\\|/.test(segmentStr));\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n\n for (const segmentStr of segmentsStr) {\n const type = segmentStr.substring(0, 3);\n const segment = new Segment(type, null, this.parseOptions);\n const fields = segmentStr.split(fieldDelim);\n segment.data = {};\n\n for (let i = 1; i < fields.length; i++) {\n const fieldIdx = type === 'MSH' ? i + 1 : i;\n const repeatingComps = fields[i]!.split(repeatingDelim);\n segment.data[`${type}.${fieldIdx}`] = [];\n\n for (let j = 0; j < repeatingComps.length; j++) {\n const components = repeatingComps[j]!.split(componentDelim);\n segment.data[`${type}.${fieldIdx}`]![j] = {};\n\n for (let k = 0; k < components.length; k++) {\n const subComps = components[k]!.split(subCompDelim);\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`] = [];\n\n for (let l = 0; l < subComps.length; l++) {\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`]![l] =\n subComps[l]!;\n }\n }\n }\n }\n\n if (type === 'MSH') {\n segment.data['MSH.2'] = [\n { 'MSH.2.1': [`${componentDelim}${repeatingDelim}\\\\${subCompDelim}`] },\n ];\n }\n\n this.appendSegmentNode(segment);\n }\n }\n\n build() {\n const segments = this.getSegments();\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim, buildEolChar } =\n this.parseOptions;\n const segmentsStrArr = [];\n\n for (const segment of segments) {\n const fieldsArr = [segment.type];\n\n for (const fieldKey in segment.data) {\n const repeatingCompsArr = [];\n\n for (const component of segment.data[fieldKey]!) {\n const compsArr = [];\n\n for (const subCompsKey in component) {\n compsArr.push(component[subCompsKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n segmentsStrArr.push(fieldsArr.join(fieldDelim));\n }\n\n return segmentsStrArr.join(buildEolChar);\n }\n\n getSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data.type === type) return curr.data;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n getSegments(type?: TSegmentType) {\n if (type && !/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n const segments = [];\n let curr = this.head;\n\n while (curr) {\n if (type) {\n if (type === curr.data.type) segments.push(curr.data);\n } else {\n segments.push(curr.data);\n }\n\n curr = curr.next;\n }\n\n return segments;\n }\n\n getSegmentsAfter(\n startSegment: Segment,\n type: TSegmentType,\n stopSegmentType: TSegmentType[] = [],\n consecutive = false\n ) {\n if (!startSegment || !(startSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'startSegment'`);\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!stopSegmentType || !Array.isArray(stopSegmentType))\n throw new Error(`Invalid parameter: 'stopSegmentType'`);\n if (typeof consecutive !== 'boolean')\n throw new Error(`Invalid parameter: 'consecutive' [${consecutive}]`);\n\n const startNode = this.getNode(startSegment);\n\n if (!startNode) throw new Error(`Failed to locate: 'startSegment' [${startSegment.type}]`);\n\n const res = [];\n let curr = startNode.next;\n\n while (curr) {\n if (stopSegmentType.length && stopSegmentType.includes(curr.data.type)) break;\n\n if (curr.data.type === type) res.push(curr.data);\n else if (consecutive && res.length) break;\n\n curr = curr.next;\n }\n\n return res;\n }\n\n createSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions));\n }\n\n createSegmentAfter(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n createSegmentBefore(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.prependSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n deleteSegment(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n\n this.deleteSegments([segment]);\n }\n\n deleteSegments(segments: Segment[]) {\n for (const segment of segments) {\n if (!segment || !(segment instanceof Segment))\n throw new Error(`Invalid parameter: 'segments'`);\n }\n\n for (const segment of segments) {\n const node = this.getNode(segment);\n\n if (!node) break;\n\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n if (this.head === node) this.head = this.head.next;\n if (this.tail === node) this.tail = this.tail.prev;\n\n node.next = null;\n node.prev = null;\n }\n }\n\n moveSegmentAfter(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.head) this.head = this.head.next;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode.next;\n node.prev = targetNode;\n targetNode.next = node;\n\n if (node.next?.prev) node.next.prev = node;\n\n if (targetNode === this.tail) this.tail = this.tail.next;\n }\n\n moveSegmentBefore(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.tail) this.tail = this.tail.prev;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode;\n node.prev = targetNode.prev;\n targetNode.prev = node;\n\n if (node.prev?.next) node.prev.next = node;\n\n if (targetNode === this.head) this.head = this.head.prev;\n }\n\n reindexSegments(\n resetRules: { [k in TSegmentType]?: TSegmentType[] },\n startIndex = 1,\n field = '1.1'\n ) {\n if (!resetRules || typeof resetRules !== 'object')\n throw new Error(`Invalid parameter: 'resetRules'`);\n if (!startIndex || typeof startIndex !== 'number')\n throw new Error(`Invalid parameter: 'startIndex' [${startIndex}]`);\n if (field && !/^(\\d+)(\\.\\d+){0,1}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n let curr = this.head;\n const indexMap: Record<string, number> = {};\n\n for (const key of Object.keys(resetRules)) {\n if (!Array.isArray(resetRules[key]))\n throw new Error(\n `Invalid parameter: 'resetRules'. Expected key [${key}] value to be an array.`\n );\n\n indexMap[key] = startIndex;\n }\n\n while (curr) {\n const segment = curr.data;\n\n if (segment.type in resetRules)\n segment.set(`${segment.type}.${field}`, String(indexMap[segment.type]!++));\n\n for (const [segmentType, resetTriggers] of Object.entries(resetRules)) {\n for (const resetTrigger of resetTriggers!) {\n if (segment.type === resetTrigger) {\n indexMap[segmentType] = startIndex;\n break;\n }\n }\n }\n\n curr = curr.next;\n }\n }\n\n private getNode(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) {\n throw new Error(`Invalid parameter: 'segment'`);\n }\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data === segment) return curr;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n private appendSegmentNode(newSegment: Segment, targetSegment?: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (targetSegment && !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const newNode = new Node(newSegment);\n\n if (targetSegment) {\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n newNode.next = targetNode.next;\n newNode.prev = targetNode;\n targetNode.next = newNode;\n\n if (newNode.next?.prev) newNode.next.prev = newNode;\n if (targetNode === this.tail) this.tail = this.tail.next;\n } else if (!this.head) {\n this.head = newNode;\n this.tail = newNode;\n } else if (this.tail) {\n newNode.prev = this.tail;\n this.tail.next = newNode;\n this.tail = this.tail.next;\n } else {\n throw new Error(`Failed to append segment: ${newSegment.type}`);\n }\n\n return newSegment;\n }\n\n private prependSegmentNode(newSegment: Segment, targetSegment: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n const newNode = new Node(newSegment);\n\n newNode.next = targetNode;\n newNode.prev = targetNode.prev;\n targetNode.prev = newNode;\n\n if (newNode.prev?.next) newNode.prev.next = newNode;\n if (targetNode === this.head) this.head = this.head.prev;\n\n return newSegment;\n }\n}\n\nexport type { Segment };\nexport default HL7;\n"],"mappings":"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","names":["field"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\ntype TSegmentType =\n | 'DG1'\n | 'EVN'\n | 'GT1'\n | 'IN1'\n | 'MSH'\n | 'NK1'\n | 'NTE'\n | 'OBR'\n | 'OBX'\n | 'ORC'\n | 'PID'\n | 'PR1'\n | 'PV1'\n | 'PV2'\n | (string & {});\n\ntype TSegmentData = Record<string, Array<Record<string, Array<string>>>>;\n\ntype TParseOptions = {\n fieldDelim: string;\n repeatingDelim: string;\n componentDelim: string;\n subCompDelim: string;\n eolDelim: '\\r?\\n|\\r' | '\\r\\n' | '\\n' | '\\r';\n buildEolChar: '\\r\\n' | '\\n' | '\\r';\n};\n\nclass Node<T> {\n constructor(\n public readonly data: T,\n public next: Node<T> | null = null,\n public prev: Node<T> | null = null\n ) {}\n}\n\nclass Segment {\n private parseOptions: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>;\n\n constructor(\n public readonly type: TSegmentType,\n public data: TSegmentData | null = null,\n parseOptions?: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>\n ) {\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n };\n }\n\n get(field: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!this.data) return null;\n\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){0,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (typeof repeatingIndex !== 'number' || repeatingIndex < -1)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' || subComponentIndex < -1)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot get [${field}] from [${this.type}] segment.`\n );\n\n if (fieldIdx && compIdx) {\n if (subComponentIndex === -1) {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[\n `${type}.${fieldIdx}.${compIdx}`\n ]?.join(subCompDelim) ?? null\n );\n } else {\n return (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n subComponentIndex\n ] ?? null\n );\n }\n } else if (fieldIdx) {\n let field =\n repeatingIndex === -1\n ? this.data[`${type}.${fieldIdx}`]\n : [this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]];\n const repeatingFieldsArr: string[] = [];\n\n if (!field || !field[0]) return null;\n\n for (const repeatingField of field) {\n const componentsArr: string[] = [];\n\n for (const compKey in repeatingField) {\n componentsArr.push(repeatingField[compKey]!.join(subCompDelim));\n }\n\n repeatingFieldsArr.push(componentsArr.join(componentDelim));\n }\n\n return repeatingFieldsArr.join(repeatingDelim);\n } else {\n if (!this.data) return null;\n\n const fieldsArr = [this.type];\n\n for (const fieldKey in this.data) {\n const repeatingCompsArr = [];\n\n for (const repeatingField of this.data[fieldKey]!) {\n const compsArr = [];\n\n for (const compKey in repeatingField) {\n compsArr.push(repeatingField[compKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n return fieldsArr.join(fieldDelim);\n }\n }\n\n set(field: string, value: string, repeatingIndex = 0, subComponentIndex = 0) {\n if (!field || !/^[A-Z\\d]{3}(\\.\\d+){1,2}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n if (value == null || typeof value !== 'string')\n throw new Error(`Invalid parameter: 'value' [${value}]`);\n if (typeof repeatingIndex !== 'number' && repeatingIndex < 0)\n throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);\n if (typeof subComponentIndex !== 'number' && subComponentIndex < 0)\n throw new Error(`Invalid parameter: 'subComponentIndex' [${subComponentIndex}]`);\n\n const [type, fieldIdx, compIdx] = field.split('.');\n\n if (!type || type !== this.type)\n throw new Error(\n `Invalid parameter: 'field' [${field}]. Cannot set [${field}] from [${this.type}] segment.`\n );\n\n if (!fieldIdx) throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n if (!this.data) this.data = {};\n\n for (let i = type === 'MSH' ? 2 : 1; i <= parseInt(fieldIdx, 10); i++) {\n if (this.data[`${type}.${i}`]?.[0]?.[`${type}.${i}.${1}`] == null)\n this.data[`${type}.${i}`] = [{ [`${type}.${i}.${1}`]: [''] }];\n }\n\n for (let i = 0; i <= repeatingIndex; i++) {\n if (this.data[`${type}.${fieldIdx}`]?.[i]?.[`${type}.${fieldIdx}.${1}`] == null)\n this.data[`${type}.${fieldIdx}`]![i] = { [`${type}.${fieldIdx}.${1}`]: [''] };\n }\n\n if (compIdx) {\n for (let i = 1; i <= parseInt(compIdx, 10); i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${i}`] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${i}`] = [''];\n }\n\n for (let i = 0; i <= subComponentIndex; i++) {\n if (\n this.data[`${type}.${fieldIdx}`]?.[repeatingIndex]?.[`${type}.${fieldIdx}.${compIdx}`]?.[\n i\n ] == null\n )\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![i] =\n '';\n }\n\n this.data[`${type}.${fieldIdx}`]![repeatingIndex]![`${type}.${fieldIdx}.${compIdx}`]![\n subComponentIndex\n ] = value;\n } else {\n this.data[`${type}.${fieldIdx}`]![repeatingIndex] = {\n [`${type}.${fieldIdx}.${1}`]: [value],\n };\n }\n }\n}\n\nclass HL7 {\n raw: string;\n parseOptions: TParseOptions;\n private head: Node<Segment> | null = null;\n private tail: Node<Segment> | null = null;\n\n constructor(hl7Msg: string, parseOptions?: Prettify<Partial<TParseOptions>>) {\n this.raw = typeof hl7Msg === 'string' ? hl7Msg : '';\n this.parseOptions = {\n fieldDelim: parseOptions?.fieldDelim ?? '|',\n repeatingDelim: parseOptions?.repeatingDelim ?? '~',\n componentDelim: parseOptions?.componentDelim ?? '^',\n subCompDelim: parseOptions?.subCompDelim ?? '&',\n eolDelim: parseOptions?.eolDelim ?? '\\r?\\n|\\r',\n buildEolChar: parseOptions?.buildEolChar ?? '\\r\\n',\n };\n\n this.transform();\n }\n\n /**\n * @deprecated This method is triggered internally and doesnt need to be invoked manually.\n */\n transform() {\n if (!this.raw.startsWith('MSH')) {\n throw new Error(\n 'Expected raw msg to be HL7 message. Message does not start with MSH segment.'\n );\n }\n\n const segmentsStr = this.raw\n .split(RegExp(this.parseOptions.eolDelim))\n .filter((segmentStr) => /^[A-Z\\d]{3}\\|/.test(segmentStr));\n\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;\n\n for (const segmentStr of segmentsStr) {\n const type = segmentStr.substring(0, 3);\n const segment = new Segment(type, null, this.parseOptions);\n const fields = segmentStr.split(fieldDelim);\n segment.data = {};\n\n for (let i = 1; i < fields.length; i++) {\n const fieldIdx = type === 'MSH' ? i + 1 : i;\n const repeatingComps = fields[i]!.split(repeatingDelim);\n segment.data[`${type}.${fieldIdx}`] = [];\n\n for (let j = 0; j < repeatingComps.length; j++) {\n const components = repeatingComps[j]!.split(componentDelim);\n segment.data[`${type}.${fieldIdx}`]![j] = {};\n\n for (let k = 0; k < components.length; k++) {\n const subComps = components[k]!.split(subCompDelim);\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`] = [];\n\n for (let l = 0; l < subComps.length; l++) {\n segment.data[`${type}.${fieldIdx}`]![j]![`${type}.${fieldIdx}.${k + 1}`]![l] =\n subComps[l]!;\n }\n }\n }\n }\n\n if (type === 'MSH') {\n segment.data['MSH.2'] = [\n { 'MSH.2.1': [`${componentDelim}${repeatingDelim}\\\\${subCompDelim}`] },\n ];\n }\n\n this.appendSegmentNode(segment);\n }\n }\n\n build() {\n const segments = this.getSegments();\n const { fieldDelim, repeatingDelim, componentDelim, subCompDelim, buildEolChar } =\n this.parseOptions;\n const segmentsStrArr = [];\n\n for (const segment of segments) {\n const fieldsArr = [segment.type];\n\n for (const fieldKey in segment.data) {\n const repeatingCompsArr = [];\n\n for (const component of segment.data[fieldKey]!) {\n const compsArr = [];\n\n for (const subCompsKey in component) {\n compsArr.push(component[subCompsKey]?.join(subCompDelim));\n }\n\n repeatingCompsArr.push(compsArr.join(componentDelim));\n }\n\n fieldsArr.push(repeatingCompsArr.join(repeatingDelim));\n }\n\n segmentsStrArr.push(fieldsArr.join(fieldDelim));\n }\n\n return segmentsStrArr.join(buildEolChar);\n }\n\n getSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data.type === type) return curr.data;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n getSegments(type?: TSegmentType) {\n if (type && !/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n const segments = [];\n let curr = this.head;\n\n while (curr) {\n if (type) {\n if (type === curr.data.type) segments.push(curr.data);\n } else {\n segments.push(curr.data);\n }\n\n curr = curr.next;\n }\n\n return segments;\n }\n\n getSegmentsAfter(\n startSegment: Segment,\n type: TSegmentType,\n stopSegmentType: TSegmentType[] = [],\n consecutive = false\n ) {\n if (!startSegment || !(startSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'startSegment'`);\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!stopSegmentType || !Array.isArray(stopSegmentType))\n throw new Error(`Invalid parameter: 'stopSegmentType'`);\n if (typeof consecutive !== 'boolean')\n throw new Error(`Invalid parameter: 'consecutive' [${consecutive}]`);\n\n const startNode = this.getNode(startSegment);\n\n if (!startNode) throw new Error(`Failed to locate: 'startSegment' [${startSegment.type}]`);\n\n const res = [];\n let curr = startNode.next;\n\n while (curr) {\n if (stopSegmentType.length && stopSegmentType.includes(curr.data.type)) break;\n\n if (curr.data.type === type) res.push(curr.data);\n else if (consecutive && res.length) break;\n\n curr = curr.next;\n }\n\n return res;\n }\n\n createSegment(type: TSegmentType) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions));\n }\n\n createSegmentAfter(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.appendSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n createSegmentBefore(type: TSegmentType, targetSegment: Segment) {\n if (!/^[A-Z\\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n return this.prependSegmentNode(new Segment(type, null, this.parseOptions), targetSegment);\n }\n\n deleteSegment(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n\n this.deleteSegments([segment]);\n }\n\n deleteSegments(segments: Segment[]) {\n for (const segment of segments) {\n if (!segment || !(segment instanceof Segment))\n throw new Error(`Invalid parameter: 'segments'`);\n }\n\n for (const segment of segments) {\n const node = this.getNode(segment);\n\n if (!node) break;\n\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n if (this.head === node) this.head = this.head.next;\n if (this.tail === node) this.tail = this.tail.prev;\n\n node.next = null;\n node.prev = null;\n }\n }\n\n moveSegmentAfter(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.head) this.head = this.head.next;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode.next;\n node.prev = targetNode;\n targetNode.next = node;\n\n if (node.next?.prev) node.next.prev = node;\n\n if (targetNode === this.tail) this.tail = this.tail.next;\n }\n\n moveSegmentBefore(segment: Segment, targetSegment: Segment) {\n if (!segment || !(segment instanceof Segment)) throw new Error(`Invalid parameter: 'segment'`);\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n if (segment === targetSegment) return;\n\n const node = this.getNode(segment);\n\n if (!node) throw new Error(`Failed to locate: 'segment' [${segment.type}]`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n if (node === this.tail) this.tail = this.tail.prev;\n if (node.prev?.next) node.prev.next = node.next;\n if (node.next?.prev) node.next.prev = node.prev;\n\n node.next = targetNode;\n node.prev = targetNode.prev;\n targetNode.prev = node;\n\n if (node.prev?.next) node.prev.next = node;\n\n if (targetNode === this.head) this.head = this.head.prev;\n }\n\n reindexSegments(\n resetRules: { [k in TSegmentType]?: TSegmentType[] },\n startIndex = 1,\n field = '1.1'\n ) {\n if (!resetRules || typeof resetRules !== 'object')\n throw new Error(`Invalid parameter: 'resetRules'`);\n if (!startIndex || typeof startIndex !== 'number')\n throw new Error(`Invalid parameter: 'startIndex' [${startIndex}]`);\n if (field && !/^(\\d+)(\\.\\d+){0,1}$/.test(field))\n throw new Error(`Invalid parameter: 'field' [${field}]`);\n\n let curr = this.head;\n const indexMap: Record<string, number> = {};\n\n for (const key of Object.keys(resetRules)) {\n if (!Array.isArray(resetRules[key]))\n throw new Error(\n `Invalid parameter: 'resetRules'. Expected key [${key}] value to be an array.`\n );\n\n indexMap[key] = startIndex;\n }\n\n while (curr) {\n const segment = curr.data;\n\n if (segment.type in resetRules)\n segment.set(`${segment.type}.${field}`, String(indexMap[segment.type]!++));\n\n for (const [segmentType, resetTriggers] of Object.entries(resetRules)) {\n for (const resetTrigger of resetTriggers!) {\n if (segment.type === resetTrigger) {\n indexMap[segmentType] = startIndex;\n break;\n }\n }\n }\n\n curr = curr.next;\n }\n }\n\n private getNode(segment: Segment) {\n if (!segment || !(segment instanceof Segment)) {\n throw new Error(`Invalid parameter: 'segment'`);\n }\n\n let curr = this.head;\n\n while (curr) {\n if (curr.data === segment) return curr;\n\n curr = curr.next;\n }\n\n return curr;\n }\n\n private appendSegmentNode(newSegment: Segment, targetSegment?: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (targetSegment && !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const newNode = new Node(newSegment);\n\n if (targetSegment) {\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n newNode.next = targetNode.next;\n newNode.prev = targetNode;\n targetNode.next = newNode;\n\n if (newNode.next?.prev) newNode.next.prev = newNode;\n if (targetNode === this.tail) this.tail = this.tail.next;\n } else if (!this.head) {\n this.head = newNode;\n this.tail = newNode;\n } else if (this.tail) {\n newNode.prev = this.tail;\n this.tail.next = newNode;\n this.tail = this.tail.next;\n } else {\n throw new Error(`Failed to append segment: ${newSegment.type}`);\n }\n\n return newSegment;\n }\n\n private prependSegmentNode(newSegment: Segment, targetSegment: Segment) {\n if (!newSegment || !(newSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'newSegment'`);\n\n if (!targetSegment || !(targetSegment instanceof Segment))\n throw new Error(`Invalid parameter: 'targetSegment'`);\n\n const targetNode = this.getNode(targetSegment);\n\n if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);\n\n const newNode = new Node(newSegment);\n\n newNode.next = targetNode;\n newNode.prev = targetNode.prev;\n targetNode.prev = newNode;\n\n if (newNode.prev?.next) newNode.prev.next = newNode;\n if (targetNode === this.head) this.head = this.head.prev;\n\n return newSegment;\n }\n}\n\nexport type { Segment };\nexport default HL7;\n"],"mappings":"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","names":["field"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hl7-tstd",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "A simple package to create, parse & transform HL7 message.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",