@glion/encode-escapes 0.15.2 → 0.16.0

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.
Files changed (2) hide show
  1. package/dist/index.js.map +1 -1
  2. package/package.json +14 -15
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { Delimiters, Root, Segment, Subcomponent } from \"@glion/ast\";\nimport { DEFAULT_DELIMITERS } from \"@glion/utils\";\nimport type { Plugin } from \"unified\";\nimport { SKIP, visit } from \"unist-util-visit\";\nimport type { VFile } from \"vfile\";\n\nexport interface HL7v2EncodeOptions {\n delimiters?: Partial<Delimiters>;\n}\n\n/**\n * Unified plugin to encode special characters as HL7v2 escape sequences\n * in subcomponent literals.\n *\n * - Encodes delimiter characters: | → \\F, ^ → \\S, ~ → \\R, & → \\T\\\n * - Encodes escape character: \\ → \\E\\\n * - Encodes segment delimiter: \\r → .br\\\n * - Skips MSH-1 and MSH-2 (they define the delimiters and must not be escaped)\n *\n * Delimiter resolution order:\n *\n * 1. `options.delimiters` (explicit override)\n * 2. `file.data.delimiters` (set by hl7v2-annotate-delimiters)\n * 3. `DEFAULT_DELIMITERS`\n */\nexport const hl7v2EncodeEscapes: Plugin<[HL7v2EncodeOptions?], Root, Root> =\n (options) => (tree: Root, file: VFile) => {\n const d = {\n ...((file.data.delimiters as Delimiters | undefined) ??\n DEFAULT_DELIMITERS),\n ...options?.delimiters,\n };\n\n const charToEscape = buildEscapeMap(d);\n\n visit(tree, (node, index, parent) => {\n // Skip MSH-1 (index 0) and MSH-2 (index 1) — they define delimiters\n if (\n node.type === \"field\" &&\n index !== undefined &&\n index < 2 &&\n parent?.type === \"segment\" &&\n (parent as Segment).name === \"MSH\"\n ) {\n return SKIP;\n }\n\n if (node.type === \"subcomponent\") {\n (node as Subcomponent).value = encode(\n (node as Subcomponent).value,\n charToEscape\n );\n }\n });\n\n return tree;\n };\n\n/**\n * Build a map from literal characters to their HL7v2 escape sequences.\n * The escape character must be mapped first to avoid double-encoding.\n */\nfunction buildEscapeMap(d: Delimiters): ReadonlyMap<string, string> {\n return new Map<string, string>([\n [d.escape, `${d.escape}E${d.escape}`],\n [d.field, `${d.escape}F${d.escape}`],\n [d.component, `${d.escape}S${d.escape}`],\n [d.repetition, `${d.escape}R${d.escape}`],\n [d.subcomponent, `${d.escape}T${d.escape}`],\n [d.segment, `${d.escape}.br${d.escape}`],\n ]);\n}\n\n/**\n * Encode special characters in a value as HL7v2 escape sequences.\n *\n * @param value - The value to encode.\n * @param charToEscape - Map of characters to their escape sequences.\n * @returns The encoded value.\n */\nfunction encode(\n value: string,\n charToEscape: ReadonlyMap<string, string>\n): string {\n if (!value) {\n return value;\n }\n\n let encoded = \"\";\n\n for (const ch of value) {\n const escape = charToEscape.get(ch);\n encoded += escape ?? ch;\n }\n\n return encoded;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAyBA,MAAa,sBACV,aAAa,MAAY,SAAgB;CAOxC,MAAM,eAAe,eANX;EACR,GAAK,KAAK,KAAK,cACb;EACF,GAAG,SAAS;EACb,CAEqC;AAEtC,OAAM,OAAO,MAAM,OAAO,WAAW;AAEnC,MACE,KAAK,SAAS,WACd,UAAU,KAAA,KACV,QAAQ,KACR,QAAQ,SAAS,aAChB,OAAmB,SAAS,MAE7B,QAAO;AAGT,MAAI,KAAK,SAAS,eACf,MAAsB,QAAQ,OAC5B,KAAsB,OACvB,aACD;GAEH;AAEF,QAAO;;;;;;AAOX,SAAS,eAAe,GAA4C;AAClE,QAAO,IAAI,IAAoB;EAC7B,CAAC,EAAE,QAAQ,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACrC,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACpC,CAAC,EAAE,WAAW,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACxC,CAAC,EAAE,YAAY,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACzC,CAAC,EAAE,cAAc,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EAC3C,CAAC,EAAE,SAAS,GAAG,EAAE,OAAO,KAAK,EAAE,SAAS;EACzC,CAAC;;;;;;;;;AAUJ,SAAS,OACP,OACA,cACQ;AACR,KAAI,CAAC,MACH,QAAO;CAGT,IAAI,UAAU;AAEd,MAAK,MAAM,MAAM,OAAO;EACtB,MAAM,SAAS,aAAa,IAAI,GAAG;AACnC,aAAW,UAAU;;AAGvB,QAAO"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { Delimiters, Root, Segment, Subcomponent } from \"@glion/ast\";\nimport { DEFAULT_DELIMITERS } from \"@glion/utils\";\nimport type { Plugin } from \"unified\";\nimport { SKIP, visit } from \"unist-util-visit\";\nimport type { VFile } from \"vfile\";\n\nexport interface HL7v2EncodeOptions {\n delimiters?: Partial<Delimiters>;\n}\n\n/**\n * Unified plugin to encode special characters as HL7v2 escape sequences\n * in subcomponent literals.\n *\n * - Encodes delimiter characters: | → \\F, ^ → \\S, ~ → \\R, & → \\T\\\n * - Encodes escape character: \\ → \\E\\\n * - Encodes segment delimiter: \\r → .br\\\n * - Skips MSH-1 and MSH-2 (they define the delimiters and must not be escaped)\n *\n * Delimiter resolution order:\n *\n * 1. `options.delimiters` (explicit override)\n * 2. `file.data.delimiters` (set by hl7v2-annotate-delimiters)\n * 3. `DEFAULT_DELIMITERS`\n */\nexport const hl7v2EncodeEscapes: Plugin<[HL7v2EncodeOptions?], Root, Root> =\n (options) => (tree: Root, file: VFile) => {\n const d = {\n ...((file.data.delimiters as Delimiters | undefined) ??\n DEFAULT_DELIMITERS),\n ...options?.delimiters,\n };\n\n const charToEscape = buildEscapeMap(d);\n\n visit(tree, (node, index, parent) => {\n // Skip MSH-1 (index 0) and MSH-2 (index 1) — they define delimiters\n if (\n node.type === \"field\" &&\n index !== undefined &&\n index < 2 &&\n parent?.type === \"segment\" &&\n (parent as Segment).name === \"MSH\"\n ) {\n return SKIP;\n }\n\n if (node.type === \"subcomponent\") {\n (node as Subcomponent).value = encode(\n (node as Subcomponent).value,\n charToEscape\n );\n }\n });\n\n return tree;\n };\n\n/**\n * Build a map from literal characters to their HL7v2 escape sequences.\n * The escape character must be mapped first to avoid double-encoding.\n */\nfunction buildEscapeMap(d: Delimiters): ReadonlyMap<string, string> {\n return new Map<string, string>([\n [d.escape, `${d.escape}E${d.escape}`],\n [d.field, `${d.escape}F${d.escape}`],\n [d.component, `${d.escape}S${d.escape}`],\n [d.repetition, `${d.escape}R${d.escape}`],\n [d.subcomponent, `${d.escape}T${d.escape}`],\n [d.segment, `${d.escape}.br${d.escape}`],\n ]);\n}\n\n/**\n * Encode special characters in a value as HL7v2 escape sequences.\n *\n * @param value - The value to encode.\n * @param charToEscape - Map of characters to their escape sequences.\n * @returns The encoded value.\n */\nfunction encode(\n value: string,\n charToEscape: ReadonlyMap<string, string>\n): string {\n if (!value) {\n return value;\n }\n\n let encoded = \"\";\n\n for (const ch of value) {\n const escape = charToEscape.get(ch);\n encoded += escape ?? ch;\n }\n\n return encoded;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAyBA,MAAa,sBACV,aAAa,MAAY,SAAgB;CAOxC,MAAM,eAAe,eAAe;EALlC,GAAK,KAAK,KAAK,cACb;EACF,GAAG,SAAS;EAGuB,CAAC;AAEtC,OAAM,OAAO,MAAM,OAAO,WAAW;AAEnC,MACE,KAAK,SAAS,WACd,UAAU,KAAA,KACV,QAAQ,KACR,QAAQ,SAAS,aAChB,OAAmB,SAAS,MAE7B,QAAO;AAGT,MAAI,KAAK,SAAS,eACf,MAAsB,QAAQ,OAC5B,KAAsB,OACvB,aACD;GAEH;AAEF,QAAO;;;;;;AAOX,SAAS,eAAe,GAA4C;AAClE,QAAO,IAAI,IAAoB;EAC7B,CAAC,EAAE,QAAQ,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACrC,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACpC,CAAC,EAAE,WAAW,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACxC,CAAC,EAAE,YAAY,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EACzC,CAAC,EAAE,cAAc,GAAG,EAAE,OAAO,GAAG,EAAE,SAAS;EAC3C,CAAC,EAAE,SAAS,GAAG,EAAE,OAAO,KAAK,EAAE,SAAS;EACzC,CAAC;;;;;;;;;AAUJ,SAAS,OACP,OACA,cACQ;AACR,KAAI,CAAC,MACH,QAAO;CAGT,IAAI,UAAU;AAEd,MAAK,MAAM,MAAM,OAAO;EACtB,MAAM,SAAS,aAAa,IAAI,GAAG;AACnC,aAAW,UAAU;;AAGvB,QAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glion/encode-escapes",
3
- "version": "0.15.2",
3
+ "version": "0.16.0",
4
4
  "description": "hl7v2 plugin to encode special characters as hl7v2 escape sequences",
