@bedrock-engineer/bro-xml-parser 0.3.0 → 0.4.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 (96) hide show
  1. package/README.md +21 -12
  2. package/dist/browser.d.ts +15 -5
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +7 -5
  5. package/dist/browser.js.map +1 -1
  6. package/dist/core/columns.d.ts +80 -0
  7. package/dist/core/columns.d.ts.map +1 -0
  8. package/dist/core/columns.js +100 -0
  9. package/dist/core/columns.js.map +1 -0
  10. package/dist/core/producer.d.ts +216 -0
  11. package/dist/core/producer.d.ts.map +1 -0
  12. package/dist/core/producer.js +85 -0
  13. package/dist/core/producer.js.map +1 -0
  14. package/dist/core/schema-parser.d.ts +41 -17
  15. package/dist/core/schema-parser.d.ts.map +1 -1
  16. package/dist/core/schema-parser.js +178 -73
  17. package/dist/core/schema-parser.js.map +1 -1
  18. package/dist/core/version-detector.d.ts +3 -1
  19. package/dist/core/version-detector.d.ts.map +1 -1
  20. package/dist/core/version-detector.js +37 -0
  21. package/dist/core/version-detector.js.map +1 -1
  22. package/dist/decoders/constants.d.ts +2 -0
  23. package/dist/decoders/constants.d.ts.map +1 -0
  24. package/dist/decoders/constants.js +2 -0
  25. package/dist/decoders/constants.js.map +1 -0
  26. package/dist/decoders/type-decoders.d.ts +38 -0
  27. package/dist/decoders/type-decoders.d.ts.map +1 -0
  28. package/dist/decoders/type-decoders.js +134 -0
  29. package/dist/decoders/type-decoders.js.map +1 -0
  30. package/dist/namespaces.d.ts.map +1 -1
  31. package/dist/namespaces.js +16 -0
  32. package/dist/namespaces.js.map +1 -1
  33. package/dist/node.d.ts +15 -5
  34. package/dist/node.d.ts.map +1 -1
  35. package/dist/node.js +7 -5
  36. package/dist/node.js.map +1 -1
  37. package/dist/parser.d.ts +69 -19
  38. package/dist/parser.d.ts.map +1 -1
  39. package/dist/parser.js +103 -29
  40. package/dist/parser.js.map +1 -1
  41. package/dist/producers.d.ts +36 -0
  42. package/dist/producers.d.ts.map +1 -0
  43. package/dist/producers.js +35 -0
  44. package/dist/producers.js.map +1 -0
  45. package/dist/resolvers/gld-resolvers.d.ts +30 -0
  46. package/dist/resolvers/gld-resolvers.d.ts.map +1 -0
  47. package/dist/resolvers/gld-resolvers.js +76 -0
  48. package/dist/resolvers/gld-resolvers.js.map +1 -0
  49. package/dist/resolvers/gmw-resolvers.d.ts +37 -0
  50. package/dist/resolvers/gmw-resolvers.d.ts.map +1 -0
  51. package/dist/resolvers/gmw-resolvers.js +101 -0
  52. package/dist/resolvers/gmw-resolvers.js.map +1 -0
  53. package/dist/resolvers.d.ts +2 -0
  54. package/dist/resolvers.d.ts.map +1 -1
  55. package/dist/resolvers.js +4 -0
  56. package/dist/resolvers.js.map +1 -1
  57. package/dist/schema-presets.d.ts +67 -16
  58. package/dist/schema-presets.d.ts.map +1 -1
  59. package/dist/schema-presets.js +51 -114
  60. package/dist/schema-presets.js.map +1 -1
  61. package/dist/schemas/bhrg-schema.d.ts +528 -9
  62. package/dist/schemas/bhrg-schema.d.ts.map +1 -1
  63. package/dist/schemas/bhrg-schema.js +330 -189
  64. package/dist/schemas/bhrg-schema.js.map +1 -1
  65. package/dist/schemas/bhrgt-analysis.d.ts +1057 -0
  66. package/dist/schemas/bhrgt-analysis.d.ts.map +1 -0
  67. package/dist/schemas/bhrgt-analysis.js +454 -0
  68. package/dist/schemas/bhrgt-analysis.js.map +1 -0
  69. package/dist/schemas/bore-schema.d.ts +773 -9
  70. package/dist/schemas/bore-schema.d.ts.map +1 -1
  71. package/dist/schemas/bore-schema.js +344 -292
  72. package/dist/schemas/bore-schema.js.map +1 -1
  73. package/dist/schemas/common-fields.d.ts +50 -5
  74. package/dist/schemas/common-fields.d.ts.map +1 -1
  75. package/dist/schemas/common-fields.js +70 -19
  76. package/dist/schemas/common-fields.js.map +1 -1
  77. package/dist/schemas/cpt-schema.d.ts +126 -9
  78. package/dist/schemas/cpt-schema.d.ts.map +1 -1
  79. package/dist/schemas/cpt-schema.js +182 -285
  80. package/dist/schemas/cpt-schema.js.map +1 -1
  81. package/dist/schemas/generated/gld.generated.d.ts +9 -0
  82. package/dist/schemas/generated/gld.generated.d.ts.map +1 -0
  83. package/dist/schemas/generated/gld.generated.js +19 -0
  84. package/dist/schemas/generated/gld.generated.js.map +1 -0
  85. package/dist/schemas/gld-schema.d.ts +92 -0
  86. package/dist/schemas/gld-schema.d.ts.map +1 -0
  87. package/dist/schemas/gld-schema.js +88 -0
  88. package/dist/schemas/gld-schema.js.map +1 -0
  89. package/dist/schemas/gmw-schema.d.ts +180 -0
  90. package/dist/schemas/gmw-schema.d.ts.map +1 -0
  91. package/dist/schemas/gmw-schema.js +131 -0
  92. package/dist/schemas/gmw-schema.js.map +1 -0
  93. package/dist/types/index.d.ts +51 -1421
  94. package/dist/types/index.d.ts.map +1 -1
  95. package/dist/types/index.js.map +1 -1
  96. package/package.json +1 -1
