Skip to content

Commit 7aa174f

Browse files
authored
Merge pull request #63 from panates/dev
Dev
2 parents f0f889b + 11923c8 commit 7aa174f

File tree

7 files changed

+83
-48
lines changed

7 files changed

+83
-48
lines changed

packages/dictionary/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "hl7v2-dictionary",
33
"description": "HL7 v2 parser, serializer, validator for NodeJS",
4-
"version": "1.4.3",
4+
"version": "1.4.4",
55
"author": "Panates",
66
"license": "MIT",
77
"private": true,

packages/hl7v2/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "hl7v2",
33
"description": "HL7 v2 parser, serializer, validator for NodeJS",
4-
"version": "1.4.3",
4+
"version": "1.4.4",
55
"author": "Panates",
66
"license": "MIT",
77
"private": true,
@@ -16,7 +16,7 @@
1616
"uid": "^2.0.2"
1717
},
1818
"peerDependencies": {
19-
"hl7v2-dictionary": "^1.4.3"
19+
"hl7v2-dictionary": "^1.4.4"
2020
},
2121
"devDependencies": {
2222
"expect": "^30.0.5"

packages/hl7v2/src/hl7-message-node.ts

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,20 @@ export class HL7MessageNode {
1111
/**
1212
* Searches for a segment of a given type
1313
*/
14-
getSegment(segmentType: string, index: number = 0): HL7Segment | undefined {
14+
getSegment(
15+
segmentType: string,
16+
indexOrAfter?: number | HL7Segment,
17+
): HL7Segment | undefined {
1518
let k = 0;
16-
for (const seg of this.items) {
19+
for (let i = 0; i < this.items.length; i++) {
20+
const seg = this.items[i];
1721
if (seg instanceof HL7Segment && seg.segmentType === segmentType) {
18-
if (!index || index === k) return seg;
19-
k++;
22+
if (!indexOrAfter) return seg;
23+
if (typeof indexOrAfter === 'number') {
24+
if (indexOrAfter === k++) return seg;
25+
} else {
26+
if (indexOrAfter === seg) indexOrAfter = undefined;
27+
}
2028
}
2129
}
2230
}
@@ -26,26 +34,39 @@ export class HL7MessageNode {
2634
*/
2735
getSegmentFromLast(
2836
segmentType: string,
29-
index: number = 0,
37+
indexOrAfter?: number | HL7Segment,
3038
): HL7Segment | undefined {
31-
for (let k = this.items.length - 1; k >= 0; k--) {
32-
const seg = this.items[k];
39+
let k = 0;
40+
for (let i = this.items.length - 1; i >= 0; i--) {
41+
const seg = this.items[i];
3342
if (seg instanceof HL7Segment && seg.segmentType === segmentType) {
34-
if (!index || index === k) return seg;
35-
k++;
43+
if (!indexOrAfter) return seg;
44+
if (typeof indexOrAfter === 'number') {
45+
if (indexOrAfter === k++) return seg;
46+
} else {
47+
if (indexOrAfter === seg) indexOrAfter = undefined;
48+
}
3649
}
3750
}
3851
}
3952

4053
/**
4154
* Searches for a node of a given name
4255
*/
43-
getNode(nodeName: string, index: number = 0): HL7MessageNode | undefined {
56+
getNode(
57+
nodeName: string,
58+
indexOrAfter?: number | HL7MessageNode,
59+
): HL7MessageNode | undefined {
4460
let k = 0;
45-
for (const seg of this.items) {
46-
if (seg instanceof HL7MessageNode && seg.name === nodeName) {
47-
if (!index || index === k) return seg;
48-
k++;
61+
for (let i = 0; i < this.items.length; i++) {
62+
const node = this.items[i];
63+
if (node instanceof HL7MessageNode && node.name === nodeName) {
64+
if (!indexOrAfter) return node;
65+
if (typeof indexOrAfter === 'number') {
66+
if (indexOrAfter === k++) return node;
67+
} else {
68+
if (indexOrAfter === node) indexOrAfter = undefined;
69+
}
4970
}
5071
}
5172
}
@@ -55,13 +76,18 @@ export class HL7MessageNode {
5576
*/
5677
getNodeFromLast(
5778
nodeName: string,
58-
index: number = 0,
79+
indexOrAfter?: number | HL7MessageNode,
5980
): HL7MessageNode | undefined {
60-
for (let k = this.items.length - 1; k >= 0; k--) {
61-
const seg = this.items[k];
62-
if (seg instanceof HL7MessageNode && seg.name === nodeName) {
63-
if (!index || index === k) return seg;
64-
k++;
81+
let k = 0;
82+
for (let i = this.items.length - 1; i >= 0; i--) {
83+
const node = this.items[i];
84+
if (node instanceof HL7MessageNode && node.name === nodeName) {
85+
if (!indexOrAfter) return node;
86+
if (typeof indexOrAfter === 'number') {
87+
if (indexOrAfter === k++) return node;
88+
} else {
89+
if (indexOrAfter === node) indexOrAfter = undefined;
90+
}
6591
}
6692
}
6793
}

packages/hl7v2/src/hl7-message.ts

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,20 @@ export class HL7Message {
9999
/**
100100
* Searches for a segment of a given type
101101
*/
102-
getSegment(segmentType: string, index: number = 0): HL7Segment | undefined {
102+
getSegment(
103+
segmentType: string,
104+
indexOrAfter?: number | HL7Segment,
105+
): HL7Segment | undefined {
103106
let k = 0;
104-
for (const seg of this.segments) {
105-
if (seg.segmentType === segmentType) {
106-
if (!index || index === k) return seg;
107-
k++;
107+
for (let i = 0; i < this.segments.length; i++) {
108+
const seg = this.segments[i];
109+
if (seg instanceof HL7Segment && seg.segmentType === segmentType) {
110+
if (!indexOrAfter) return seg;
111+
if (typeof indexOrAfter === 'number') {
112+
if (indexOrAfter === k++) return seg;
113+
} else {
114+
if (indexOrAfter === seg) indexOrAfter = undefined;
115+
}
108116
}
109117
}
110118
}
@@ -114,13 +122,19 @@ export class HL7Message {
114122
*/
115123
getSegmentFromLast(
116124
segmentType: string,
117-
index: number = 0,
125+
indexOrAfter?: number | HL7Segment,
118126
): HL7Segment | undefined {
119-
for (let k = this.segments.length - 1; k >= 0; k--) {
120-
const seg = this.segments[k];
121-
if (seg.segmentType === segmentType) {
122-
if (!index || index === k) return seg;
123-
k++;
127+
let k = 0;
128+
for (let i = this.segments.length - 1; i >= 0; i--) {
129+
const seg = this.segments[i];
130+
if (seg instanceof HL7Segment && seg.segmentType === segmentType) {
131+
if (!indexOrAfter) return seg;
132+
if (typeof indexOrAfter === 'number') {
133+
if (indexOrAfter === k++) return seg;
134+
i++;
135+
} else {
136+
if (indexOrAfter === seg) indexOrAfter = undefined;
137+
}
124138
}
125139
}
126140
}

packages/hl7v2/src/hl7-segment.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,6 @@ export class HL7Segment {
5656
return (this._fields[position - 1] = new HL7Field(this, position, def));
5757
}
5858

59-
next(segmentType?: string): HL7Segment | undefined {
60-
let index = this.index + 1;
61-
let segment = this.message.segments[index];
62-
while (segment) {
63-
if (!segmentType || segment.segmentType === segmentType) return segment;
64-
segment = this.message.segments[++index];
65-
}
66-
}
67-
6859
toHL7String(options?: Hl7SegmentSerializeOptions) {
6960
const { fieldSeparator } = this.message;
7061
let out = this.segmentType + fieldSeparator;

packages/hl7v2/test/hl7-message.spec.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { expect } from 'expect';
2-
import { HL7MessageNode } from '../src/hl7-message-node.js';
3-
import { HL7Message, HL7Segment, HL7Version } from '../src/index.js';
2+
import {
3+
HL7Message,
4+
HL7MessageNode,
5+
HL7Segment,
6+
HL7Version,
7+
} from '../src/index.js';
48

59
describe('hl7v2:HL7Message', () => {
610
const sampleMessage1 =

packages/net/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "hl7v2-net",
33
"description": "HL7 v2 server/client for NodeJS",
4-
"version": "1.4.3",
4+
"version": "1.4.4",
55
"author": "Panates",
66
"license": "MIT",
77
"private": true,
@@ -16,8 +16,8 @@
1616
"uid": "^2.0.2"
1717
},
1818
"peerDependencies": {
19-
"hl7v2": "^1.4.3",
20-
"hl7v2-dictionary": "^1.4.3"
19+
"hl7v2": "^1.4.4",
20+
"hl7v2-dictionary": "^1.4.4"
2121
},
2222
"devDependencies": {
2323
"expect": "^30.0.5"

0 commit comments

Comments
 (0)