flappa-doormal 2.8.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +59 -14
- package/README.md +163 -47
- package/dist/index.d.mts +155 -39
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +338 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -218,6 +218,28 @@ type LineEndsWithPattern = {
|
|
|
218
218
|
* - `lineEndsWith` - Match line endings
|
|
219
219
|
*/
|
|
220
220
|
type PatternType = RegexPattern | TemplatePattern | LineStartsWithPattern | LineStartsAfterPattern | LineEndsWithPattern;
|
|
221
|
+
/**
|
|
222
|
+
* Pattern type key names for split rules.
|
|
223
|
+
*
|
|
224
|
+
* Use this array to dynamically iterate over pattern types in UIs,
|
|
225
|
+
* or use the `PatternTypeKey` type for type-safe string unions.
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* // Build a dropdown/select in UI
|
|
229
|
+
* PATTERN_TYPE_KEYS.map(key => <option value={key}>{key}</option>)
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* // Type-safe pattern key validation
|
|
233
|
+
* const validateKey = (k: string): k is PatternTypeKey =>
|
|
234
|
+
* (PATTERN_TYPE_KEYS as readonly string[]).includes(k);
|
|
235
|
+
*/
|
|
236
|
+
declare const PATTERN_TYPE_KEYS: readonly ["lineStartsWith", "lineStartsAfter", "lineEndsWith", "template", "regex"];
|
|
237
|
+
/**
|
|
238
|
+
* String union of pattern type key names.
|
|
239
|
+
*
|
|
240
|
+
* Derived from `PATTERN_TYPE_KEYS` to stay in sync automatically.
|
|
241
|
+
*/
|
|
242
|
+
type PatternTypeKey = (typeof PATTERN_TYPE_KEYS)[number];
|
|
221
243
|
/**
|
|
222
244
|
* Configuration for how and where to split content when a pattern matches.
|
|
223
245
|
*
|
|
@@ -238,38 +260,9 @@ type SplitBehavior = {
|
|
|
238
260
|
* - `'first'`: Only split at the first match
|
|
239
261
|
* - `'last'`: Only split at the last match
|
|
240
262
|
*
|
|
241
|
-
* When `maxSpan` is set, occurrence filtering is applied per sliding
|
|
242
|
-
* window rather than globally. With `'last'`, the algorithm prefers
|
|
243
|
-
* longer segments by looking as far ahead as allowed before selecting
|
|
244
|
-
* the last match in the window.
|
|
245
|
-
*
|
|
246
263
|
* @default 'all'
|
|
247
264
|
*/
|
|
248
265
|
occurrence?: 'first' | 'last' | 'all';
|
|
249
|
-
/**
|
|
250
|
-
* Maximum page ID difference allowed when looking ahead for split points.
|
|
251
|
-
*
|
|
252
|
-
* Uses a sliding window algorithm that prefers longer segments:
|
|
253
|
-
* 1. Start from the first page of the current segment
|
|
254
|
-
* 2. Look for matches within pages where `pageId - startPageId <= maxSpan`
|
|
255
|
-
* 3. Apply occurrence filter (e.g., 'last') to select a match
|
|
256
|
-
* 4. Next window starts from the page after the match
|
|
257
|
-
*
|
|
258
|
-
* Examples:
|
|
259
|
-
* - `maxSpan: 1` = look 1 page ahead (segments span at most 2 pages)
|
|
260
|
-
* - `maxSpan: 2` = look 2 pages ahead (segments span at most 3 pages)
|
|
261
|
-
* - `undefined` = no limit (entire content treated as one group)
|
|
262
|
-
*
|
|
263
|
-
* Note: With non-consecutive page IDs, the algorithm uses actual ID
|
|
264
|
-
* difference, not array index. Pages 1 and 5 have a difference of 4.
|
|
265
|
-
*
|
|
266
|
-
* @example
|
|
267
|
-
* // Split at last period, looking up to 1 page ahead
|
|
268
|
-
* // Pages 1,2: split at page 2's last period
|
|
269
|
-
* // Page 3: split at page 3's last period
|
|
270
|
-
* { lineEndsWith: ['.'], split: 'after', occurrence: 'last', maxSpan: 1 }
|
|
271
|
-
*/
|
|
272
|
-
maxSpan?: number;
|
|
273
266
|
/**
|
|
274
267
|
* Enable diacritic-insensitive matching for Arabic text.
|
|
275
268
|
*
|
|
@@ -354,12 +347,6 @@ type RuleConstraints = {
|
|
|
354
347
|
* { lineStartsWith: ['{{bab}}'], split: 'before', meta: { type: 'chapter' } }
|
|
355
348
|
*/
|
|
356
349
|
meta?: Record<string, unknown>;
|
|
357
|
-
/**
|
|
358
|
-
* Fallback behavior when no matches are found within a maxSpan boundary.
|
|
359
|
-
* - 'page': Create split points at page boundaries
|
|
360
|
-
* - undefined: No fallback (current behavior)
|
|
361
|
-
*/
|
|
362
|
-
fallback?: 'page';
|
|
363
350
|
/**
|
|
364
351
|
* Page-start guard: only allow this rule to match at the START of a page if the
|
|
365
352
|
* previous page's last non-whitespace character matches this pattern.
|
|
@@ -388,7 +375,7 @@ type RuleConstraints = {
|
|
|
388
375
|
* Each rule must specify:
|
|
389
376
|
* - **Pattern** (exactly one): `regex`, `template`, `lineStartsWith`,
|
|
390
377
|
* `lineStartsAfter`, or `lineEndsWith`
|
|
391
|
-
* - **Split behavior**: `split` (optional, defaults to `'at'`), `occurrence`, `
|
|
378
|
+
* - **Split behavior**: `split` (optional, defaults to `'at'`), `occurrence`, `fuzzy`
|
|
392
379
|
* - **Constraints** (optional): `min`, `max`, `meta`
|
|
393
380
|
*
|
|
394
381
|
* @example
|
|
@@ -424,7 +411,6 @@ type SplitRule = PatternType & SplitBehavior & RuleConstraints;
|
|
|
424
411
|
type Page = {
|
|
425
412
|
/**
|
|
426
413
|
* Unique page/entry ID used for:
|
|
427
|
-
* - `maxSpan` grouping (segments spanning multiple pages)
|
|
428
414
|
* - `min`/`max` constraint filtering
|
|
429
415
|
* - `from`/`to` tracking in output segments
|
|
430
416
|
*/
|
|
@@ -625,6 +611,21 @@ type SegmentationOptions = {
|
|
|
625
611
|
* rule's metadata is used for each segment.
|
|
626
612
|
*/
|
|
627
613
|
rules?: SplitRule[];
|
|
614
|
+
/**
|
|
615
|
+
* Attach debugging provenance into `segment.meta` indicating which rule and/or breakpoint
|
|
616
|
+
* created the segment boundary.
|
|
617
|
+
*
|
|
618
|
+
* This is opt-in because it increases output size.
|
|
619
|
+
*
|
|
620
|
+
* When enabled (default metaKey: `_flappa`), segments may include:
|
|
621
|
+
* `meta._flappa.rule` and/or `meta._flappa.breakpoint`.
|
|
622
|
+
*/
|
|
623
|
+
debug?: boolean | {
|
|
624
|
+
/** Where to store provenance in meta. @default '_flappa' */
|
|
625
|
+
metaKey?: string;
|
|
626
|
+
/** Which kinds of provenance to include. @default ['rule','breakpoint'] */
|
|
627
|
+
include?: Array<'rule' | 'breakpoint'>;
|
|
628
|
+
};
|
|
628
629
|
/**
|
|
629
630
|
* Maximum pages per segment before breakpoints are applied.
|
|
630
631
|
*
|
|
@@ -766,11 +767,51 @@ type Segment = {
|
|
|
766
767
|
meta?: Record<string, unknown>;
|
|
767
768
|
};
|
|
768
769
|
//#endregion
|
|
770
|
+
//#region src/segmentation/optimize-rules.d.ts
|
|
771
|
+
/**
|
|
772
|
+
* Result from optimizing rules.
|
|
773
|
+
*/
|
|
774
|
+
type OptimizeResult = {
|
|
775
|
+
/** Optimized rules (merged and sorted by specificity) */
|
|
776
|
+
rules: SplitRule[];
|
|
777
|
+
/** Number of rules that were merged into existing rules */
|
|
778
|
+
mergedCount: number;
|
|
779
|
+
};
|
|
780
|
+
/**
|
|
781
|
+
* Optimize split rules by merging compatible rules and sorting by specificity.
|
|
782
|
+
*
|
|
783
|
+
* This function:
|
|
784
|
+
* 1. **Merges compatible rules**: Rules with the same pattern type and identical
|
|
785
|
+
* options (meta, fuzzy, min/max, etc.) have their pattern arrays combined
|
|
786
|
+
* 2. **Deduplicates patterns**: Removes duplicate patterns within each rule
|
|
787
|
+
* 3. **Sorts by specificity**: Rules with longer patterns come first
|
|
788
|
+
*
|
|
789
|
+
* Only array-based pattern types (`lineStartsWith`, `lineStartsAfter`, `lineEndsWith`)
|
|
790
|
+
* can be merged. `template` and `regex` rules are kept separate.
|
|
791
|
+
*
|
|
792
|
+
* @param rules - Array of split rules to optimize
|
|
793
|
+
* @returns Optimized rules and count of merged rules
|
|
794
|
+
*
|
|
795
|
+
* @example
|
|
796
|
+
* import { optimizeRules } from 'flappa-doormal';
|
|
797
|
+
*
|
|
798
|
+
* const { rules, mergedCount } = optimizeRules([
|
|
799
|
+
* { lineStartsWith: ['{{kitab}}'], fuzzy: true, meta: { type: 'header' } },
|
|
800
|
+
* { lineStartsWith: ['{{bab}}'], fuzzy: true, meta: { type: 'header' } },
|
|
801
|
+
* { lineStartsAfter: ['{{numbered}}'], meta: { type: 'entry' } },
|
|
802
|
+
* ]);
|
|
803
|
+
*
|
|
804
|
+
* // rules[0] = { lineStartsWith: ['{{kitab}}', '{{bab}}'], fuzzy: true, meta: { type: 'header' } }
|
|
805
|
+
* // rules[1] = { lineStartsAfter: ['{{numbered}}'], meta: { type: 'entry' } }
|
|
806
|
+
* // mergedCount = 1
|
|
807
|
+
*/
|
|
808
|
+
declare const optimizeRules: (rules: SplitRule[]) => OptimizeResult;
|
|
809
|
+
//#endregion
|
|
769
810
|
//#region src/segmentation/pattern-validator.d.ts
|
|
770
811
|
/**
|
|
771
812
|
* Types of validation issues that can be detected.
|
|
772
813
|
*/
|
|
773
|
-
type ValidationIssueType = 'missing_braces' | 'unknown_token' | 'duplicate';
|
|
814
|
+
type ValidationIssueType = 'missing_braces' | 'unknown_token' | 'duplicate' | 'empty_pattern';
|
|
774
815
|
/**
|
|
775
816
|
* A validation issue found in a pattern.
|
|
776
817
|
*/
|
|
@@ -778,6 +819,10 @@ type ValidationIssue = {
|
|
|
778
819
|
type: ValidationIssueType;
|
|
779
820
|
message: string;
|
|
780
821
|
suggestion?: string;
|
|
822
|
+
/** The token name involved in the issue (for unknown_token / missing_braces) */
|
|
823
|
+
token?: string;
|
|
824
|
+
/** The specific pattern involved (for duplicate) */
|
|
825
|
+
pattern?: string;
|
|
781
826
|
};
|
|
782
827
|
/**
|
|
783
828
|
* Validation result for a single rule, with issues keyed by pattern type.
|
|
@@ -809,6 +854,20 @@ type RuleValidationResult = {
|
|
|
809
854
|
* // issues[1]?.lineStartsWith?.[0]?.type === 'unknown_token'
|
|
810
855
|
*/
|
|
811
856
|
declare const validateRules: (rules: SplitRule[]) => (RuleValidationResult | undefined)[];
|
|
857
|
+
/**
|
|
858
|
+
* Formats a validation result array into a list of human-readable error messages.
|
|
859
|
+
*
|
|
860
|
+
* Useful for displaying validation errors in UIs.
|
|
861
|
+
*
|
|
862
|
+
* @param results - The result array from `validateRules()`
|
|
863
|
+
* @returns Array of formatted error strings
|
|
864
|
+
*
|
|
865
|
+
* @example
|
|
866
|
+
* const issues = validateRules(rules);
|
|
867
|
+
* const errors = formatValidationReport(issues);
|
|
868
|
+
* // ["Rule 1, lineStartsWith: Missing {{}} around token..."]
|
|
869
|
+
*/
|
|
870
|
+
declare const formatValidationReport: (results: (RuleValidationResult | undefined)[]) => string[];
|
|
812
871
|
//#endregion
|
|
813
872
|
//#region src/segmentation/replace.d.ts
|
|
814
873
|
/**
|
|
@@ -1148,6 +1207,63 @@ declare const getAvailableTokens: () => string[];
|
|
|
1148
1207
|
* getTokenPattern('unknown') // → undefined
|
|
1149
1208
|
*/
|
|
1150
1209
|
declare const getTokenPattern: (tokenName: string) => string | undefined;
|
|
1210
|
+
/**
|
|
1211
|
+
* Checks if a pattern (or array of patterns) contains tokens that should
|
|
1212
|
+
* default to fuzzy matching.
|
|
1213
|
+
*
|
|
1214
|
+
* Fuzzy-default tokens are: bab, basmalah, fasl, kitab, naql
|
|
1215
|
+
*
|
|
1216
|
+
* @param patterns - Single pattern string or array of pattern strings
|
|
1217
|
+
* @returns `true` if any pattern contains a fuzzy-default token
|
|
1218
|
+
*
|
|
1219
|
+
* @example
|
|
1220
|
+
* shouldDefaultToFuzzy('{{bab}} الإيمان') // true
|
|
1221
|
+
* shouldDefaultToFuzzy('{{raqms}} {{dash}}') // false
|
|
1222
|
+
* shouldDefaultToFuzzy(['{{kitab}}', '{{raqms}}']) // true
|
|
1223
|
+
*/
|
|
1224
|
+
declare const shouldDefaultToFuzzy: (patterns: string | string[]) => boolean;
|
|
1225
|
+
/**
|
|
1226
|
+
* Structure for mapping a token to a capture name.
|
|
1227
|
+
*/
|
|
1228
|
+
type TokenMapping = {
|
|
1229
|
+
token: string;
|
|
1230
|
+
name: string;
|
|
1231
|
+
};
|
|
1232
|
+
/**
|
|
1233
|
+
* Apply token mappings to a template string.
|
|
1234
|
+
*
|
|
1235
|
+
* Transforms `{{token}}` into `{{token:name}}` based on the provided mappings.
|
|
1236
|
+
* Useful for applying user-configured capture names to a raw template.
|
|
1237
|
+
*
|
|
1238
|
+
* - Only affects exact matches of `{{token}}`.
|
|
1239
|
+
* - Does NOT affect tokens that already have a capture name (e.g. `{{token:existing}}`).
|
|
1240
|
+
* - Does NOT affect capture-only tokens (e.g. `{{:name}}`).
|
|
1241
|
+
*
|
|
1242
|
+
* @param template - The template string to transform
|
|
1243
|
+
* @param mappings - Array of mappings from token name to capture name
|
|
1244
|
+
* @returns Transformed template string with captures applied
|
|
1245
|
+
*
|
|
1246
|
+
* @example
|
|
1247
|
+
* applyTokenMappings('{{raqms}} {{dash}}', [{ token: 'raqms', name: 'num' }])
|
|
1248
|
+
* // → '{{raqms:num}} {{dash}}'
|
|
1249
|
+
*/
|
|
1250
|
+
declare const applyTokenMappings: (template: string, mappings: TokenMapping[]) => string;
|
|
1251
|
+
/**
|
|
1252
|
+
* Strip token mappings from a template string.
|
|
1253
|
+
*
|
|
1254
|
+
* Transforms `{{token:name}}` back into `{{token}}`.
|
|
1255
|
+
* Also transforms `{{:name}}` patterns (capture-only) into `{{}}` (which is invalid/empty).
|
|
1256
|
+
*
|
|
1257
|
+
* Useful for normalizing templates for storage or comparison.
|
|
1258
|
+
*
|
|
1259
|
+
* @param template - The template string to strip
|
|
1260
|
+
* @returns Template string with capture names removed
|
|
1261
|
+
*
|
|
1262
|
+
* @example
|
|
1263
|
+
* stripTokenMappings('{{raqms:num}} {{dash}}')
|
|
1264
|
+
* // → '{{raqms}} {{dash}}'
|
|
1265
|
+
*/
|
|
1266
|
+
declare const stripTokenMappings: (template: string) => string;
|
|
1151
1267
|
//#endregion
|
|
1152
1268
|
//#region src/analysis/line-starts.d.ts
|
|
1153
1269
|
type LineStartAnalysisOptions = {
|
|
@@ -1346,5 +1462,5 @@ declare function recoverMistakenMarkersForRuns(runs: MarkerRecoveryRun[], opts?:
|
|
|
1346
1462
|
segments: Segment[];
|
|
1347
1463
|
};
|
|
1348
1464
|
//#endregion
|
|
1349
|
-
export { type Breakpoint, type BreakpointRule, type CommonLineStartPattern, type DetectedPattern, type ExpandResult, type LineStartAnalysisOptions, type LineStartPatternExample, type Logger, type MarkerRecoveryReport, type MarkerRecoveryRun, type MarkerRecoverySelector, type Page, type PageRange, type RepeatingSequenceExample, type RepeatingSequenceOptions, type RepeatingSequencePattern, type ReplaceRule, type RuleValidationResult, type Segment, type SegmentationOptions, type SplitRule, TOKEN_PATTERNS, type ValidationIssue, type ValidationIssueType, analyzeCommonLineStarts, analyzeRepeatingSequences, analyzeTextForRule, applyReplacements, containsTokens, detectTokenPatterns, escapeRegex, escapeTemplateBrackets, expandCompositeTokensInTemplate, expandTokens, expandTokensWithCaptures, generateTemplateFromText, getAvailableTokens, getTokenPattern, makeDiacriticInsensitive, recoverMistakenLineStartsAfterMarkers, recoverMistakenMarkersForRuns, segmentPages, suggestPatternConfig, templateToRegex, validateRules };
|
|
1465
|
+
export { type Breakpoint, type BreakpointRule, type CommonLineStartPattern, type DetectedPattern, type ExpandResult, type LineStartAnalysisOptions, type LineStartPatternExample, type Logger, type MarkerRecoveryReport, type MarkerRecoveryRun, type MarkerRecoverySelector, type OptimizeResult, PATTERN_TYPE_KEYS, type Page, type PageRange, type PatternTypeKey, type RepeatingSequenceExample, type RepeatingSequenceOptions, type RepeatingSequencePattern, type ReplaceRule, type RuleValidationResult, type Segment, type SegmentationOptions, type SplitRule, TOKEN_PATTERNS, type TokenMapping, type ValidationIssue, type ValidationIssueType, analyzeCommonLineStarts, analyzeRepeatingSequences, analyzeTextForRule, applyReplacements, applyTokenMappings, containsTokens, detectTokenPatterns, escapeRegex, escapeTemplateBrackets, expandCompositeTokensInTemplate, expandTokens, expandTokensWithCaptures, formatValidationReport, generateTemplateFromText, getAvailableTokens, getTokenPattern, makeDiacriticInsensitive, optimizeRules, recoverMistakenLineStartsAfterMarkers, recoverMistakenMarkersForRuns, segmentPages, shouldDefaultToFuzzy, stripTokenMappings, suggestPatternConfig, templateToRegex, validateRules };
|
|
1350
1466
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/segmentation/fuzzy.ts","../src/segmentation/types.ts","../src/segmentation/pattern-validator.ts","../src/segmentation/replace.ts","../src/segmentation/segmenter.ts","../src/segmentation/tokens.ts","../src/analysis/line-starts.ts","../src/analysis/repeating-sequences.ts","../src/detection.ts","../src/recovery.ts"],"sourcesContent":[],"mappings":";;AAkEA;AA+FA;;;;;ACnIiB;AA4BG;AA8BM;AAiCC;AAwBH;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/segmentation/fuzzy.ts","../src/segmentation/types.ts","../src/segmentation/optimize-rules.ts","../src/segmentation/pattern-validator.ts","../src/segmentation/replace.ts","../src/segmentation/segmenter.ts","../src/segmentation/tokens.ts","../src/analysis/line-starts.ts","../src/analysis/repeating-sequences.ts","../src/detection.ts","../src/recovery.ts"],"sourcesContent":[],"mappings":"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"}
|