flappa-doormal 2.14.1 → 2.15.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/AGENTS.md CHANGED
@@ -604,6 +604,24 @@ bunx biome lint .
604
604
 
605
605
  48. **The "adding content changes behavior" smell**: If adding unrelated content (like a second page) dramatically changes how the first page is processed, suspect incorrect span/window calculations. The fix pattern: ensure window calculations are scoped to the CURRENT context (current page) not the ORIGINAL context (all remaining content).
606
606
 
607
+ 49. **Use `trimStart()` not `trim()` for user-provided patterns with semantic whitespace**: When processing user-provided patterns like the `words` field, only strip leading whitespace (likely accidental). Trailing whitespace may be intentional for whole-word matching (e.g., `'بل '` should match only the standalone word, not words starting with `بل` like `بلغ`). **Bug symptom**: `words: ['بل ']` matched `بلغ` because `.trim()` stripped the trailing space to just `بل`. **Fix**: Use `.trimStart()` to preserve trailing whitespace.
608
+
609
+ 50. **When expected boundaries exceed segment length, trust content matches**: If `expectedBoundary >= remainingContent.length`, any deviation-based validation is meaningless. In this case the boundary search must scan the full segment content and rank candidates without a distance constraint. Otherwise early valid page starts can be missed and page attribution will drift.
610
+
611
+ 51. **Infer start offset from the first boundary when necessary**: If the initial boundary search fails right after a structural split, rerun a relaxed search to find the true page start and infer `startOffsetInFromPage`. This corrects the baseline for all subsequent boundary estimates.
612
+
613
+ 52. **Windowed boundary searches can be wrong when offsets drift**: If the approximate offset is skewed (e.g., repeated line-start markers), a windowed scan may miss the real boundary. A full-content scan is required to recover early matches.
614
+
615
+ 53. **Harden maxPages=0 with targeted tests**: Add tests that hit the failure modes: segment starts at page boundary with repeated marker, very short pages (< 100 chars), minimal prefix lengths (15 chars), multiple candidate prefixes in content, tiny tail segments after structural splits, and fast-path threshold transitions (999 vs 1000 pages).
616
+
617
+ 54. **Beware trusting `segment.to` in validation**: When validating `maxPages` violations, do NOT rely solely on `segment.to` if it exists. A segment might claim to end on page X (via `segment.to`) but its content physically matches text on page Y. If `maxPages=0`, trusting `segment.to` hides the violation. Always check the physical match location (`actualToId`) against the constraint, regardless of what the segment claims.
618
+
619
+ 55. **Duplicate `case` labels in manual merges**: When applying fixes suggested by AI or manual merges, check surrounding code for duplicate `case` statements. JavaScript switch statements with duplicate cases are syntax errors (strict mode) or unreachable code. Validation errors usually catch this, but careful reading prevents it.
620
+
621
+ 56. **Linting vs Checks**: `bunx biome check` is strict. Complexity limits (max 15/18) force you to decompose functions. If you receive a complexity error, extract the complex logic (e.g., switch cases, specific validation checks) into standalone helper functions.
622
+
623
+ 57. **Validation Hints Specificity**: Generic error hints like "Check segmenter.ts" are unhelpful. Provide specific file names and logical components (e.g., "Check maxPages windowing in breakpoint-processor.ts"). User-friendly validation reports guide debugging much faster than "Something is wrong".
624
+
607
625
  ### Process Template (Multi-agent design review, TDD-first)
608
626
 
609
627
  If you want to repeat the “write a plan → get multiple AI critiques → synthesize → update plan → implement TDD-first” workflow, use:
@@ -746,6 +764,24 @@ See README.md for complete examples.
746
764
 
747
765
  ## Debugging Tips
748
766
 
