@metaobjectsdev/render 0.9.0-rc.1 → 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.
Files changed (65) hide show
  1. package/dist/extract/coerce.js +17 -8
  2. package/dist/extract/coerce.js.map +1 -1
  3. package/dist/extract/extract.d.ts.map +1 -1
  4. package/dist/extract/extract.js +35 -9
  5. package/dist/extract/extract.js.map +1 -1
  6. package/dist/extract/json-forgiving-reader.d.ts +7 -0
  7. package/dist/extract/json-forgiving-reader.d.ts.map +1 -1
  8. package/dist/extract/json-forgiving-reader.js +12 -1
  9. package/dist/extract/json-forgiving-reader.js.map +1 -1
  10. package/dist/extract/types.d.ts +19 -0
  11. package/dist/extract/types.d.ts.map +1 -1
  12. package/dist/extract/types.js +9 -1
  13. package/dist/extract/types.js.map +1 -1
  14. package/dist/extract/xml-forgiving-reader.d.ts +10 -0
  15. package/dist/extract/xml-forgiving-reader.d.ts.map +1 -1
  16. package/dist/extract/xml-forgiving-reader.js +96 -11
  17. package/dist/extract/xml-forgiving-reader.js.map +1 -1
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/recover/coerce.d.ts +5 -0
  23. package/dist/recover/coerce.d.ts.map +1 -0
  24. package/dist/recover/coerce.js +124 -0
  25. package/dist/recover/coerce.js.map +1 -0
  26. package/dist/recover/json-forgiving-reader.d.ts +5 -0
  27. package/dist/recover/json-forgiving-reader.d.ts.map +1 -0
  28. package/dist/recover/json-forgiving-reader.js +178 -0
  29. package/dist/recover/json-forgiving-reader.js.map +1 -0
  30. package/dist/recover/locate.d.ts +5 -0
  31. package/dist/recover/locate.d.ts.map +1 -0
  32. package/dist/recover/locate.js +75 -0
  33. package/dist/recover/locate.js.map +1 -0
  34. package/dist/recover/recover-map.d.ts +7 -0
  35. package/dist/recover/recover-map.d.ts.map +1 -0
  36. package/dist/recover/recover-map.js +36 -0
  37. package/dist/recover/recover-map.js.map +1 -0
  38. package/dist/recover/recover.d.ts +4 -0
  39. package/dist/recover/recover.d.ts.map +1 -0
  40. package/dist/recover/recover.js +115 -0
  41. package/dist/recover/recover.js.map +1 -0
  42. package/dist/recover/strip.d.ts +2 -0
  43. package/dist/recover/strip.d.ts.map +1 -0
  44. package/dist/recover/strip.js +17 -0
  45. package/dist/recover/strip.js.map +1 -0
  46. package/dist/recover/types.d.ts +117 -0
  47. package/dist/recover/types.d.ts.map +1 -0
  48. package/dist/recover/types.js +124 -0
  49. package/dist/recover/types.js.map +1 -0
  50. package/dist/recover/xml-forgiving-reader.d.ts +2 -0
  51. package/dist/recover/xml-forgiving-reader.d.ts.map +1 -0
  52. package/dist/recover/xml-forgiving-reader.js +79 -0
  53. package/dist/recover/xml-forgiving-reader.js.map +1 -0
  54. package/dist/verify.d.ts +24 -0
  55. package/dist/verify.d.ts.map +1 -1
  56. package/dist/verify.js +21 -5
  57. package/dist/verify.js.map +1 -1
  58. package/package.json +32 -21
  59. package/src/extract/coerce.ts +17 -8
  60. package/src/extract/extract.ts +35 -11
  61. package/src/extract/json-forgiving-reader.ts +12 -2
  62. package/src/extract/types.ts +24 -1
  63. package/src/extract/xml-forgiving-reader.ts +99 -12
  64. package/src/index.ts +4 -0
  65. package/src/verify.ts +37 -11
