@metaobjectsdev/render 0.8.1-rc.1 → 0.9.0-rc.1

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 (81) hide show
  1. package/dist/email-document.d.ts +7 -0
  2. package/dist/email-document.d.ts.map +1 -0
  3. package/dist/email-document.js +2 -0
  4. package/dist/email-document.js.map +1 -0
  5. package/dist/extract/coerce.d.ts +15 -0
  6. package/dist/extract/coerce.d.ts.map +1 -0
  7. package/dist/{recover → extract}/coerce.js +87 -13
  8. package/dist/extract/coerce.js.map +1 -0
  9. package/dist/{recover/recover-map.d.ts → extract/extract-map.d.ts} +1 -1
  10. package/dist/{recover/recover-map.d.ts.map → extract/extract-map.d.ts.map} +1 -1
  11. package/dist/{recover/recover-map.js → extract/extract-map.js} +3 -3
  12. package/dist/{recover/recover-map.js.map → extract/extract-map.js.map} +1 -1
  13. package/dist/extract/extract.d.ts +4 -0
  14. package/dist/extract/extract.d.ts.map +1 -0
  15. package/dist/extract/extract.js +157 -0
  16. package/dist/extract/extract.js.map +1 -0
  17. package/dist/{recover → extract}/json-forgiving-reader.d.ts.map +1 -1
  18. package/dist/{recover → extract}/json-forgiving-reader.js +1 -1
  19. package/dist/{recover → extract}/json-forgiving-reader.js.map +1 -1
  20. package/dist/{recover → extract}/locate.d.ts.map +1 -1
  21. package/dist/{recover → extract}/locate.js.map +1 -1
  22. package/dist/extract/normalize.d.ts +4 -0
  23. package/dist/extract/normalize.d.ts.map +1 -0
  24. package/dist/extract/normalize.js +22 -0
  25. package/dist/extract/normalize.js.map +1 -0
  26. package/dist/extract/strip.d.ts.map +1 -0
  27. package/dist/{recover → extract}/strip.js.map +1 -1
  28. package/dist/extract/types.d.ts +160 -0
  29. package/dist/extract/types.d.ts.map +1 -0
  30. package/dist/extract/types.js +221 -0
  31. package/dist/extract/types.js.map +1 -0
  32. package/dist/{recover → extract}/xml-forgiving-reader.d.ts.map +1 -1
  33. package/dist/{recover → extract}/xml-forgiving-reader.js +1 -1
  34. package/dist/{recover → extract}/xml-forgiving-reader.js.map +1 -1
  35. package/dist/index.d.ts +4 -3
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +4 -4
  38. package/dist/index.js.map +1 -1
  39. package/dist/prompt/output-format-renderer.d.ts.map +1 -1
  40. package/dist/prompt/output-format-renderer.js +113 -59
  41. package/dist/prompt/output-format-renderer.js.map +1 -1
  42. package/dist/prompt/output-format-spec.d.ts +1 -1
  43. package/dist/prompt/prompt-field.d.ts +1 -1
  44. package/package.json +1 -1
  45. package/src/email-document.ts +6 -0
  46. package/src/extract/KNOWN_GAPS.md +59 -0
  47. package/src/extract/coerce.ts +224 -0
  48. package/src/{recover/recover-map.ts → extract/extract-map.ts} +2 -2
  49. package/src/extract/extract.ts +187 -0
  50. package/src/{recover → extract}/json-forgiving-reader.ts +1 -1
  51. package/src/extract/normalize.ts +23 -0
  52. package/src/extract/types.ts +346 -0
  53. package/src/{recover → extract}/xml-forgiving-reader.ts +1 -1
  54. package/src/index.ts +17 -11
  55. package/src/prompt/output-format-renderer.ts +140 -61
  56. package/src/prompt/output-format-spec.ts +1 -1
  57. package/src/prompt/prompt-field.ts +1 -1
  58. package/dist/recover/coerce.d.ts +0 -5
  59. package/dist/recover/coerce.d.ts.map +0 -1
  60. package/dist/recover/coerce.js.map +0 -1
  61. package/dist/recover/recover.d.ts +0 -4
  62. package/dist/recover/recover.d.ts.map +0 -1
  63. package/dist/recover/recover.js +0 -115
  64. package/dist/recover/recover.js.map +0 -1
  65. package/dist/recover/strip.d.ts.map +0 -1
  66. package/dist/recover/types.d.ts +0 -117
  67. package/dist/recover/types.d.ts.map +0 -1
  68. package/dist/recover/types.js +0 -124
  69. package/dist/recover/types.js.map +0 -1
  70. package/src/recover/KNOWN_GAPS.md +0 -35
  71. package/src/recover/coerce.ts +0 -141
  72. package/src/recover/recover.ts +0 -146
  73. package/src/recover/types.ts +0 -217
  74. /package/dist/{recover → extract}/json-forgiving-reader.d.ts +0 -0
  75. /package/dist/{recover → extract}/locate.d.ts +0 -0
  76. /package/dist/{recover → extract}/locate.js +0 -0
  77. /package/dist/{recover → extract}/strip.d.ts +0 -0
  78. /package/dist/{recover → extract}/strip.js +0 -0
  79. /package/dist/{recover → extract}/xml-forgiving-reader.d.ts +0 -0
  80. /package/src/{recover → extract}/locate.ts +0 -0
  81. /package/src/{recover → extract}/strip.ts +0 -0