5
5
  "keywords": [
6
6
  "health",
@@ -35,28 +35,27 @@
35
35
  "dependencies": {
36
36
  "unified": "11.0.5",
37
37
  "unist-util-visit": "5.1.0",
38
- "@glion/utils": "0.15.2"
38
+ "@glion/utils": "0.16.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@types/node": "^25.5.0",
41
+ "@types/node": "25.6.0",
42
42
  "@types/unist": "^3.0.3",
43
- "@vitest/coverage-v8": "4.1.2",
43
+ "@vitest/coverage-v8": "4.1.5",
44
44
  "publint": "0.3.18",
45
- "tsdown": "0.21.7",
46
- "typescript": "^5.9.3",
45
+ "tsdown": "0.21.10",
46
+ "typescript": "6.0.3",
47
47
  "vfile": "^6.0.3",
48
- "vitest": "4.1.2",
49
- "@glion/ast": "0.15.2",
50
- "@glion/builder": "0.15.2",
51
- "@glion/check-readme": "0.15.2",
52
- "@glion/decode-escapes": "0.15.2",
53
- "@glion/testing": "0.15.2",
54
- "@glion/tsconfig": "0.15.2"
48
+ "vitest": "4.1.5",
49
+ "@glion/builder": "0.16.0",
50
+ "@glion/check-readme": "0.16.0",
51
+ "@glion/ast": "0.16.0",
52
+ "@glion/testing": "0.16.0",
53
+ "@glion/tsconfig": "0.16.0",
54
+ "@glion/decode-escapes": "0.16.0"
55
55
  },
56
56
  "engines": {
57
- "node": ">=18"
57
+ "node": ">=20"
58
58
  },
59
- "packageManager": "pnpm@10.14.0",
60
59
  "scripts": {
61
60
  "bench": "vitest bench --run",
62
61
  "build": "tsdown && tsc --emitDeclarationOnly",