@@ -0,0 +1,115 @@
1
+ // Public entry point. Runs the staged pipeline; NEVER throws. Mirrors Java Recover.
2
+ import { Format, FieldKind, FieldRecovery, Tolerance, normalizeOptions, } from "./types.js";
3
+ import { RecoveryReport } 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, MALFORMED } from "./coerce.js";
9
+ /** The forgiving entry point: recover dirty `text` against `schema`. Never throws. */
10
+ export function recover(text, schema, opts) {
11
+ const o = normalizeOptions(opts);
12
+ const report = new RecoveryReport();
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
+ extract(schema.fields, raw, "", data, report, o, ci);
31
+ return { data, report };
32
+ }
33
+ function extract(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
+ report.set(path, f.required ? FieldRecovery.LOST_REQUIRED : FieldRecovery.LOST_OPTIONAL);
39
+ continue;
40
+ }
41
+ if (present === TRUNCATED) {
42
+ // present-but-garbled (empty/cut-off value)
43
+ report.set(path, FieldRecovery.MALFORMED);
44
+ continue;
45
+ }
46
+ if (f.array) {
47
+ // An array field: a single non-list value is treated as a one-element array
48
+ // (e.g. a single repeated-XML tag). Each element is coerced/recursed independently.
49
+ const elements = Array.isArray(present) ? present : [present];
50
+ const out = [];
51
+ let anyMalformed = false;
52
+ for (let idx = 0; idx < elements.length; idx++) {
53
+ const v = extractValue(f, elements[idx], `${path}[${idx}]`, report, o, ci);
54
+ if (v === MALFORMED)
55
+ anyMalformed = true;
56
+ else
57
+ out.push(v);
58
+ }
59
+ // Cross-port contract: a MALFORMED array still places its successfully-coerced
60
+ // elements into data (partial recovery), UNLIKE a MALFORMED scalar which is absent.
61
+ data[f.name] = out;
62
+ report.set(path, anyMalformed ? FieldRecovery.MALFORMED : FieldRecovery.RECOVERED);
63
+ continue;
64
+ }
65
+ if (Array.isArray(present)) {
66
+ // a list where a singular value was expected
67
+ report.set(path, FieldRecovery.MALFORMED);
68
+ continue;
69
+ }
70
+ const v = extractValue(f, present, path, report, o, ci);
71
+ if (v === MALFORMED) {
72
+ report.set(path, FieldRecovery.MALFORMED);
73
+ }
74
+ else {
75
+ data[f.name] = v;
76
+ report.set(path, FieldRecovery.RECOVERED);
77
+ }
78
+ }
79
+ }
80
+ /** Coerce one (non-array) element: nested-object recursion or scalar coercion. Returns MALFORMED on failure. */
81
+ function extractValue(f, present, path, report, o, ci) {
82
+ if (f.kind === FieldKind.OBJECT) {
83
+ if (f.nested != null && isPlainObject(present)) {
84
+ const nestedData = {};
85
+ extract(f.nested.fields, present, path, nestedData, report, o, ci);
86
+ return nestedData;
87
+ }
88
+ return MALFORMED; // object expected but scalar/non-map present
89
+ }
90
+ const rawStr = typeof present === "string" ? present : stringifyScalar(present);
91
+ return coerceValue(rawStr, f, o, path, report);
92
+ }
93
+ /** Case-folding lookup honoring tolerance. Returns `undefined` for absent (mirrors Java null). */
94
+ function lookup(raw, name, ci) {
95
+ if (Object.prototype.hasOwnProperty.call(raw, name))
96
+ return raw[name];
97
+ if (ci) {
98
+ const lower = name.toLowerCase();
99
+ for (const k of Object.keys(raw))
100
+ if (k.toLowerCase() === lower)
101
+ return raw[k];
102
+ }
103
+ return undefined;
104
+ }
105
+ function isPlainObject(o) {
106
+ return typeof o === "object" && o !== null && !Array.isArray(o);
107
+ }
108
+ function isEmptyRecord(o) {
109
+ return Object.keys(o).length === 0;
110
+ }
111
+ /** Mirror Java String.valueOf for non-string forgiving-reader scalars. */
112
+ function stringifyScalar(v) {
113
+ return String(v);
114
+ }
115
+ //# sourceMappingURL=recover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recover.js","sourceRoot":"","sources":["../../src/recover/recover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function strip(raw: string | null | undefined): string;
2
+ //# sourceMappingURL=strip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip.d.ts","sourceRoot":"","sources":["../../src/recover/strip.ts"],"names":[],"mappings":"AAMA,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAU5D"}
@@ -0,0 +1,17 @@
1
+ // Stage 1: remove markdown code-fence markers. Prose around the payload is left for Locate.
2
+ // Mirrors Java Strip.
3
+ // Captures the body inside a fenced block; optional language tag (json/xml/etc) is dropped.
4
+ const FENCE = /```[a-zA-Z0-9_-]*\s*\r?\n([\s\S]*?)\r?\n?```/;
5
+ export function strip(raw) {
6
+ if (raw == null)
7
+ return "";
8
+ const m = FENCE.exec(raw);
9
+ if (m && m.index >= 0) {
10
+ const before = raw.substring(0, m.index);
11
+ const body = m[1] ?? "";
12
+ const after = raw.substring(m.index + m[0].length);
13
+ return (before + body + after).trim();
14
+ }
15
+ return raw.trim();
16
+ }
17
+ //# sourceMappingURL=strip.js.map
@@ -0,0 +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"}
@@ -0,0 +1,117 @@
1
+ /** Output format the dirty text claims to be. Corpus schema.json uses "JSON"/"XML". */
2
+ export declare const Format: {
3
+ readonly JSON: "JSON";
4
+ readonly XML: "XML";
5
+ };
6
+ export type Format = (typeof Format)[keyof typeof Format];
7
+ /** The coercion target kinds the engine understands. OBJECT = nested RecoverSchema. */
8
+ export declare const FieldKind: {
9
+ readonly STRING: "STRING";
10
+ readonly INT: "INT";
11
+ readonly LONG: "LONG";
12
+ readonly DOUBLE: "DOUBLE";
13
+ readonly BOOLEAN: "BOOLEAN";
14
+ readonly ENUM: "ENUM";
15
+ readonly OBJECT: "OBJECT";
16
+ };
17
+ export type FieldKind = (typeof FieldKind)[keyof typeof FieldKind];
18
+ /**
19
+ * FROZEN cross-port per-field recovery classification. Do not reorder or add
20
+ * without an ADR. These string values are SERIALIZED in the conformance corpus.
21
+ */
22
+ export declare const FieldRecovery: {
23
+ readonly RECOVERED: "RECOVERED";
24
+ readonly DEFAULTED: "DEFAULTED";
25
+ readonly LOST_OPTIONAL: "LOST_OPTIONAL";
26
+ readonly LOST_REQUIRED: "LOST_REQUIRED";
27
+ readonly MALFORMED: "MALFORMED";
28
+ };
29
+ export type FieldRecovery = (typeof FieldRecovery)[keyof typeof FieldRecovery];
30
+ /**
31
+ * STRICT: case-sensitive, minimal repair. NORMAL: case-insensitive keys/tags
32
+ * (default). LOOSE: maximal repair (currently identical to NORMAL — reserved).
33
+ */
34
+ export declare const Tolerance: {
35
+ readonly STRICT: "STRICT";
36
+ readonly NORMAL: "NORMAL";
37
+ readonly LOOSE: "LOOSE";
38
+ };
39
+ export type Tolerance = (typeof Tolerance)[keyof typeof Tolerance];
40
+ /** A recorded normalization/coercion. kind e.g. "alias", "clamp", "case", "runtime-alias-override". */
41
+ export interface Coercion {
42
+ readonly fieldPath: string;
43
+ readonly from: string;
44
+ readonly to: string;
45
+ readonly kind: string;
46
+ }
47
+ /**
48
+ * One field's recover descriptor. enumValues/enumAlias non-null only for ENUM;
49
+ * min/max non-null only for numeric range constraints; nested non-null only for OBJECT.
50
+ */
51
+ export interface FieldSpec {
52
+ readonly name: string;
53
+ readonly kind: FieldKind;
54
+ readonly required: boolean;
55
+ readonly array: boolean;
56
+ readonly enumValues: readonly string[] | null;
57
+ readonly enumAlias: Readonly<Record<string, string>> | null;
58
+ readonly min: number | null;
59
+ readonly max: number | null;
60
+ readonly nested: RecoverSchema | null;
61
+ }
62
+ export declare function scalar(name: string, kind: FieldKind, required: boolean): FieldSpec;
63
+ export declare function enumField(name: string, required: boolean, values: readonly string[] | null, aliases: Readonly<Record<string, string>> | null): FieldSpec;
64
+ export declare function range(name: string, kind: FieldKind, required: boolean, min: number | null, max: number | null): FieldSpec;
65
+ export declare function object(name: string, required: boolean, array: boolean, nested: RecoverSchema | null): FieldSpec;
66
+ /** Top-level recover descriptor. rootName = the XML root tag / logical JSON root name. */
67
+ export interface RecoverSchema {
68
+ readonly format: Format;
69
+ readonly rootName: string;
70
+ readonly fields: readonly FieldSpec[];
71
+ }
72
+ export declare function recoverSchema(format: Format, rootName: string, fields: readonly FieldSpec[] | null): RecoverSchema;
73
+ /**
74
+ * ctx carries the field path and the FieldSpec; return null to fall through to
75
+ * default coercion. The single bespoke-coercion hook (the bounded "20%").
76
+ */
77
+ export type OnField = (fieldPath: string, rawValue: string, spec: FieldSpec) => unknown | null;
78
+ /**
79
+ * Bounded runtime override surface. aliases/normalizers are MERGED with the
80
+ * schema's, runtime winning on key conflict. onField is the single hook.
81
+ */
82
+ export interface RecoverOptions {
83
+ readonly tolerance: Tolerance;
84
+ readonly aliases: Readonly<Record<string, string>>;
85
+ readonly normalizers: Readonly<Record<string, (raw: string) => unknown | null>>;
86
+ readonly onField: OnField | null;
87
+ }
88
+ export declare function defaults(): RecoverOptions;
89
+ /** Normalize a partial / undefined options bag into a complete RecoverOptions. */
90
+ export declare function normalizeOptions(opts?: Partial<RecoverOptions> | null): RecoverOptions;
91
+ /** Engine return. data is a forgiving record; Phase-2 codegen wraps it into a typed RecoveryResult<T>. */
92
+ export interface RecoverOutcome {
93
+ readonly data: Record<string, unknown>;
94
+ readonly report: RecoveryReport;
95
+ }
96
+ /** Typed result of a generated recover(...): best-effort value (null where lost/malformed) + report. */
97
+ export interface RecoveryResult<T> {
98
+ readonly data: T | null;
99
+ readonly report: RecoveryReport;
100
+ }
101
+ /** Mutable accumulator of per-field recovery classification, the degenerate-response flag, and coercion notes. */
102
+ export declare class RecoveryReport {
103
+ private readonly _states;
104
+ private readonly _coercions;
105
+ private _empty;
106
+ set(fieldPath: string, state: FieldRecovery): void;
107
+ addCoercion(c: Coercion): void;
108
+ markEmpty(): void;
109
+ isEmpty(): boolean;
110
+ states(): ReadonlyMap<string, FieldRecovery>;
111
+ coercions(): readonly Coercion[];
112
+ lostRequired(): string[];
113
+ malformed(): string[];
114
+ hasLostRequired(): boolean;
115
+ private byState;
116
+ }
117
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/recover/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ // FR-010 recover engine — types & model (Tier-2 idiomatic TS port).
2
+ //
3
+ // Cross-port REFERENCE is the Java engine
4
+ // (server/java/render/.../recover/). This file ports the Java records/enums to
5
+ // idiomatic TS: enums become string-union `as const` objects (values match the
6
+ // corpus / Java enum names exactly), records become readonly interfaces +
7
+ // factory functions, and the mutable RecoveryReport is a class.
8
+ /** Output format the dirty text claims to be. Corpus schema.json uses "JSON"/"XML". */
9
+ export const Format = {
10
+ JSON: "JSON",
11
+ XML: "XML",
12
+ };
13
+ /** The coercion target kinds the engine understands. OBJECT = nested RecoverSchema. */
14
+ export const FieldKind = {
15
+ STRING: "STRING",
16
+ INT: "INT",
17
+ LONG: "LONG",
18
+ DOUBLE: "DOUBLE",
19
+ BOOLEAN: "BOOLEAN",
20
+ ENUM: "ENUM",
21
+ OBJECT: "OBJECT",
22
+ };
23
+ /**
24
+ * FROZEN cross-port per-field recovery classification. Do not reorder or add
25
+ * without an ADR. These string values are SERIALIZED in the conformance corpus.
26
+ */
27
+ export const FieldRecovery = {
28
+ RECOVERED: "RECOVERED",
29
+ // DEFAULTED is reserved (a future @default-backed value); the engine does not emit it yet.
30
+ DEFAULTED: "DEFAULTED",
31
+ LOST_OPTIONAL: "LOST_OPTIONAL",
32
+ LOST_REQUIRED: "LOST_REQUIRED",
33
+ MALFORMED: "MALFORMED",
34
+ };
35
+ /**
36
+ * STRICT: case-sensitive, minimal repair. NORMAL: case-insensitive keys/tags
37
+ * (default). LOOSE: maximal repair (currently identical to NORMAL — reserved).
38
+ */
39
+ export const Tolerance = {
40
+ STRICT: "STRICT",
41
+ NORMAL: "NORMAL",
42
+ LOOSE: "LOOSE",
43
+ };
44
+ export function scalar(name, kind, required) {
45
+ return { name, kind, required, array: false, enumValues: null, enumAlias: null, min: null, max: null, nested: null };
46
+ }
47
+ export function enumField(name, required, values, aliases) {
48
+ return {
49
+ name,
50
+ kind: FieldKind.ENUM,
51
+ required,
52
+ array: false,
53
+ enumValues: values == null ? null : [...values],
54
+ enumAlias: aliases == null ? {} : { ...aliases },
55
+ min: null,
56
+ max: null,
57
+ nested: null,
58
+ };
59
+ }
60
+ export function range(name, kind, required, min, max) {
61
+ return { name, kind, required, array: false, enumValues: null, enumAlias: null, min, max, nested: null };
62
+ }
63
+ export function object(name, required, array, nested) {
64
+ return { name, kind: FieldKind.OBJECT, required, array, enumValues: null, enumAlias: null, min: null, max: null, nested };
65
+ }
66
+ export function recoverSchema(format, rootName, fields) {
67
+ return { format, rootName, fields: fields == null ? [] : [...fields] };
68
+ }
69
+ export function defaults() {
70
+ return { tolerance: Tolerance.NORMAL, aliases: {}, normalizers: {}, onField: null };
71
+ }
72
+ /** Normalize a partial / undefined options bag into a complete RecoverOptions. */
73
+ export function normalizeOptions(opts) {
74
+ if (opts == null)
75
+ return defaults();
76
+ return {
77
+ tolerance: opts.tolerance ?? Tolerance.NORMAL,
78
+ aliases: opts.aliases == null ? {} : { ...opts.aliases },
79
+ normalizers: opts.normalizers == null ? {} : { ...opts.normalizers },
80
+ onField: opts.onField ?? null,
81
+ };
82
+ }
83
+ /** Mutable accumulator of per-field recovery classification, the degenerate-response flag, and coercion notes. */
84
+ export class RecoveryReport {
85
+ // Insertion-ordered (Map preserves insertion order, mirroring Java LinkedHashMap).
86
+ _states = new Map();
87
+ _coercions = [];
88
+ _empty = false;
89
+ set(fieldPath, state) {
90
+ this._states.set(fieldPath, state);
91
+ }
92
+ addCoercion(c) {
93
+ this._coercions.push(c);
94
+ }
95
+ markEmpty() {
96
+ this._empty = true;
97
+ }
98
+ isEmpty() {
99
+ return this._empty;
100
+ }
101
+ states() {
102
+ return new Map(this._states);
103
+ }
104
+ coercions() {
105
+ return [...this._coercions];
106
+ }
107
+ lostRequired() {
108
+ return this.byState(FieldRecovery.LOST_REQUIRED);
109
+ }
110
+ malformed() {
111
+ return this.byState(FieldRecovery.MALFORMED);
112
+ }
113
+ hasLostRequired() {
114
+ return this.lostRequired().length > 0;
115
+ }
116
+ byState(s) {
117
+ const out = [];
118
+ for (const [k, v] of this._states)
119
+ if (v === s)
120
+ out.push(k);
121
+ return out;
122
+ }
123
+ }
124
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recover/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function readXml(span: string | null | undefined, caseInsensitive: boolean): Record<string, unknown>;
2
+ //# sourceMappingURL=xml-forgiving-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-forgiving-reader.d.ts","sourceRoot":"","sources":["../../src/recover/xml-forgiving-reader.ts"],"names":[],"mappings":"AAgBA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAS1G"}
@@ -0,0 +1,79 @@
1
+ // Stage-4 tolerant XML reader for the bounded corpus malformation set. Never throws.
2
+ // Mirrors Java XmlForgivingReader. Must not index-out-of-range on a leading close tag.
3
+ function quote(s) {
4
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
5
+ }
6
+ /** Find first regex match at index >= `from` (emulates Java Matcher.find(int)). */
7
+ function matchFrom(source, flags, text, from) {
8
+ const g = new RegExp(source, flags.includes("g") ? flags : flags + "g");
9
+ g.lastIndex = from;
10
+ return g.exec(text);
11
+ }
12
+ const OPEN_TAG_SRC = "<([A-Za-z_][A-Za-z0-9_]*)(\\s[^>]*)?>";
13
+ export function readXml(span, caseInsensitive) {
14
+ const out = {};
15
+ if (span == null || span.trim().length === 0)
16
+ return out;
17
+ const gt = span.indexOf(">");
18
+ if (gt < 0)
19
+ return out;
20
+ const rootEnd = span.lastIndexOf("</");
21
+ const inner = span.substring(gt + 1, rootEnd < 0 || rootEnd <= gt ? span.length : rootEnd);
22
+ parseChildren(inner, caseInsensitive, out);
23
+ return out;
24
+ }
25
+ function parseChildren(inner, ci, out) {
26
+ const flags = ci ? "i" : "";
27
+ let pos = 0;
28
+ for (;;) {
29
+ const m = matchFrom(OPEN_TAG_SRC, flags, inner, pos);
30
+ if (m == null)
31
+ break;
32
+ const tag = m[1] ?? "";
33
+ const key = ci ? tag.toLowerCase() : tag;
34
+ const contentStart = m.index + m[0].length;
35
+ const closeRe = `</${quote(tag)}\\s*>`;
36
+ const close = matchFrom(closeRe, flags, inner, contentStart);
37
+ let contentEnd;
38
+ let next;
39
+ if (close != null) {
40
+ contentEnd = close.index;
41
+ next = close.index + close[0].length;
42
+ }
43
+ else {
44
+ // unclosed tag: recover text up to the next sibling open tag
45
+ const sib = matchFrom(OPEN_TAG_SRC, flags, inner, contentStart);
46
+ if (sib != null) {
47
+ contentEnd = sib.index;
48
+ next = contentEnd;
49
+ }
50
+ else {
51
+ contentEnd = inner.length;
52
+ next = inner.length;
53
+ }
54
+ }
55
+ const content = inner.substring(contentStart, contentEnd);
56
+ const value = content.includes("<") ? nestedOrText(content, ci) : content.trim();
57
+ accumulate(out, key, value);
58
+ pos = next;
59
+ }
60
+ }
61
+ function nestedOrText(content, ci) {
62
+ const nested = {};
63
+ parseChildren(content, ci, nested);
64
+ return Object.keys(nested).length === 0 ? content.trim() : nested;
65
+ }
66
+ function accumulate(out, key, value) {
67
+ if (!Object.prototype.hasOwnProperty.call(out, key)) {
68
+ out[key] = value;
69
+ return;
70
+ }
71
+ const existing = out[key];
72
+ if (Array.isArray(existing)) {
73
+ existing.push(value);
74
+ }
75
+ else {
76
+ out[key] = [existing, value];
77
+ }
78
+ }
79
+ //# sourceMappingURL=xml-forgiving-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-forgiving-reader.js","sourceRoot":"","sources":["../../src/recover/xml-forgiving-reader.ts"],"names":[],"mappings":"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"}
package/dist/verify.d.ts CHANGED
@@ -33,6 +33,30 @@ export interface VerifyOptions {
33
33
  */
34
34
  requiredTags?: string[];
35
35
  }