@@ -0,0 +1,85 @@
1
+ /**
2
+ * The Producer schema DSL.
3
+ *
4
+ * A {@link Producer} describes how to turn one XML node into one typed value. It
5
+ * is the single recursive unit of a schema: an object producer's fields are
6
+ * themselves producers, an array producer's item is a producer, and so on all
7
+ * the way down. {@link SchemaParser.produce} interprets this tree.
8
+ *
9
+ * Five kinds, each built by a combinator:
10
+ * - `scalar` — a leaf: text (or an attribute) decoded into `T`.
11
+ * - `object` — a fixed set of named fields, each a producer.
12
+ * - `array` — a repeated subtree: `each` selects item nodes, `item` produces one.
13
+ * - `oneOf` — an honest discriminated union (shared `base` + tagged `branches`).
14
+ * - `custom` — the sole escape hatch, handed a narrow {@link NodeLens}.
15
+ *
16
+ * Absence model (see CONTEXT.md): a `required` field that is missing nulls its
17
+ * *nearest enclosing object*; arrays *drop* null items (recording a warning);
18
+ * only the document root throws. `required` is opt-in, so nothing cascades unless
19
+ * a schema author asks for it.
20
+ */
21
+ import { parseDate, parseFloat, parseInt, parseBoolean, parseQualityClass, } from "../decoders/type-decoders.js";
22
+ /** A leaf producer with an explicit decoder. */
23
+ export function scalar(opts) {
24
+ return { kind: "scalar", ...opts };
25
+ }
26
+ /**
27
+ * Build a leaf from a decoder + optional `at`, without ever writing
28
+ * `at: undefined` (which `exactOptionalPropertyTypes` rejects).
29
+ */
30
+ function leaf(decode, at, opts) {
31
+ return scalar({ decode, ...(at !== undefined ? { at } : {}), ...opts });
32
+ }
33
+ /** Raw trimmed text (`string | null`). */
34
+ export function text(at, opts = {}) {
35
+ return leaf((raw) => raw, at, opts);
36
+ }
37
+ /** Precision-preserving ISO date/dateTime string (`string | null`). */
38
+ export function date(at, opts = {}) {
39
+ return leaf(parseDate, at, opts);
40
+ }
41
+ /** Decimal number (`number | null`). */
42
+ export function number_(at, opts = {}) {
43
+ return leaf(parseFloat, at, opts);
44
+ }
45
+ /** Integer (`number | null`). */
46
+ export function integer(at, opts = {}) {
47
+ return leaf(parseInt, at, opts);
48
+ }
49
+ /** Boolean (`boolean | null`), understanding BRO's `ja`/`nee`. */
50
+ export function boolean_(at, opts = {}) {
51
+ return leaf(parseBoolean, at, opts);
52
+ }
53
+ /** BRO quality class (`number | null`), understanding `"klasse2"` and `"2"`. */
54
+ export function qualityClass(at, opts = {}) {
55
+ return leaf(parseQualityClass, at, opts);
56
+ }
57
+ /** A fixed set of named fields. Output type is inferred from `fields`. */
58
+ export function object_(opts) {
59
+ const { fields, ...meta } = opts;
60
+ return { kind: "object", fields, ...meta };
61
+ }
62
+ /** A repeated subtree. `each` selects item nodes; `item` produces one value. */
63
+ export function array(opts) {
64
+ const { each, item, ...meta } = opts;
65
+ return { kind: "array", each, item, ...meta };
66
+ }
67
+ /** The escape hatch: a decoder handed a relative-only {@link NodeLens}. */
68
+ export function custom(opts) {
69
+ const { produce, ...meta } = opts;
70
+ return { kind: "custom", produce, ...meta };
71
+ }
72
+ /**
73
+ * An honest discriminated union. `base` fields are parsed once; the first branch
74
+ * whose `when` XPath exists is parsed and merged, with its literal `tag` written
75
+ * under `tagAs`.
76
+ *
77
+ * The output type is **inferred**: a discriminated union keyed on `tagAs`, each
78
+ * member being the shared `base` fields plus that branch's `fields` plus the
79
+ * literal `tag`. Presence is honoured throughout (`omit` → optional key).
80
+ */
81
+ export function oneOf(opts) {
82
+ const { tagAs, base = {}, branches, ...meta } = opts;
83
+ return { kind: "oneOf", tagAs, base, branches, ...meta };
84
+ }
85
+ //# sourceMappingURL=producer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer.js","sourceRoot":"","sources":["../../src/core/producer.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,55 @@
1
1
  /**
2
- * Generic schema-driven XML parser
2
+ * Generic schema-driven XML parser.
3
3
  *
4
- * This parser interprets a schema definition (field configurations)
5
- * and extracts data from XML documents accordingly.
6
- * The same parser works for any schema (CPT, Bore, etc.)
4
+ * Interprets a {@link Producer} schema against a document — recursing through
5
+ * nested objects, arrays, unions and custom decoders — and produces typed
6
+ * output. The same interpreter drives every data type (CPT, Bore, ...) and the
7
+ * public {@link BROParser.parseCustom} surface.
7
8
  */
