@glion/lint-profile-required-components 0.23.0 → 0.25.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/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # @glion/lint-profile-required-components
2
2
 
3
- Lint rule to validate required components in composite datatype fields.
3
+ Lint rule that reports a required component that is missing or empty.
4
4
 
5
5
  ## What it does
6
6
 
7
- Flags composite fields whose required components (as declared by the datatype profile for the message's version) are missing or empty in any repetition. The rule reads profile context attached by `@glion/annotate-profile-context`, resolves each field's datatype, and checks the required components on every repetition. Empty fields, primitive datatypes, and segments without a known profile are skipped.
7
+ Flags a component that the HL7v2 standard for the message's version marks `R` (required) when it is missing or empty in a field that has a value. Before v2.5 the standard marks no component as required, so the rule reports nothing for older versions. Empty fields are left to `@glion/lint-profile-required-fields`. It needs the plugins `@glion/annotate-profile-context` and `@glion/annotate-profile-fields` to run before it; `@glion/preset-lint-profile-recommended` includes them.
8
8
 
9
9
  ## Install
10
10
 
@@ -16,21 +16,24 @@ npm install @glion/lint-profile-required-components
16
16
 
17
17
  ```ts
18
18
  import { hl7v2AnnotateProfileContext } from "@glion/annotate-profile-context";
19
- import { hl7v2Parser } from "@glion/parser";
19
+ import { hl7v2AnnotateProfileFields } from "@glion/annotate-profile-fields";
20
20
  import hl7v2LintRequiredComponents from "@glion/lint-profile-required-components";
21
+ import { parseHL7v2 } from "@glion/parser";
21
22
  import { unified } from "unified";
23
+ import { VFile } from "vfile";
22
24
  import { reporter } from "vfile-reporter";
23
25
 
24
26
  const message = [
25
- "MSH|^~\\&|SENDER|FAC|RECV|RFAC|20250601120000||ADT^A01^ADT_A01|MSG00001|P|2.5",
27
+ "MSH|^~\\&|SENDER|FAC|RECV|RFAC|20250601120000||ADT^|MSG00001|P|2.5",
26
28
  "PID|1||PATID1234^^^HOSP^MR||DOE^JANE||19800101|F",
27
29
  ].join("\r");
28
30
 
29
- const file = await unified()
30
- .use(hl7v2Parser)
31
+ const file = new VFile();
32
+ await unified()
31
33
  .use(hl7v2AnnotateProfileContext)
34
+ .use(hl7v2AnnotateProfileFields)
32
35
  .use(hl7v2LintRequiredComponents)
33
- .process(message);
36
+ .run(parseHL7v2(message), file);
34
37
 
35
38
  console.error(reporter([file]));
36
39
  ```
@@ -39,9 +42,7 @@ console.error(reporter([file]));
39
42
 
40
43
  ### `unified().use(hl7v2LintRequiredComponents)`
41
44
 
42
- A `unified` lint rule plugin. Takes no options.
43
-
44
- Reads `file.data.profile`. For each non-empty field, resolves the datatype definition from the field profile and iterates `dtDef.requiredSequences`. For every field repetition, checks that each required component is present with a non-empty first subcomponent value.
45
+ A `unified` lint rule plugin. Takes no options. Reports one message for each required component that is missing or empty, in each repetition.
45
46
 
46
47
  ```ts
47
48
  import type { Plugin } from "unified";
@@ -53,11 +54,11 @@ export default hl7v2LintRequiredComponents;
53
54
 
54
55
  ## What it checks
55
56
 
56
- This rule flags missing required components on composite fields. The classic case is `MSH-9` (Message Type), where the `MSG` datatype requires the message code (`.1`) and trigger event (`.2`) components.
57
+ In a field that has a value, every component marked `R` in the message's version is present and not empty. For example, in v2.5 `MSH-9` (Message Type) requires the message code (`MSH-9.1`), the trigger event (`MSH-9.2`) and the message structure (`MSH-9.3`).
57
58
 
58
59
  ### Valid
59
60
 
60
- `MSH-9` carries message code, trigger event, and message structure:
61
+ `MSH-9` has all three components:
61
62
 
62
63
  ```hl7
63
64
  MSH|^~\&|SENDER|FAC|RECV|RFAC|20250601120000||ADT^A01^ADT_A01|MSG00001|P|2.5
@@ -66,21 +67,20 @@ PID|1||PATID1234^^^HOSP^MR||DOE^JANE||19800101|F
66
67
 
67
68
  ### Invalid
68
69
 
69
- `MSH-9.2` (Trigger Event) is empty, which violates the `MSG` datatype profile in v2.5:
70
+ `MSH-9.2` is empty and `MSH-9.3` is missing:
70
71
 
71
72
  ```hl7
72
73
  MSH|^~\&|SENDER|FAC|RECV|RFAC|20250601120000||ADT^|MSG00001|P|2.5
73
74
  PID|1||PATID1234^^^HOSP^MR||DOE^JANE||19800101|F
74
75
  ```
75
76
 
76
- Reported message:
77
+ Reported messages:
77
78
 
78
79
  ```
79
- Required component MSH-9.2 (Trigger Event) is missing or empty
80
+ Component `MSH-9.2` (Trigger Event) is empty; it is required.
81
+ Component `MSH-9.3` (Message Structure) is not present; it is required.
80
82
  ```
81
83
 
82
- When the component name is available in the datatype profile it appears in parentheses. One message is reported per missing required component per repetition.
83
-
84
84
  ## Part of Glion
85
85
 
86
86
  `@glion/lint-profile-required-components` is part of **[Glion]**, the application framework for HL7v2. See the [Glion README] for the full package catalog and architecture.
package/dist/index.d.ts CHANGED
@@ -1,18 +1,20 @@
1
1
  import type { Root } from "@glion/ast";
2
2
  /**
3
- * Lint rule that validates required components in composite datatype fields.
3
+ * Lint rule that reports a required component that is absent or empty.
4
4
  *
5
- * For each field with a composite datatype, checks that all components
6
- * marked `required: true` in the datatype definition are present and
7
- * non-empty in every field repetition.
5
+ * For each valued field of a composite datatype, checks in every repetition
6
+ * the components whose optionality is `R`. `RE`, `C`, `B`, and `W` are not
7
+ * checked; before v2.5 the standard records no component optionality.
8
8
  *
9
- * Empty fields are skipped (the required-fields rule handles that).
10
- * Simple (non-composite) datatypes are skipped.
11
- * Segments without a known profile (e.g., Z-segments) are silently skipped.
9
+ * Reads `id` and `datatype` from `field.data`, so
10
+ * `@glion/annotate-profile-fields` MUST run before it.
12
11
  *
13
12
  * @example
14
13
  * ```typescript
15
- * unified().use(hl7v2LintRequiredComponents);
14
+ * unified()
15
+ * .use(hl7v2AnnotateProfileContext)
16
+ * .use(hl7v2AnnotateProfileFields)
17
+ * .use(hl7v2LintRequiredComponents);
16
18
  * ```;
17
19
  */
18
20
  declare const hl7v2LintRequiredComponents: import("unified-lint-rule").Plugin<Root, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiC,IAAI,EAAW,MAAM,YAAY,CAAC;AAO/E;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,2BAA2B,mDAsDhC,CAAC;AAsCF,eAAe,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYvC;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,2BAA2B,mDAuDhC,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -1,59 +1,66 @@
1
1
  import { SKIP, visit } from "@glion/util-visit";
2
- import { isEmptyNode } from "@glion/utils";
2
+ import { Optionality, isEmptyNode } from "@glion/utils";
3
3
  import { lintRule } from "unified-lint-rule";
4
4
  //#region src/index.ts
5
+ const messages = {
6
+ absentComponent: (component, name) => `Component \`${component}\` (${name}) is not present; it is required.`,
7
+ emptyComponent: (component, name) => `Component \`${component}\` (${name}) is empty; it is required.`
8
+ };
5
9
  /**
6
- * Lint rule that validates required components in composite datatype fields.
10
+ * Lint rule that reports a required component that is absent or empty.
7
11
  *
8
- * For each field with a composite datatype, checks that all components
9
- * marked `required: true` in the datatype definition are present and
10
- * non-empty in every field repetition.
12
+ * For each valued field of a composite datatype, checks in every repetition
13
+ * the components whose optionality is `R`. `RE`, `C`, `B`, and `W` are not
14
+ * checked; before v2.5 the standard records no component optionality.
11
15
  *
12
- * Empty fields are skipped (the required-fields rule handles that).
13
- * Simple (non-composite) datatypes are skipped.
14
- * Segments without a known profile (e.g., Z-segments) are silently skipped.
16
+ * Reads `id` and `datatype` from `field.data`, so
17
+ * `@glion/annotate-profile-fields` MUST run before it.
15
18
  *
16
19
  * @example
17
20
  * ```typescript
18
- * unified().use(hl7v2LintRequiredComponents);
21
+ * unified()
22
+ * .use(hl7v2AnnotateProfileContext)
23
+ * .use(hl7v2AnnotateProfileFields)
24
+ * .use(hl7v2LintRequiredComponents);
19
25
  * ```;
20
26
  */
21
- const hl7v2LintRequiredComponents = lintRule({ origin: "hl7v2-lint:required-components" }, (tree, file) => {
22
- const ctx = file.data.profile;
23
- if (!ctx) return;
24
- visit(tree, "field", (fieldNode, ancestors, info) => {
25
- if (isEmptyNode(fieldNode)) return SKIP;
26
- const segment = ancestors.at(-1);
27
- if (!segment || segment.type !== "segment") return SKIP;
28
- const fieldDef = ctx.fields.get(segment.name);
29
- if (!fieldDef) return SKIP;
30
- const fieldProfile = fieldDef.bySequence.get(info.sequence);
31
- if (!fieldProfile) return SKIP;
32
- const dtDef = ctx.datatypes.get(fieldProfile.datatype);
33
- if (!dtDef || dtDef.kind !== "composite" || dtDef.requiredSequences.size === 0) return SKIP;
34
- for (const repetition of fieldNode.children) checkRepetition(file, dtDef, repetition, segment, info.sequence, ancestors, fieldNode);
35
- return SKIP;
36
- });
37
- });
38
- /** Check a single field repetition for missing required components. */
39
- function checkRepetition(file, dtDef, repetition, segment, sequence, ancestors, fieldNode) {
40
- for (const compSeq of dtDef.requiredSequences) {
41
- const component = repetition.children[compSeq - 1];
42
- if (!(component?.children[0]?.value !== void 0 && component.children[0].value.length > 0)) {
43
- const compProfile = dtDef.componentsBySequence.get(compSeq);
44
- const compName = compProfile?.name ? ` (${compProfile.name})` : "";
45
- file.message(`Required component ${segment.name}-${sequence}.${compSeq}${compName} is missing or empty`, {
27
+ const hl7v2LintRequiredComponents = lintRule({
28
+ origin: "hl7v2-lint:required-components",
29
+ url: "https://github.com/rethinkhealth/glion/tree/main/packages/lint-profile-required-components#readme"
30
+ }, (tree, file) => {
31
+ const datatypes = file.data.profile?.datatypes;
32
+ if (datatypes === void 0) return;
33
+ visit(tree, "field", (field, ancestors) => {
34
+ if (isEmptyNode(field)) return SKIP;
35
+ const id = field.data?.id;
36
+ const datatypeId = field.data?.datatype;
37
+ const datatype = datatypeId === void 0 ? void 0 : datatypes.get(datatypeId);
38
+ if (id === void 0 || datatype === void 0) return SKIP;
39
+ for (const repetition of field.children) for (const profile of datatype.componentsBySequence.values()) {
40
+ if (profile.optionality !== Optionality.Required) continue;
41
+ const componentId = `${id}.${profile.sequence}`;
42
+ const component = repetition.children[profile.sequence - 1];
43
+ if (component === void 0) file.message(messages.absentComponent(componentId, profile.name), {
44
+ ancestors: [
45
+ ...ancestors,
46
+ field,
47
+ repetition
48
+ ],
49
+ place: repetition.position
50
+ });
51
+ else if (isEmptyNode(component)) file.message(messages.emptyComponent(componentId, profile.name), {
46
52
  ancestors: [
47
53
  ...ancestors,
48
- fieldNode,
54
+ field,
49
55
  repetition,
50
- ...component ? [component] : []
56
+ component
51
57
  ],
52
- place: component?.position ?? repetition.position ?? fieldNode.position
58
+ place: component.position
53
59
  });
54
60
  }
55
- }
56
- }
61
+ return SKIP;
62
+ });
63
+ });
57
64
  //#endregion
58
65
  export { hl7v2LintRequiredComponents as default };
59
66
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["// oxlint-disable-next-line no-unused-vars -- triggers VFile DataMap augmentation\nimport type { ProfileContext } from \"@glion/annotate-profile-context\";\nimport type { Field, FieldRepetition, Nodes, Root, Segment } from \"@glion/ast\";\nimport type { DatatypeDefinition } from \"@glion/profiles\";\nimport { SKIP, visit } from \"@glion/util-visit\";\nimport { isEmptyNode } from \"@glion/utils\";\nimport { lintRule } from \"unified-lint-rule\";\nimport type { VFile } from \"vfile\";\n\n/**\n * Lint rule that validates required components in composite datatype fields.\n *\n * For each field with a composite datatype, checks that all components\n * marked `required: true` in the datatype definition are present and\n * non-empty in every field repetition.\n *\n * Empty fields are skipped (the required-fields rule handles that).\n * Simple (non-composite) datatypes are skipped.\n * Segments without a known profile (e.g., Z-segments) are silently skipped.\n *\n * @example\n * ```typescript\n * unified().use(hl7v2LintRequiredComponents);\n * ```;\n */\nconst hl7v2LintRequiredComponents = lintRule<Root>(\n { origin: \"hl7v2-lint:required-components\" },\n (tree, file) => {\n const ctx = file.data.profile;\n if (!ctx) {\n return;\n }\n\n visit(tree, \"field\", (fieldNode, ancestors, info) => {\n // Check emptiness first — most fields in a message are empty,\n // so this avoids segment/profile lookups for the majority of fields\n if (isEmptyNode(fieldNode as Field)) {\n return SKIP;\n }\n\n const segment = ancestors.at(-1) as Segment | undefined;\n if (!segment || segment.type !== \"segment\") {\n return SKIP;\n }\n\n const fieldDef = ctx.fields.get(segment.name);\n if (!fieldDef) {\n return SKIP;\n }\n\n const fieldProfile = fieldDef.bySequence.get(info.sequence);\n if (!fieldProfile) {\n return SKIP;\n }\n\n const dtDef = ctx.datatypes.get(fieldProfile.datatype);\n if (\n !dtDef ||\n dtDef.kind !== \"composite\" ||\n dtDef.requiredSequences.size === 0\n ) {\n return SKIP;\n }\n\n for (const repetition of (fieldNode as Field).children) {\n checkRepetition(\n file,\n dtDef,\n repetition,\n segment,\n info.sequence,\n ancestors,\n fieldNode as Field\n );\n }\n\n return SKIP;\n });\n }\n);\n\n/** Check a single field repetition for missing required components. */\nfunction checkRepetition(\n file: VFile,\n dtDef: DatatypeDefinition,\n repetition: FieldRepetition,\n segment: Segment,\n sequence: number,\n ancestors: Nodes[],\n fieldNode: Field\n): void {\n for (const compSeq of dtDef.requiredSequences) {\n const component = repetition.children[compSeq - 1];\n const compHasValue =\n component?.children[0]?.value !== undefined &&\n component.children[0].value.length > 0;\n\n if (!compHasValue) {\n const compProfile = dtDef.componentsBySequence.get(compSeq);\n const compName = compProfile?.name ? ` (${compProfile.name})` : \"\";\n file.message(\n `Required component ${segment.name}-${sequence}.${compSeq}${compName} is missing or empty`,\n {\n ancestors: [\n ...ancestors,\n fieldNode,\n repetition,\n ...(component ? [component] : []),\n ],\n place:\n component?.position ?? repetition.position ?? fieldNode.position,\n }\n );\n }\n }\n}\n\nexport default hl7v2LintRequiredComponents;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,8BAA8B,SAClC,EAAE,QAAQ,kCAAkC,GAC3C,MAAM,SAAS;CACd,MAAM,MAAM,KAAK,KAAK;AACtB,KAAI,CAAC,IACH;AAGF,OAAM,MAAM,UAAU,WAAW,WAAW,SAAS;AAGnD,MAAI,YAAY,UAAmB,CACjC,QAAO;EAGT,MAAM,UAAU,UAAU,GAAG,GAAG;AAChC,MAAI,CAAC,WAAW,QAAQ,SAAS,UAC/B,QAAO;EAGT,MAAM,WAAW,IAAI,OAAO,IAAI,QAAQ,KAAK;AAC7C,MAAI,CAAC,SACH,QAAO;EAGT,MAAM,eAAe,SAAS,WAAW,IAAI,KAAK,SAAS;AAC3D,MAAI,CAAC,aACH,QAAO;EAGT,MAAM,QAAQ,IAAI,UAAU,IAAI,aAAa,SAAS;AACtD,MACE,CAAC,SACD,MAAM,SAAS,eACf,MAAM,kBAAkB,SAAS,EAEjC,QAAO;AAGT,OAAK,MAAM,cAAe,UAAoB,SAC5C,iBACE,MACA,OACA,YACA,SACA,KAAK,UACL,WACA,UACD;AAGH,SAAO;GACP;EAEL;;AAGD,SAAS,gBACP,MACA,OACA,YACA,SACA,UACA,WACA,WACM;AACN,MAAK,MAAM,WAAW,MAAM,mBAAmB;EAC7C,MAAM,YAAY,WAAW,SAAS,UAAU;AAKhD,MAAI,EAHF,WAAW,SAAS,IAAI,UAAU,KAAA,KAClC,UAAU,SAAS,GAAG,MAAM,SAAS,IAEpB;GACjB,MAAM,cAAc,MAAM,qBAAqB,IAAI,QAAQ;GAC3D,MAAM,WAAW,aAAa,OAAO,KAAK,YAAY,KAAK,KAAK;AAChE,QAAK,QACH,sBAAsB,QAAQ,KAAK,GAAG,SAAS,GAAG,UAAU,SAAS,uBACrE;IACE,WAAW;KACT,GAAG;KACH;KACA;KACA,GAAI,YAAY,CAAC,UAAU,GAAG,EAAE;KACjC;IACD,OACE,WAAW,YAAY,WAAW,YAAY,UAAU;IAC3D,CACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["// oxlint-disable-next-line no-unused-vars -- triggers VFile DataMap augmentation\nimport type { ProfileContext } from \"@glion/annotate-profile-context\";\n// oxlint-disable-next-line no-unused-vars -- triggers FieldData augmentation\nimport type { hl7v2AnnotateProfileFields } from \"@glion/annotate-profile-fields\";\nimport type { Root } from \"@glion/ast\";\nimport { SKIP, visit } from \"@glion/util-visit\";\nimport { isEmptyNode, Optionality } from \"@glion/utils\";\nimport { lintRule } from \"unified-lint-rule\";\n\nconst messages = {\n absentComponent: (component: string, name: string) =>\n `Component \\`${component}\\` (${name}) is not present; it is required.`,\n emptyComponent: (component: string, name: string) =>\n `Component \\`${component}\\` (${name}) is empty; it is required.`,\n} as const;\n\n/**\n * Lint rule that reports a required component that is absent or empty.\n *\n * For each valued field of a composite datatype, checks in every repetition\n * the components whose optionality is `R`. `RE`, `C`, `B`, and `W` are not\n * checked; before v2.5 the standard records no component optionality.\n *\n * Reads `id` and `datatype` from `field.data`, so\n * `@glion/annotate-profile-fields` MUST run before it.\n *\n * @example\n * ```typescript\n * unified()\n * .use(hl7v2AnnotateProfileContext)\n * .use(hl7v2AnnotateProfileFields)\n * .use(hl7v2LintRequiredComponents);\n * ```;\n */\nconst hl7v2LintRequiredComponents = lintRule<Root>(\n {\n origin: \"hl7v2-lint:required-components\",\n url: \"https://github.com/rethinkhealth/glion/tree/main/packages/lint-profile-required-components#readme\",\n },\n (tree, file) => {\n const datatypes = file.data.profile?.datatypes;\n if (datatypes === undefined) {\n return;\n }\n\n visit(tree, \"field\", (field, ancestors) => {\n // A component's R applies only when its field is present; an empty\n // field is left to `@glion/lint-profile-required-fields`.\n if (isEmptyNode(field)) {\n return SKIP;\n }\n\n const id = field.data?.id;\n const datatypeId = field.data?.datatype;\n const datatype =\n datatypeId === undefined ? undefined : datatypes.get(datatypeId);\n if (id === undefined || datatype === undefined) {\n return SKIP;\n }\n\n // Loop over the datatype's components, not the message's: a component\n // left out of the message has no node to visit. A primitive datatype\n // has no components.\n for (const repetition of field.children) {\n for (const profile of datatype.componentsBySequence.values()) {\n if (profile.optionality !== Optionality.Required) {\n continue;\n }\n\n const componentId = `${id}.${profile.sequence}`;\n const component = repetition.children[profile.sequence - 1];\n\n if (component === undefined) {\n // Reported on the repetition, the closest node the message has.\n file.message(messages.absentComponent(componentId, profile.name), {\n ancestors: [...ancestors, field, repetition],\n place: repetition.position,\n });\n } else if (isEmptyNode(component)) {\n file.message(messages.emptyComponent(componentId, profile.name), {\n ancestors: [...ancestors, field, repetition, component],\n place: component.position,\n });\n }\n }\n }\n return SKIP;\n });\n }\n);\n\nexport default hl7v2LintRequiredComponents;\n"],"mappings":";;;;AASA,MAAM,WAAW;CACf,kBAAkB,WAAmB,SACnC,eAAe,UAAU,MAAM,KAAK;CACtC,iBAAiB,WAAmB,SAClC,eAAe,UAAU,MAAM,KAAK;CACvC;;;;;;;;;;;;;;;;;;;AAoBD,MAAM,8BAA8B,SAClC;CACE,QAAQ;CACR,KAAK;CACN,GACA,MAAM,SAAS;CACd,MAAM,YAAY,KAAK,KAAK,SAAS;AACrC,KAAI,cAAc,KAAA,EAChB;AAGF,OAAM,MAAM,UAAU,OAAO,cAAc;AAGzC,MAAI,YAAY,MAAM,CACpB,QAAO;EAGT,MAAM,KAAK,MAAM,MAAM;EACvB,MAAM,aAAa,MAAM,MAAM;EAC/B,MAAM,WACJ,eAAe,KAAA,IAAY,KAAA,IAAY,UAAU,IAAI,WAAW;AAClE,MAAI,OAAO,KAAA,KAAa,aAAa,KAAA,EACnC,QAAO;AAMT,OAAK,MAAM,cAAc,MAAM,SAC7B,MAAK,MAAM,WAAW,SAAS,qBAAqB,QAAQ,EAAE;AAC5D,OAAI,QAAQ,gBAAgB,YAAY,SACtC;GAGF,MAAM,cAAc,GAAG,GAAG,GAAG,QAAQ;GACrC,MAAM,YAAY,WAAW,SAAS,QAAQ,WAAW;AAEzD,OAAI,cAAc,KAAA,EAEhB,MAAK,QAAQ,SAAS,gBAAgB,aAAa,QAAQ,KAAK,EAAE;IAChE,WAAW;KAAC,GAAG;KAAW;KAAO;KAAW;IAC5C,OAAO,WAAW;IACnB,CAAC;YACO,YAAY,UAAU,CAC/B,MAAK,QAAQ,SAAS,eAAe,aAAa,QAAQ,KAAK,EAAE;IAC/D,WAAW;KAAC,GAAG;KAAW;KAAO;KAAY;KAAU;IACvD,OAAO,UAAU;IAClB,CAAC;;AAIR,SAAO;GACP;EAEL"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glion/lint-profile-required-components",
3
- "version": "0.23.0",
3
+ "version": "0.25.0",
4
4
  "description": "Lint rule to validate required components in composite datatype fields",
5
5
  "keywords": [
6
6
  "health",
@@ -34,9 +34,10 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "unified-lint-rule": "3.0.1",
37
- "@glion/ast": "0.23.0",
38
- "@glion/util-visit": "0.23.0",
39
- "@glion/utils": "0.23.0"
37
+ "@glion/annotate-profile-fields": "0.25.0",
38
+ "@glion/ast": "0.25.0",
39
+ "@glion/util-visit": "0.25.0",
40
+ "@glion/utils": "0.25.0"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@types/node": "25.6.0",
@@ -47,10 +48,11 @@
47
48
  "unified": "^11.0.5",
48
49
  "vfile": "^6.0.3",
49
50
  "vitest": "4.1.11",
50
- "@glion/annotate-profile-context": "0.23.0",
51
- "@glion/builder": "0.23.0",
51
+ "@glion/annotate-profile-context": "0.25.0",
52
+ "@glion/builder": "0.25.0",
52
53
  "@glion/check-readme": "0.18.0",
53
- "@glion/profiles": "0.23.0",
54
+ "@glion/parser": "0.25.0",
55
+ "@glion/profiles": "0.25.0",
54
56
  "@glion/testing": "0.18.0",
55
57
  "@glion/tsconfig": "0.18.0"
56
58
  },