36
+ /**
37
+ * The context stack — innermost context last, mirroring Mustache lookup order.
38
+ * Generic over the field node so consumers (e.g. the docs annotator) can resolve
39
+ * an ENRICHED field tree (carrying owner/type metadata) through the EXACT same
40
+ * walk verify uses, guaranteeing the two surfaces agree.
41
+ */
42
+ export type ResolveStack<F extends PayloadField = PayloadField> = readonly F[][];
43
+ /**
44
+ * Resolve a (possibly dotted) variable path the way Mustache does: the FIRST
45
+ * segment is looked up through the context stack (innermost → outermost); each
46
+ * remaining segment is a direct descent into the resolved field's `fields`.
47
+ * Returns the resolved field, or undefined if any segment is missing.
48
+ *
49
+ * EXPORTED so the docs annotator can share this ONE resolution (annotator ⇆
50
+ * verify must agree). Generic over the node type: an enriched tree resolves the
51
+ * same way, since only `name`/`fields` drive the walk.
52
+ */
53
+ export declare function resolveTemplateVariable<F extends PayloadField>(stack: ResolveStack<F>, path: string): F | undefined;
54
+ /**
55
+ * Parse a template into Mustache tokens (`[type, value, start, end, subTokens?]`),
56
+ * the SAME parse verify walks. Exported so the docs annotator tokenizes through
57
+ * one parser (no divergent re-tokenization). Returns a readonly token list.
58
+ */
59
+ export declare function parseTemplate(text: string): readonly (readonly unknown[])[];
36
60
  /**
37
61
  * Walk a Mustache template's tokens against a payload field tree, returning a
38
62
  * list of drift errors. Context-sensitive: a section `{{#posts}}…{{/posts}}`
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAyDD;;;;GAIG;AACH,wBAAgB,MAAM,CACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EAAE,EACtB,IAAI,CAAC,EAAE,aAAa,GACnB,WAAW,EAAE,CAuFf"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAMD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;AAMjF;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,YAAY,EAC5D,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,SAAS,CAcf;AASD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAE3E;AAsBD;;;;GAIG;AACH,wBAAgB,MAAM,CACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EAAE,EACtB,IAAI,CAAC,EAAE,aAAa,GACnB,WAAW,EAAE,CAuFf"}
package/dist/verify.js CHANGED
@@ -21,11 +21,17 @@ const MAX_DEPTH = 32;
21
21
  function find(fields, name) {
22
22
  return fields.find((f) => f.name === name);
23
23
  }
24
- // Resolve a (possibly dotted) variable path the way Mustache does: the FIRST
25
- // segment is looked up through the context stack (innermost outermost); each
26
- // remaining segment is a direct descent into the resolved field's `fields`.
27
- // Returns the resolved field, or undefined if any segment is missing.
28
- function resolve(stack, path) {
24
+ /**
25
+ * Resolve a (possibly dotted) variable path the way Mustache does: the FIRST
26
+ * segment is looked up through the context stack (innermost → outermost); each
27
+ * remaining segment is a direct descent into the resolved field's `fields`.
28
+ * Returns the resolved field, or undefined if any segment is missing.
29
+ *
30
+ * EXPORTED so the docs annotator can share this ONE resolution (annotator ⇆
31
+ * verify must agree). Generic over the node type: an enriched tree resolves the
32
+ * same way, since only `name`/`fields` drive the walk.
33
+ */
34
+ export function resolveTemplateVariable(stack, path) {
29
35
  const segs = path.split(".");
30
36
  let current;
31
37
  for (let i = stack.length - 1; i >= 0; i--) {
@@ -40,9 +46,19 @@ function resolve(stack, path) {
40
46
  }
41
47
  return current;
42
48
  }
49
+ // Internal alias preserving the original call sites unchanged.
50
+ const resolve = resolveTemplateVariable;
43
51
  function parse(text) {
44
52
  return Mustache.parse(text);
45
53
  }
54
+ /**
55
+ * Parse a template into Mustache tokens (`[type, value, start, end, subTokens?]`),
56
+ * the SAME parse verify walks. Exported so the docs annotator tokenizes through
57
+ * one parser (no divergent re-tokenization). Returns a readonly token list.
58
+ */
59
+ export function parseTemplate(text) {
60
+ return parse(text);
61
+ }
46
62
  // An opening tag is `<tag` immediately followed by `>` or XML whitespace, so
47
63
  // attributes are allowed (`<answer foo="1">`) but a longer name is not over-matched
48
64
  // (`<answers>` does not satisfy `answer`).
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}