@rethinkhealth/hl7v2-lint-message-version 0.2.24 → 0.2.26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,0BAA0B,CAAC;AAK5D,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF,QAAA,MAAM,uBAAuB,sEAuD5B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAkB,MAAM,0BAA0B,CAAC;AAMtE,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF,QAAA,MAAM,uBAAuB,sEAiD5B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,31 @@
1
+ // ../hl7v2-util-message-info/dist/index.js
2
+ import { value } from "@rethinkhealth/hl7v2-util-query";
3
+ function getMessageInfo(tree) {
4
+ return {
5
+ version: getVersion(tree),
6
+ messageCode: getMessageCode(tree),
7
+ triggerEvent: getTriggerEvent(tree),
8
+ messageStructure: getMessageStructure(tree)
9
+ };
10
+ }
11
+ function getVersion(tree) {
12
+ const versionStr = value(tree, "MSH-12");
13
+ return versionStr || void 0;
14
+ }
15
+ function getMessageCode(tree) {
16
+ const messageCodeStr = value(tree, "MSH-9.1");
17
+ return messageCodeStr || void 0;
18
+ }
19
+ function getTriggerEvent(tree) {
20
+ const triggerEventStr = value(tree, "MSH-9.2");
21
+ return triggerEventStr || void 0;
22
+ }
23
+ function getMessageStructure(tree) {
24
+ const messageStructureStr = value(tree, "MSH-9.3");
25
+ return messageStructureStr || void 0;
26
+ }
27
+
1
28
  // src/index.ts
2
- import { find, value } from "@rethinkhealth/hl7v2-util-query";
3
29
  import { parse, satisfies } from "@rethinkhealth/hl7v2-util-semver";
4
30
  import { lintRule } from "unified-lint-rule";
