@glion/annotate-profile-context 0.26.0 → 0.27.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.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 Rethink Health
3
+ Copyright (c) 2023 Rethink Health, SUARL
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ const TABLE_PREFIX = /^HL7/;
32
32
  */
33
33
  const hl7v2AnnotateProfileContext = () => async (tree, file) => {
34
34
  if (file.data.profile) return tree;
35
- const version = value(tree, "MSH-12.1")?.value;
35
+ const version = value(tree, "MSH.12.1")?.value;
36
36
  if (!version) return tree;
37
37
  const [fields, segments] = await Promise.all([loadFields(tree, version), loadSegments$1(version)]);
38
38
  const datatypes = await loadDatatypes(fields, version);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["loadSegments","loadSegmentDefinitions"],"sources":["../src/index.ts"],"sourcesContent":["import type { Root } from \"@glion/ast\";\nimport type {\n DatatypeDefinition,\n FieldDefinition,\n SegmentDefinition,\n TableDefinition,\n} from \"@glion/profiles\";\nimport {\n loadSegments as loadSegmentDefinitions,\n profiles,\n} from \"@glion/profiles\";\nimport { value } from \"@glion/util-query\";\nimport { visit } from \"@glion/util-visit\";\nimport type { Plugin } from \"unified\";\nimport type { VFile } from \"vfile\";\n\n/** Resolved profile data attached to `file.data.profile` by this plugin. */\nexport interface ProfileContext {\n /** HL7v2 version extracted from MSH-12.1. */\n version: string;\n /** Field definitions indexed by segment name (e.g., \"MSH\", \"PID\"). */\n fields: ReadonlyMap<string, FieldDefinition>;\n /** Datatype definitions indexed by datatype ID (e.g., \"ST\", \"CWE\"). */\n datatypes: ReadonlyMap<string, DatatypeDefinition>;\n /** Table definitions indexed by TBL#, as profiles print it (e.g., \"HL70001\"). */\n tables: ReadonlyMap<string, TableDefinition>;\n /** Segment definitions with titles, indexed by segment ID. */\n segments: SegmentDefinition;\n}\n\ndeclare module \"vfile\" {\n interface DataMap {\n profile?: ProfileContext | undefined;\n }\n}\n\n/**\n * The prefix of a TBL# (`HL70001`) that the table files' names omit\n * (`0001.json`).\n */\nconst TABLE_PREFIX = /^HL7/;\n\n/**\n * Unified plugin that loads HL7v2 profile data (fields, datatypes, tables)\n * and attaches them to `file.data` for downstream consumers.\n *\n * Extracts the HL7v2 version from MSH-12.1, then loads all relevant\n * field definitions, datatype definitions (with cascading resolution),\n * and table definitions in a single pass. Unknown profiles are silently\n * skipped.\n *\n * The plugin is idempotent — if `file.data.fields` is already populated,\n * it returns immediately without reloading.\n *\n * @example\n * ```typescript\n * import { unified } from \"unified\";\n * import { hl7v2Parser } from \"@glion/parser\";\n * import { hl7v2AnnotateProfileContext } from \"@glion/annotate-profile-context\";\n *\n * const processor = unified()\n * .use(hl7v2Parser)\n * .use(hl7v2AnnotateProfileContext);\n * ```;\n */\nexport const hl7v2AnnotateProfileContext: Plugin<[], Root, Root> =\n () => async (tree: Root, file: VFile) => {\n // Idempotency: skip if already populated\n if (file.data.profile) {\n return tree;\n }\n\n const version = value(tree, \"MSH-12.1\")?.value;\n if (!version) {\n return tree;\n }\n\n // Load fields and segments in parallel (segments don't depend on fields)\n const [fields, segments] = await Promise.all([\n loadFields(tree, version),\n loadSegments(version),\n ]);\n\n const datatypes = await loadDatatypes(fields, version);\n const tables = await loadTables(fields, datatypes, version);\n\n file.data.profile = { datatypes, fields, segments, tables, version };\n\n return tree;\n };\n\n// ---------------------------------------------------------------------------\n// Field loading\n// ---------------------------------------------------------------------------\n\n/**\n * Collect unique segment names from the tree and load their field definitions.\n * Unknown segments (Z-segments, etc.) are silently omitted.\n */\nfunction loadFields(\n tree: Root,\n version: string\n): Promise<Map<string, FieldDefinition>> {\n const names = new Set<string>();\n visit(tree, \"segment\", (node) => {\n names.add(node.name);\n });\n\n return resolveAll(names, (name) => profiles.fields.load(version, name));\n}\n\n// ---------------------------------------------------------------------------\n// Datatype loading (cascading resolution)\n// ---------------------------------------------------------------------------\n\n/**\n * Load all datatype definitions referenced by field profiles, cascading\n * through composite datatypes to resolve component and subcomponent\n * datatypes (max 2 additional levels).\n */\n// oxlint-disable-next-line complexity/complexity -- cold-path profile loading: extracting the nested component scan regressed the cold-cache lint-profile bench 34% under CodSpeed, so it stays inline\nasync function loadDatatypes(\n fields: Map<string, FieldDefinition>,\n version: string\n): Promise<Map<string, DatatypeDefinition>> {\n const datatypes = new Map<string, DatatypeDefinition>();\n const load = (id: string) => profiles.datatypes.load(version, id);\n\n // Level 1: field-level datatypes\n const fieldDatatypeIds = new Set<string>();\n for (const def of fields.values()) {\n for (const field of def.bySequence.values()) {\n if (field.datatype !== undefined) {\n fieldDatatypeIds.add(field.datatype);\n }\n }\n }\n merge(datatypes, await resolveAll(fieldDatatypeIds, load));\n\n // Levels 2-3: component and subcomponent datatypes\n for (let depth = 0; depth < 2; depth++) {\n const childIds = new Set<string>();\n for (const dtDef of datatypes.values()) {\n if (dtDef.kind !== \"composite\") {\n continue;\n }\n for (const comp of dtDef.componentsBySequence.values()) {\n if (comp.datatypeId !== undefined && !datatypes.has(comp.datatypeId)) {\n childIds.add(comp.datatypeId);\n }\n }\n }\n if (childIds.size === 0) {\n break;\n }\n merge(datatypes, await resolveAll(childIds, load));\n }\n\n return datatypes;\n}\n\n// ---------------------------------------------------------------------------\n// Table loading\n// ---------------------------------------------------------------------------\n\n/**\n * Load all table definitions referenced by field profiles and by the\n * components of their datatypes.\n * Keyed by TBL# (`HL70001`).\n */\nfunction loadTables(\n fields: Map<string, FieldDefinition>,\n datatypes: Map<string, DatatypeDefinition>,\n version: string\n): Promise<Map<string, TableDefinition>> {\n const tableIds = new Set<string>();\n for (const def of fields.values()) {\n for (const field of def.bySequence.values()) {\n if (field.table) {\n tableIds.add(field.table);\n }\n }\n }\n for (const datatype of datatypes.values()) {\n for (const component of datatype.componentsBySequence.values()) {\n if (component.table) {\n tableIds.add(component.table);\n }\n }\n }\n\n return resolveAll(tableIds, (id) =>\n profiles.tables.load(version, id.replace(TABLE_PREFIX, \"\"))\n );\n}\n\n// ---------------------------------------------------------------------------\n// Segment loading\n// ---------------------------------------------------------------------------\n\n/**\n * Load all segment definitions for a version.\n * Returns an empty definition if the version is unknown.\n */\nasync function loadSegments(version: string): Promise<SegmentDefinition> {\n return (await loadSegmentDefinitions(version)) ?? { byId: new Map() };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Load profiles in parallel. A profile the version does not bundle is\n * skipped; a profile that fails to load rejects.\n */\nasync function resolveAll<T>(\n ids: Set<string>,\n loader: (id: string) => Promise<T | undefined>\n): Promise<Map<string, T>> {\n const entries = [...ids];\n const results = await Promise.all(entries.map(loader));\n const resolved = new Map<string, T>();\n\n for (const [i, result] of results.entries()) {\n if (result !== undefined) {\n resolved.set(entries[i] as string, result);\n }\n }\n\n return resolved;\n}\n\n/** Merge source map entries into target. */\nfunction merge<K, V>(target: Map<K, V>, source: Map<K, V>): void {\n for (const [key, val] of source) {\n target.set(key, val);\n }\n}\n\nexport default hl7v2AnnotateProfileContext;\n"],"mappings":";;;;;;;;AAwCA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;AAyBrB,MAAa,oCACL,OAAO,MAAY,SAAgB;AAEvC,KAAI,KAAK,KAAK,QACZ,QAAO;CAGT,MAAM,UAAU,MAAM,MAAM,WAAW,EAAE;AACzC,KAAI,CAAC,QACH,QAAO;CAIT,MAAM,CAAC,QAAQ,YAAY,MAAM,QAAQ,IAAI,CAC3C,WAAW,MAAM,QAAQ,EACzBA,eAAa,QAAQ,CACtB,CAAC;CAEF,MAAM,YAAY,MAAM,cAAc,QAAQ,QAAQ;CACtD,MAAM,SAAS,MAAM,WAAW,QAAQ,WAAW,QAAQ;AAE3D,MAAK,KAAK,UAAU;EAAE;EAAW;EAAQ;EAAU;EAAQ;EAAS;AAEpE,QAAO;;;;;;AAWX,SAAS,WACP,MACA,SACuC;CACvC,MAAM,wBAAQ,IAAI,KAAa;AAC/B,OAAM,MAAM,YAAY,SAAS;AAC/B,QAAM,IAAI,KAAK,KAAK;GACpB;AAEF,QAAO,WAAW,QAAQ,SAAS,SAAS,OAAO,KAAK,SAAS,KAAK,CAAC;;;;;;;AAazE,eAAe,cACb,QACA,SAC0C;CAC1C,MAAM,4BAAY,IAAI,KAAiC;CACvD,MAAM,QAAQ,OAAe,SAAS,UAAU,KAAK,SAAS,GAAG;CAGjE,MAAM,mCAAmB,IAAI,KAAa;AAC1C,MAAK,MAAM,OAAO,OAAO,QAAQ,CAC/B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ,CACzC,KAAI,MAAM,aAAa,KAAA,EACrB,kBAAiB,IAAI,MAAM,SAAS;AAI1C,OAAM,WAAW,MAAM,WAAW,kBAAkB,KAAK,CAAC;AAG1D,MAAK,IAAI,QAAQ,GAAG,QAAQ,GAAG,SAAS;EACtC,MAAM,2BAAW,IAAI,KAAa;AAClC,OAAK,MAAM,SAAS,UAAU,QAAQ,EAAE;AACtC,OAAI,MAAM,SAAS,YACjB;AAEF,QAAK,MAAM,QAAQ,MAAM,qBAAqB,QAAQ,CACpD,KAAI,KAAK,eAAe,KAAA,KAAa,CAAC,UAAU,IAAI,KAAK,WAAW,CAClE,UAAS,IAAI,KAAK,WAAW;;AAInC,MAAI,SAAS,SAAS,EACpB;AAEF,QAAM,WAAW,MAAM,WAAW,UAAU,KAAK,CAAC;;AAGpD,QAAO;;;;;;;AAYT,SAAS,WACP,QACA,WACA,SACuC;CACvC,MAAM,2BAAW,IAAI,KAAa;AAClC,MAAK,MAAM,OAAO,OAAO,QAAQ,CAC/B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ,CACzC,KAAI,MAAM,MACR,UAAS,IAAI,MAAM,MAAM;AAI/B,MAAK,MAAM,YAAY,UAAU,QAAQ,CACvC,MAAK,MAAM,aAAa,SAAS,qBAAqB,QAAQ,CAC5D,KAAI,UAAU,MACZ,UAAS,IAAI,UAAU,MAAM;AAKnC,QAAO,WAAW,WAAW,OAC3B,SAAS,OAAO,KAAK,SAAS,GAAG,QAAQ,cAAc,GAAG,CAAC,CAC5D;;;;;;AAWH,eAAeA,eAAa,SAA6C;AACvE,QAAQ,MAAMC,aAAuB,QAAQ,IAAK,EAAE,sBAAM,IAAI,KAAK,EAAE;;;;;;AAWvE,eAAe,WACb,KACA,QACyB;CACzB,MAAM,UAAU,CAAC,GAAG,IAAI;CACxB,MAAM,UAAU,MAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,CAAC;CACtD,MAAM,2BAAW,IAAI,KAAgB;AAErC,MAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,CACzC,KAAI,WAAW,KAAA,EACb,UAAS,IAAI,QAAQ,IAAc,OAAO;AAI9C,QAAO;;;AAIT,SAAS,MAAY,QAAmB,QAAyB;AAC/D,MAAK,MAAM,CAAC,KAAK,QAAQ,OACvB,QAAO,IAAI,KAAK,IAAI"}
