@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.
- package/dist/email-document.d.ts +7 -0
- package/dist/email-document.d.ts.map +1 -0
- package/dist/email-document.js +2 -0
- package/dist/email-document.js.map +1 -0
- package/dist/extract/coerce.d.ts +15 -0
- package/dist/extract/coerce.d.ts.map +1 -0
- package/dist/{recover → extract}/coerce.js +87 -13
- package/dist/extract/coerce.js.map +1 -0
- package/dist/{recover/recover-map.d.ts → extract/extract-map.d.ts} +1 -1
- package/dist/{recover/recover-map.d.ts.map → extract/extract-map.d.ts.map} +1 -1
- package/dist/{recover/recover-map.js → extract/extract-map.js} +3 -3
- package/dist/{recover/recover-map.js.map → extract/extract-map.js.map} +1 -1
- package/dist/extract/extract.d.ts +4 -0
- package/dist/extract/extract.d.ts.map +1 -0
- package/dist/extract/extract.js +157 -0
- package/dist/extract/extract.js.map +1 -0
- package/dist/{recover → extract}/json-forgiving-reader.d.ts.map +1 -1
- package/dist/{recover → extract}/json-forgiving-reader.js +1 -1
- package/dist/{recover → extract}/json-forgiving-reader.js.map +1 -1
- package/dist/{recover → extract}/locate.d.ts.map +1 -1
- package/dist/{recover → extract}/locate.js.map +1 -1
- package/dist/extract/normalize.d.ts +4 -0
- package/dist/extract/normalize.d.ts.map +1 -0
- package/dist/extract/normalize.js +22 -0
- package/dist/extract/normalize.js.map +1 -0
- package/dist/extract/strip.d.ts.map +1 -0
- package/dist/{recover → extract}/strip.js.map +1 -1
- package/dist/extract/types.d.ts +160 -0
- package/dist/extract/types.d.ts.map +1 -0
- package/dist/extract/types.js +221 -0
- package/dist/extract/types.js.map +1 -0
- package/dist/{recover → extract}/xml-forgiving-reader.d.ts.map +1 -1
- package/dist/{recover → extract}/xml-forgiving-reader.js +1 -1
- package/dist/{recover → extract}/xml-forgiving-reader.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/prompt/output-format-renderer.d.ts.map +1 -1
- package/dist/prompt/output-format-renderer.js +113 -59
- package/dist/prompt/output-format-renderer.js.map +1 -1
- package/dist/prompt/output-format-spec.d.ts +1 -1
- package/dist/prompt/prompt-field.d.ts +1 -1
- package/package.json +1 -1
- package/src/email-document.ts +6 -0
- package/src/extract/KNOWN_GAPS.md +59 -0
- package/src/extract/coerce.ts +224 -0
- package/src/{recover/recover-map.ts → extract/extract-map.ts} +2 -2
- package/src/extract/extract.ts +187 -0
- package/src/{recover → extract}/json-forgiving-reader.ts +1 -1
- package/src/extract/normalize.ts +23 -0
- package/src/extract/types.ts +346 -0
- package/src/{recover → extract}/xml-forgiving-reader.ts +1 -1
- package/src/index.ts +17 -11
- package/src/prompt/output-format-renderer.ts +140 -61
- package/src/prompt/output-format-spec.ts +1 -1
- package/src/prompt/prompt-field.ts +1 -1
- package/dist/recover/coerce.d.ts +0 -5
- package/dist/recover/coerce.d.ts.map +0 -1
- package/dist/recover/coerce.js.map +0 -1
- package/dist/recover/recover.d.ts +0 -4
- package/dist/recover/recover.d.ts.map +0 -1
- package/dist/recover/recover.js +0 -115
- package/dist/recover/recover.js.map +0 -1
- package/dist/recover/strip.d.ts.map +0 -1
- package/dist/recover/types.d.ts +0 -117
- package/dist/recover/types.d.ts.map +0 -1
- package/dist/recover/types.js +0 -124
- package/dist/recover/types.js.map +0 -1
- package/src/recover/KNOWN_GAPS.md +0 -35
- package/src/recover/coerce.ts +0 -141
- package/src/recover/recover.ts +0 -146
- package/src/recover/types.ts +0 -217
- /package/dist/{recover → extract}/json-forgiving-reader.d.ts +0 -0
- /package/dist/{recover → extract}/locate.d.ts +0 -0
- /package/dist/{recover → extract}/locate.js +0 -0
- /package/dist/{recover → extract}/strip.d.ts +0 -0
- /package/dist/{recover → extract}/strip.js +0 -0
- /package/dist/{recover → extract}/xml-forgiving-reader.d.ts +0 -0
- /package/src/{recover → extract}/locate.ts +0 -0
- /package/src/{recover → extract}/strip.ts +0 -0
|
@@ -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 @@
|
|
|
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("
|
|
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
|
-
|
|
53
|
-
|
|
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
|
-
|
|
59
|
-
const
|
|
60
|
-
if (
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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=
|
|
7
|
+
//# sourceMappingURL=extract-map.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
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
|
|
2
|
-
//
|
|
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=
|
|
36
|
+
//# sourceMappingURL=extract-map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
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/
|
|
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("
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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"}
|