5
31
  var defaultOptions = {
@@ -14,37 +40,29 @@ var hl7v2LintMessageVersion = lintRule(
14
40
  const options = { ...defaultOptions, ...opts };
15
41
  if (tree.type !== "root") {
16
42
  file.fail(
17
- `The root node is expected to be a Root node. Received ${tree.type} instead.`
43
+ `The root node is expected to be a Root node. Received ${tree.type} instead`
18
44
  );
45
+ return;
19
46
  }
20
- const msh12 = find(tree, "MSH-12");
21
- if (!msh12) {
22
- file.fail("MSH-12 segment is missing.");
47
+ const rootTree = tree;
48
+ const annotatedMessageInfo = rootTree.data?.messageInfo;
49
+ const messageInfo = annotatedMessageInfo ?? getMessageInfo(rootTree);
50
+ if (!messageInfo?.version) {
51
+ file.fail("Required MSH-12 segment value is missing");
52
+ return;
23
53
  }
24
- const versionStr = value(tree, "MSH-12");
25
- if (!versionStr) {
26
- file.fail(
27
- "MSH-12 segment value is required. Received empty string instead."
28
- );
29
- }
30
- try {
31
- parse(versionStr ?? "");
32
- } catch (_err) {
33
- file.fail(
34
- `MSH-12 segment value is invalid. Received '${versionStr}' instead.`
35
- );
36
- }
37
- let isValid = false;
38
54
  try {
39
- isValid = satisfies(versionStr ?? "", options.expression);
40
- } catch (_err) {
55
+ parse(messageInfo.version);
56
+ } catch {
41
57
  file.fail(
42
- `MSH-12 segment value is not supported. Received '${versionStr}' instead.`
58
+ `MSH-12 segment value is invalid. Received '${messageInfo.version}' instead`
43
59
  );
60
+ return;
44
61
  }
62
+ const isValid = satisfies(messageInfo.version, options.expression);
45
63
  if (!isValid) {
46
64
  file.fail(
47
- `MSH-12 segment value is not supported. Received '${versionStr}' instead.`
65
+ `MSH-12 segment value is not supported. Received '${messageInfo.version}' instead`
48
66
  );
49
67
  }
50
68
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Nodes, Root } from \"@rethinkhealth/hl7v2-ast\";\nimport { find, value } from \"@rethinkhealth/hl7v2-util-query\";\nimport { parse, satisfies } from \"@rethinkhealth/hl7v2-util-semver\";\nimport { lintRule } from \"unified-lint-rule\";\n\nexport type MessageVersionLintOptions = {\n expression: string;\n};\n\nconst defaultOptions: Required<MessageVersionLintOptions> = {\n expression: \"<3.0.0 >=2.3\",\n};\n\nconst hl7v2LintMessageVersion = lintRule<Nodes, MessageVersionLintOptions>(\n {\n origin: \"hl7v2-lint:message-version\",\n url: \"https://github.com/rethinkhealth/hl7v2/tree/main/packages/hl7v2-lint-message-version#readme\",\n },\n (tree, file, opts) => {\n const options = { ...defaultOptions, ...opts };\n\n // 1. Ensure the root node is a Root node.\n if (tree.type !== \"root\") {\n file.fail(\n `The root node is expected to be a Root node. Received ${tree.type} instead.`\n );\n }\n\n // 2. Ensure the MSH-12 segment is present.\n const msh12 = find(tree as Root, \"MSH-12\");\n\n if (!msh12) {\n file.fail(\"MSH-12 segment is missing.\");\n }\n\n const versionStr = value(tree as Root, \"MSH-12\");\n\n if (!versionStr) {\n file.fail(\n \"MSH-12 segment value is required. Received empty string instead.\"\n );\n }\n\n // 3. Ensure the MSH-12 segment value is a valid version.\n try {\n parse(versionStr ?? \"\");\n } catch (_err) {\n file.fail(\n `MSH-12 segment value is invalid. Received '${versionStr}' instead.`\n );\n }\n\n // 4. Ensure the MSH-12 segment value satisfies the expression.\n let isValid = false;\n try {\n isValid = satisfies(versionStr ?? \"\", options.expression);\n } catch (_err) {\n file.fail(\n `MSH-12 segment value is not supported. Received '${versionStr}' instead.`\n );\n }\n\n if (!isValid) {\n file.fail(\n `MSH-12 segment value is not supported. Received '${versionStr}' instead.`\n );\n }\n }\n);\n\nexport default hl7v2LintMessageVersion;\n"],"mappings":";AACA,SAAS,MAAM,aAAa;AAC5B,SAAS,OAAO,iBAAiB;AACjC,SAAS,gBAAgB;AAMzB,IAAM,iBAAsD;AAAA,EAC1D,YAAY;AACd;AAEA,IAAM,0BAA0B;AAAA,EAC9B;AAAA,IACE,QAAQ;AAAA,IACR,KAAK;AAAA,EACP;AAAA,EACA,CAAC,MAAM,MAAM,SAAS;AACpB,UAAM,UAAU,EAAE,GAAG,gBAAgB,GAAG,KAAK;AAG7C,QAAI,KAAK,SAAS,QAAQ;AACxB,WAAK;AAAA,QACH,yDAAyD,KAAK,IAAI;AAAA,MACpE;AAAA,IACF;AAGA,UAAM,QAAQ,KAAK,MAAc,QAAQ;AAEzC,QAAI,CAAC,OAAO;AACV,WAAK,KAAK,4BAA4B;AAAA,IACxC;AAEA,UAAM,aAAa,MAAM,MAAc,QAAQ;AAE/C,QAAI,CAAC,YAAY;AACf,WAAK;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAGA,QAAI;AACF,YAAM,cAAc,EAAE;AAAA,IACxB,SAAS,MAAM;AACb,WAAK;AAAA,QACH,8CAA8C,UAAU;AAAA,MAC1D;AAAA,IACF;AAGA,QAAI,UAAU;AACd,QAAI;AACF,gBAAU,UAAU,cAAc,IAAI,QAAQ,UAAU;AAAA,IAC1D,SAAS,MAAM;AACb,WAAK;AAAA,QACH,oDAAoD,UAAU;AAAA,MAChE;AAAA,IACF;AAEA,QAAI,CAAC,SAAS;AACZ,WAAK;AAAA,QACH,oDAAoD,UAAU;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../hl7v2-util-message-info/src/extract.ts","../src/index.ts"],"sourcesContent":["import type { Root } from \"@rethinkhealth/hl7v2-ast\";\nimport { value } from \"@rethinkhealth/hl7v2-util-query\";\nimport type { MessageInfo } from \"./types\";\n\n/**\n * Extract complete message metadata from MSH segment\n *\n * @param tree - The HL7v2 AST root node\n * @returns MessageInfo object with version, message code, trigger event, and structure\n *\n * @example\n * ```typescript\n * const info = getMessageInfo(tree);\n * console.log(info.version); // \"2.5\"\n * console.log(info.messageCode); // \"ADT\"\n * console.log(info.triggerEvent); // \"A01\"\n * console.log(info.messageStructure); // \"ADT_A01\"\n * ```\n */\nexport function getMessageInfo(tree: Root): MessageInfo {\n return {\n version: getVersion(tree),\n messageCode: getMessageCode(tree),\n triggerEvent: getTriggerEvent(tree),\n messageStructure: getMessageStructure(tree),\n };\n}\n\n/**\n * Extract message version from MSH-12 field\n *\n * @param tree - The HL7v2 AST root node\n * @returns Version string or undefined if not present\n *\n * @example\n * ```typescript\n * const version = getVersion(tree); // \"2.5\"\n * ```\n */\nexport function getVersion(tree: Root): string | undefined {\n const versionStr = value(tree, \"MSH-12\");\n return versionStr || undefined;\n}\n\n/**\n * Extract message code from MSH-9.1 field\n *\n * @param tree - The HL7v2 AST root node\n * @returns Message code or undefined if not present\n *\n * @example\n * ```typescript\n * const messageCode = getMessageCode(tree); // \"ADT\"\n * ```\n */\nexport function getMessageCode(tree: Root): string | undefined {\n const messageCodeStr = value(tree, \"MSH-9.1\");\n return messageCodeStr || undefined;\n}\n\n/**\n * Extract trigger event from MSH-9.2 field\n *\n * @param tree - The HL7v2 AST root node\n * @returns Trigger event or undefined if not present\n *\n * @example\n * ```typescript\n * const triggerEvent = getTriggerEvent(tree); // \"A01\"\n * ```\n */\nexport function getTriggerEvent(tree: Root): string | undefined {\n const triggerEventStr = value(tree, \"MSH-9.2\");\n return triggerEventStr || undefined;\n}\n\n/**\n * Extract message structure from MSH-9.3 field\n *\n * @param tree - The HL7v2 AST root node\n * @returns Message structure or undefined if not present\n *\n * @example\n * ```typescript\n * const messageStructure = getMessageStructure(tree); // \"ADT_A01\"\n * ```\n */\nexport function getMessageStructure(tree: Root): string | undefined {\n const messageStructureStr = value(tree, \"MSH-9.3\");\n return messageStructureStr || undefined;\n}\n","import type { Nodes, Root, RootData } from \"@rethinkhealth/hl7v2-ast\";\nimport type { MessageInfo } from \"@rethinkhealth/hl7v2-util-message-info\";\nimport { getMessageInfo } from \"@rethinkhealth/hl7v2-util-message-info\";\nimport { parse, satisfies } from \"@rethinkhealth/hl7v2-util-semver\";\nimport { lintRule } from \"unified-lint-rule\";\n\nexport type MessageVersionLintOptions = {\n expression: string;\n};\n\nconst defaultOptions = {\n expression: \"<3.0.0 >=2.3\",\n} as const;\n\nconst hl7v2LintMessageVersion = lintRule<Nodes, MessageVersionLintOptions>(\n {\n origin: \"hl7v2-lint:message-version\",\n url: \"https://github.com/rethinkhealth/hl7v2/tree/main/packages/hl7v2-lint-message-version#readme\",\n },\n (tree, file, opts) => {\n const options = { ...defaultOptions, ...opts };\n\n // 1. Validate tree is a Root node.\n if (tree.type !== \"root\") {\n file.fail(\n `The root node is expected to be a Root node. Received ${tree.type} instead`\n );\n return;\n }\n\n const rootTree = tree as Root;\n\n // 2. Extract message info from annotated data or parse from MSH segment.\n const annotatedMessageInfo = (\n rootTree.data as RootData & { messageInfo?: MessageInfo }\n )?.messageInfo;\n const messageInfo = annotatedMessageInfo ?? getMessageInfo(rootTree);\n\n // 3. Ensure version is present.\n if (!messageInfo?.version) {\n file.fail(\"Required MSH-12 segment value is missing\");\n return;\n }\n\n // 4. Validate version string is a syntactically valid version.\n try {\n parse(messageInfo.version);\n } catch {\n file.fail(\n `MSH-12 segment value is invalid. Received '${messageInfo.version}' instead`\n );\n return;\n }\n\n // 5. Ensure version satisfies allowed expression.\n const isValid = satisfies(messageInfo.version, options.expression);\n\n if (!isValid) {\n file.fail(\n `MSH-12 segment value is not supported. Received '${messageInfo.version}' instead`\n );\n }\n }\n);\n\nexport default hl7v2LintMessageVersion;\n"],"mappings":";AACA,SAAS,aAAa;AAkBf,SAAS,eAAe,MAAyB;AACtD,SAAO;IACL,SAAS,WAAW,IAAI;IACxB,aAAa,eAAe,IAAI;IAChC,cAAc,gBAAgB,IAAI;IAClC,kBAAkB,oBAAoB,IAAI;EAC5C;AACF;AAaO,SAAS,WAAW,MAAgC;AACzD,QAAM,aAAa,MAAM,MAAM,QAAQ;AACvC,SAAO,cAAc;AACvB;AAaO,SAAS,eAAe,MAAgC;AAC7D,QAAM,iBAAiB,MAAM,MAAM,SAAS;AAC5C,SAAO,kBAAkB;AAC3B;AAaO,SAAS,gBAAgB,MAAgC;AAC9D,QAAM,kBAAkB,MAAM,MAAM,SAAS;AAC7C,SAAO,mBAAmB;AAC5B;AAaO,SAAS,oBAAoB,MAAgC;AAClE,QAAM,sBAAsB,MAAM,MAAM,SAAS;AACjD,SAAO,uBAAuB;AAChC;;;ACvFA,SAAS,OAAO,iBAAiB;AACjC,SAAS,gBAAgB;AAMzB,IAAM,iBAAiB;AAAA,EACrB,YAAY;AACd;AAEA,IAAM,0BAA0B;AAAA,EAC9B;AAAA,IACE,QAAQ;AAAA,IACR,KAAK;AAAA,EACP;AAAA,EACA,CAAC,MAAM,MAAM,SAAS;AACpB,UAAM,UAAU,EAAE,GAAG,gBAAgB,GAAG,KAAK;AAG7C,QAAI,KAAK,SAAS,QAAQ;AACxB,WAAK;AAAA,QACH,yDAAyD,KAAK,IAAI;AAAA,MACpE;AACA;AAAA,IACF;AAEA,UAAM,WAAW;AAGjB,UAAM,uBACJ,SAAS,MACR;AACH,UAAM,cAAc,wBAAwB,eAAe,QAAQ;AAGnE,QAAI,CAAC,aAAa,SAAS;AACzB,WAAK,KAAK,0CAA0C;AACpD;AAAA,IACF;AAGA,QAAI;AACF,YAAM,YAAY,OAAO;AAAA,IAC3B,QAAQ;AACN,WAAK;AAAA,QACH,8CAA8C,YAAY,OAAO;AAAA,MACnE;AACA;AAAA,IACF;AAGA,UAAM,UAAU,UAAU,YAAY,SAAS,QAAQ,UAAU;AAEjE,QAAI,CAAC,SAAS;AACZ,WAAK;AAAA,QACH,oDAAoD,YAAY,OAAO;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rethinkhealth/hl7v2-lint-message-version",
3
3
  "description": "hl7v2-lint rule to warn when message version is not supported",