@@ -0,0 +1,7 @@
1
+ /** A rendered email: subject + HTML body + optional plain-text alternative (MIME multipart/alternative). */
2
+ export interface EmailDocument {
3
+ subject: string;
4
+ htmlBody: string;
5
+ textBody?: string;
6
+ }
7
+ //# sourceMappingURL=email-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-document.d.ts","sourceRoot":"","sources":["../src/email-document.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=email-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-document.js","sourceRoot":"","sources":["../src/email-document.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { FieldSpec, ExtractOptions, ExtractionReport } from "./types.js";
2
+ /** Sentinel: the value was present but could not be coerced to the declared kind/vocabulary. */
3
+ export declare const MALFORMED: unique symbol;
4
+ export declare function coerceValue(raw: string | null, spec: FieldSpec, opts: ExtractOptions, fieldPath: string, report: ExtractionReport): unknown | typeof MALFORMED;
5
+ /**
6
+ * Phase B (generalized `@default`): PURE coercion of a metadata-sourced string to the field's
7
+ * scalar kind, with NO side effects (no normalizer/onField hooks, no clamp logging) — the value
8
+ * originates from metadata, not the model response. Returns the coerced value or the MALFORMED
9
+ * sentinel. INT/LONG accept an integer or a truncatable finite number; DOUBLE accepts any finite
10
+ * number; BOOLEAN accepts `true|false|yes|no|1|0`; STRING (and any other kind) passes through
11
+ * verbatim. Mirrors Java `Coerce.scalar` (parse semantics of {@link coerceValue} without its
12
+ * range-clamp / report machinery).
13
+ */
14
+ export declare function scalarCoerce(raw: string | null, spec: FieldSpec): unknown | typeof MALFORMED;
15
+ //# sourceMappingURL=coerce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coerce.d.ts","sourceRoot":"","sources":["../../src/extract/coerce.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9E,gGAAgG;AAChG,eAAO,MAAM,SAAS,EAAE,OAAO,MAA2C,CAAC;AAE3E,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,GACvB,OAAO,GAAG,OAAO,SAAS,CAmC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,SAAS,CAiB5F"}
@@ -8,8 +8,9 @@
8
8
  // load-bearing contract (finite-only acceptance; NaN/±Infinity → MALFORMED; numeric
9
9
  // classification) is identical across ports.
10
10
  import { FieldKind, Tolerance } from "./types.js";
