@rethinkhealth/hl7v2-jsonify 0.2.22 → 0.2.24

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.d.ts CHANGED
@@ -1,11 +1,4 @@
1
- import type { Nodes, Root } from "@rethinkhealth/hl7v2-ast";
2
- import type { Plugin } from "unified";
3
- type FieldValue = string | string[];
4
- type SegmentJson = {
5
- segment: string;
6
- fields: (FieldValue | FieldValue[])[];
7
- };
8
- export declare const hl7v2Jsonify: Plugin<[], Root, string>;
9
- export declare function toJson(root: Nodes): SegmentJson[];
10
- export {};
1
+ export { hl7v2Jsonify } from "./processor";
2
+ export { toJsonRuntime } from "./runtime";
3
+ export type { FieldJson, GroupJson, Hl7v2JsonResult, SegmentJson, } from "./types";
11
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,KAAK,EACL,IAAI,EAGL,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAEpC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CASjD,CAAC;AAEF,wBAAgB,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,WAAW,EAAE,CAiBjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EACV,SAAS,EACT,SAAS,EACT,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,24 +1,35 @@
1
- // src/index.ts
2
- var hl7v2Jsonify = function() {
3
- const self = this;
4
- function compiler(tree) {
5
- return JSON.stringify(toJson(tree), null, 2);
6
- }
7
- self.compiler = compiler;
8
- };
9
- function toJson(root) {
1
+ // src/runtime.ts
2
+ function toJsonRuntime(root) {
10
3
  const r = root;
11
4
  const out = [];
12
- for (const s of r.children) {
13
- const segmentName = s.children[0].value;
14
- const fields = [];
15
- for (const f of s.children.slice(1)) {
16
- fields.push(materializeField(f));
5
+ for (const child of r.children) {
6
+ if (child.type === "segment") {
7
+ out.push(processSegment(child));
8
+ } else if (child.type === "group") {
9
+ out.push(processGroup(child));
17
10
  }
18
- out.push({ segment: segmentName, fields });
19
11
  }
20
12
  return out;
21
13
  }
14
+ function processSegment(segment) {
15
+ const segmentName = segment.children[0].value;
16
+ const fields = [];
17
+ for (const f of segment.children.slice(1)) {
18
+ fields.push(materializeField(f));
19
+ }
20
+ return { segment: segmentName, fields };
21
+ }
22
+ function processGroup(group) {
23
+ const children = [];
24
+ for (const child of group.children) {
25
+ if (child.type === "segment") {
26
+ children.push(processSegment(child));
27
+ } else if (child.type === "group") {
28
+ children.push(processGroup(child));
29
+ }
30
+ }
31
+ return { group: group.name ?? "", children };
32
+ }
22
33
  function materializeField(field) {
23
34
  const toComponent = (c) => {
24
35
  if (c.children?.length === 0) {
@@ -51,8 +62,17 @@ function materializeField(field) {
51
62
  return toRepetitionArray(rep);
52
63
  });
53
64
  }
65
+
66
+ // src/processor.ts
67
+ function hl7v2Jsonify() {
68
+ const self = this;
69
+ function compiler(tree) {
70
+ return toJsonRuntime(tree);
71
+ }
72
+ self.compiler = compiler;
73
+ }
54
74
  export {
55
75
  hl7v2Jsonify,
56
- toJson
76
+ toJsonRuntime
57
77
  };
58
78
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n Component,\n Field,\n FieldRepetition,\n Nodes,\n Root,\n Segment,\n Subcomponent,\n} from \"@rethinkhealth/hl7v2-ast\";\nimport type { Plugin } from \"unified\";\nimport type { Node } from \"unist\";\n\ntype FieldValue = string | string[];\n\ntype SegmentJson = {\n segment: string;\n fields: (FieldValue | FieldValue[])[]; // Nested arrays for fields/repetitions/components\n};\n\nexport const hl7v2Jsonify: Plugin<[], Root, string> = function (): void {\n // biome-ignore lint/complexity/noUselessThisAlias: this is a plugin\n const self = this;\n\n function compiler(tree: Node): string {\n return JSON.stringify(toJson(tree as Nodes), null, 2);\n }\n\n self.compiler = compiler;\n};\n\nexport function toJson(root: Nodes): SegmentJson[] {\n const r = root as Root;\n const out: SegmentJson[] = [];\n\n for (const s of r.children as Segment[]) {\n const segmentName = s.children[0].value;\n const fields: (FieldValue | FieldValue[])[] = [];\n\n // Skip the header field (index 0) when projecting to fields\n for (const f of s.children.slice(1) as Field[]) {\n fields.push(materializeField(f));\n }\n\n out.push({ segment: segmentName, fields });\n }\n\n return out;\n}\n\n// Convert a Field into JSON-friendly value: string or nested arrays representing reps/components/subcomponents\nfunction materializeField(field: Field): FieldValue | FieldValue[] {\n const toComponent = (c: Component): FieldValue => {\n if (c.children?.length === 0) {\n return \"\";\n }\n if (c.children?.length === 1) {\n return (c.children[0] as Subcomponent).value;\n }\n return c.children ? c.children.map((sc) => (sc as Subcomponent).value) : [];\n };\n\n const toRepetitionArray = (r: FieldRepetition): FieldValue[] =>\n r.children.map((c) => toComponent(c as Component));\n\n const repetitions = field.children as FieldRepetition[];\n\n if (repetitions.length === 1) {\n const rep = repetitions[0];\n\n if (!rep) {\n throw new Error(\"Expected a field repetition\");\n }\n\n if (rep.children.length === 1) {\n const comp = rep.children[0] as Component;\n const compVal = toComponent(comp);\n\n return Array.isArray(compVal) ? [compVal] : compVal;\n }\n return toRepetitionArray(rep);\n }\n\n // Multiple repetitions: project each repetition to a value (string or array)\n return repetitions.map((r) => {\n const rep = r as FieldRepetition;\n if (rep.children.length === 1) {\n return toComponent(rep.children[0] as Component);\n }\n return toRepetitionArray(rep);\n }) as string[];\n}\n"],"mappings":";AAmBO,IAAM,eAAyC,WAAkB;AAEtE,QAAM,OAAO;AAEb,WAAS,SAAS,MAAoB;AACpC,WAAO,KAAK,UAAU,OAAO,IAAa,GAAG,MAAM,CAAC;AAAA,EACtD;AAEA,OAAK,WAAW;AAClB;AAEO,SAAS,OAAO,MAA4B;AACjD,QAAM,IAAI;AACV,QAAM,MAAqB,CAAC;AAE5B,aAAW,KAAK,EAAE,UAAuB;AACvC,UAAM,cAAc,EAAE,SAAS,CAAC,EAAE;AAClC,UAAM,SAAwC,CAAC;AAG/C,eAAW,KAAK,EAAE,SAAS,MAAM,CAAC,GAAc;AAC9C,aAAO,KAAK,iBAAiB,CAAC,CAAC;AAAA,IACjC;AAEA,QAAI,KAAK,EAAE,SAAS,aAAa,OAAO,CAAC;AAAA,EAC3C;AAEA,SAAO;AACT;AAGA,SAAS,iBAAiB,OAAyC;AACjE,QAAM,cAAc,CAAC,MAA6B;AAChD,QAAI,EAAE,UAAU,WAAW,GAAG;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,EAAE,UAAU,WAAW,GAAG;AAC5B,aAAQ,EAAE,SAAS,CAAC,EAAmB;AAAA,IACzC;AACA,WAAO,EAAE,WAAW,EAAE,SAAS,IAAI,CAAC,OAAQ,GAAoB,KAAK,IAAI,CAAC;AAAA,EAC5E;AAEA,QAAM,oBAAoB,CAAC,MACzB,EAAE,SAAS,IAAI,CAAC,MAAM,YAAY,CAAc,CAAC;AAEnD,QAAM,cAAc,MAAM;AAE1B,MAAI,YAAY,WAAW,GAAG;AAC5B,UAAM,MAAM,YAAY,CAAC;AAEzB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,QAAI,IAAI,SAAS,WAAW,GAAG;AAC7B,YAAM,OAAO,IAAI,SAAS,CAAC;AAC3B,YAAM,UAAU,YAAY,IAAI;AAEhC,aAAO,MAAM,QAAQ,OAAO,IAAI,CAAC,OAAO,IAAI;AAAA,IAC9C;AACA,WAAO,kBAAkB,GAAG;AAAA,EAC9B;AAGA,SAAO,YAAY,IAAI,CAAC,MAAM;AAC5B,UAAM,MAAM;AACZ,QAAI,IAAI,SAAS,WAAW,GAAG;AAC7B,aAAO,YAAY,IAAI,SAAS,CAAC,CAAc;AAAA,IACjD;AACA,WAAO,kBAAkB,GAAG;AAAA,EAC9B,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../src/runtime.ts","../src/processor.ts"],"sourcesContent":["import type {\n Component,\n Field,\n FieldRepetition,\n Group,\n Nodes,\n Root,\n Segment,\n Subcomponent,\n} from \"@rethinkhealth/hl7v2-ast\";\nimport type {\n FieldJson,\n GroupJson,\n Hl7v2JsonResult,\n SegmentJson,\n} from \"./types\";\n\nexport function toJsonRuntime(root: Nodes): Hl7v2JsonResult {\n const r = root as Root;\n const out: Hl7v2JsonResult = [];\n\n for (const child of r.children) {\n if (child.type === \"segment\") {\n out.push(processSegment(child as Segment));\n } else if (child.type === \"group\") {\n out.push(processGroup(child as Group));\n }\n }\n\n return out;\n}\n\nfunction processSegment(segment: Segment): SegmentJson {\n const segmentName = segment.children[0].value;\n const fields: (FieldJson | FieldJson[])[] = [];\n\n // Skip the header field (index 0) when projecting to fields\n for (const f of segment.children.slice(1) as Field[]) {\n fields.push(materializeField(f));\n }\n\n return { segment: segmentName, fields };\n}\n\nfunction processGroup(group: Group): GroupJson {\n const children: Array<SegmentJson | GroupJson> = [];\n\n for (const child of group.children) {\n if (child.type === \"segment\") {\n children.push(processSegment(child as Segment));\n } else if (child.type === \"group\") {\n children.push(processGroup(child as Group));\n }\n }\n\n return { group: group.name ?? \"\", children };\n}\n\n// Convert a Field into JSON-friendly value: string or nested arrays representing reps/components/subcomponents\nfunction materializeField(field: Field): FieldJson | FieldJson[] {\n const toComponent = (c: Component): FieldJson => {\n if (c.children?.length === 0) {\n return \"\";\n }\n if (c.children?.length === 1) {\n return (c.children[0] as Subcomponent).value;\n }\n return c.children ? c.children.map((sc) => (sc as Subcomponent).value) : [];\n };\n\n const toRepetitionArray = (r: FieldRepetition): FieldJson[] =>\n r.children.map((c) => toComponent(c as Component));\n\n const repetitions = field.children as FieldRepetition[];\n\n if (repetitions.length === 1) {\n const rep = repetitions[0];\n\n if (!rep) {\n throw new Error(\"Expected a field repetition\");\n }\n\n if (rep.children.length === 1) {\n const comp = rep.children[0] as Component;\n const compVal = toComponent(comp);\n\n return Array.isArray(compVal) ? [compVal] : compVal;\n }\n return toRepetitionArray(rep);\n }\n\n // Multiple repetitions: project each repetition to a value (string or array)\n return repetitions.map((r) => {\n const rep = r as FieldRepetition;\n if (rep.children.length === 1) {\n return toComponent(rep.children[0] as Component);\n }\n return toRepetitionArray(rep);\n }) as string[];\n}\n","import type { Node, Nodes, Root } from \"@rethinkhealth/hl7v2-ast\";\nimport type { Processor } from \"unified\";\nimport { toJsonRuntime } from \"./runtime\";\nimport type { Hl7v2JsonResult } from \"./types\";\n\nexport function hl7v2Jsonify(this: Processor) {\n const self = this as unknown as Processor<\n Node,\n undefined,\n undefined,\n Root,\n undefined\n >;\n\n function compiler(tree: Nodes): Hl7v2JsonResult {\n return toJsonRuntime(tree);\n }\n\n self.compiler = compiler as unknown as typeof self.compiler;\n}\n"],"mappings":";AAiBO,SAAS,cAAc,MAA8B;AAC1D,QAAM,IAAI;AACV,QAAM,MAAuB,CAAC;AAE9B,aAAW,SAAS,EAAE,UAAU;AAC9B,QAAI,MAAM,SAAS,WAAW;AAC5B,UAAI,KAAK,eAAe,KAAgB,CAAC;AAAA,IAC3C,WAAW,MAAM,SAAS,SAAS;AACjC,UAAI,KAAK,aAAa,KAAc,CAAC;AAAA,IACvC;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,SAA+B;AACrD,QAAM,cAAc,QAAQ,SAAS,CAAC,EAAE;AACxC,QAAM,SAAsC,CAAC;AAG7C,aAAW,KAAK,QAAQ,SAAS,MAAM,CAAC,GAAc;AACpD,WAAO,KAAK,iBAAiB,CAAC,CAAC;AAAA,EACjC;AAEA,SAAO,EAAE,SAAS,aAAa,OAAO;AACxC;AAEA,SAAS,aAAa,OAAyB;AAC7C,QAAM,WAA2C,CAAC;AAElD,aAAW,SAAS,MAAM,UAAU;AAClC,QAAI,MAAM,SAAS,WAAW;AAC5B,eAAS,KAAK,eAAe,KAAgB,CAAC;AAAA,IAChD,WAAW,MAAM,SAAS,SAAS;AACjC,eAAS,KAAK,aAAa,KAAc,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,MAAM,QAAQ,IAAI,SAAS;AAC7C;AAGA,SAAS,iBAAiB,OAAuC;AAC/D,QAAM,cAAc,CAAC,MAA4B;AAC/C,QAAI,EAAE,UAAU,WAAW,GAAG;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,EAAE,UAAU,WAAW,GAAG;AAC5B,aAAQ,EAAE,SAAS,CAAC,EAAmB;AAAA,IACzC;AACA,WAAO,EAAE,WAAW,EAAE,SAAS,IAAI,CAAC,OAAQ,GAAoB,KAAK,IAAI,CAAC;AAAA,EAC5E;AAEA,QAAM,oBAAoB,CAAC,MACzB,EAAE,SAAS,IAAI,CAAC,MAAM,YAAY,CAAc,CAAC;AAEnD,QAAM,cAAc,MAAM;AAE1B,MAAI,YAAY,WAAW,GAAG;AAC5B,UAAM,MAAM,YAAY,CAAC;AAEzB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,QAAI,IAAI,SAAS,WAAW,GAAG;AAC7B,YAAM,OAAO,IAAI,SAAS,CAAC;AAC3B,YAAM,UAAU,YAAY,IAAI;AAEhC,aAAO,MAAM,QAAQ,OAAO,IAAI,CAAC,OAAO,IAAI;AAAA,IAC9C;AACA,WAAO,kBAAkB,GAAG;AAAA,EAC9B;AAGA,SAAO,YAAY,IAAI,CAAC,MAAM;AAC5B,UAAM,MAAM;AACZ,QAAI,IAAI,SAAS,WAAW,GAAG;AAC7B,aAAO,YAAY,IAAI,SAAS,CAAC,CAAc;AAAA,IACjD;AACA,WAAO,kBAAkB,GAAG;AAAA,EAC9B,CAAC;AACH;;;AC9FO,SAAS,eAA8B;AAC5C,QAAM,OAAO;AAQb,WAAS,SAAS,MAA8B;AAC9C,WAAO,cAAc,IAAI;AAAA,EAC3B;AAEA,OAAK,WAAW;AAClB;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { Processor } from "unified";
2
+ export declare function hl7v2Jsonify(this: Processor): void;
3
+ //# sourceMappingURL=processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIzC,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,QAc3C"}
@@ -0,0 +1,4 @@
1
+ import type { Nodes } from "@rethinkhealth/hl7v2-ast";
2
+ import type { Hl7v2JsonResult } from "./types";
3
+ export declare function toJsonRuntime(root: Nodes): Hl7v2JsonResult;
4
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,KAAK,EAIN,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,eAAe,CAa1D"}
@@ -0,0 +1,11 @@
1
+ export type FieldJson = string | string[];
2
+ export type SegmentJson = {
3
+ segment: string;
4
+ fields: (FieldJson | FieldJson[])[];
5
+ };
6
+ export type GroupJson = {
7
+ group: string;
8
+ children: Array<SegmentJson | GroupJson>;
9
+ };
10
+ export type Hl7v2JsonResult = Array<SegmentJson | GroupJson>;
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rethinkhealth/hl7v2-jsonify",
3
3
  "description": "hl7v2 plugin to transform hl7v2 messages to a simplified JSON representation",
4
- "version": "0.2.22",
4
+ "version": "0.2.24",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Melek Somai",
@@ -17,20 +17,18 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "unified": "11.0.5",
20
- "unist-util-visit": "5.0.0",
21
- "unist-util-visit-parents": "6.0.2"
20
+ "@rethinkhealth/hl7v2-ast": "0.2.24"
22
21
  },
23
22
  "devDependencies": {
24
- "@types/node": "24.8.1",
23
+ "@types/node": "24.9.2",
25
24
  "@types/unist": "^3.0.3",
26
- "@vitest/coverage-v8": "^3.2.4",
25
+ "@vitest/coverage-v8": "^4.0.5",
27
26
  "tsup": "8.5.0",
28
27
  "typescript": "^5.9.3",
29
- "vitest": "^3.2.4",
30
- "@rethinkhealth/hl7v2-ast": "0.2.22",
31
- "@rethinkhealth/hl7v2-builder": "0.2.22",
32
- "@rethinkhealth/tsconfig": "0.0.1",
33
- "@rethinkhealth/testing": "0.0.1"
28
+ "vitest": "^4.0.6",
29
+ "@rethinkhealth/testing": "0.0.2",
30
+ "@rethinkhealth/hl7v2-builder": "0.2.24",
31
+ "@rethinkhealth/tsconfig": "0.0.1"
34
32
  },
35
33
  "repository": "rethinkhealth/hl7v2.git",
36
34
  "homepage": "https://www.rethinkhealth.io/hl7v2/docs",