767
+ ### Reading Validation Reports
768
+
769
+ `validateSegments(pages, options, segments)` returns a structured report for attribution and `maxPages` issues. Use it to quickly localize bugs without re-running segmentation.
770
+
771
+ **Key fields:**
772
+ - `summary.errors` / `summary.warnings`: Use to decide if the bug is a hard failure or a suspected edge case.
773
+ - `issues[].type`: The failure class (see below).
774
+ - `issues[].segmentIndex`: Which segment to inspect in output.
775
+ - `issues[].expected` / `issues[].actual`: Where attribution diverged.
776
+ - `issues[].pageContext`: Matching page preview + `matchIndex` (if found).
777
+ - `issues[].hint`: Direct pointer to likely culprit code path.
778
+
779
+ **Issue types and next steps:**
780
+ - `max_pages_violation`: Segment spans too many pages. Check breakpoint windowing in `breakpoint-processor.ts` and boundary logic in `breakpoint-utils.ts`.
781
+ - `page_attribution_mismatch`: Content matched a different page than `segment.from`. Focus on `buildBoundaryPositions()` and `findPageStartNearExpectedBoundary()`.
782
+ - `content_not_found`: Segment content not found in any page. Compare preprocessing, `pageJoiner`, and trimming behavior.
783
+ - `page_not_found`: Segment `from` is not in input pages; validate page IDs and input ordering.
784
+
749
785
  ### Page Boundary Detection Issues
750
786
 
751
787
  If `maxPages=0` produces merged segments when pages have identical prefixes or duplicated content:
@@ -761,3 +797,8 @@ Key functions: `applyBreakpoints()` → `processOversizedSegment()` → `findBre
761
797
  - Check `boundaryPositions built` log for page boundary byte offsets
762
798
  - Check `iteration=N` logs for `currentFromIdx`, `cursorPos`, `windowEndPosition` per loop
763
799
 
800
+ ## Known Issues
801
+
802
+ - **Binary Search Gap (Theoretical)**: `findBoundaryIdForOffset` returns `undefined` if the search offset falls exactly on a joiner character (e.g., a space or newline) between two pages. This is mathematically correct (the gap belongs to neither page) but may cause validation errors if a segment consists _only_ of such a gap or matches content starting/ending strictly within the gap. We have marked this as "accept" behavior for now, with a documented skipped test case.
803
+
804
+
package/README.md CHANGED
@@ -92,6 +92,35 @@ const segments = segmentPages(pages, {
92
92
  // ]
93
93
  ```
94
94
 
95
+ ## Segment Validation
96
+
97
+ Use `validateSegments()` to sanity-check segmentation output against the input pages and options. This is useful for detecting page attribution issues or maxPages violations before sending segments to downstream systems.
98
+
99
+ ```typescript
100
+ import { segmentPages, validateSegments } from 'flappa-doormal';
101
+
102
+ const segments = segmentPages(pages, { rules, maxPages: 0 });
103
+ const report = validateSegments(pages, { rules, maxPages: 0 }, segments);
104
+
105
+ if (!report.ok) {
106
+ console.log(report.summary);
107
+ console.log(report.issues[0]);
108
+ }
109
+ ```
110
+
111
+ Example issue entry (truncated):
112
+
113
+ ```json
114
+ {
115
+ "type": "page_attribution_mismatch",
116
+ "severity": "error",
117
+ "segmentIndex": 2,
118
+ "expected": { "from": 5 },
119
+ "actual": { "from": 4 },
120
+ "evidence": "Content found in page 5, but segment.from=4."
121
+ }
122
+ ```
123
+
95
124
  ## Features
96
125
 
97
126
  ### 1. Template Tokens
@@ -947,6 +976,57 @@ const segments = segmentPages(pages, { rules });
947
976
  // ]