1
+ {"version":3,"file":"index.js","names":["loadSegments","loadSegmentDefinitions"],"sources":["../src/index.ts"],"sourcesContent":["import type { Root } from \"@glion/ast\";\nimport type {\n DatatypeDefinition,\n FieldDefinition,\n SegmentDefinition,\n TableDefinition,\n} from \"@glion/profiles\";\nimport {\n loadSegments as loadSegmentDefinitions,\n profiles,\n} from \"@glion/profiles\";\nimport { value } from \"@glion/util-query\";\nimport { visit } from \"@glion/util-visit\";\nimport type { Plugin } from \"unified\";\nimport type { VFile } from \"vfile\";\n\n/** Resolved profile data attached to `file.data.profile` by this plugin. */\nexport interface ProfileContext {\n /** HL7v2 version extracted from MSH-12.1. */\n version: string;\n /** Field definitions indexed by segment name (e.g., \"MSH\", \"PID\"). */\n fields: ReadonlyMap<string, FieldDefinition>;\n /** Datatype definitions indexed by datatype ID (e.g., \"ST\", \"CWE\"). */\n datatypes: ReadonlyMap<string, DatatypeDefinition>;\n /** Table definitions indexed by TBL#, as profiles print it (e.g., \"HL70001\"). */\n tables: ReadonlyMap<string, TableDefinition>;\n /** Segment definitions with titles, indexed by segment ID. */\n segments: SegmentDefinition;\n}\n\ndeclare module \"vfile\" {\n interface DataMap {\n profile?: ProfileContext | undefined;\n }\n}\n\n/**\n * The prefix of a TBL# (`HL70001`) that the table files' names omit\n * (`0001.json`).\n */\nconst TABLE_PREFIX = /^HL7/;\n\n/**\n * Unified plugin that loads HL7v2 profile data (fields, datatypes, tables)\n * and attaches them to `file.data` for downstream consumers.\n *\n * Extracts the HL7v2 version from MSH-12.1, then loads all relevant\n * field definitions, datatype definitions (with cascading resolution),\n * and table definitions in a single pass. Unknown profiles are silently\n * skipped.\n *\n * The plugin is idempotent — if `file.data.fields` is already populated,\n * it returns immediately without reloading.\n *\n * @example\n * ```typescript\n * import { unified } from \"unified\";\n * import { hl7v2Parser } from \"@glion/parser\";\n * import { hl7v2AnnotateProfileContext } from \"@glion/annotate-profile-context\";\n *\n * const processor = unified()\n * .use(hl7v2Parser)\n * .use(hl7v2AnnotateProfileContext);\n * ```;\n */\nexport const hl7v2AnnotateProfileContext: Plugin<[], Root, Root> =\n () => async (tree: Root, file: VFile) => {\n // Idempotency: skip if already populated\n if (file.data.profile) {\n return tree;\n }\n\n const version = value(tree, \"MSH.12.1\")?.value;\n if (!version) {\n return tree;\n }\n\n // Load fields and segments in parallel (segments don't depend on fields)\n const [fields, segments] = await Promise.all([\n loadFields(tree, version),\n loadSegments(version),\n ]);\n\n const datatypes = await loadDatatypes(fields, version);\n const tables = await loadTables(fields, datatypes, version);\n\n file.data.profile = { datatypes, fields, segments, tables, version };\n\n return tree;\n };\n\n// ---------------------------------------------------------------------------\n// Field loading\n// ---------------------------------------------------------------------------\n\n/**\n * Collect unique segment names from the tree and load their field definitions.\n * Unknown segments (Z-segments, etc.) are silently omitted.\n */\nfunction loadFields(\n tree: Root,\n version: string\n): Promise<Map<string, FieldDefinition>> {\n const names = new Set<string>();\n visit(tree, \"segment\", (node) => {\n names.add(node.name);\n });\n\n return resolveAll(names, (name) => profiles.fields.load(version, name));\n}\n\n// ---------------------------------------------------------------------------\n// Datatype loading (cascading resolution)\n// ---------------------------------------------------------------------------\n\n/**\n * Load all datatype definitions referenced by field profiles, cascading\n * through composite datatypes to resolve component and subcomponent\n * datatypes (max 2 additional levels).\n */\n// oxlint-disable-next-line complexity/complexity -- cold-path profile loading: extracting the nested component scan regressed the cold-cache lint-profile bench 34% under CodSpeed, so it stays inline\nasync function loadDatatypes(\n fields: Map<string, FieldDefinition>,\n version: string\n): Promise<Map<string, DatatypeDefinition>> {\n const datatypes = new Map<string, DatatypeDefinition>();\n const load = (id: string) => profiles.datatypes.load(version, id);\n\n // Level 1: field-level datatypes\n const fieldDatatypeIds = new Set<string>();\n for (const def of fields.values()) {\n for (const field of def.bySequence.values()) {\n if (field.datatype !== undefined) {\n fieldDatatypeIds.add(field.datatype);\n }\n }\n }\n merge(datatypes, await resolveAll(fieldDatatypeIds, load));\n\n // Levels 2-3: component and subcomponent datatypes\n for (let depth = 0; depth < 2; depth++) {\n const childIds = new Set<string>();\n for (const dtDef of datatypes.values()) {\n if (dtDef.kind !== \"composite\") {\n continue;\n }\n for (const comp of dtDef.componentsBySequence.values()) {\n if (comp.datatypeId !== undefined && !datatypes.has(comp.datatypeId)) {\n childIds.add(comp.datatypeId);\n }\n }\n }\n if (childIds.size === 0) {\n break;\n }\n merge(datatypes, await resolveAll(childIds, load));\n }\n\n return datatypes;\n}\n\n// ---------------------------------------------------------------------------\n// Table loading\n// ---------------------------------------------------------------------------\n\n/**\n * Load all table definitions referenced by field profiles and by the\n * components of their datatypes.\n * Keyed by TBL# (`HL70001`).\n */\nfunction loadTables(\n fields: Map<string, FieldDefinition>,\n datatypes: Map<string, DatatypeDefinition>,\n version: string\n): Promise<Map<string, TableDefinition>> {\n const tableIds = new Set<string>();\n for (const def of fields.values()) {\n for (const field of def.bySequence.values()) {\n if (field.table) {\n tableIds.add(field.table);\n }\n }\n }\n for (const datatype of datatypes.values()) {\n for (const component of datatype.componentsBySequence.values()) {\n if (component.table) {\n tableIds.add(component.table);\n }\n }\n }\n\n return resolveAll(tableIds, (id) =>\n profiles.tables.load(version, id.replace(TABLE_PREFIX, \"\"))\n );\n}\n\n// ---------------------------------------------------------------------------\n// Segment loading\n// ---------------------------------------------------------------------------\n\n/**\n * Load all segment definitions for a version.\n * Returns an empty definition if the version is unknown.\n */\nasync function loadSegments(version: string): Promise<SegmentDefinition> {\n return (await loadSegmentDefinitions(version)) ?? { byId: new Map() };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Load profiles in parallel. A profile the version does not bundle is\n * skipped; a profile that fails to load rejects.\n */\nasync function resolveAll<T>(\n ids: Set<string>,\n loader: (id: string) => Promise<T | undefined>\n): Promise<Map<string, T>> {\n const entries = [...ids];\n const results = await Promise.all(entries.map(loader));\n const resolved = new Map<string, T>();\n\n for (const [i, result] of results.entries()) {\n if (result !== undefined) {\n resolved.set(entries[i] as string, result);\n }\n }\n\n return resolved;\n}\n\n/** Merge source map entries into target. */\nfunction merge<K, V>(target: Map<K, V>, source: Map<K, V>): void {\n for (const [key, val] of source) {\n target.set(key, val);\n }\n}\n\nexport default hl7v2AnnotateProfileContext;\n"],"mappings":";;;;;;;;AAwCA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;AAyBrB,MAAa,oCACL,OAAO,MAAY,SAAgB;AAEvC,KAAI,KAAK,KAAK,QACZ,QAAO;CAGT,MAAM,UAAU,MAAM,MAAM,WAAW,EAAE;AACzC,KAAI,CAAC,QACH,QAAO;CAIT,MAAM,CAAC,QAAQ,YAAY,MAAM,QAAQ,IAAI,CAC3C,WAAW,MAAM,QAAQ,EACzBA,eAAa,QAAQ,CACtB,CAAC;CAEF,MAAM,YAAY,MAAM,cAAc,QAAQ,QAAQ;CACtD,MAAM,SAAS,MAAM,WAAW,QAAQ,WAAW,QAAQ;AAE3D,MAAK,KAAK,UAAU;EAAE;EAAW;EAAQ;EAAU;EAAQ;EAAS;AAEpE,QAAO;;;;;;AAWX,SAAS,WACP,MACA,SACuC;CACvC,MAAM,wBAAQ,IAAI,KAAa;AAC/B,OAAM,MAAM,YAAY,SAAS;AAC/B,QAAM,IAAI,KAAK,KAAK;GACpB;AAEF,QAAO,WAAW,QAAQ,SAAS,SAAS,OAAO,KAAK,SAAS,KAAK,CAAC;;;;;;;AAazE,eAAe,cACb,QACA,SAC0C;CAC1C,MAAM,4BAAY,IAAI,KAAiC;CACvD,MAAM,QAAQ,OAAe,SAAS,UAAU,KAAK,SAAS,GAAG;CAGjE,MAAM,mCAAmB,IAAI,KAAa;AAC1C,MAAK,MAAM,OAAO,OAAO,QAAQ,CAC/B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ,CACzC,KAAI,MAAM,aAAa,KAAA,EACrB,kBAAiB,IAAI,MAAM,SAAS;AAI1C,OAAM,WAAW,MAAM,WAAW,kBAAkB,KAAK,CAAC;AAG1D,MAAK,IAAI,QAAQ,GAAG,QAAQ,GAAG,SAAS;EACtC,MAAM,2BAAW,IAAI,KAAa;AAClC,OAAK,MAAM,SAAS,UAAU,QAAQ,EAAE;AACtC,OAAI,MAAM,SAAS,YACjB;AAEF,QAAK,MAAM,QAAQ,MAAM,qBAAqB,QAAQ,CACpD,KAAI,KAAK,eAAe,KAAA,KAAa,CAAC,UAAU,IAAI,KAAK,WAAW,CAClE,UAAS,IAAI,KAAK,WAAW;;AAInC,MAAI,SAAS,SAAS,EACpB;AAEF,QAAM,WAAW,MAAM,WAAW,UAAU,KAAK,CAAC;;AAGpD,QAAO;;;;;;;AAYT,SAAS,WACP,QACA,WACA,SACuC;CACvC,MAAM,2BAAW,IAAI,KAAa;AAClC,MAAK,MAAM,OAAO,OAAO,QAAQ,CAC/B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ,CACzC,KAAI,MAAM,MACR,UAAS,IAAI,MAAM,MAAM;AAI/B,MAAK,MAAM,YAAY,UAAU,QAAQ,CACvC,MAAK,MAAM,aAAa,SAAS,qBAAqB,QAAQ,CAC5D,KAAI,UAAU,MACZ,UAAS,IAAI,UAAU,MAAM;AAKnC,QAAO,WAAW,WAAW,OAC3B,SAAS,OAAO,KAAK,SAAS,GAAG,QAAQ,cAAc,GAAG,CAAC,CAC5D;;;;;;AAWH,eAAeA,eAAa,SAA6C;AACvE,QAAQ,MAAMC,aAAuB,QAAQ,IAAK,EAAE,sBAAM,IAAI,KAAK,EAAE;;;;;;AAWvE,eAAe,WACb,KACA,QACyB;CACzB,MAAM,UAAU,CAAC,GAAG,IAAI;CACxB,MAAM,UAAU,MAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,CAAC;CACtD,MAAM,2BAAW,IAAI,KAAgB;AAErC,MAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,CACzC,KAAI,WAAW,KAAA,EACb,UAAS,IAAI,QAAQ,IAAc,OAAO;AAI9C,QAAO;;;AAIT,SAAS,MAAY,QAAmB,QAAyB;AAC/D,MAAK,MAAM,CAAC,KAAK,QAAQ,OACvB,QAAO,IAAI,KAAK,IAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glion/annotate-profile-context",
3
- "version": "0.26.0",
3
+ "version": "0.27.0",
4
4
  "description": "Unified plugin to centralize HL7v2 profile loading onto file.data",
5
5
  "keywords": [
6
6
  "annotate",
@@ -39,10 +39,10 @@
39
39
  "dependencies": {
40
40
  "unified": "11.0.5",
41
41
  "vfile": "6.0.3",
42
- "@glion/profiles": "0.26.0",
43
- "@glion/ast": "0.26.0",
44
- "@glion/util-query": "0.26.0",
45
- "@glion/util-visit": "0.26.0"
42
+ "@glion/profiles": "0.27.0",
43
+ "@glion/ast": "0.27.0",
44
+ "@glion/util-query": "0.27.0",
45
+ "@glion/util-visit": "0.27.0"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/node": "25.6.0",
@@ -51,7 +51,7 @@
51
51
  "tsdown": "0.21.10",
52
52
  "typescript": "6.0.3",
53
53
  "vitest": "4.1.11",
54
- "@glion/builder": "0.26.0",
54
+ "@glion/builder": "0.27.0",
55
55
  "@glion/check-readme": "0.18.0",
56
56
  "@glion/testing": "0.18.0",
57
57
  "@glion/tsconfig": "0.18.0"