@metaobjectsdev/render 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extract/coerce.js +17 -8
- package/dist/extract/coerce.js.map +1 -1
- package/dist/extract/extract.d.ts.map +1 -1
- package/dist/extract/extract.js +35 -9
- package/dist/extract/extract.js.map +1 -1
- package/dist/extract/json-forgiving-reader.d.ts +7 -0
- package/dist/extract/json-forgiving-reader.d.ts.map +1 -1
- package/dist/extract/json-forgiving-reader.js +12 -1
- package/dist/extract/json-forgiving-reader.js.map +1 -1
- package/dist/extract/types.d.ts +19 -0
- package/dist/extract/types.d.ts.map +1 -1
- package/dist/extract/types.js +9 -1
- package/dist/extract/types.js.map +1 -1
- package/dist/extract/xml-forgiving-reader.d.ts +10 -0
- package/dist/extract/xml-forgiving-reader.d.ts.map +1 -1
- package/dist/extract/xml-forgiving-reader.js +96 -11
- package/dist/extract/xml-forgiving-reader.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/recover/coerce.d.ts +5 -0
- package/dist/recover/coerce.d.ts.map +1 -0
- package/dist/recover/coerce.js +124 -0
- package/dist/recover/coerce.js.map +1 -0
- package/dist/recover/json-forgiving-reader.d.ts +5 -0
- package/dist/recover/json-forgiving-reader.d.ts.map +1 -0
- package/dist/recover/json-forgiving-reader.js +178 -0
- package/dist/recover/json-forgiving-reader.js.map +1 -0
- package/dist/recover/locate.d.ts +5 -0
- package/dist/recover/locate.d.ts.map +1 -0
- package/dist/recover/locate.js +75 -0
- package/dist/recover/locate.js.map +1 -0
- package/dist/recover/recover-map.d.ts +7 -0
- package/dist/recover/recover-map.d.ts.map +1 -0
- package/dist/recover/recover-map.js +36 -0
- package/dist/recover/recover-map.js.map +1 -0
- package/dist/recover/recover.d.ts +4 -0
- package/dist/recover/recover.d.ts.map +1 -0
- package/dist/recover/recover.js +115 -0
- package/dist/recover/recover.js.map +1 -0
- package/dist/recover/strip.d.ts +2 -0
- package/dist/recover/strip.d.ts.map +1 -0
- package/dist/recover/strip.js +17 -0
- package/dist/recover/strip.js.map +1 -0
- package/dist/recover/types.d.ts +117 -0
- package/dist/recover/types.d.ts.map +1 -0
- package/dist/recover/types.js +124 -0
- package/dist/recover/types.js.map +1 -0
- package/dist/recover/xml-forgiving-reader.d.ts +2 -0
- package/dist/recover/xml-forgiving-reader.d.ts.map +1 -0
- package/dist/recover/xml-forgiving-reader.js +79 -0
- package/dist/recover/xml-forgiving-reader.js.map +1 -0
- package/dist/verify.d.ts +24 -0
- package/dist/verify.d.ts.map +1 -1
- package/dist/verify.js +21 -5
- package/dist/verify.js.map +1 -1
- package/package.json +32 -21
- package/src/extract/coerce.ts +17 -8
- package/src/extract/extract.ts +35 -11
- package/src/extract/json-forgiving-reader.ts +12 -2
- package/src/extract/types.ts +24 -1
- package/src/extract/xml-forgiving-reader.ts +99 -12
- package/src/index.ts +4 -0
- package/src/verify.ts +37 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml-forgiving-reader.js","sourceRoot":"","sources":["../../src/extract/xml-forgiving-reader.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,
|
|
1
|
+
{"version":3,"file":"xml-forgiving-reader.js","sourceRoot":"","sources":["../../src/extract/xml-forgiving-reader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { render, type RenderOptions } from "./render.js";
|
|
2
2
|
export { type Provider, InMemoryProvider } from "./provider.js";
|
|
3
3
|
export { ESCAPERS, type RenderFormat } from "./escapers.js";
|
|
4
|
-
export { verify, ERR_VAR_NOT_ON_PAYLOAD, ERR_PARTIAL_UNRESOLVED, ERR_REQUIRED_SLOT_UNUSED, ERR_OUTPUT_TAG_MISSING, type PayloadField, type VerifyError, type VerifyOptions, } from "./verify.js";
|
|
4
|
+
export { verify, resolveTemplateVariable, parseTemplate, ERR_VAR_NOT_ON_PAYLOAD, ERR_PARTIAL_UNRESOLVED, ERR_REQUIRED_SLOT_UNUSED, ERR_OUTPUT_TAG_MISSING, type PayloadField, type ResolveStack, type VerifyError, type VerifyOptions, } from "./verify.js";
|
|
5
5
|
export { extract } from "./extract/extract.js";
|
|
6
|
-
export { Format, FieldKind, FieldExtraction, Tolerance, ExtractionReport, scalar, enumField, enumArray, range, object, extractSchema, defaults, orThrow, ExtractError, type FieldSpec, type ExtractSchema, type ExtractOptions, type ExtractionOutcome, type ExtractionResult, type Coercion, type OnField, } from "./extract/types.js";
|
|
6
|
+
export { Format, FieldKind, FieldExtraction, Tolerance, ExtractionReport, scalar, textContentField, enumField, enumArray, range, object, extractSchema, defaults, orThrow, ExtractError, type FieldSpec, type ExtractSchema, type ExtractOptions, type ExtractionOutcome, type ExtractionResult, type Coercion, type OnField, } from "./extract/types.js";
|
|
7
7
|
export { asString, asInt, asLong, asDouble, asBool, asStringList, } from "./extract/extract-map.js";
|
|
8
8
|
export { renderOutputFormat } from "./prompt/output-format-renderer.js";
|
|
9
9
|
export { PromptStyle, promptStyleFrom } from "./prompt/prompt-style.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,MAAM,EACN,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,SAAS,EACT,KAAK,EACL,MAAM,EACN,aAAa,EACb,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,OAAO,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,YAAY,GACb,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,MAAM,EACN,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,KAAK,EACL,MAAM,EACN,aAAa,EACb,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,OAAO,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,YAAY,GACb,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { render } from "./render.js";
|
|
2
2
|
export { InMemoryProvider } from "./provider.js";
|
|
3
3
|
export { ESCAPERS } from "./escapers.js";
|
|
4
|
-
export { verify, ERR_VAR_NOT_ON_PAYLOAD, ERR_PARTIAL_UNRESOLVED, ERR_REQUIRED_SLOT_UNUSED, ERR_OUTPUT_TAG_MISSING, } from "./verify.js";
|
|
4
|
+
export { verify, resolveTemplateVariable, parseTemplate, ERR_VAR_NOT_ON_PAYLOAD, ERR_PARTIAL_UNRESOLVED, ERR_REQUIRED_SLOT_UNUSED, ERR_OUTPUT_TAG_MISSING, } from "./verify.js";
|
|
5
5
|
// FR-010 tolerant extract engine (Tier-2 forgiving parser).
|
|
6
6
|
export { extract } from "./extract/extract.js";
|
|
7
|
-
export { Format, FieldKind, FieldExtraction, Tolerance, ExtractionReport, scalar, enumField, enumArray, range, object, extractSchema, defaults, orThrow, ExtractError, } from "./extract/types.js";
|
|
7
|
+
export { Format, FieldKind, FieldExtraction, Tolerance, ExtractionReport, scalar, textContentField, enumField, enumArray, range, object, extractSchema, defaults, orThrow, ExtractError, } from "./extract/types.js";
|
|
8
8
|
export { asString, asInt, asLong, asDouble, asBool, asStringList, } from "./extract/extract-map.js";
|
|
9
9
|
// FR-010 artifact 1 — output-format prompt renderer ("produce your answer like this").
|
|
10
10
|
export { renderOutputFormat } from "./prompt/output-format-renderer.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAiB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,MAAM,EACN,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAiB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,MAAM,EACN,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GAKvB,MAAM,aAAa,CAAC;AAErB,4DAA4D;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,KAAK,EACL,MAAM,EACN,aAAa,EACb,QAAQ,EACR,OAAO,EACP,YAAY,GAQb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,uFAAuF;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,WAAW,GAEZ,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FieldSpec, RecoverOptions, RecoveryReport } 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: RecoverOptions, fieldPath: string, report: RecoveryReport): unknown | typeof MALFORMED;
|
|
5
|
+
//# sourceMappingURL=coerce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coerce.d.ts","sourceRoot":"","sources":["../../src/recover/coerce.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5E,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,cAAc,GACrB,OAAO,GAAG,OAAO,SAAS,CAmC5B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// Stage 7: canonicalize a raw scalar string per its FieldSpec. Returns the MALFORMED
|
|
2
|
+
// sentinel when present-but-uncoercible. Mirrors Java Coerce.
|
|
3
|
+
//
|
|
4
|
+
// Tier-2 divergence (documented, parity with the C# port's KNOWN_GAPS): JS has one
|
|
5
|
+
// number type. INT/LONG both truncate toward zero via Math.trunc and return `number`.
|
|
6
|
+
// Coercion uses Number(...) + Number.isFinite, NOT Java's Double.parseDouble — so JS
|
|
7
|
+
// does NOT accept Java's numeric suffixes ("42d"/"42f") or hex-float literals. The
|
|
8
|
+
// load-bearing contract (finite-only acceptance; NaN/±Infinity → MALFORMED; numeric
|
|
9
|
+
// classification) is identical across ports.
|
|
10
|
+
import { FieldKind, Tolerance } from "./types.js";
|
|
11
|
+
/** 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 function coerceValue(raw, spec, opts, fieldPath, report) {
|
|
14
|
+
if (raw == null)
|
|
15
|
+
return MALFORMED;
|
|
16
|
+
if (opts.onField != null) {
|
|
17
|
+
const hooked = opts.onField(fieldPath, raw, spec);
|
|
18
|
+
if (hooked != null) {
|
|
19
|
+
report.addCoercion({ fieldPath, from: raw, to: stringify(hooked), kind: "onField" });
|
|
20
|
+
return hooked;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Per-field runtime normalizer (bounded 20% surface). Keyed by field path, then simple name.
|
|
24
|
+
const norm = opts.normalizers[fieldPath] ?? opts.normalizers[spec.name];
|
|
25
|
+
if (norm != null) {
|
|
26
|
+
const normalized = norm(raw);
|
|
27
|
+
if (normalized != null) {
|
|
28
|
+
report.addCoercion({ fieldPath, from: raw, to: stringify(normalized), kind: "normalizer" });
|
|
29
|
+
return normalized;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const ci = opts.tolerance !== Tolerance.STRICT;
|
|
33
|
+
switch (spec.kind) {
|
|
34
|
+
case FieldKind.ENUM:
|
|
35
|
+
return coerceEnum(raw, spec, opts, fieldPath, report, ci);
|
|
36
|
+
case FieldKind.INT:
|
|
37
|
+
case FieldKind.LONG:
|
|
38
|
+
return coerceInt(raw, spec, fieldPath, report);
|
|
39
|
+
case FieldKind.DOUBLE:
|
|
40
|
+
return coerceDouble(raw, spec, fieldPath, report);
|
|
41
|
+
case FieldKind.BOOLEAN:
|
|
42
|
+
return coerceBool(raw, ci);
|
|
43
|
+
default:
|
|
44
|
+
return raw;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function coerceEnum(raw, spec, opts, path, report, ci) {
|
|
48
|
+
if (spec.enumValues != null) {
|
|
49
|
+
for (const v of spec.enumValues) {
|
|
50
|
+
if (v === raw)
|
|
51
|
+
return v;
|
|
52
|
+
if (ci && v.toLowerCase() === raw.toLowerCase()) {
|
|
53
|
+
report.addCoercion({ fieldPath: path, from: raw, to: v, kind: "case" });
|
|
54
|
+
return v;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
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;
|
|
64
|
+
}
|
|
65
|
+
if (schemaTarget != null) {
|
|
66
|
+
report.addCoercion({ fieldPath: path, from: raw, to: schemaTarget, kind: "alias" });
|
|
67
|
+
return schemaTarget;
|
|
68
|
+
}
|
|
69
|
+
return MALFORMED;
|
|
70
|
+
}
|
|
71
|
+
function coerceInt(raw, spec, path, report) {
|
|
72
|
+
const n = parseFiniteNumber(raw);
|
|
73
|
+
if (n === null)
|
|
74
|
+
return MALFORMED;
|
|
75
|
+
return clamp(Math.trunc(n), spec, path, report);
|
|
76
|
+
}
|
|
77
|
+
function coerceDouble(raw, spec, path, report) {
|
|
78
|
+
const n = parseFiniteNumber(raw);
|
|
79
|
+
if (n === null)
|
|
80
|
+
return MALFORMED;
|
|
81
|
+
return clamp(n, spec, path, report);
|
|
82
|
+
}
|
|
83
|
+
/** Parse a trimmed numeric string; null if empty, non-numeric, or non-finite (NaN/±Infinity). */
|
|
84
|
+
function parseFiniteNumber(raw) {
|
|
85
|
+
const t = raw.trim();
|
|
86
|
+
if (t.length === 0)
|
|
87
|
+
return null;
|
|
88
|
+
// Reject JS-only radix-prefixed literals (0x.., 0b.., 0o..) that Number() would
|
|
89
|
+
// accept but Java/C# numeric parsing rejects → MALFORMED. Keeps cross-port parity.
|
|
90
|
+
if (/^[+-]?0[xXbBoO]/.test(t))
|
|
91
|
+
return null;
|
|
92
|
+
const n = Number(t); // Number("") === 0, hence the empty guard above
|
|
93
|
+
return Number.isFinite(n) ? n : null;
|
|
94
|
+
}
|
|
95
|
+
function clamp(n, spec, path, report) {
|
|
96
|
+
let c = n;
|
|
97
|
+
if (spec.min != null && c < spec.min)
|
|
98
|
+
c = spec.min;
|
|
99
|
+
if (spec.max != null && c > spec.max)
|
|
100
|
+
c = spec.max;
|
|
101
|
+
if (c !== n)
|
|
102
|
+
report.addCoercion({ fieldPath: path, from: stringify(n), to: stringify(c), kind: "clamp" });
|
|
103
|
+
return c;
|
|
104
|
+
}
|
|
105
|
+
function coerceBool(raw, ci) {
|
|
106
|
+
const t = ci ? raw.trim().toLowerCase() : raw.trim();
|
|
107
|
+
switch (t) {
|
|
108
|
+
case "true":
|
|
109
|
+
case "yes":
|
|
110
|
+
case "1":
|
|
111
|
+
return true;
|
|
112
|
+
case "false":
|
|
113
|
+
case "no":
|
|
114
|
+
case "0":
|
|
115
|
+
return false;
|
|
116
|
+
default:
|
|
117
|
+
return MALFORMED;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** Canonical string form (locale-independent), mirroring Java String.valueOf for the corpus. */
|
|
121
|
+
function stringify(v) {
|
|
122
|
+
return String(v);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=coerce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../src/recover/coerce.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Sentinel: a key appeared in the text but its value was empty/cut-off (present-but-garbled). */
|
|
2
|
+
export declare const TRUNCATED: unique symbol;
|
|
3
|
+
/** Parse a tolerant JSON object span into a forgiving record. Never throws. */
|
|
4
|
+
export declare function readJson(span: string | null | undefined): Record<string, unknown>;
|
|
5
|
+
//# sourceMappingURL=json-forgiving-reader.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// Stage-4 tolerant JSON reader for the bounded corpus malformation set. Never throws.
|
|
2
|
+
// Mirrors Java JsonForgivingReader. The no-hang + TRUNCATED contracts are load-bearing.
|
|
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");
|
|
5
|
+
/** A character is JSON-insignificant whitespace. Mirrors Java Character.isWhitespace closely enough for the corpus. */
|
|
6
|
+
function isWhitespace(c) {
|
|
7
|
+
return c === " " || c === "\t" || c === "\n" || c === "\r" || c === "\f" || c === "\v" || /\s/.test(c);
|
|
8
|
+
}
|
|
9
|
+
function isLetterOrDigitOrUnderscore(c) {
|
|
10
|
+
return /[A-Za-z0-9_]/.test(c);
|
|
11
|
+
}
|
|
12
|
+
class Reader {
|
|
13
|
+
s = "";
|
|
14
|
+
i = 0;
|
|
15
|
+
read(span) {
|
|
16
|
+
this.s = span ?? "";
|
|
17
|
+
this.i = 0;
|
|
18
|
+
this.ws();
|
|
19
|
+
if (this.i >= this.s.length || this.s.charAt(this.i) !== "{")
|
|
20
|
+
return {};
|
|
21
|
+
const o = this.readValue();
|
|
22
|
+
return isPlainObject(o) ? o : {};
|
|
23
|
+
}
|
|
24
|
+
readValue() {
|
|
25
|
+
this.ws();
|
|
26
|
+
if (this.i >= this.s.length)
|
|
27
|
+
return null;
|
|
28
|
+
const c = this.s.charAt(this.i);
|
|
29
|
+
if (c === "{")
|
|
30
|
+
return this.readObject();
|
|
31
|
+
if (c === "[")
|
|
32
|
+
return this.readArray();
|
|
33
|
+
if (c === '"' || c === "'")
|
|
34
|
+
return this.readString(c);
|
|
35
|
+
return this.readBareScalar();
|
|
36
|
+
}
|
|
37
|
+
readObject() {
|
|
38
|
+
const m = {};
|
|
39
|
+
this.i++; // consume '{'
|
|
40
|
+
for (;;) {
|
|
41
|
+
this.ws();
|
|
42
|
+
if (this.i >= this.s.length)
|
|
43
|
+
return m; // truncation
|
|
44
|
+
if (this.s.charAt(this.i) === "}") {
|
|
45
|
+
this.i++;
|
|
46
|
+
return m;
|
|
47
|
+
}
|
|
48
|
+
const key = this.readKey();
|
|
49
|
+
if (key === null)
|
|
50
|
+
return m; // truncation mid-key
|
|
51
|
+
this.ws();
|
|
52
|
+
if (this.i >= this.s.length || this.s.charAt(this.i) !== ":")
|
|
53
|
+
return m; // truncation before value
|
|
54
|
+
this.i++; // consume ':'
|
|
55
|
+
this.ws();
|
|
56
|
+
if (this.i >= this.s.length) {
|
|
57
|
+
m[key] = TRUNCATED; // value cut off at EOF → present-but-garbled
|
|
58
|
+
return m;
|
|
59
|
+
}
|
|
60
|
+
const v = this.readValue();
|
|
61
|
+
if (v === null) {
|
|
62
|
+
// present key, empty/zero-width value → present-but-garbled
|
|
63
|
+
m[key] = TRUNCATED;
|
|
64
|
+
this.ws();
|
|
65
|
+
if (this.i < this.s.length && this.s.charAt(this.i) === ",") {
|
|
66
|
+
this.i++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (this.i < this.s.length && this.s.charAt(this.i) === "}")
|
|
70
|
+
this.i++;
|
|
71
|
+
return m;
|
|
72
|
+
}
|
|
73
|
+
m[key] = v;
|
|
74
|
+
this.ws();
|
|
75
|
+
if (this.i < this.s.length && this.s.charAt(this.i) === ",")
|
|
76
|
+
this.i++; // optional/trailing comma
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
readArray() {
|
|
80
|
+
const xs = [];
|
|
81
|
+
this.i++; // consume '['
|
|
82
|
+
for (;;) {
|
|
83
|
+
this.ws();
|
|
84
|
+
if (this.i >= this.s.length)
|
|
85
|
+
return xs;
|
|
86
|
+
if (this.s.charAt(this.i) === "]") {
|
|
87
|
+
this.i++;
|
|
88
|
+
return xs;
|
|
89
|
+
}
|
|
90
|
+
if (this.s.charAt(this.i) === "}") {
|
|
91
|
+
this.i++;
|
|
92
|
+
return xs;
|
|
93
|
+
} // malformed brace-close terminates array
|
|
94
|
+
const v = this.readValue();
|
|
95
|
+
if (v === null) {
|
|
96
|
+
// zero-width / no value → stop (no spin)
|
|
97
|
+
this.ws();
|
|
98
|
+
if (this.i < this.s.length && (this.s.charAt(this.i) === "]" || this.s.charAt(this.i) === "}"))
|
|
99
|
+
this.i++;
|
|
100
|
+
return xs;
|
|
101
|
+
}
|
|
102
|
+
xs.push(v);
|
|
103
|
+
this.ws();
|
|
104
|
+
if (this.i < this.s.length && this.s.charAt(this.i) === ",")
|
|
105
|
+
this.i++;
|
|
106
|
+
else if (this.i < this.s.length && this.s.charAt(this.i) === "]") {
|
|
107
|
+
this.i++;
|
|
108
|
+
return xs;
|
|
109
|
+
}
|
|
110
|
+
else if (this.i >= this.s.length)
|
|
111
|
+
return xs;
|
|
112
|
+
else
|
|
113
|
+
return xs; // any other non-separator char → stop
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
readKey() {
|
|
117
|
+
this.ws();
|
|
118
|
+
if (this.i >= this.s.length)
|
|
119
|
+
return null;
|
|
120
|
+
const c = this.s.charAt(this.i);
|
|
121
|
+
if (c === '"' || c === "'")
|
|
122
|
+
return this.readString(c);
|
|
123
|
+
const start = this.i;
|
|
124
|
+
while (this.i < this.s.length && isLetterOrDigitOrUnderscore(this.s.charAt(this.i)))
|
|
125
|
+
this.i++;
|
|
126
|
+
return this.i > start ? this.s.substring(start, this.i) : null;
|
|
127
|
+
}
|
|
128
|
+
readString(quoteChar) {
|
|
129
|
+
this.i++; // opening quote
|
|
130
|
+
let sb = "";
|
|
131
|
+
let esc = false;
|
|
132
|
+
while (this.i < this.s.length) {
|
|
133
|
+
const c = this.s.charAt(this.i++);
|
|
134
|
+
if (esc) {
|
|
135
|
+
sb += unescape(c);
|
|
136
|
+
esc = false;
|
|
137
|
+
}
|
|
138
|
+
else if (c === "\\")
|
|
139
|
+
esc = true;
|
|
140
|
+
else if (c === quoteChar)
|
|
141
|
+
return sb;
|
|
142
|
+
else
|
|
143
|
+
sb += c;
|
|
144
|
+
}
|
|
145
|
+
return sb; // unterminated string → return what we have
|
|
146
|
+
}
|
|
147
|
+
readBareScalar() {
|
|
148
|
+
const start = this.i;
|
|
149
|
+
while (this.i < this.s.length && ",}]".indexOf(this.s.charAt(this.i)) < 0)
|
|
150
|
+
this.i++;
|
|
151
|
+
const result = this.s.substring(start, this.i).trim();
|
|
152
|
+
return result.length === 0 ? null : result; // null = no token read (zero-width)
|
|
153
|
+
}
|
|
154
|
+
ws() {
|
|
155
|
+
while (this.i < this.s.length && isWhitespace(this.s.charAt(this.i)))
|
|
156
|
+
this.i++;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function unescape(c) {
|
|
160
|
+
switch (c) {
|
|
161
|
+
case "n":
|
|
162
|
+
return "\n";
|
|
163
|
+
case "t":
|
|
164
|
+
return "\t";
|
|
165
|
+
case "r":
|
|
166
|
+
return "\r";
|
|
167
|
+
default:
|
|
168
|
+
return c;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function isPlainObject(o) {
|
|
172
|
+
return typeof o === "object" && o !== null && !Array.isArray(o);
|
|
173
|
+
}
|
|
174
|
+
/** Parse a tolerant JSON object span into a forgiving record. Never throws. */
|
|
175
|
+
export function readJson(span) {
|
|
176
|
+
return new Reader().read(span);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=json-forgiving-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-forgiving-reader.js","sourceRoot":"","sources":["../../src/recover/json-forgiving-reader.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,wFAAwF;AAExF,kGAAkG;AAClG,MAAM,CAAC,MAAM,SAAS,GAAkB,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEzE,uHAAuH;AACvH,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,2BAA2B,CAAC,CAAS;IAC5C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,MAAM;IACF,CAAC,GAAG,EAAE,CAAC;IACP,CAAC,GAAG,CAAC,CAAC;IAEd,IAAI,CAAC,IAA+B;QAClC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,CAAC;QACxE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAEO,UAAU;QAChB,MAAM,CAAC,GAA4B,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc;QACxB,SAAS,CAAC;YACR,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;gBAAE,OAAO,CAAC,CAAC,CAAC,aAAa;YACpD,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,CAAC;YACX,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB;YACjD,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B;YAClG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc;YACxB,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC5B,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,6CAA6C;gBACjE,OAAO,CAAC,CAAC;YACX,CAAC;YACD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,4DAA4D;gBAC5D,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;gBACnB,IAAI,CAAC,EAAE,EAAE,CAAC;gBACV,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC5D,IAAI,CAAC,CAAC,EAAE,CAAC;oBACT,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;oBAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACtE,OAAO,CAAC,CAAC;YACX,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,0BAA0B;QACnG,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,EAAE,GAAc,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc;QACxB,SAAS,CAAC;YACR,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,yCAAyC;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,yCAAyC;gBACzC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACV,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;oBAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACzG,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,IAAI,CAAC,CAAC,EAAE,CAAC;iBACjE,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;;gBACzC,OAAO,EAAE,CAAC,CAAC,sCAAsC;QACxD,CAAC;IACH,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAEO,UAAU,CAAC,SAAiB;QAClC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB;QAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,GAAG,EAAE,CAAC;gBACR,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClB,GAAG,GAAG,KAAK,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,KAAK,IAAI;gBAAE,GAAG,GAAG,IAAI,CAAC;iBAC7B,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;;gBAC/B,EAAE,IAAI,CAAC,CAAC;QACf,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,4CAA4C;IACzD,CAAC;IAEO,cAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,oCAAoC;IAClF,CAAC;IAEO,EAAE;QACR,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IACjF,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,GAAG;YACN,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,OAAO,IAAI,CAAC;QACd;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CAAC,IAA+B;IACtD,OAAO,IAAI,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** First balanced {...}; if none closes, first '{' to end; null if no '{'. */
|
|
2
|
+
export declare function locateJson(text: string | null | undefined): string | null;
|
|
3
|
+
/** Span of <root>...</root>; if close absent, opener to end; null if no opener. */
|
|
4
|
+
export declare function locateXml(text: string | null | undefined, rootName: string | null | undefined, caseInsensitive: boolean): string | null;
|
|
5
|
+
//# sourceMappingURL=locate.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Stages 2-3: isolate and select the payload root span.
|
|
2
|
+
// Selection rule: first-closed-else-first-open. Mirrors Java Locate.
|
|
3
|
+
/** Escape regex metacharacters (equivalent of Java Pattern.quote). */
|
|
4
|
+
function quote(s) {
|
|
5
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
6
|
+
}
|
|
7
|
+
/** First balanced {...}; if none closes, first '{' to end; null if no '{'. */
|
|
8
|
+
export function locateJson(text) {
|
|
9
|
+
if (text == null)
|
|
10
|
+
return null;
|
|
11
|
+
let firstOpen = -1;
|
|
12
|
+
for (let i = 0; i < text.length; i++) {
|
|
13
|
+
if (text.charAt(i) === "{") {
|
|
14
|
+
if (firstOpen < 0)
|
|
15
|
+
firstOpen = i;
|
|
16
|
+
const end = scanBalanced(text, i);
|
|
17
|
+
if (end >= 0)
|
|
18
|
+
return text.substring(i, end + 1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return firstOpen < 0 ? null : text.substring(firstOpen);
|
|
22
|
+
}
|
|
23
|
+
/** Returns index of the matching '}', or -1 if unterminated. String-aware. */
|
|
24
|
+
function scanBalanced(s, open) {
|
|
25
|
+
let depth = 0;
|
|
26
|
+
let inStr = false;
|
|
27
|
+
let esc = false;
|
|
28
|
+
for (let i = open; i < s.length; i++) {
|
|
29
|
+
const c = s.charAt(i);
|
|
30
|
+
if (inStr) {
|
|
31
|
+
if (esc)
|
|
32
|
+
esc = false;
|
|
33
|
+
else if (c === "\\")
|
|
34
|
+
esc = true;
|
|
35
|
+
else if (c === '"')
|
|
36
|
+
inStr = false;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (c === '"')
|
|
40
|
+
inStr = true;
|
|
41
|
+
else if (c === "{")
|
|
42
|
+
depth++;
|
|
43
|
+
else if (c === "}") {
|
|
44
|
+
depth--;
|
|
45
|
+
if (depth === 0)
|
|
46
|
+
return i;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return -1;
|
|
50
|
+
}
|
|
51
|
+
/** Span of <root>...</root>; if close absent, opener to end; null if no opener. */
|
|
52
|
+
export function locateXml(text, rootName, caseInsensitive) {
|
|
53
|
+
if (text == null || rootName == null)
|
|
54
|
+
return null;
|
|
55
|
+
const flags = caseInsensitive ? "i" : "";
|
|
56
|
+
const open = new RegExp(`<${quote(rootName)}(\\s[^>]*)?>`, flags).exec(text);
|
|
57
|
+
if (open == null)
|
|
58
|
+
return null;
|
|
59
|
+
const start = open.index;
|
|
60
|
+
const openEnd = open.index + open[0].length;
|
|
61
|
+
const closeRe = new RegExp(`</${quote(rootName)}\\s*>`, flags);
|
|
62
|
+
closeRe.lastIndex = openEnd;
|
|
63
|
+
// Search for the close tag at-or-after the opener's end (Java close.find(open.end())).
|
|
64
|
+
const close = matchFrom(closeRe, text, openEnd);
|
|
65
|
+
if (close != null)
|
|
66
|
+
return text.substring(start, close.index + close[0].length);
|
|
67
|
+
return text.substring(start);
|
|
68
|
+
}
|
|
69
|
+
/** Find the first regex match at index >= `from` (emulates Java Matcher.find(int)). */
|
|
70
|
+
function matchFrom(re, text, from) {
|
|
71
|
+
const g = new RegExp(re.source, re.flags.includes("g") ? re.flags : re.flags + "g");
|
|
72
|
+
g.lastIndex = from;
|
|
73
|
+
return g.exec(text);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=locate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/recover/locate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function asString(d: Record<string, unknown>, k: string): string | null;
|
|
2
|
+
export declare function asInt(d: Record<string, unknown>, k: string): number | null;
|
|
3
|
+
export declare function asLong(d: Record<string, unknown>, k: string): number | null;
|
|
4
|
+
export declare function asDouble(d: Record<string, unknown>, k: string): number | null;
|
|
5
|
+
export declare function asBool(d: Record<string, unknown>, k: string): boolean | null;
|
|
6
|
+
export declare function asStringList(d: Record<string, unknown>, k: string): (string | null)[] | null;
|
|
7
|
+
//# sourceMappingURL=recover-map.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Null-safe coercions from a RecoverOutcome data map onto typed values. Generated
|
|
2
|
+
// recover(...) calls these. Mirrors Java RecoverMap.
|
|
3
|
+
//
|
|
4
|
+
// Tier-2 divergence: JS has one number type, so asInt/asLong both return `number | null`
|
|
5
|
+
// and truncate toward zero via Math.trunc (Java intValue()/longValue() also truncate).
|
|
6
|
+
// The numeric helpers gate on actual numbers (mirroring Java `instanceof Number`): a
|
|
7
|
+
// non-numeric string or a boolean returns null rather than coercing.
|
|
8
|
+
export function asString(d, k) {
|
|
9
|
+
const v = d[k];
|
|
10
|
+
if (v == null)
|
|
11
|
+
return null;
|
|
12
|
+
return typeof v === "string" ? v : String(v);
|
|
13
|
+
}
|
|
14
|
+
export function asInt(d, k) {
|
|
15
|
+
const v = d[k];
|
|
16
|
+
return typeof v === "number" && Number.isFinite(v) ? Math.trunc(v) : null;
|
|
17
|
+
}
|
|
18
|
+
export function asLong(d, k) {
|
|
19
|
+
const v = d[k];
|
|
20
|
+
return typeof v === "number" && Number.isFinite(v) ? Math.trunc(v) : null;
|
|
21
|
+
}
|
|
22
|
+
export function asDouble(d, k) {
|
|
23
|
+
const v = d[k];
|
|
24
|
+
return typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
25
|
+
}
|
|
26
|
+
export function asBool(d, k) {
|
|
27
|
+
const v = d[k];
|
|
28
|
+
return typeof v === "boolean" ? v : null;
|
|
29
|
+
}
|
|
30
|
+
export function asStringList(d, k) {
|
|
31
|
+
const v = d[k];
|
|
32
|
+
if (!Array.isArray(v))
|
|
33
|
+
return null;
|
|
34
|
+
return v.map((e) => (e == null ? null : typeof e === "string" ? e : String(e)));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=recover-map.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RecoverOptions, RecoverOutcome, RecoverSchema } from "./types.js";
|
|
2
|
+
/** The forgiving entry point: recover dirty `text` against `schema`. Never throws. */
|
|
3
|
+
export declare function recover(text: string | null | undefined, schema: RecoverSchema, opts?: Partial<RecoverOptions> | null): RecoverOutcome;
|
|
4
|
+
//# sourceMappingURL=recover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recover.d.ts","sourceRoot":"","sources":["../../src/recover/recover.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAa,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ3F,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,cAAc,CA0BhB"}
|