@rethinkhealth/hl7v2-lint-message-version 0.2.28 → 0.2.30

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.js CHANGED
@@ -40,7 +40,7 @@ var hl7v2LintMessageVersion = lintRule(
40
40
  const options = { ...defaultOptions, ...opts };
41
41
  if (tree.type !== "root") {
42
42
  file.fail(
43
- `The root node is expected to be a Root node. Received ${tree.type} instead`
43
+ `Root node type must be 'root' \u2014 received '${tree.type}' instead`
44
44
  );
45
45
  return;
46
46
  }
@@ -48,21 +48,21 @@ var hl7v2LintMessageVersion = lintRule(
48
48
  const annotatedMessageInfo = rootTree.data?.messageInfo;
49
49
  const messageInfo = annotatedMessageInfo ?? getMessageInfo(rootTree);
50
50
  if (!messageInfo?.version) {
51
- file.fail("Required MSH-12 segment value is missing");
51
+ file.fail("Required MSH-12 (version) field is missing or empty");
52
52
  return;
53
53
  }
54
54
  try {
55
55
  parse(messageInfo.version);
56
56
  } catch {
57
57
  file.fail(
58
- `MSH-12 segment value is invalid. Received '${messageInfo.version}' instead`
58
+ `MSH-12 (version) field value '${messageInfo.version}' is not a valid semver format`
59
59
  );
60
60
  return;
61
61
  }
62
62
  const isValid = satisfies(messageInfo.version, options.expression);
63
63
  if (!isValid) {
64
64
  file.fail(
65
- `MSH-12 segment value is not supported. Received '${messageInfo.version}' instead`
65
+ `MSH-12 (version) field value '${messageInfo.version}' does not satisfy expression '${options.expression}'`
66
66
  );
67
67
  }
68
68
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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 result = value(tree, \"MSH-12\");\n return result?.value || 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 result = value(tree, \"MSH-9.1\");\n return result?.value || 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 result = value(tree, \"MSH-9.2\");\n return result?.value || 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 result = value(tree, \"MSH-9.3\");\n return result?.value || 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,SAAS,MAAM,MAAM,QAAQ;AACnC,SAAO,QAAQ,SAAS;AAC1B;AAaO,SAAS,eAAe,MAAgC;AAC7D,QAAM,SAAS,MAAM,MAAM,SAAS;AACpC,SAAO,QAAQ,SAAS;AAC1B;AAaO,SAAS,gBAAgB,MAAgC;AAC9D,QAAM,SAAS,MAAM,MAAM,SAAS;AACpC,SAAO,QAAQ,SAAS;AAC1B;AAaO,SAAS,oBAAoB,MAAgC;AAClE,QAAM,SAAS,MAAM,MAAM,SAAS;AACpC,SAAO,QAAQ,SAAS;AAC1B;;;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":[]}
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 result = value(tree, \"MSH-12\");\n return result?.value || 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 result = value(tree, \"MSH-9.1\");\n return result?.value || 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 result = value(tree, \"MSH-9.2\");\n return result?.value || 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 result = value(tree, \"MSH-9.3\");\n return result?.value || 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 `Root node type must be 'root' 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 (version) field is missing or empty\");\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 (version) field value '${messageInfo.version}' is not a valid semver format`\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 (version) field value '${messageInfo.version}' does not satisfy expression '${options.expression}'`\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,SAAS,MAAM,MAAM,QAAQ;AACnC,SAAO,QAAQ,SAAS;AAC1B;AAaO,SAAS,eAAe,MAAgC;AAC7D,QAAM,SAAS,MAAM,MAAM,SAAS;AACpC,SAAO,QAAQ,SAAS;AAC1B;AAaO,SAAS,gBAAgB,MAAgC;AAC9D,QAAM,SAAS,MAAM,MAAM,SAAS;AACpC,SAAO,QAAQ,SAAS;AAC1B;AAaO,SAAS,oBAAoB,MAAgC;AAClE,QAAM,SAAS,MAAM,MAAM,SAAS;AACpC,SAAO,QAAQ,SAAS;AAC1B;;;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,kDAA6C,KAAK,IAAI;AAAA,MACxD;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,qDAAqD;AAC/D;AAAA,IACF;AAGA,QAAI;AACF,YAAM,YAAY,OAAO;AAAA,IAC3B,QAAQ;AACN,WAAK;AAAA,QACH,iCAAiC,YAAY,OAAO;AAAA,MACtD;AACA;AAAA,IACF;AAGA,UAAM,UAAU,UAAU,YAAY,SAAS,QAAQ,UAAU;AAEjE,QAAI,CAAC,SAAS;AACZ,WAAK;AAAA,QACH,iCAAiC,YAAY,OAAO,kCAAkC,QAAQ,UAAU;AAAA,MAC1G;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.28",
4
+ "version": "0.2.30",
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.28",
21
- "@rethinkhealth/hl7v2-util-semver": "0.2.28"
20
+ "@rethinkhealth/hl7v2-util-query": "0.2.30",
21
+ "@rethinkhealth/hl7v2-util-semver": "0.2.30"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/node": "24.10.0",
@@ -29,11 +29,11 @@
29
29
  "unified": "^11.0.5",
30
30
  "vfile": "^6.0.3",
31
31
  "vitest": "^4.0.6",
32
- "@rethinkhealth/hl7v2-builder": "0.2.28",
33
- "@rethinkhealth/hl7v2-ast": "0.2.28",
32
+ "@rethinkhealth/hl7v2-builder": "0.2.30",
33
+ "@rethinkhealth/hl7v2-ast": "0.2.30",
34
34
  "@rethinkhealth/testing": "0.0.2",
35
- "@rethinkhealth/hl7v2-util-message-info": "0.2.28",
36
- "@rethinkhealth/tsconfig": "0.0.1"
35
+ "@rethinkhealth/tsconfig": "0.0.1",
36
+ "@rethinkhealth/hl7v2-util-message-info": "0.2.30"
37
37
  },
38
38
  "repository": "rethinkhealth/hl7v2.git",
39
39
  "homepage": "https://www.rethinkhealth.io/hl7v2/docs",