11
+ import { normalizeEnum } from "./normalize.js";
11
12
  /** Sentinel: the value was present but could not be coerced to the declared kind/vocabulary. */
12
- export const MALFORMED = Symbol("recover.coerce.MALFORMED");
13
+ export const MALFORMED = Symbol("extract.coerce.MALFORMED");
13
14
  export function coerceValue(raw, spec, opts, fieldPath, report) {
14
15
  if (raw == null)
15
16
  return MALFORMED;
@@ -44,30 +45,103 @@ export function coerceValue(raw, spec, opts, fieldPath, report) {
44
45
  return raw;
45
46
  }
46
47
  }
48
+ /**
49
+ * Phase B (generalized `@default`): PURE coercion of a metadata-sourced string to the field's
50
+ * scalar kind, with NO side effects (no normalizer/onField hooks, no clamp logging) — the value
51
+ * originates from metadata, not the model response. Returns the coerced value or the MALFORMED
52
+ * sentinel. INT/LONG accept an integer or a truncatable finite number; DOUBLE accepts any finite
53
+ * number; BOOLEAN accepts `true|false|yes|no|1|0`; STRING (and any other kind) passes through
54
+ * verbatim. Mirrors Java `Coerce.scalar` (parse semantics of {@link coerceValue} without its
55
+ * range-clamp / report machinery).
56
+ */
57
+ export function scalarCoerce(raw, spec) {
58
+ if (raw == null)
59
+ return MALFORMED;
60
+ switch (spec.kind) {
61
+ case FieldKind.INT:
62
+ case FieldKind.LONG: {
63
+ const n = parseFiniteNumber(raw);
64
+ return n === null ? MALFORMED : Math.trunc(n);
65
+ }
66
+ case FieldKind.DOUBLE: {
67
+ const n = parseFiniteNumber(raw);
68
+ return n === null ? MALFORMED : n;
69
+ }
70
+ case FieldKind.BOOLEAN:
71
+ return coerceBool(raw, true);
72
+ default:
73
+ return raw; // STRING / ENUM / OBJECT — verbatim
74
+ }
75
+ }
76
+ /**
77
+ * FR-011 enum coercion pipeline: exact → normalize → @enumAlias → (reserved fuzzy) →
78
+ * @coerceDefault → MALFORMED. Resolution mode is `spec.normalize` (default "strip"); under
79
+ * STRICT tolerance (ci === false) normalization is forced to "none" (exact-only), preserving
80
+ * the case-sensitive STRICT contract. The FR-010 case-insensitive default is now mode "strip".
81
+ */
47
82
  function coerceEnum(raw, spec, opts, path, report, ci) {
83
+ const mode = ci ? spec.normalize : "none";
84
+ // 1. exact match.
48
85
  if (spec.enumValues != null) {
49
- for (const v of spec.enumValues) {
86
+ for (const v of spec.enumValues)
50
87
  if (v === raw)
51
88
  return v;
52
- if (ci && v.toLowerCase() === raw.toLowerCase()) {
53
- report.addCoercion({ fieldPath: path, from: raw, to: v, kind: "case" });
89
+ }
90
+ // 2. normalized match (skipped when mode === "none").
91
+ if (mode !== "none" && spec.enumValues != null) {
92
+ const normRaw = normalizeEnum(raw, mode);
93
+ for (const v of spec.enumValues) {
94
+ if (normalizeEnum(v, mode) === normRaw) {
95
+ report.addCoercion({ fieldPath: path, from: raw, to: v, kind: "normalize" });
54
96
  return v;
55
97
  }
56
98
  }
57
99
  }
58
- const schemaTarget = spec.enumAlias == null ? undefined : spec.enumAlias[raw];
59
- const runtimeTarget = opts.aliases[raw];
60
- if (runtimeTarget != null) {
61
- const kind = schemaTarget != null && schemaTarget !== runtimeTarget ? "runtime-alias-override" : "alias";
62
- report.addCoercion({ fieldPath: path, from: raw, to: runtimeTarget, kind });
63
- return runtimeTarget;
100
+ // 3. @enumAlias runtime aliases win over schema; alias keys normalized by the mode.
101
+ const aliasTarget = lookupAlias(raw, spec, opts, mode);
102
+ if (aliasTarget != null) {
103
+ const schemaTarget = lookupAliasIn(raw, spec.enumAlias ?? {}, mode);
104
+ const kind = aliasTarget.fromRuntime && schemaTarget != null && schemaTarget !== aliasTarget.target
105
+ ? "runtime-alias-override"
106
+ : "alias";
107
+ report.addCoercion({ fieldPath: path, from: raw, to: aliasTarget.target, kind });
108
+ return aliasTarget.target;
64
109
  }
65
- if (schemaTarget != null) {
66
- report.addCoercion({ fieldPath: path, from: raw, to: schemaTarget, kind: "alias" });
67
- return schemaTarget;
110
+ // 4. reserved fuzzy slot — NOT implemented (see FR-011 spec "Out of scope").
111
+ // 5. @coerceDefault present-but-uncoercible fallback to a valid member → DEFAULTED.
112
+ if (spec.coerceDefault != null && spec.enumValues != null && spec.enumValues.includes(spec.coerceDefault)) {
113
+ report.addCoercion({ fieldPath: path, from: raw, to: spec.coerceDefault, kind: "coerceDefault" });
114
+ return spec.coerceDefault;
68
115
  }
116
+ // 6. MALFORMED.
69
117
  return MALFORMED;
70
118
  }
119
+ /**
120
+ * Resolve `raw` against the merged alias maps (runtime wins), comparing keys under `mode`.
121
+ * Returns the target member + whether the winning hit came from the runtime map.
122
+ */
123
+ function lookupAlias(raw, spec, opts, mode) {
124
+ const runtime = lookupAliasIn(raw, opts.aliases, mode);
125
+ if (runtime != null)
126
+ return { target: runtime, fromRuntime: true };
127
+ const schema = lookupAliasIn(raw, spec.enumAlias ?? {}, mode);
128
+ if (schema != null)
129
+ return { target: schema, fromRuntime: false };
130
+ return null;
131
+ }
132
+ /** Find `raw` in an alias map, matching keys exactly first then under `mode` normalization. */
133
+ function lookupAliasIn(raw, aliases, mode) {
134
+ if (Object.prototype.hasOwnProperty.call(aliases, raw))
135
+ return aliases[raw];
136
+ if (mode === "none")
137
+ return null;
138
+ const normRaw = normalizeEnum(raw, mode);
139
+ for (const key of Object.keys(aliases)) {
140
+ if (normalizeEnum(key, mode) === normRaw)
141
+ return aliases[key];
142
+ }
143
+ return null;
144
+ }
71
145
  function coerceInt(raw, spec, path, report) {
72
146
  const n = parseFiniteNumber(raw);
73
147
  if (n === null)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../src/extract/coerce.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,4 @@ export declare function asLong(d: Record<string, unknown>, k: string): number |
4
4
  export declare function asDouble(d: Record<string, unknown>, k: string): number | null;
5
5
  export declare function asBool(d: Record<string, unknown>, k: string): boolean | null;
6
6
  export declare function asStringList(d: Record<string, unknown>, k: string): (string | null)[] | null;
7
- //# sourceMappingURL=recover-map.d.ts.map
7
+ //# sourceMappingURL=extract-map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recover-map.d.ts","sourceRoot":"","sources":["../../src/recover/recover-map.ts"],"names":[],"mappings":"AAQA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7E;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1E;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3E;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7E;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAG5E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAI5F"}
1
+ {"version":3,"file":"extract-map.d.ts","sourceRoot":"","sources":["../../src/extract/extract-map.ts"],"names":[],"mappings":"AAQA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7E;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1E;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3E;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7E;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAG5E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAI5F"}
@@ -1,5 +1,5 @@
1
- // Null-safe coercions from a RecoverOutcome data map onto typed values. Generated
2
- // recover(...) calls these. Mirrors Java RecoverMap.
1
+ // Null-safe coercions from a ExtractionOutcome data map onto typed values. Generated
2
+ // extract(...) calls these. Mirrors Java ExtractMap.
3
3
  //
4
4
  // Tier-2 divergence: JS has one number type, so asInt/asLong both return `number | null`
5
5
  // and truncate toward zero via Math.trunc (Java intValue()/longValue() also truncate).
@@ -33,4 +33,4 @@ export function asStringList(d, k) {
33
33
  return null;
34
34
  return v.map((e) => (e == null ? null : typeof e === "string" ? e : String(e)));
35
35
  }
36
- //# sourceMappingURL=recover-map.js.map
36
+ //# sourceMappingURL=extract-map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recover-map.js","sourceRoot":"","sources":["../../src/recover/recover-map.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,qDAAqD;AACrD,EAAE;AACF,yFAAyF;AACzF,uFAAuF;AACvF,qFAAqF;AACrF,qEAAqE;AAErE,MAAM,UAAU,QAAQ,CAAC,CAA0B,EAAE,CAAS;IAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAA0B,EAAE,CAAS;IACzD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAA0B,EAAE,CAAS;IAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAA0B,EAAE,CAAS;IAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAA0B,EAAE,CAAS;IAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAA0B,EAAE,CAAS;IAChE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"extract-map.js","sourceRoot":"","sources":["../../src/extract/extract-map.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,qDAAqD;AACrD,EAAE;AACF,yFAAyF;AACzF,uFAAuF;AACvF,qFAAqF;AACrF,qEAAqE;AAErE,MAAM,UAAU,QAAQ,CAAC,CAA0B,EAAE,CAAS;IAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAA0B,EAAE,CAAS;IACzD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAA0B,EAAE,CAAS;IAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAA0B,EAAE,CAAS;IAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAA0B,EAAE,CAAS;IAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAA0B,EAAE,CAAS;IAChE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ExtractOptions, ExtractionOutcome, ExtractSchema } from "./types.js";
2
+ /** The forgiving entry point: extract dirty `text` against `schema`. Never throws. */
3
+ export declare function extract(text: string | null | undefined, schema: ExtractSchema, opts?: Partial<ExtractOptions> | null): ExtractionOutcome;
4
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/extract/extract.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAa,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ9F,sFAAsF;AACtF,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,aAAa,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,GACpC,iBAAiB,CA0BnB"}
@@ -0,0 +1,157 @@
1
+ // Public entry point. Runs the staged pipeline; NEVER throws. Mirrors Java Extract.
2
+ import { Format, FieldKind, FieldExtraction, Tolerance, normalizeOptions, } from "./types.js";
3
+ import { ExtractionReport } from "./types.js";
4
+ import { strip } from "./strip.js";
5
+ import { locateJson, locateXml } from "./locate.js";
6
+ import { readJson, TRUNCATED } from "./json-forgiving-reader.js";
7
+ import { readXml } from "./xml-forgiving-reader.js";
8
+ import { coerceValue, scalarCoerce, MALFORMED } from "./coerce.js";
9
+ /** The forgiving entry point: extract dirty `text` against `schema`. Never throws. */
10
+ export function extract(text, schema, opts) {
11
+ const o = normalizeOptions(opts);
12
+ const report = new ExtractionReport();
13
+ const data = {};
14
+ const stripped = strip(text);
15
+ const ci = o.tolerance !== Tolerance.STRICT;
16
+ const span = schema.format === Format.JSON ? locateJson(stripped) : locateXml(stripped, schema.rootName, ci);
17
+ let raw;
18
+ if (span == null) {
19
+ raw = {};
20
+ }
21
+ else if (schema.format === Format.JSON) {
22
+ raw = readJson(span);
23
+ }
24
+ else {
25
+ raw = readXml(span, ci);
26
+ }
27
+ if (isEmptyRecord(raw) && (stripped.length === 0 || span == null)) {
28
+ report.markEmpty();
29
+ }
30
+ extractFields(schema.fields, raw, "", data, report, o, ci);
31
+ return { data, report };
32
+ }
33
+ function extractFields(fields, raw, prefix, data, report, o, ci) {
34
+ for (const f of fields) {
35
+ const path = prefix.length === 0 ? f.name : `${prefix}.${f.name}`;
36
+ const present = lookup(raw, f.name, ci);
37
+ if (present === undefined) {
38
+ // FR-011 / Phase B: an absent field with a declared @default fills the value → DEFAULTED
39
+ // (which satisfies a @required field). Generalized to all field kinds: an enum default is
40
+ // its member string as-is; a non-enum default is coerced to the field's kind via the pure
41
+ // scalar coerce (so @default "0" on field.int yields integer 0). A non-coercible non-enum
42
+ // default is treated as no default.
43
+ if (f.defaultValue != null) {
44
+ const coerced = f.kind === FieldKind.ENUM ? f.defaultValue : scalarCoerce(f.defaultValue, f);
45
+ if (coerced !== MALFORMED) {
46
+ data[f.name] = coerced;
47
+ report.addCoercion({ fieldPath: path, from: "", to: f.defaultValue, kind: "default" });
48
+ report.set(path, FieldExtraction.DEFAULTED);
49
+ continue;
50
+ }
51
+ }
52
+ report.set(path, f.required ? FieldExtraction.LOST_REQUIRED : FieldExtraction.LOST_OPTIONAL);
53
+ continue;
54
+ }
55
+ if (present === TRUNCATED) {
56
+ // present-but-garbled (empty/cut-off value)
57
+ report.set(path, FieldExtraction.MALFORMED);
58
+ continue;
59
+ }
60
+ if (f.array) {
61
+ // An array field: a single non-list value is treated as a one-element array
62
+ // (e.g. a single repeated-XML tag). Each element is coerced/recursed independently.
63
+ const elements = Array.isArray(present) ? present : [present];
64
+ const out = [];
65
+ let anyMalformed = false;
66
+ // Phase B (array-of-enum): an enum element flows through the SAME enum coercion pipeline a
67
+ // scalar enum uses (extractValue → coerceValue → coerceEnum), and is CLASSIFIED per element
68
+ // by indexed path (tags[0], tags[1], …) exactly as a scalar enum: EXTRACTED / DEFAULTED (via
69
+ // @coerceDefault) / MALFORMED. Non-enum scalar arrays keep their existing behavior (raw
70
+ // element list, no per-element states).
71
+ const enumElements = f.kind === FieldKind.ENUM;
72
+ for (let idx = 0; idx < elements.length; idx++) {
73
+ const elemPath = `${path}[${idx}]`;
74
+ const v = extractValue(f, elements[idx], elemPath, report, o, ci);
75
+ if (v === MALFORMED) {
76
+ anyMalformed = true;
77
+ if (enumElements)
78
+ report.set(elemPath, FieldExtraction.MALFORMED);
79
+ }
80
+ else {
81
+ out.push(v);
82
+ if (enumElements)
83
+ report.set(elemPath, classifyCoerced(elemPath, report));
84
+ }
85
+ }
86
+ // Cross-port contract: a MALFORMED array still places its successfully-coerced
87
+ // elements into data (partial extraction), UNLIKE a MALFORMED scalar which is absent.
88
+ data[f.name] = out;
89
+ report.set(path, anyMalformed ? FieldExtraction.MALFORMED : FieldExtraction.EXTRACTED);
90
+ continue;
91
+ }
92
+ if (Array.isArray(present)) {
93
+ // a list where a singular value was expected
94
+ report.set(path, FieldExtraction.MALFORMED);
95
+ continue;
96
+ }
97
+ const v = extractValue(f, present, path, report, o, ci);
98
+ if (v === MALFORMED) {
99
+ report.set(path, FieldExtraction.MALFORMED);
100
+ }
101
+ else {
102
+ data[f.name] = v;
103
+ // FR-011: a value reached via @coerceDefault (or @default) is DEFAULTED, not EXTRACTED.
104
+ report.set(path, classifyCoerced(path, report));
105
+ }
106
+ }
107
+ }
108
+ /**
109
+ * FR-011: classify a successfully-coerced field. DEFAULTED when its terminal (last-logged)
110
+ * coercion for this path is a default-class fallback; EXTRACTED otherwise. Nested objects
111
+ * (which log no coercion of their own) classify as EXTRACTED.
112
+ */
113
+ function classifyCoerced(path, report) {
114
+ let terminalKind = null;
115
+ for (const c of report.coercions())
116
+ if (c.fieldPath === path)
117
+ terminalKind = c.kind;
118
+ return terminalKind === "coerceDefault" || terminalKind === "default"
119
+ ? FieldExtraction.DEFAULTED
120
+ : FieldExtraction.EXTRACTED;
121
+ }
122
+ /** Coerce one (non-array) element: nested-object recursion or scalar coercion. Returns MALFORMED on failure. */
123
+ function extractValue(f, present, path, report, o, ci) {
124
+ if (f.kind === FieldKind.OBJECT) {
125
+ if (f.nested != null && isPlainObject(present)) {
126
+ const nestedData = {};
127
+ extractFields(f.nested.fields, present, path, nestedData, report, o, ci);
128
+ return nestedData;
129
+ }
130
+ return MALFORMED; // object expected but scalar/non-map present
131
+ }
132
+ const rawStr = typeof present === "string" ? present : stringifyScalar(present);
133
+ return coerceValue(rawStr, f, o, path, report);
134
+ }
135
+ /** Case-folding lookup honoring tolerance. Returns `undefined` for absent (mirrors Java null). */
136
+ function lookup(raw, name, ci) {
137
+ if (Object.prototype.hasOwnProperty.call(raw, name))
138
+ return raw[name];
139
+ if (ci) {
140
+ const lower = name.toLowerCase();
141
+ for (const k of Object.keys(raw))
142
+ if (k.toLowerCase() === lower)
143
+ return raw[k];
144
+ }
145
+ return undefined;
146
+ }
147
+ function isPlainObject(o) {
148
+ return typeof o === "object" && o !== null && !Array.isArray(o);
149
+ }
150
+ function isEmptyRecord(o) {
151
+ return Object.keys(o).length === 0;
152
+ }
153
+ /** Mirror Java String.valueOf for non-string forgiving-reader scalars. */
154
+ function stringifyScalar(v) {
155
+ return String(v);
156
+ }
157
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/extract/extract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"json-forgiving-reader.d.ts","sourceRoot":"","sources":["../../src/recover/json-forgiving-reader.ts"],"names":[],"mappings":"AAGA,kGAAkG;AAClG,eAAO,MAAM,SAAS,EAAE,OAAO,MAAyC,CAAC;AA+JzE,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjF"}
1
+ {"version":3,"file":"json-forgiving-reader.d.ts","sourceRoot":"","sources":["../../src/extract/json-forgiving-reader.ts"],"names":[],"mappings":"AAGA,kGAAkG;AAClG,eAAO,MAAM,SAAS,EAAE,OAAO,MAAyC,CAAC;AA+JzE,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjF"}
@@ -1,7 +1,7 @@
1
1
  // Stage-4 tolerant JSON reader for the bounded corpus malformation set. Never throws.
2
2
  // Mirrors Java JsonForgivingReader. The no-hang + TRUNCATED contracts are load-bearing.
3
3
  /** Sentinel: a key appeared in the text but its value was empty/cut-off (present-but-garbled). */
4
- export const TRUNCATED = Symbol("recover.json.TRUNCATED");
4
+ export const TRUNCATED = Symbol("extract.json.TRUNCATED");
5
5
  /** A character is JSON-insignificant whitespace. Mirrors Java Character.isWhitespace closely enough for the corpus. */
6
6
  function isWhitespace(c) {
7
7
  return c === " " || c === "\t" || c === "\n" || c === "\r" || c === "\f" || c === "\v" || /\s/.test(c);
@@ -1 +1 @@
1
- {"version":3,"file":"json-forgiving-reader.js","sourceRoot":"","sources":["../../src/recover/json-forgiving-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-forgiving-reader.js","sourceRoot":"","sources":["../../src/extract/json-forgiving-reader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/recover/locate.ts"],"names":[],"mappings":"AAQA,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAWzE;AAyBD,mFAAmF;AACnF,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,eAAe,EAAE,OAAO,GACvB,MAAM,GAAG,IAAI,CAcf"}
1
+ {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/extract/locate.ts"],"names":[],"mappings":"AAQA,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAWzE;AAyBD,mFAAmF;AACnF,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,eAAe,EAAE,OAAO,GACvB,MAAM,GAAG,IAAI,CAcf"}
@@ -1 +1 @@
1
- {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/recover/locate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/extract/locate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type NormalizeMode = "none" | "collapse" | "strip";
2
+ /** ASCII-only enum normalization. Pure [A-Za-z0-9] transform → byte-identical cross-port. */
3
+ export declare function normalizeEnum(s: string, mode: NormalizeMode): string;
4
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/extract/normalize.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAKpE"}
@@ -0,0 +1,22 @@
1
+ // FR-011: enum-variant normalization for the Coerce stage.
2
+ // ASCII-only by design: enum members are ASCII identifiers, so a pure [A-Za-z0-9]
3
+ // transform is byte-identical across ports and sidesteps locale case-folding (Turkish-İ).
4
+ // Mode comes from the @normalize attr (none|collapse|strip; default strip).
5
+ /** ASCII-only enum normalization. Pure [A-Za-z0-9] transform → byte-identical cross-port. */
6
+ export function normalizeEnum(s, mode) {
7
+ if (mode === "none")
8
+ return s;
9
+ const up = asciiUpper(s.trim());
10
+ if (mode === "collapse")
11
+ return up.replace(/[\s_-]+/g, "_");
12
+ return up.replace(/[^A-Z0-9]/g, ""); // strip
13
+ }
14
+ function asciiUpper(s) {
15
+ let out = "";
16
+ for (let i = 0; i < s.length; i++) {
17
+ const c = s.charCodeAt(i);
18
+ out += c >= 97 && c <= 122 ? String.fromCharCode(c - 32) : s[i];
19
+ }
20
+ return out;
21
+ }
22
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/extract/normalize.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,kFAAkF;AAClF,0FAA0F;AAC1F,4EAA4E;AAI5E,6FAA6F;AAC7F,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,IAAmB;IAC1D,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip.d.ts","sourceRoot":"","sources":["../../src/extract/strip.ts"],"names":[],"mappings":"AAMA,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAU5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"strip.js","sourceRoot":"","sources":["../../src/recover/strip.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,sBAAsB;AAEtB,4FAA4F;AAC5F,MAAM,KAAK,GAAG,8CAA8C,CAAC;AAE7D,MAAM,UAAU,KAAK,CAAC,GAA8B;IAClD,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"strip.js","sourceRoot":"","sources":["../../src/extract/strip.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,sBAAsB;AAEtB,4FAA4F;AAC5F,MAAM,KAAK,GAAG,8CAA8C,CAAC;AAE7D,MAAM,UAAU,KAAK,CAAC,GAA8B;IAClD,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}