8
- import type { XMLAdapter, Schema, Namespaces } from "../types/index.js";
9
+ import type { XMLAdapter, Namespaces } from "../types/index.js";
10
+ import type { ObjectProducer } from "./producer.js";
9
11
  export declare class SchemaParser {
10
12
  private adapter;
11
13
  private namespaces;
12
14
  constructor(adapter: XMLAdapter, namespaces: Namespaces);
13
15
  /**
14
- * Parse XML document using provided schema
16
+ * Interpret a {@link Producer} schema against a document, recursing through
17
+ * nested objects, arrays, unions and custom decoders.
15
18
  *
16
- * @param doc - Parsed XML document
17
- * @param schema - Field definitions (field name -> config)
18
- * @param rootPath - Optional XPath to root element
19
- * @returns Parsed data object with fields from schema
19
+ * The top-level producer must be an object (a registration object's fields).
20
+ * Warnings from the absence model (dropped array items) are returned rather
21
+ * than logged, so callers can fold them into `meta.warnings`.
22
+ *
23
+ * @throws {BROParseError} `MISSING_REQUIRED_FIELD` when a `required` field is
24
+ * missing at the document root (nested required failures null their object
25
+ * instead — see the absence model).
20
26
  */
21
- parse(doc: Document, schema: Schema, rootPath?: string): Record<string, unknown>;
27
+ produce<T>(doc: Document, root: ObjectProducer<T>, rootPath?: string): {
28
+ value: T;
29
+ warnings: Array<string>;
30
+ };
22
31
  /**
23
- * Extract single field using schema config
24
- *
25
- * @param element - Root element to search from
26
- * @param config - Field configuration (xpath, resolver, etc.)
27
- * @returns Extracted and resolved value
32
+ * Resolve the schema root: the first child of `rootPath` (the registration
33
+ * object under `dispatchDocument`), or the document itself when unspecified.
34
+ */
35
+ private resolveRoot;
36
+ private get nsResolver();
37
+ private xpath;
38
+ private xpathAll;
39
+ /** Run one producer against `node` (the enclosing context node). */
40
+ private run;
41
+ /**
42
+ * Build an object by running each field. Applies the presence + absence model:
43
+ * a missing `required` field nulls the whole object (or throws at the root); a
44
+ * missing `omit` field drops its key; a missing `optional` field keeps its
45
+ * empty value.
28
46
  */
29
- private extractField;
47
+ private runObject;
48
+ /** Run a discriminated union: base fields once, then the first matching branch. */
49
+ private runOneOf;
50
+ /** The "empty" value a producer yields when its node is absent. */
51
+ private emptyValue;
52
+ /** A relative-only lens over `node` for custom producers. */
53
+ private makeLens;
30
54
  }