4
- "version": "0.2.24",
4
+ "version": "0.2.26",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Melek Somai",
@@ -17,8 +17,8 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "unified-lint-rule": "3.0.1",
20
- "@rethinkhealth/hl7v2-util-query": "0.2.24",
21
- "@rethinkhealth/hl7v2-util-semver": "0.2.24"
20
+ "@rethinkhealth/hl7v2-util-query": "0.2.26",
21
+ "@rethinkhealth/hl7v2-util-semver": "0.2.26"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/node": "24.9.2",
@@ -29,10 +29,11 @@
29
29
  "unified": "^11.0.5",
30
30
  "vfile": "^6.0.3",
31
31
  "vitest": "^4.0.6",
32
+ "@rethinkhealth/hl7v2-ast": "0.2.26",
32
33
  "@rethinkhealth/testing": "0.0.2",
34
+ "@rethinkhealth/hl7v2-util-message-info": "0.2.26",
33
35
  "@rethinkhealth/tsconfig": "0.0.1",
34
- "@rethinkhealth/hl7v2-builder": "0.2.24",
35
- "@rethinkhealth/hl7v2-ast": "0.2.24"
36
+ "@rethinkhealth/hl7v2-builder": "0.2.26"
36
37
  },
37
38
  "repository": "rethinkhealth/hl7v2.git",
38
39
  "homepage": "https://www.rethinkhealth.io/hl7v2/docs",