948
977
  ```
949
978
 
979
+ ## Advanced: Metadata Extraction & Data Migration
980
+
981
+ If you already have pre-segmented data (e.g., records from a database or JSON file) and want to use **flappa-doormal's** token system to extract metadata and clean the content without further splitting, you can use the **Metadata Extraction** pattern.
982
+
983
+ By setting `maxPages: 0`, you guarantee a **1:1 mapping**: each input page produces exactly one output segment, regardless of how much text is on the page.
984
+
985
+ ### Example: Extracting multiple fields from pre-split records
986
+
987
+ ```typescript
988
+ import { segmentPages, type Page } from 'flappa-doormal';
989
+
990
+ const excerpts = [
991
+ { nass: '٧٠١٦ - ١ - ١ - فَقَصَّتْهَا حَفْصَةُ', id: 1 },
992
+ { nass: '٧٠١٧ (أ) - بَابُ الْقَيْدِ', id: 2 },
993
+ { nass: 'باب الصلاة - الفصل الأول', id: 3 },
994
+ ];
995
+
996
+ // Convert your data to the Page format
997
+ const pages: Page[] = excerpts.map(e => ({ content: e.nass, id: e.id }));
998
+
999
+ const result = segmentPages(pages, {
1000
+ maxPages: 0, // IMPORTANT: Guarantees each page stays isolated (no merging/splitting)
1001
+ rules: [
1002
+ // 1. Extract triple numbers: ٧٠١٦ - ١ - ١
1003
+ {
1004
+ lineStartsAfter: ['{{raqms:num}} {{dash}} {{raqms:num2}} {{dash}} {{raqms:num3}} '],
1005
+ },
1006
+ // 2. Extract number + indicator: ٧٠١٧ (أ)
1007
+ {
1008
+ lineStartsAfter: ['{{raqms:num}} ({{harf:indicator}}) {{dash}} '],
1009
+ },
1010
+ // 3. Mark chapters using fuzzy tokens
1011
+ {
1012
+ fuzzy: true,
1013
+ lineStartsWith: ['{{bab}} '],
1014
+ meta: { type: 'Chapter' },
1015
+ },
1016
+ ],
1017
+ });
1018
+
1019
+ // Segment 0: { content: 'فَقَصَّتْهَا حَفْصَةُ', meta: { num: '٧٠١٦', num2: '١', num3: '١' }, ... }
1020
+ // Segment 1: { content: 'بَابُ الْقَيْدِ', meta: { num: '٧٠١٧', indicator: 'أ' }, ... }
1021
+ // Segment 2: { content: 'باب الصلاة - الفصل الأول', meta: { type: 'Chapter' }, ... }
1022
+ ```
1023
+
1024
+ ### Why use this?
1025
+ - **Pattern Robustness**: Use `{{raqms}}`, `{{dash}}`, and `{{harf}}` instead of writing raw regex for every edge case.
1026
+ - **Prefix Cleaning**: `lineStartsAfter` automatically removes the matched pattern, leaving only the clean text.
1027
+ - **Deduplication**: Named captures like `{{raqms:num}}` automatically populate the `meta` object.
1028
+ - **Fuzzy Headers**: Use `fuzzy: true` to match headers like "Book" or "Chapter" regardless of Arabic diacritics.
1029
+
950
1030
  ## Rule Optimization
951
1031
 
952
1032
  Use `optimizeRules()` to automatically merge compatible rules, remove duplicate patterns, and sort rules by specificity (longest patterns first):
@@ -1335,6 +1415,38 @@ Notes:
1335
1415
  - Recovery is **explicitly scoped** by the `selector`; it will not “guess” which rules are mistaken.
1336
1416
  - If your segments were heavily post-processed (trimmed/normalized/reordered), recovery may return unresolved items; see the report for details.
1337
1417
 
1418
+ #### `recoverMistakenMarkersForRuns(runs, opts?)`
1419
+
1420
+ Batch version of `recoverMistakenLineStartsAfterMarkers`. Processes multiple independent segmentation runs (e.g. from different books) and returns a consolidated report.
1421
+
1422
+ ```typescript
1423
+ import { recoverMistakenMarkersForRuns } from 'flappa-doormal';
1424
+
1425
+ const results = recoverMistakenMarkersForRuns([
1426
+ { pages: pages1, segments: segments1, options: options1, selector: selector1 },
1427
+ { pages: pages2, segments: segments2, options: options2, selector: selector2 },
1428
+ ]);
1429
+ ```
1430
+
1431
+ ### `validateSegments(pages, options, segments, validationOptions?)`
1432
+
1433
+ Validates that segments correctly map back to the source pages and adhere to constraints.
1434
+
1435
+ ```typescript
1436
+ import { validateSegments } from 'flappa-doormal';
1437
+
1438
+ const report = validateSegments(pages, options, segments, {
1439
+ // Optional: Max content length to search before falling back (default: 500)
1440
+ // Segments longer than this are checked via fast path unless issues are found.
1441
+ fullSearchThreshold: 1000,
1442
+ });
1443
+ ```
1444
+
1445
+ Returns a `SegmentValidationReport` containing:
1446
+ - `ok`: boolean
1447
+ - `summary`: counts of errors/warnings
1448
+ - `issues`: detailed list of problems (page attribution mismatch, maxPages violation, etc.)
1449
+
1338
1450
  ### `stripHtmlTags(html)`
1339
1451
 
1340
1452
  Remove all HTML tags from content, keeping only text.
@@ -1668,7 +1780,3 @@ bun run deploy
1668
1780
  ## License
1669
1781
 
1670
1782
  MIT
1671
-
1672
- ## Inspiration
1673
-
1674
- The name of the project is from Asmāʾ, it seems to be some sort of gymnastic move.
package/dist/index.d.mts CHANGED
@@ -150,8 +150,7 @@ type Breakpoint = string | BreakpointRule;
150
150
  * { regex: '^[٠-٩]+ - (.*)', split: 'at' }
151
151
  */
152
152
  type RegexPattern = {
153
- /** Raw regex pattern string (no token expansion, no auto-escaping) */
154
- regex: string;
153
+ /** Raw regex pattern string (no token expansion, no auto-escaping) */regex: string;
155
154
  };
156
155
  /**
157
156
  * Template pattern rule - expands `{{tokens}}` before compiling to regex.
@@ -177,8 +176,7 @@ type RegexPattern = {
177
176
  * @see TOKEN_PATTERNS for available tokens
178
177
  */
179
178
  type TemplatePattern = {
180
- /** Template string with `{{token}}` or `{{token:name}}` placeholders. Brackets `()[]` are auto-escaped. */
181
- template: string;
179
+ /** Template string with `{{token}}` or `{{token:name}}` placeholders. Brackets `()[]` are auto-escaped. */template: string;
182
180
  };
183
181
  /**
184
182
  * Line-start pattern rule - matches lines starting with any of the given patterns.
@@ -206,8 +204,7 @@ type TemplatePattern = {
206
204
  * { lineStartsWith: ['({{harf}}) '], split: 'at' }
207
205
  */
208
206
  type LineStartsWithPattern = {
209
- /** Array of patterns that mark line beginnings (marker included in content). Brackets `()[]` are auto-escaped. */
210
- lineStartsWith: string[];
207
+ /** Array of patterns that mark line beginnings (marker included in content). Brackets `()[]` are auto-escaped. */lineStartsWith: string[];
211
208
  };
212
209
  /**
213
210
  * Line-start-after pattern rule - matches lines starting with patterns,
@@ -238,8 +235,7 @@ type LineStartsWithPattern = {
238
235
  * { lineStartsAfter: ['({{harf}}): '], split: 'at' }
239
236
  */
240
237
  type LineStartsAfterPattern = {
241
- /** Array of patterns that mark line beginnings (marker excluded from content). Brackets `()[]` are auto-escaped. */
242
- lineStartsAfter: string[];
238
+ /** Array of patterns that mark line beginnings (marker excluded from content). Brackets `()[]` are auto-escaped. */lineStartsAfter: string[];
243
239
  };
244
240
  /**
245
241
  * Line-end pattern rule - matches lines ending with any of the given patterns.
@@ -261,8 +257,7 @@ type LineStartsAfterPattern = {
261
257
  * { lineEndsWith: ['(انتهى)'], split: 'after' }
262
258
  */
263
259
  type LineEndsWithPattern = {
264
- /** Array of patterns that mark line endings. Brackets `()[]` are auto-escaped. */
265
- lineEndsWith: string[];
260
+ /** Array of patterns that mark line endings. Brackets `()[]` are auto-escaped. */lineEndsWith: string[];
266
261
  };
267
262
  /**
268
263
  * Union of all pattern types for split rules.
@@ -593,9 +588,7 @@ type SegmentationOptions = {
593
588
  * `meta._flappa.rule` and/or `meta._flappa.breakpoint`.
594
589
  */
595
590
  debug?: boolean | {
596
- /** Where to store provenance in meta. @default '_flappa' */
597
- metaKey?: string;
598
- /** Which kinds of provenance to include. @default ['rule','breakpoint'] */
591
+ /** Where to store provenance in meta. @default '_flappa' */metaKey?: string; /** Which kinds of provenance to include. @default ['rule','breakpoint'] */
599
592
  include?: Array<'rule' | 'breakpoint'>;
600
593
  };
601
594
  /**
@@ -734,6 +727,46 @@ type SegmentationOptions = {
734
727
  preprocess?: PreprocessTransform[];
735
728
  };
736
729
  //#endregion
730
+ //#region src/types/validation.d.ts
731
+ type SegmentValidationIssueSeverity = 'error' | 'warn';
732
+ type SegmentValidationIssueType = 'max_pages_violation' | 'page_attribution_mismatch' | 'content_not_found' | 'page_not_found';
733
+ type SegmentValidationIssue = {
734
+ type: SegmentValidationIssueType;
735
+ severity: SegmentValidationIssueSeverity;
736
+ segmentIndex: number;
737
+ segment: {
738
+ from: number;
739
+ to?: number;
740
+ contentPreview: string;
741
+ };
742
+ expected?: {
743
+ from?: number;
744
+ to?: number;
745
+ };
746
+ actual?: {
747
+ from?: number;
748
+ to?: number;
749
+ };
750
+ pageContext?: {
751
+ pageId: number;
752
+ pagePreview: string;
753
+ matchIndex?: number;
754
+ };
755
+ evidence?: string;
756
+ hint?: string;
757
+ };
758
+ type SegmentValidationReport = {
759
+ ok: boolean;
760
+ summary: {
761
+ segmentCount: number;
762
+ pageCount: number;
763
+ issues: number;
764
+ errors: number;
765
+ warnings: number;
766
+ };
767
+ issues: SegmentValidationIssue[];
768
+ };
769
+ //#endregion
737
770
  //#region src/types/index.d.ts
738
771
  /**
739
772
  * Output segment produced by `segmentPages()`.
@@ -935,13 +968,9 @@ declare const analyzeRepeatingSequences: (pages: Page[], options?: RepeatingSequ
935
968
  * Result of detecting a token pattern in text
936
969
  */
937
970
  type DetectedPattern = {
938
- /** Token name from TOKEN_PATTERNS (e.g., 'raqms', 'dash') */
939
- token: string;
940
- /** The matched text */
941
- match: string;
942
- /** Start index in the original text */
943
- index: number;
944
- /** End index (exclusive) */
971
+ /** Token name from TOKEN_PATTERNS (e.g., 'raqms', 'dash') */token: string; /** The matched text */
972
+ match: string; /** Start index in the original text */
973
+ index: number; /** End index (exclusive) */
945
974
  endIndex: number;
946
975
  };
947
976
  /**
@@ -1004,9 +1033,7 @@ declare const analyzeTextForRule: (text: string) => {
1004
1033
  * Result from optimizing rules.
1005
1034
  */
1006
1035
  type OptimizeResult = {
1007
- /** Optimized rules (merged and sorted by specificity) */
1008
- rules: SplitRule[];
1009
- /** Number of rules that were merged into existing rules */
1036
+ /** Optimized rules (merged and sorted by specificity) */rules: SplitRule[]; /** Number of rules that were merged into existing rules */
1010
1037
  mergedCount: number;
1011
1038
  };
1012
1039
  declare const optimizeRules: (rules: SplitRule[]) => {
@@ -1014,6 +1041,47 @@ declare const optimizeRules: (rules: SplitRule[]) => {
1014
1041
  rules: SplitRule[];
1015
1042
  };
1016
1043
  //#endregion
1044
+ //#region src/preprocessing/transforms.d.ts
1045
+ /**
1046
+ * Remove zero-width control characters from text.
1047
+ *
1048
+ * @param text - Input text
1049
+ * @param mode - 'strip' (default) removes entirely, 'space' replaces with space
1050
+ * @returns Text with zero-width characters removed or replaced
1051
+ */
1052
+ declare const removeZeroWidth: (text: string, mode?: "strip" | "space") => string;
1053
+ /**
1054
+ * Condense multiple periods (...) into ellipsis character (…).
1055
+ *
1056
+ * Prevents `{{tarqim}}` from false-matching inside ellipsis since
1057
+ * the `.` in tarqim matches individual periods.
1058
+ *
1059
+ * @param text - Input text
1060
+ * @returns Text with period sequences replaced by ellipsis
1061
+ */
1062
+ declare const condenseEllipsis: (text: string) => string;
1063
+ /**
1064
+ * Join trailing و (waw) to the next word.
1065
+ *
1066
+ * Fixes OCR/digitization artifacts: ' و ' → ' و' (waw joined to next word)
1067
+ *
1068
+ * @param text - Input text
1069
+ * @returns Text with trailing waw joined to following word
1070
+ */
1071
+ declare const fixTrailingWaw: (text: string) => string;
1072
+ /**
1073
+ * Apply preprocessing transforms to a page's content.
1074
+ *
1075
+ * Transforms run in array order. Each can be limited to specific pages
1076
+ * via `min`/`max` constraints.
1077
+ *
1078
+ * @param content - Page content to transform
1079
+ * @param pageId - Page ID for constraint checking
1080
+ * @param transforms - Array of transforms to apply
1081
+ * @returns Transformed content
1082
+ */
1083
+ declare const applyPreprocessToPage: (content: string, pageId: number, transforms: PreprocessTransform[]) => string;
1084
+ //#endregion
1017
1085
  //#region src/recovery.d.ts
1018
1086
  type MarkerRecoverySelector = {
1019
1087
  type: 'rule_indices';
@@ -1114,10 +1182,8 @@ type ValidationIssueType = 'missing_braces' | 'unknown_token' | 'duplicate' | 'e
1114
1182
  type ValidationIssue = {
1115
1183
  type: ValidationIssueType;
1116
1184
  message: string;
1117
- suggestion?: string;
1118
- /** The token name involved in the issue (for unknown_token / missing_braces) */
1119
- token?: string;
1120
- /** The specific pattern involved (for duplicate) */
1185
+ suggestion?: string; /** The token name involved in the issue (for unknown_token / missing_braces) */
1186
+ token?: string; /** The specific pattern involved (for duplicate) */
1121
1187
  pattern?: string;
1122
1188
  };
1123
1189
  /**
@@ -1213,39 +1279,22 @@ declare const segmentPages: (pages: Page[], options: SegmentationOptions) => Seg
1213
1279
  //#region src/segmentation/tokens.d.ts
1214
1280
  /** Pre-defined token constants for use in patterns. */
1215
1281
  declare const Token: {
1216
- /** Chapter marker - باب */
1217
- readonly BAB: "{{bab}}";
1218
- /** Basmala - بسم الله */
1219
- readonly BASMALAH: "{{basmalah}}";
1220
- /** Bullet point variants */
1221
- readonly BULLET: "{{bullet}}";
1222
- /** Dash variants (hyphen, en-dash, em-dash, tatweel) */
1223
- readonly DASH: "{{dash}}";
1224
- /** Section marker - فصل / مسألة */
1225
- readonly FASL: "{{fasl}}";
1226
- /** Single Arabic letter */
1227
- readonly HARF: "{{harf}}";
1228
- /** Multiple Arabic letters separated by spaces */
1229
- readonly HARFS: "{{harfs}}";
1230
- /** Book marker - كتاب */
1231
- readonly KITAB: "{{kitab}}";
1232
- /** Hadith transmission phrases */
1233
- readonly NAQL: "{{naql}}";
1234
- /** Newline character (for breakpoints) */
1235
- readonly NEWLINE: "{{newline}}";
1236
- /** Single ASCII digit */
1237
- readonly NUM: "{{num}}";
1238
- /** Composite: {{raqms}} {{dash}} (space) */
1239
- readonly NUMBERED: "{{numbered}}";
1240
- /** One or more ASCII digits */
1241
- readonly NUMS: "{{nums}}";
1242
- /** Single Arabic-Indic digit */
1243
- readonly RAQM: "{{raqm}}";
1244
- /** One or more Arabic-Indic digits */
1245
- readonly RAQMS: "{{raqms}}";
1246
- /** Source abbreviations (rijāl/takhrīj) */
1247
- readonly RUMUZ: "{{rumuz}}";
1248
- /** Punctuation marks */
1282
+ /** Chapter marker - باب */readonly BAB: "{{bab}}"; /** Basmala - بسم الله */
1283
+ readonly BASMALAH: "{{basmalah}}"; /** Bullet point variants */
1284
+ readonly BULLET: "{{bullet}}"; /** Dash variants (hyphen, en-dash, em-dash, tatweel) */
1285
+ readonly DASH: "{{dash}}"; /** Section marker - فصل / مسألة */
1286
+ readonly FASL: "{{fasl}}"; /** Single Arabic letter */
1287
+ readonly HARF: "{{harf}}"; /** Multiple Arabic letters separated by spaces */
1288
+ readonly HARFS: "{{harfs}}"; /** Book marker - كتاب */
1289
+ readonly KITAB: "{{kitab}}"; /** Hadith transmission phrases */
1290
+ readonly NAQL: "{{naql}}"; /** Newline character (for breakpoints) */
1291
+ readonly NEWLINE: "{{newline}}"; /** Single ASCII digit */
1292
+ readonly NUM: "{{num}}"; /** Composite: {{raqms}} {{dash}} (space) */
1293
+ readonly NUMBERED: "{{numbered}}"; /** One or more ASCII digits */
1294
+ readonly NUMS: "{{nums}}"; /** Single Arabic-Indic digit */
1295
+ readonly RAQM: "{{raqm}}"; /** One or more Arabic-Indic digits */
1296
+ readonly RAQMS: "{{raqms}}"; /** Source abbreviations (rijāl/takhrīj) */
1297
+ readonly RUMUZ: "{{rumuz}}"; /** Punctuation marks */
1249
1298
  readonly TARQIM: "{{tarqim}}";
1250
1299
  };
1251
1300
  /**
@@ -1493,47 +1542,6 @@ declare const applyTokenMappings: (template: string, mappings: TokenMapping[]) =
1493
1542
  */
1494
1543
  declare const stripTokenMappings: (template: string) => string;
1495
1544
  //#endregion
1496
- //#region src/preprocessing/transforms.d.ts
1497
- /**
1498
- * Remove zero-width control characters from text.
1499
- *
1500
- * @param text - Input text
1501
- * @param mode - 'strip' (default) removes entirely, 'space' replaces with space
1502
- * @returns Text with zero-width characters removed or replaced
1503
- */
1504
- declare const removeZeroWidth: (text: string, mode?: "strip" | "space") => string;
1505
- /**
1506
- * Condense multiple periods (...) into ellipsis character (…).
1507
- *
1508
- * Prevents `{{tarqim}}` from false-matching inside ellipsis since
1509
- * the `.` in tarqim matches individual periods.
1510
- *
1511
- * @param text - Input text
1512
- * @returns Text with period sequences replaced by ellipsis
1513
- */
1514
- declare const condenseEllipsis: (text: string) => string;
1515
- /**
1516
- * Join trailing و (waw) to the next word.
1517
- *
1518
- * Fixes OCR/digitization artifacts: ' و ' → ' و' (waw joined to next word)
1519
- *
1520
- * @param text - Input text
1521
- * @returns Text with trailing waw joined to following word
1522
- */
1523
- declare const fixTrailingWaw: (text: string) => string;
1524
- /**
1525
- * Apply preprocessing transforms to a page's content.
1526
- *
1527
- * Transforms run in array order. Each can be limited to specific pages
1528
- * via `min`/`max` constraints.
1529
- *
1530
- * @param content - Page content to transform
1531
- * @param pageId - Page ID for constraint checking
1532
- * @param transforms - Array of transforms to apply
1533
- * @returns Transformed content
1534
- */
1535
- declare const applyPreprocessToPage: (content: string, pageId: number, transforms: PreprocessTransform[]) => string;
1536
- //#endregion
1537
1545
  //#region src/utils/textUtils.d.ts
1538
1546
  /**
1539
1547
  * Escapes regex metacharacters (parentheses and brackets) in template patterns,
@@ -1575,5 +1583,30 @@ declare const escapeTemplateBrackets: (pattern: string) => string;
1575
1583
  declare const escapeRegex: (s: string) => string;
1576
1584
  declare const makeDiacriticInsensitive: (text: string) => string;
1577
1585
  //#endregion
1578
- export { type Breakpoint, type BreakpointRule, type CommonLineStartPattern, type CondenseEllipsisRule, type DetectedPattern, type ExpandResult, type FixTrailingWawRule, type LineStartAnalysisOptions, type LineStartPatternExample, type Logger, type MarkerRecoveryReport, type MarkerRecoveryRun, type MarkerRecoverySelector, type OptimizeResult, PATTERN_TYPE_KEYS, type Page, type PageRange, type PageRangeConstraint, type PageRangeConstraintWithExclude, type PatternProcessor, type PatternTypeKey, type PreprocessTransform, type RemoveZeroWidthRule, type RepeatingSequenceExample, type RepeatingSequenceOptions, type RepeatingSequencePattern, type RuleValidationResult, type Segment, type SegmentationOptions, type SplitRule, TOKEN_PATTERNS, Token, type TokenKey, type TokenMapping, type ValidationIssue, type ValidationIssueType, analyzeCommonLineStarts, analyzeRepeatingSequences, analyzeTextForRule, applyPreprocessToPage, applyTokenMappings, condenseEllipsis, containsTokens, detectTokenPatterns, escapeRegex, escapeTemplateBrackets, escapeWordsOutsideTokens, expandCompositeTokensInTemplate, expandTokens, expandTokensWithCaptures, fixTrailingWaw, formatValidationReport, generateTemplateFromText, getAvailableTokens, getTokenPattern, makeDiacriticInsensitive, optimizeRules, recoverMistakenLineStartsAfterMarkers, recoverMistakenMarkersForRuns, removeZeroWidth, segmentPages, shouldDefaultToFuzzy, stripTokenMappings, suggestPatternConfig, templateToRegex, validateRules, withCapture };
1586
+ //#region src/validation/validate-segments.d.ts
1587
+ type ValidationOptions = {
1588
+ /**
1589
+ * Threshold for short segment content (characters).
1590
+ * Segments shorter than this will trigger a full-document search fallback.
1591
+ * @default 500
1592
+ */
1593
+ fullSearchThreshold?: number;
1594
+ };
1595
+ /**
1596
+ * Validates a list of segments against the source pages.
1597
+ * checks for:
1598
+ * - Page existence (invalid IDs)
1599
+ * - Content fidelity (content must exist in pages)
1600
+ * - Page attribution (from/to must match content location)
1601
+ * - Page constraints (maxPages violations)
1602
+ *
1603
+ * @param pages Input pages used for segmentation
1604
+ * @param options Operations used during segmentation (for preprocessing/joining consistency)
1605
+ * @param segments The output segments to validate
1606
+ * @param validationOptions Optional settings for validation behavior
1607
+ * @returns A detailed validation report
1608
+ */
1609
+ declare const validateSegments: (pages: Page[], options: SegmentationOptions, segments: Segment[], validationOptions?: ValidationOptions) => SegmentValidationReport;
1610
+ //#endregion
1611
+ export { type Breakpoint, type BreakpointRule, type CommonLineStartPattern, type CondenseEllipsisRule, type DetectedPattern, type ExpandResult, type FixTrailingWawRule, type LineStartAnalysisOptions, type LineStartPatternExample, type Logger, type MarkerRecoveryReport, type MarkerRecoveryRun, type MarkerRecoverySelector, type OptimizeResult, PATTERN_TYPE_KEYS, type Page, type PageRange, type PageRangeConstraint, type PageRangeConstraintWithExclude, type PatternProcessor, type PatternTypeKey, type PreprocessTransform, type RemoveZeroWidthRule, type RepeatingSequenceExample, type RepeatingSequenceOptions, type RepeatingSequencePattern, type RuleValidationResult, type Segment, type SegmentValidationIssue, type SegmentValidationIssueSeverity, type SegmentValidationIssueType, type SegmentValidationReport, type SegmentationOptions, type SplitRule, TOKEN_PATTERNS, Token, type TokenKey, type TokenMapping, type ValidationIssue, type ValidationIssueType, type ValidationOptions, analyzeCommonLineStarts, analyzeRepeatingSequences, analyzeTextForRule, applyPreprocessToPage, applyTokenMappings, condenseEllipsis, containsTokens, detectTokenPatterns, escapeRegex, escapeTemplateBrackets, escapeWordsOutsideTokens, expandCompositeTokensInTemplate, expandTokens, expandTokensWithCaptures, fixTrailingWaw, formatValidationReport, generateTemplateFromText, getAvailableTokens, getTokenPattern, makeDiacriticInsensitive, optimizeRules, recoverMistakenLineStartsAfterMarkers, recoverMistakenMarkersForRuns, removeZeroWidth, segmentPages, shouldDefaultToFuzzy, stripTokenMappings, suggestPatternConfig, templateToRegex, validateRules, validateSegments, withCapture };
1579
1612
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/breakpoints.ts","../src/types/rules.ts","../src/types/options.ts","../src/types/index.ts","../src/analysis/line-starts.ts","../src/analysis/repeating-sequences.ts","../src/detection.ts","../src/optimization/optimize-rules.ts","../src/recovery.ts","../src/segmentation/breakpoint-utils.ts","../src/segmentation/pattern-validator.ts","../src/segmentation/segmenter.ts","../src/segmentation/tokens.ts","../src/preprocessing/transforms.ts","../src/utils/textUtils.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/breakpoints.ts","../src/types/rules.ts","../src/types/options.ts","../src/types/validation.ts","../src/types/index.ts","../src/analysis/line-starts.ts","../src/analysis/repeating-sequences.ts","../src/detection.ts","../src/optimization/optimize-rules.ts","../src/preprocessing/transforms.ts","../src/recovery.ts","../src/segmentation/breakpoint-utils.ts","../src/segmentation/pattern-validator.ts","../src/segmentation/segmenter.ts","../src/segmentation/tokens.ts","../src/utils/textUtils.ts","../src/validation/validate-segments.ts"],"mappings":"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"}