@pdf-testkit/core 0.4.0 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/diff/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAA8C,MAAM,cAAc,CAAC;AAExG,OAAO,KAAK,EAA4B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIhF;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,kBAAkB,EACxB,IAAI,GAAE,WAAgB,GACrB,UAAU,CAoRZ"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/diff/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAA8C,MAAM,cAAc,CAAC;AAExG,OAAO,KAAK,EAA4B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIhF;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,kBAAkB,EACxB,IAAI,GAAE,WAAgB,GACrB,UAAU,CAgTZ"}
package/dist/diff/diff.js CHANGED
@@ -173,6 +173,29 @@ export function diffSnapshots(baseline, next, opts = {}) {
173
173
  }
174
174
  }
175
175
  }
176
+ // Opt-in content diff. A matched pair whose text differs is a content edit
177
+ // at a stable slot — the "wrong total" case structural diffing otherwise
178
+ // stays silent on (the pair keeps its slot, so no geometry event fires).
179
+ // Narrow by inheritance: only PAIRED nodes reach here, so added/removed
180
+ // content is already `element-added`/`element-removed`, never reclassified.
181
+ if (opts.contentChanges &&
182
+ base.normText !== after.normText &&
183
+ (base.normText != null || after.normText != null)) {
184
+ events.push({
185
+ type: 'element-content-changed',
186
+ severity: severityOf('element-content-changed'),
187
+ confidence: conf,
188
+ nodeId: after.id,
189
+ baseNodeId: base.id,
190
+ role: after.role,
191
+ pageIndex: after.pageIndex,
192
+ fromBBox: base.bbox,
193
+ toBBox: after.bbox,
194
+ fromTextPreview: textPreview(base.text),
195
+ toTextPreview: textPreview(after.text),
196
+ message: `${after.role} content changed "${textPreview(base.text)}" → "${textPreview(after.text)}" on page ${after.pageIndex + 1}`,
197
+ });
198
+ }
176
199
  if (base.role === 'heading' && after.role === 'heading' && base.headingLevel !== after.headingLevel) {
177
200
  // A heading level the extractor INFERRED (confidence < 1: the pdfjs
178
201
  // path) is a heuristic, and a heuristic must not block a merge on its
@@ -185,6 +208,8 @@ export function diffSnapshots(baseline, next, opts = {}) {
185
208
  confidence: conf,
186
209
  nodeId: after.id,
187
210
  baseNodeId: base.id,
211
+ fromPage: base.pageIndex,
212
+ toPage: after.pageIndex,
188
213
  fromBBox: base.bbox,
189
214
  toBBox: after.bbox,
190
215
  textPreview: textPreview(after.text),
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/diff/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/diff/diff.ts"],"names":[],"mappings":"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"}
package/dist/events.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { BBox, NodeRole } from './types.js';
2
- export type SemanticEventType = 'page-count-changed' | 'element-moved-to-different-page' | 'table-moved' | 'table-resized' | 'heading-hierarchy-changed' | 'text-overflowed-container' | 'element-added' | 'element-removed' | 'element-moved' | 'element-resized' | 'uncharacterized-change';
2
+ export type SemanticEventType = 'page-count-changed' | 'element-moved-to-different-page' | 'table-moved' | 'table-resized' | 'heading-hierarchy-changed' | 'text-overflowed-container' | 'element-added' | 'element-removed' | 'element-moved' | 'element-resized' | 'element-content-changed' | 'uncharacterized-change';
3
3
  export type Severity = 'info' | 'warn' | 'error';
4
4
  export interface BaseEvent {
5
5
  type: SemanticEventType;
@@ -43,6 +43,28 @@ export interface ElementResizedEvent extends BaseEvent, PairedGeometry {
43
43
  widthDelta: number;
44
44
  heightDelta: number;
45
45
  }
46
+ /**
47
+ * The text at a stable slot changed — a matched pair whose content differs. This
48
+ * is the one thing structural diffing deliberately does NOT catch by default (a
49
+ * cell that keeps its slot matches, so no geometry event fires — the "wrong
50
+ * total" a spreadsheet-shaped PDF can ship silently). Opt-in via
51
+ * `DiffOptions.contentChanges`, `warn` severity: it is a real finding, but a
52
+ * content diff on a document that is *meant* to change its numbers every run
53
+ * would be pure noise if it failed a suite by default.
54
+ *
55
+ * It stays narrow by inheritance, not by a heuristic: it fires only on pairs the
56
+ * matcher already paired (same role, same slot), so added/removed content is
57
+ * `element-added`/`element-removed` and never reclassified here. A growing
58
+ * invoice's new rows do not become content edits; only its recomputed totals do.
59
+ */
60
+ export interface ElementContentChangedEvent extends BaseEvent, PairedGeometry {
61
+ type: 'element-content-changed';
62
+ nodeId: string;
63
+ role: NodeRole;
64
+ pageIndex: number;
65
+ fromTextPreview: string;
66
+ toTextPreview: string;
67
+ }
46
68
  export interface UncharacterizedChangeEvent extends BaseEvent {
47
69
  type: 'uncharacterized-change';
48
70
  /** Matched element pairs whose geometry differs (sub-threshold). */
@@ -88,6 +110,9 @@ export interface HeadingHierarchyChangedEvent extends BaseEvent, PairedGeometry
88
110
  type: 'heading-hierarchy-changed';
89
111
  nodeId: string;
90
112
  textPreview: string;
113
+ /** Where the heading is on each side; a consumer with only the event list needs this to find the boxes. */
114
+ fromPage: number;
115
+ toPage: number;
91
116
  fromLevel: number | null;
92
117
  toLevel: number | null;
93
118
  }
@@ -124,7 +149,7 @@ export interface ElementRemovedEvent extends BaseEvent {
124
149
  pageIndex: number;
125
150
  bbox: BBox;
126
151
  }
127
- export type SemanticEvent = PageCountChangedEvent | ElementMovedToPageEvent | TableMovedEvent | TableResizedEvent | HeadingHierarchyChangedEvent | TextOverflowedEvent | ElementAddedEvent | ElementRemovedEvent | ElementMovedEvent | ElementResizedEvent | UncharacterizedChangeEvent;
152
+ export type SemanticEvent = PageCountChangedEvent | ElementMovedToPageEvent | TableMovedEvent | TableResizedEvent | HeadingHierarchyChangedEvent | TextOverflowedEvent | ElementAddedEvent | ElementRemovedEvent | ElementMovedEvent | ElementResizedEvent | ElementContentChangedEvent | UncharacterizedChangeEvent;
128
153
  /** How much work a comparison did — reported, not interpreted. */
129
154
  export interface DiffStats {
130
155
  baselineNodes: number;
@@ -149,6 +174,13 @@ export interface DiffOptions {
149
174
  ignoreRoles?: NodeRole[];
150
175
  /** Drop events whose confidence is below this (0..1). Default 0. */
151
176
  minConfidence?: number;
177
+ /**
178
+ * Emit `element-content-changed` for matched pairs whose text differs.
179
+ * Off by default: structural diffing checks structure, not values, and a
180
+ * document meant to carry different numbers each run would fail on every diff.
181
+ * Turn it on to catch the wrong-total case. See {@link ElementContentChangedEvent}.
182
+ */
183
+ contentChanges?: boolean;
152
184
  }
153
185
  export declare const DEFAULT_SEVERITY: Record<SemanticEventType, Severity>;
154
186
  export declare const DEFAULT_POSITION_THRESHOLD_PTS = 24;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,iCAAiC,GACjC,aAAa,GACb,eAAe,GACf,2BAA2B,GAC3B,2BAA2B,GAC3B,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,wBAAwB,CAAC;AAE7B,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,SAAS;IACtD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS,EAAE,cAAc;IAClE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,SAAS,EAAE,cAAc;IACpE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA2B,SAAQ,SAAS;IAC3D,IAAI,EAAE,wBAAwB,CAAC;IAC/B,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAwB,SAAQ,SAAS,EAAE,cAAc;IACxE,IAAI,EAAE,iCAAiC,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,SAAS,EAAE,cAAc;IAChE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS,EAAE,cAAc;IAClE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA6B,SAAQ,SAAS,EAAE,cAAc;IAC7E,IAAI,EAAE,2BAA2B,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,2BAA2B,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,YAAY,EAAE,YAAY,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,IAAI,EAAE,IAAI,CAAC;IACX,oFAAoF;IACpF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,iBAAiB,CAAC;IACxB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,aAAa,GACrB,qBAAqB,GACrB,uBAAuB,GACvB,eAAe,GACf,iBAAiB,GACjB,4BAA4B,GAC5B,mBAAmB,GACnB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,mBAAmB,GACnB,0BAA0B,CAAC;AAE/B,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;IACzB,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAwBhE,CAAC;AAEF,eAAO,MAAM,8BAA8B,KAAK,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/events.js CHANGED
@@ -15,6 +15,11 @@ export const DEFAULT_SEVERITY = {
15
15
  // movement (a 112pt-taller container reported as "moved 56pt" on this
16
16
  // event's first CI run).
17
17
  'element-resized': 'warn',
18
+ // A text edit at a stable slot, surfaced only when `contentChanges` is on.
19
+ // warn, not error: it is opt-in already, and a suite that enables it on a
20
+ // document whose numbers legitimately change should see it without a red
21
+ // build unless the caller raises it via severityOverrides.
22
+ 'element-content-changed': 'warn',
18
23
  // The fallback channel: the content hash changed but no nameable event
19
24
  // fired. A diff that stays silent over changed content is the same
20
25
  // silent-failure shape this tool exists to expose — so the silence
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAkMA,MAAM,CAAC,MAAM,gBAAgB,GAAwC;IACnE,oBAAoB,EAAE,OAAO;IAC7B,2BAA2B,EAAE,OAAO;IACpC,2BAA2B,EAAE,OAAO;IACpC,iCAAiC,EAAE,MAAM;IACzC,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,MAAM;IACvB,eAAe,EAAE,MAAM;IACvB,iBAAiB,EAAE,MAAM;IACzB,0EAA0E;IAC1E,eAAe,EAAE,MAAM;IACvB,yEAAyE;IACzE,kEAAkE;IAClE,mEAAmE;IACnE,sEAAsE;IACtE,yBAAyB;IACzB,iBAAiB,EAAE,MAAM;IACzB,uEAAuE;IACvE,mEAAmE;IACnE,mEAAmE;IACnE,uEAAuE;IACvE,kEAAkE;IAClE,gEAAgE;IAChE,wBAAwB,EAAE,MAAM;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAqOA,MAAM,CAAC,MAAM,gBAAgB,GAAwC;IACnE,oBAAoB,EAAE,OAAO;IAC7B,2BAA2B,EAAE,OAAO;IACpC,2BAA2B,EAAE,OAAO;IACpC,iCAAiC,EAAE,MAAM;IACzC,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,MAAM;IACvB,eAAe,EAAE,MAAM;IACvB,iBAAiB,EAAE,MAAM;IACzB,0EAA0E;IAC1E,eAAe,EAAE,MAAM;IACvB,yEAAyE;IACzE,kEAAkE;IAClE,mEAAmE;IACnE,sEAAsE;IACtE,yBAAyB;IACzB,iBAAiB,EAAE,MAAM;IACzB,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,2DAA2D;IAC3D,yBAAyB,EAAE,MAAM;IACjC,uEAAuE;IACvE,mEAAmE;IACnE,mEAAmE;IACnE,uEAAuE;IACvE,kEAAkE;IAClE,gEAAgE;IAChE,wBAAwB,EAAE,MAAM;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"headings.d.ts","sourceRoot":"","sources":["../../../src/extract/pdfjs/headings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC;IACjC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC;CACvC;AAyBD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,YAAY,CA6BlE"}
1
+ {"version":3,"file":"headings.d.ts","sourceRoot":"","sources":["../../../src/extract/pdfjs/headings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC;IACjC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC;CACvC;AAsBD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,YAAY,CAmDlE"}
@@ -2,24 +2,21 @@ import { round1 } from '../../geometry.js';
2
2
  const HEADING_RATIO = 1.15;
3
3
  const BOLD_RATIO = 1.05;
4
4
  /**
5
- * Size ratio to the body baseline at which a run is H1..H5. A size-separated
6
- * run that clears none of these is H5; a weight-only heading is H6.
5
+ * Size ratio to the body baseline that puts a run in a band. Bands, not ranks
6
+ * among the sizes present: levels used to be ranks (the largest size seen was
7
+ * H1, the next H2, and so on), so every run's level depended on which other
8
+ * sizes the document happened to contain, and adding rows to a table (which
9
+ * changed what the table detector consumed, and so which sizes remained in
10
+ * the prose set) re-ranked unrelated text and fired heading-hierarchy-changed
11
+ * at error severity. Extraction-fidelity experiment, 2026-09-09, finding P2.
7
12
  *
8
- * Levels are ABSOLUTE bands, not ranks among the sizes present. They used to be
9
- * ranks: the largest size seen was H1, the next H2, and so on. That made every
10
- * run's level depend on which other sizes the document happened to contain,
11
- * so adding rows to a table (which changed which runs the table detector
12
- * consumed, and so which sizes remained in the prose set) re-ranked unrelated
13
- * text and fired heading-hierarchy-changed at error severity. Extraction-
14
- * fidelity experiment, 2026-09-09, finding P2. A band depends only on the
15
- * run's own size and the body size.
13
+ * The bands are anchored to the document's largest heading band, which is H1:
14
+ * a document whose only heading is 20pt on a 12pt body has an H1, not an H3,
15
+ * and the levels below keep their band distance from it. A middle tier
16
+ * vanishing (the original failure) moves nothing; only the top heading
17
+ * disappearing would, and a title rarely does.
16
18
  */
17
- const LEVEL_BANDS = [
18
- [2.4, 1],
19
- [1.8, 2],
20
- [1.5, 3],
21
- [1.3, 4],
22
- ];
19
+ const BAND_RATIOS = [2.4, 1.8, 1.5, 1.3];
23
20
  /**
24
21
  * Infer heading levels for raw pdfjs runs by font size. The char-count-weighted
25
22
  * modal size is the body baseline; runs meaningfully larger (or bold and
@@ -42,19 +39,38 @@ export function buildHeadingModel(runs) {
42
39
  bodySize = size;
43
40
  }
44
41
  }
42
+ // No body prose — a headings-and-tables-only document (statement, dashboard,
43
+ // data-heavy report). The char-weighted modal "body" size is the LARGEST text
44
+ // present (the title is long, so it wins the weighting), so the size-vs-body
45
+ // test finds no heading at all and the whole document's headings vanish. When
46
+ // that happens and several distinct sizes exist, they are all headings: rank
47
+ // the distinct sizes directly, largest = H1. Guarded by distinctSizes > 1 so a
48
+ // prose-only document (a single size) is never turned into a page of H1s.
49
+ const maxSize = round1(Math.max(0, ...runs.map((r) => r.fontSize)));
50
+ const distinctSizes = new Set(runs.map((r) => round1(r.fontSize)));
51
+ if (distinctSizes.size > 1 && round1(bodySize) === maxSize) {
52
+ const ranked = [...distinctSizes].sort((a, b) => b - a);
53
+ const levelBySize = new Map(ranked.map((s, i) => [round1(s), Math.min(i + 1, 6)]));
54
+ return {
55
+ bodySize,
56
+ isHeading: () => true,
57
+ levelOf: (r) => levelBySize.get(round1(r.fontSize)) ?? 6,
58
+ confidenceOf: () => 0.6, // inferred without a body-size anchor — lower than size-separated
59
+ };
60
+ }
45
61
  const sizeSeparated = (r) => r.fontSize > bodySize * HEADING_RATIO;
46
62
  const boldSeparated = (r) => r.bold && r.fontSize >= bodySize * BOLD_RATIO;
47
- const bandOf = (r) => {
48
- const ratio = bodySize > 0 ? r.fontSize / bodySize : 1;
49
- for (const [min, level] of LEVEL_BANDS)
50
- if (ratio >= min)
51
- return level;
52
- return 5;
63
+ // 0 = the largest band … BAND_RATIOS.length = size-separated but below every band.
64
+ const bandOf = (size) => {
65
+ const ratio = bodySize > 0 ? size / bodySize : 1;
66
+ const i = BAND_RATIOS.findIndex((min) => ratio >= min);
67
+ return i === -1 ? BAND_RATIOS.length : i;
53
68
  };
69
+ const topBand = runs.filter(sizeSeparated).reduce((top, r) => Math.min(top, bandOf(r.fontSize)), BAND_RATIOS.length);
54
70
  return {
55
71
  bodySize,
56
72
  isHeading: (r) => sizeSeparated(r) || boldSeparated(r),
57
- levelOf: (r) => (sizeSeparated(r) ? bandOf(r) : 6),
73
+ levelOf: (r) => (sizeSeparated(r) ? Math.min(1 + bandOf(r.fontSize) - topBand, 5) : 6),
58
74
  confidenceOf: (r) => (sizeSeparated(r) ? 0.8 : 0.5),
59
75
  };
60
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"headings.js","sourceRoot":"","sources":["../../../src/extract/pdfjs/headings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAU3C,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,GAA2D;IAC1E,CAAC,GAAG,EAAE,CAAC,CAAC;IACR,CAAC,GAAG,EAAE,CAAC,CAAC;IACR,CAAC,GAAG,EAAE,CAAC,CAAC;IACR,CAAC,GAAG,EAAE,CAAC,CAAC;CACT,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;YACnB,UAAU,GAAG,CAAC,CAAC;YACf,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,CAAa,EAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;IACxF,MAAM,aAAa,GAAG,CAAC,CAAa,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,GAAG,UAAU,CAAC;IAChG,MAAM,MAAM,GAAG,CAAC,CAAa,EAAU,EAAE;QACvC,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW;YAAE,IAAI,KAAK,IAAI,GAAG;gBAAE,OAAO,KAAK,CAAC;QACvE,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"headings.js","sourceRoot":"","sources":["../../../src/extract/pdfjs/headings.ts"],"names":[],"mappings":"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"}
@@ -23,4 +23,35 @@ export declare function extractTextRuns(page: LoadedPdfPage): Promise<{
23
23
  width: number;
24
24
  height: number;
25
25
  }>;
26
+ /**
27
+ * pdfjs writes a space into an item wherever two glyphs sit further apart
28
+ * than it expects, so a tracked label arrives as "N O R T H M O O R" in ONE
29
+ * item, spaces included, and no glyph positions survive to tell a letter gap
30
+ * from a word gap. When nearly every space-separated token of an item is a
31
+ * single character (a kerned pair or triple allowed: "A S AT", "S TAT E M E N T"),
32
+ * the spaces are tracking,
33
+ * and the item is the word without them. The cost, accepted: a tracked
34
+ * multi-word label that a producer emits as one item loses its word break
35
+ * ("INDUSTRIAL GROUP" reads "INDUSTRIALGROUP"); it is at least the same on
36
+ * both sides of a diff, which is what node identity needs. (Extraction-
37
+ * fidelity experiment, 2026-09-09, finding P6.)
38
+ */
39
+ export declare function collapseTracked(str: string): string;
40
+ /**
41
+ * Merge same-line, same-size, adjacent items into runs. Two spacing rules:
42
+ *
43
+ * Plain text: a gap above 0.2em between items is a word space.
44
+ *
45
+ * Tracked text: a producer that positions glyphs individually for
46
+ * letter-spacing (Chromium print-to-PDF, takumi-pdf, Forme's tracked labels)
47
+ * hands pdfjs one item per glyph, and the plain rule joined them as
48
+ * "N O R T H M O O R" (extraction-fidelity experiment, 2026-09-09, finding
49
+ * P6). When both sides of a join are short items (one glyph, or a kerned
50
+ * pair), the run's own letter rhythm is the reference: the first such gap
51
+ * under 0.4em sets it, later gaps within it are letters of one word, and a
52
+ * gap well above it (1.8× the rhythm, and at least 0.2em more) is the space
53
+ * between words. A one-letter word before a full word ("a cat") is not a
54
+ * tracked join and keeps the plain rule.
55
+ */
56
+ export declare function mergeRuns(items: PdfTextRun[]): PdfTextRun[];
26
57
  //# sourceMappingURL=textRuns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textRuns.d.ts","sourceRoot":"","sources":["../../../src/extract/pdfjs/textRuns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;AAEpE,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAmChE"}
1
+ {"version":3,"file":"textRuns.d.ts","sourceRoot":"","sources":["../../../src/extract/pdfjs/textRuns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;AAEpE,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoChE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAoC3D"}
@@ -35,24 +35,65 @@ export async function extractTextRuns(page) {
35
35
  const height = it.height || fontSize;
36
36
  const width = it.width || 0;
37
37
  const fontName = sanitizeFontName(it.fontName ?? '');
38
+ const text = collapseTracked(it.str);
38
39
  raw.push({
39
40
  x,
40
41
  y: viewport.height - (yBottom + height),
41
42
  width,
42
43
  height,
43
- text: it.str,
44
+ text,
44
45
  fontSize,
45
46
  fontName,
46
47
  bold: BOLD_RE.test(fontName),
47
48
  italic: ITALIC_RE.test(fontName),
48
- charCount: it.str.length,
49
+ charCount: text.length,
49
50
  });
50
51
  }
51
52
  return { runs: mergeRuns(raw), width: viewport.width, height: viewport.height };
52
53
  }
53
- function mergeRuns(items) {
54
+ /**
55
+ * pdfjs writes a space into an item wherever two glyphs sit further apart
56
+ * than it expects, so a tracked label arrives as "N O R T H M O O R" in ONE
57
+ * item, spaces included, and no glyph positions survive to tell a letter gap
58
+ * from a word gap. When nearly every space-separated token of an item is a
59
+ * single character (a kerned pair or triple allowed: "A S AT", "S TAT E M E N T"),
60
+ * the spaces are tracking,
61
+ * and the item is the word without them. The cost, accepted: a tracked
62
+ * multi-word label that a producer emits as one item loses its word break
63
+ * ("INDUSTRIAL GROUP" reads "INDUSTRIALGROUP"); it is at least the same on
64
+ * both sides of a diff, which is what node identity needs. (Extraction-
65
+ * fidelity experiment, 2026-09-09, finding P6.)
66
+ */
67
+ export function collapseTracked(str) {
68
+ const tokens = str.trim().split(' ');
69
+ if (tokens.length < 3)
70
+ return str;
71
+ const single = tokens.filter((t) => t.length === 1).length;
72
+ const longest = Math.max(...tokens.map((t) => t.length));
73
+ if (single / tokens.length < 0.6 || longest > 3)
74
+ return str;
75
+ return tokens.join('');
76
+ }
77
+ /**
78
+ * Merge same-line, same-size, adjacent items into runs. Two spacing rules:
79
+ *
80
+ * Plain text: a gap above 0.2em between items is a word space.
81
+ *
82
+ * Tracked text: a producer that positions glyphs individually for
83
+ * letter-spacing (Chromium print-to-PDF, takumi-pdf, Forme's tracked labels)
84
+ * hands pdfjs one item per glyph, and the plain rule joined them as
85
+ * "N O R T H M O O R" (extraction-fidelity experiment, 2026-09-09, finding
86
+ * P6). When both sides of a join are short items (one glyph, or a kerned
87
+ * pair), the run's own letter rhythm is the reference: the first such gap
88
+ * under 0.4em sets it, later gaps within it are letters of one word, and a
89
+ * gap well above it (1.8× the rhythm, and at least 0.2em more) is the space
90
+ * between words. A one-letter word before a full word ("a cat") is not a
91
+ * tracked join and keeps the plain rule.
92
+ */
93
+ export function mergeRuns(items) {
54
94
  const sorted = [...items].sort((a, b) => a.y - b.y || a.x - b.x);
55
95
  const out = [];
96
+ const rhythm = new Map();
56
97
  for (const it of sorted) {
57
98
  const prev = out[out.length - 1];
58
99
  const sameLine = prev && Math.abs(prev.y - it.y) <= Math.max(1, prev.height * 0.4);
@@ -60,15 +101,39 @@ function mergeRuns(items) {
60
101
  const gap = prev ? it.x - (prev.x + prev.width) : Infinity;
61
102
  const adjacent = prev && gap <= prev.fontSize * 0.6 && it.x >= prev.x - 0.5;
62
103
  if (prev && sameLine && sameFont && adjacent) {
63
- prev.text += (gap > prev.fontSize * 0.2 ? ' ' : '') + it.text;
104
+ const r = rhythm.get(prev);
105
+ let space;
106
+ if (r.lastLen <= 2 && it.charCount <= 2) {
107
+ if (r.gaps.length === 0) {
108
+ space = gap > prev.fontSize * 0.4;
109
+ }
110
+ else {
111
+ const ref = median(r.gaps);
112
+ space = gap > Math.max(ref * 1.8, ref + prev.fontSize * 0.2);
113
+ }
114
+ if (!space)
115
+ r.gaps.push(gap);
116
+ }
117
+ else {
118
+ space = gap > prev.fontSize * 0.2;
119
+ }
120
+ prev.text += (space ? ' ' : '') + it.text;
64
121
  prev.width = it.x + it.width - prev.x;
65
122
  prev.charCount += it.charCount;
66
123
  prev.bold = prev.bold || it.bold;
124
+ r.lastLen = it.charCount;
67
125
  }
68
126
  else {
69
- out.push({ ...it });
127
+ const copy = { ...it };
128
+ out.push(copy);
129
+ rhythm.set(copy, { lastLen: it.charCount, gaps: [] });
70
130
  }
71
131
  }
72
132
  return out;
73
133
  }
134
+ function median(values) {
135
+ const s = [...values].sort((a, b) => a - b);
136
+ const mid = Math.floor(s.length / 2);
137
+ return s.length % 2 ? s[mid] : (s[mid - 1] + s[mid]) / 2;
138
+ }
74
139
  //# sourceMappingURL=textRuns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textRuns.js","sourceRoot":"","sources":["../../../src/extract/pdfjs/textRuns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textRuns.js","sourceRoot":"","sources":["../../../src/extract/pdfjs/textRuns.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdf-testkit/core",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Semantic structural model, extractors, and diff engine for pdf-testkit",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  }
33
33
  },
34
34
  "devDependencies": {
35
- "@formepdf/core": "0.21.0",
35
+ "@formepdf/core": "0.22.0",
36
36
  "@napi-rs/canvas": "^0.1.100",
37
37
  "pdfjs-dist": "^4.10.38"
38
38
  },