31
55
  //# sourceMappingURL=schema-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-parser.d.ts","sourceRoot":"","sources":["../../src/core/schema-parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EAEN,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAG3B,qBAAa,YAAY;IAErB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,UAAU;IAGhC;;;;;;;OAOG;IAEH,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAmDhF;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CAoCrB"}
1
+ {"version":3,"file":"schema-parser.d.ts","sourceRoot":"","sources":["../../src/core/schema-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAsB,cAAc,EAAY,MAAM,eAAe,CAAC;AAqBlF,qBAAa,YAAY;IAErB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,UAAU;IAGhC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,CAAC,EACP,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE;IAexC;;;OAGG;IACH,OAAO,CAAC,WAAW;IAkBnB,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ;IAIhB,oEAAoE;IACpE,OAAO,CAAC,GAAG;IA2CX;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAoCjB,mFAAmF;IACnF,OAAO,CAAC,QAAQ;IAkChB,mEAAmE;IACnE,OAAO,CAAC,UAAU;IAWlB,6DAA6D;IAC7D,OAAO,CAAC,QAAQ;CAgBjB"}
@@ -1,11 +1,20 @@
1
1
  /**
2
- * Generic schema-driven XML parser
2
+ * Generic schema-driven XML parser.
3
3
  *
4
- * This parser interprets a schema definition (field configurations)
5
- * and extracts data from XML documents accordingly.
6
- * The same parser works for any schema (CPT, Bore, etc.)
4
+ * Interprets a {@link Producer} schema against a document — recursing through
5
+ * nested objects, arrays, unions and custom decoders — and produces typed
6
+ * output. The same interpreter drives every data type (CPT, Bore, ...) and the
7
+ * public {@link BROParser.parseCustom} surface.
7
8
  */
8
9
  import { BROParseError } from "../types/index.js";
10
+ /** Trimmed text content of a node, or `null` when empty. */
11
+ function readText(node) {
12
+ const trimmed = node.textContent?.trim();
13
+ if (!trimmed) {
14
+ return null;
15
+ }
16
+ return trimmed;
17
+ }
9
18
  export class SchemaParser {
10
19
  adapter;
11
20
  namespaces;
@@ -14,88 +23,184 @@ export class SchemaParser {
14
23
  this.namespaces = namespaces;
15
24
  }
16
25
  /**
17
- * Parse XML document using provided schema
26
+ * Interpret a {@link Producer} schema against a document, recursing through
27
+ * nested objects, arrays, unions and custom decoders.
28
+ *
29
+ * The top-level producer must be an object (a registration object's fields).
30
+ * Warnings from the absence model (dropped array items) are returned rather
31
+ * than logged, so callers can fold them into `meta.warnings`.
18
32
  *
19
- * @param doc - Parsed XML document
20
- * @param schema - Field definitions (field name -> config)
21
- * @param rootPath - Optional XPath to root element
22
- * @returns Parsed data object with fields from schema
33
+ * @throws {BROParseError} `MISSING_REQUIRED_FIELD` when a `required` field is
34
+ * missing at the document root (nested required failures null their object
35
+ * instead — see the absence model).
23
36
  */
24
- parse(doc, schema, rootPath) {
25
- // Find root element if specified
26
- let rootElement = doc;
27
- if (rootPath) {
28
- // First try with namespace-aware search
29
- let root = this.adapter.evaluateXPath(doc, `.//${rootPath}/*[1]`, (prefix) => prefix ? (this.namespaces[prefix] ?? null) : null);
30
- // If not found, try without namespace prefix
31
- root ??= this.adapter.evaluateXPath(doc, `//*[local-name()='${rootPath}']/*[1]`, (prefix) => prefix ? (this.namespaces[prefix] ?? null) : null);
32
- if (!root) {
33
- throw new BROParseError(`Root element not found: ${rootPath}`, {
34
- code: "MISSING_ROOT",
35
- path: rootPath,
36
- });
37
- }
38
- rootElement = root;
37
+ produce(doc, root, rootPath) {
38
+ const rootElement = this.resolveRoot(doc, rootPath);
39
+ const self = root.at ? this.xpath(rootElement, root.at) : rootElement;
40
+ if (!self) {
41
+ throw new BROParseError(`Root element not found: ${root.at ?? rootPath ?? "."}`, {
42
+ code: "MISSING_ROOT",
43
+ path: root.at ?? rootPath,
44
+ });
45
+ }
46
+ const warnings = [];
47
+ const value = this.runObject(self, root, warnings, true).value;
48
+ return { value, warnings };
49
+ }
50
+ /**
51
+ * Resolve the schema root: the first child of `rootPath` (the registration
52
+ * object under `dispatchDocument`), or the document itself when unspecified.
53
+ */
54
+ resolveRoot(doc, rootPath) {
55
+ if (!rootPath) {
56
+ return doc;
57
+ }
58
+ let root = this.xpath(doc, `.//${rootPath}/*[1]`);
59
+ root ??= this.xpath(doc, `//*[local-name()='${rootPath}']/*[1]`);
60
+ if (!root) {
61
+ throw new BROParseError(`Root element not found: ${rootPath}`, {
62
+ code: "MISSING_ROOT",
63
+ path: rootPath,
64
+ });
39
65
  }
40
- const result = {};
41
- // Iterate through schema fields and extract each one
42
- for (const [fieldName, config] of Object.entries(schema)) {
43
- try {
44
- const value = this.extractField(rootElement, config);
45
- result[fieldName] = value;
66
+ return root;
67
+ }
68
+ get nsResolver() {
69
+ return (prefix) => (prefix ? (this.namespaces[prefix] ?? null) : null);
70
+ }
71
+ xpath(from, query) {
72
+ return this.adapter.evaluateXPath(from, query, this.nsResolver);
73
+ }
74
+ xpathAll(from, query) {
75
+ return this.adapter.evaluateXPathAll(from, query, this.nsResolver);
76
+ }
77
+ /** Run one producer against `node` (the enclosing context node). */
78
+ run(node, producer, warnings) {
79
+ // Resolve this producer's own node (relative to the enclosing node).
80
+ const self = producer.at ? this.xpath(node, producer.at) : node;
81
+ if (!self) {
82
+ return { value: this.emptyValue(producer), satisfied: false };
83
+ }
84
+ switch (producer.kind) {
85
+ case "scalar": {
86
+ const raw = readText(self);
87
+ return { value: producer.decode(raw), satisfied: raw !== null };
46
88
  }
47
- catch (error) {
48
- // If field is required and extraction failed, throw error
49
- if (config.required) {
50
- throw new BROParseError(`Required field missing or invalid: ${fieldName}`, {
51
- code: "MISSING_REQUIRED_FIELD",
52
- field: fieldName,
53
- xpath: config.xpath,
54
- originalError: error,
55
- });
89
+ case "custom": {
90
+ return { value: producer.produce(this.makeLens(self)), satisfied: true };
91
+ }
92
+ case "object": {
93
+ return this.runObject(self, producer, warnings, false);
94
+ }
95
+ case "array": {
96
+ const items = this.xpathAll(self, producer.each);
97
+ const out = [];
98
+ for (const itemNode of items) {
99
+ const outcome = this.run(itemNode, producer.item, warnings);
100
+ if (!outcome.satisfied) {
101
+ // Structured items (object/oneOf) that fail a required field are a
102
+ // meaningful data loss; an empty scalar in a code list is not.
103
+ if (producer.item.kind !== "scalar") {
104
+ warnings.push(`Dropped an item from array "${producer.each}": required data was missing`);
105
+ }
106
+ continue;
107
+ }
108
+ out.push(outcome.value);
56
109
  }
57
- // Optional fields default to null on error
58
- result[fieldName] = null;
110
+ return { value: out, satisfied: items.length > 0 };
111
+ }
112
+ case "oneOf": {
113
+ return this.runOneOf(self, producer, warnings);
59
114
  }
60
115
  }
61
- return result;
62
116
  }
63
117
  /**
64
- * Extract single field using schema config
65
- *
66
- * @param element - Root element to search from
67
- * @param config - Field configuration (xpath, resolver, etc.)
68
- * @returns Extracted and resolved value
118
+ * Build an object by running each field. Applies the presence + absence model:
119
+ * a missing `required` field nulls the whole object (or throws at the root); a
120
+ * missing `omit` field drops its key; a missing `optional` field keeps its
121
+ * empty value.
69
122
  */
70
- extractField(element, config) {
71
- // Find element using XPath
72
- const node = this.adapter.evaluateXPath(element, config.xpath, (prefix) => prefix ? (this.namespaces[prefix] ?? null) : null);
73
- if (!node) {
74
- return null;
75
- }
76
- // Get value from element (text content or attribute)
77
- let value;
78
- if (config.attribute) {
79
- // Get specific attribute (e.g., "textContent")
80
- // Use type assertion to access dynamic properties
81
- const element = node;
82
- const attrValue = element[config.attribute];
83
- value = typeof attrValue === "string" ? attrValue : null;
123
+ runObject(self, producer, warnings, isRoot) {
124
+ const obj = {};
125
+ for (const [key, field] of Object.entries(producer.fields)) {
126
+ const outcome = this.run(self, field, warnings);
127
+ if (outcome.satisfied) {
128
+ obj[key] = outcome.value;
129
+ continue;
130
+ }
131
+ const presence = field.presence ?? "optional";
132
+ if (presence === "required") {
133
+ if (isRoot) {
134
+ throw new BROParseError(`Required field missing or invalid: ${key}`, {
135
+ code: "MISSING_REQUIRED_FIELD",
136
+ field: key,
137
+ xpath: field.at,
138
+ });
139
+ }
140
+ // Object-local failure: null the nearest enclosing object.
141
+ return { value: null, satisfied: false };
142
+ }
143
+ if (presence === "omit") {
144
+ continue;
145
+ }
146
+ obj[key] = outcome.value;
84
147
  }
85
- else {
86
- // Default to text content
87
- value = node.textContent;
148
+ return { value: obj, satisfied: true };
149
+ }
150
+ /** Run a discriminated union: base fields once, then the first matching branch. */
151
+ runOneOf(self, producer, warnings) {
152
+ // Assign each field, honouring `presence: "omit"` (skip the key when absent).
153
+ const assign = (target, node, fields) => {
154
+ for (const [key, field] of Object.entries(fields)) {
155
+ const outcome = this.run(node, field, warnings);
156
+ if (outcome.satisfied || (field.presence ?? "optional") !== "omit") {
157
+ target[key] = outcome.value;
158
+ }
159
+ }
160
+ };
161
+ const base = {};
162
+ assign(base, self, producer.base);
163
+ for (const branch of producer.branches) {
164
+ if (!this.xpath(self, branch.when)) {
165
+ continue;
166
+ }
167
+ const branchNode = branch.at ? this.xpath(self, branch.at) : self;
168
+ const merged = { ...base, [producer.tagAs]: branch.tag };
169
+ if (branchNode) {
170
+ assign(merged, branchNode, branch.fields);
171
+ }
172
+ return { value: merged, satisfied: true };
88
173
  }
89
- if (config.resolver) {
90
- const context = {
91
- node,
92
- element,
93
- namespaces: this.namespaces,
94
- adapter: this.adapter,
95
- };
96
- return config.resolver(value, context);
174
+ // No branch matched: absent.
175
+ return { value: null, satisfied: false };
176
+ }
177
+ /** The "empty" value a producer yields when its node is absent. */
178
+ emptyValue(producer) {
179
+ switch (producer.kind) {
180
+ case "scalar":
181
+ return producer.decode(null);
182
+ case "array":
183
+ return [];
184
+ default:
185
+ return null;
97
186
  }
98
- return value;
187
+ }
188
+ /** A relative-only lens over `node` for custom producers. */
189
+ makeLens(node) {
190
+ const at = (xpath) => {
191
+ const found = this.xpath(node, xpath);
192
+ return found ? readText(found) : null;
193
+ };
194
+ return {
195
+ name: () => {
196
+ const localName = node.localName;
197
+ return typeof localName === "string" ? localName : null;
198
+ },
199
+ text: () => readText(node),
200
+ textAt: at,
201
+ attr: at,
202
+ all: (xpath) => this.xpathAll(node, xpath).map((n) => this.makeLens(n)),
203
+ };
99
204
  }
100
205
  }
101
206
  //# sourceMappingURL=schema-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-parser.js","sourceRoot":"","sources":["../../src/core/schema-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-parser.js","sourceRoot":"","sources":["../../src/core/schema-parser.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * supported by this library. Uses graceful degradation for same
6
6
  * major versions with warnings.
7
7
  */
8
- export type DataType = "CPT" | "BHR-GT" | "BHR-G";
8
+ export type DataType = "CPT" | "BHR-GT" | "BHR-G" | "GMW" | "GLD";
9
9
  /**
10
10
  * Schema version info
11
11
  */
@@ -22,6 +22,8 @@ export declare const SUPPORTED_VERSIONS: {
22
22
  readonly CPT: SchemaVersionInfo;
23
23
  readonly "BHR-GT": SchemaVersionInfo;
24
24
  readonly "BHR-G": SchemaVersionInfo;
25
+ readonly GMW: SchemaVersionInfo;
26
+ readonly GLD: SchemaVersionInfo;
25
27
  };
26
28
  /**
27
29
  * Result of version detection
@@ -1 +1 @@
1
- {"version":3,"file":"version-detector.d.ts","sourceRoot":"","sources":["../../src/core/version-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAkED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACzB;AAkDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,QAAQ,GACrB,sBAAsB,CA2GxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,QAAQ,GACZ;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiC/D"}
1
+ {"version":3,"file":"version-detector.d.ts","sourceRoot":"","sources":["../../src/core/version-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AAElE;;GAEG;AACH,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAyFD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACzB;AA4DD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,QAAQ,GACrB,sBAAsB,CA6GxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,QAAQ,GACZ;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiC/D"}
@@ -59,6 +59,29 @@ const KNOWN_VERSIONS = {
59
59
  description: "Dispatch BHR-G schema version 3.0",
60
60
  },
61
61
  ],
62
+ GMW: [
63
+ {
64
+ namespace: "http://www.broservices.nl/xsd/dsgmw/1.1",
65
+ version: "1.1",
66
+ majorVersion: 1,
67
+ description: "Dispatch GMW schema version 1.1",
68
+ },
69
+ // Older known versions
70
+ {
71
+ namespace: "http://www.broservices.nl/xsd/dsgmw/1.0",
72
+ version: "1.0",
73
+ majorVersion: 1,
74
+ description: "Dispatch GMW schema version 1.0",
75
+ },
76
+ ],
77
+ GLD: [
78
+ {
79
+ namespace: "http://www.broservices.nl/xsd/dsgld/1.0",
80
+ version: "1.0",
81
+ majorVersion: 1,
82
+ description: "Dispatch GLD schema version 1.0",
83
+ },
84
+ ],
62
85
  };
63
86
  /**
64
87
  * Get the supported (primary) version for a data type
@@ -75,6 +98,8 @@ export const SUPPORTED_VERSIONS = {
75
98
  CPT: getSupportedVersion("CPT"),
76
99
  "BHR-GT": getSupportedVersion("BHR-GT"),
77
100
  "BHR-G": getSupportedVersion("BHR-G"),
101
+ GMW: getSupportedVersion("GMW"),
102
+ GLD: getSupportedVersion("GLD"),
78
103
  };
79
104
  /**
80
105
  * Extract version from namespace URI
@@ -105,6 +130,12 @@ function detectDataTypeFromNamespace(namespace) {
105
130
  if (namespace.includes("/dsbhrg/")) {
106
131
  return "BHR-G";
107
132
  }
133
+ if (namespace.includes("/dsgmw/")) {
134
+ return "GMW";
135
+ }
136
+ if (namespace.includes("/dsgld/")) {
137
+ return "GLD";
138
+ }
108
139
  return null;
109
140
  }
110
141
  /**
@@ -118,6 +149,10 @@ function getParserMethodName(dataType) {
118
149
  return "parseBHRGT";
119
150
  case "BHR-G":
120
151
  return "parseBHRG";
152
+ case "GMW":
153
+ return "parseGMW";
154
+ case "GLD":
155
+ return "parseGLD";
121
156
  }
122
157
  }
123
158
  /**
@@ -218,6 +253,8 @@ export function detectAndValidateVersion(doc, expectedType) {
218
253
  CPT: SUPPORTED_VERSIONS.CPT.namespace,
219
254
  "BHR-GT": SUPPORTED_VERSIONS["BHR-GT"].namespace,
220
255
  "BHR-G": SUPPORTED_VERSIONS["BHR-G"].namespace,
256
+ GMW: SUPPORTED_VERSIONS.GMW.namespace,
257
+ GLD: SUPPORTED_VERSIONS.GLD.namespace,
221
258
  },
222
259
  hint: "This does not appear to be a supported BRO XML document.",
223
260
  });
@@ -1 +1 @@
1
- {"version":3,"file":"version-detector.js","sourceRoot":"","sources":["../../src/core/version-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-detector.js","sourceRoot":"","sources":["../../src/core/version-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const SENTINEL = -999999;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/decoders/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const SENTINEL = -999999;
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/decoders/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC"}