@pattern-algebra/core 0.0.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 (154) hide show
  1. package/README.md +571 -0
  2. package/dist/automaton/complement.d.ts +20 -0
  3. package/dist/automaton/complement.d.ts.map +1 -0
  4. package/dist/automaton/complement.js +36 -0
  5. package/dist/automaton/complement.js.map +1 -0
  6. package/dist/automaton/complement.test.d.ts +2 -0
  7. package/dist/automaton/complement.test.d.ts.map +1 -0
  8. package/dist/automaton/complement.test.js +114 -0
  9. package/dist/automaton/complement.test.js.map +1 -0
  10. package/dist/automaton/determinize.d.ts +41 -0
  11. package/dist/automaton/determinize.d.ts.map +1 -0
  12. package/dist/automaton/determinize.js +310 -0
  13. package/dist/automaton/determinize.js.map +1 -0
  14. package/dist/automaton/determinize.test.d.ts +2 -0
  15. package/dist/automaton/determinize.test.d.ts.map +1 -0
  16. package/dist/automaton/determinize.test.js +134 -0
  17. package/dist/automaton/determinize.test.js.map +1 -0
  18. package/dist/automaton/emptiness.d.ts +41 -0
  19. package/dist/automaton/emptiness.d.ts.map +1 -0
  20. package/dist/automaton/emptiness.js +262 -0
  21. package/dist/automaton/emptiness.js.map +1 -0
  22. package/dist/automaton/emptiness.test.d.ts +2 -0
  23. package/dist/automaton/emptiness.test.d.ts.map +1 -0
  24. package/dist/automaton/emptiness.test.js +154 -0
  25. package/dist/automaton/emptiness.test.js.map +1 -0
  26. package/dist/automaton/index.d.ts +10 -0
  27. package/dist/automaton/index.d.ts.map +1 -0
  28. package/dist/automaton/index.js +11 -0
  29. package/dist/automaton/index.js.map +1 -0
  30. package/dist/automaton/intersect.d.ts +35 -0
  31. package/dist/automaton/intersect.d.ts.map +1 -0
  32. package/dist/automaton/intersect.js +302 -0
  33. package/dist/automaton/intersect.js.map +1 -0
  34. package/dist/automaton/pattern-algebra.d.ts +62 -0
  35. package/dist/automaton/pattern-algebra.d.ts.map +1 -0
  36. package/dist/automaton/pattern-algebra.js +309 -0
  37. package/dist/automaton/pattern-algebra.js.map +1 -0
  38. package/dist/automaton/pattern-algebra.test.d.ts +2 -0
  39. package/dist/automaton/pattern-algebra.test.d.ts.map +1 -0
  40. package/dist/automaton/pattern-algebra.test.js +223 -0
  41. package/dist/automaton/pattern-algebra.test.js.map +1 -0
  42. package/dist/compile/automaton-builder.d.ts +47 -0
  43. package/dist/compile/automaton-builder.d.ts.map +1 -0
  44. package/dist/compile/automaton-builder.js +211 -0
  45. package/dist/compile/automaton-builder.js.map +1 -0
  46. package/dist/compile/compiler.d.ts +32 -0
  47. package/dist/compile/compiler.d.ts.map +1 -0
  48. package/dist/compile/compiler.js +47 -0
  49. package/dist/compile/compiler.js.map +1 -0
  50. package/dist/compile/index.d.ts +8 -0
  51. package/dist/compile/index.d.ts.map +1 -0
  52. package/dist/compile/index.js +8 -0
  53. package/dist/compile/index.js.map +1 -0
  54. package/dist/compile/quick-reject.d.ts +28 -0
  55. package/dist/compile/quick-reject.d.ts.map +1 -0
  56. package/dist/compile/quick-reject.js +147 -0
  57. package/dist/compile/quick-reject.js.map +1 -0
  58. package/dist/containment/analysis.d.ts +60 -0
  59. package/dist/containment/analysis.d.ts.map +1 -0
  60. package/dist/containment/analysis.js +378 -0
  61. package/dist/containment/analysis.js.map +1 -0
  62. package/dist/containment/containment.d.ts +23 -0
  63. package/dist/containment/containment.d.ts.map +1 -0
  64. package/dist/containment/containment.js +681 -0
  65. package/dist/containment/containment.js.map +1 -0
  66. package/dist/containment/containment.test.d.ts +2 -0
  67. package/dist/containment/containment.test.d.ts.map +1 -0
  68. package/dist/containment/containment.test.js +209 -0
  69. package/dist/containment/containment.test.js.map +1 -0
  70. package/dist/containment/index.d.ts +7 -0
  71. package/dist/containment/index.d.ts.map +1 -0
  72. package/dist/containment/index.js +7 -0
  73. package/dist/containment/index.js.map +1 -0
  74. package/dist/core-alpha.d.ts +1253 -0
  75. package/dist/core-beta.d.ts +1253 -0
  76. package/dist/core-public.d.ts +1253 -0
  77. package/dist/core-unstripped.d.ts +1253 -0
  78. package/dist/index.d.ts +32 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +49 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/match/index.d.ts +8 -0
  83. package/dist/match/index.d.ts.map +1 -0
  84. package/dist/match/index.js +8 -0
  85. package/dist/match/index.js.map +1 -0
  86. package/dist/match/matcher.d.ts +40 -0
  87. package/dist/match/matcher.d.ts.map +1 -0
  88. package/dist/match/matcher.js +256 -0
  89. package/dist/match/matcher.js.map +1 -0
  90. package/dist/match/matcher.test.d.ts +2 -0
  91. package/dist/match/matcher.test.d.ts.map +1 -0
  92. package/dist/match/matcher.test.js +185 -0
  93. package/dist/match/matcher.test.js.map +1 -0
  94. package/dist/match/path-utils.d.ts +132 -0
  95. package/dist/match/path-utils.d.ts.map +1 -0
  96. package/dist/match/path-utils.js +223 -0
  97. package/dist/match/path-utils.js.map +1 -0
  98. package/dist/match/path-utils.test.d.ts +2 -0
  99. package/dist/match/path-utils.test.d.ts.map +1 -0
  100. package/dist/match/path-utils.test.js +193 -0
  101. package/dist/match/path-utils.test.js.map +1 -0
  102. package/dist/match/segment-matcher.d.ts +25 -0
  103. package/dist/match/segment-matcher.d.ts.map +1 -0
  104. package/dist/match/segment-matcher.js +267 -0
  105. package/dist/match/segment-matcher.js.map +1 -0
  106. package/dist/parse/brace-expansion.d.ts +34 -0
  107. package/dist/parse/brace-expansion.d.ts.map +1 -0
  108. package/dist/parse/brace-expansion.js +294 -0
  109. package/dist/parse/brace-expansion.js.map +1 -0
  110. package/dist/parse/brace-expansion.test.d.ts +2 -0
  111. package/dist/parse/brace-expansion.test.d.ts.map +1 -0
  112. package/dist/parse/brace-expansion.test.js +105 -0
  113. package/dist/parse/brace-expansion.test.js.map +1 -0
  114. package/dist/parse/index.d.ts +8 -0
  115. package/dist/parse/index.d.ts.map +1 -0
  116. package/dist/parse/index.js +8 -0
  117. package/dist/parse/index.js.map +1 -0
  118. package/dist/parse/parser.d.ts +15 -0
  119. package/dist/parse/parser.d.ts.map +1 -0
  120. package/dist/parse/parser.js +526 -0
  121. package/dist/parse/parser.js.map +1 -0
  122. package/dist/parse/parser.test.d.ts +2 -0
  123. package/dist/parse/parser.test.d.ts.map +1 -0
  124. package/dist/parse/parser.test.js +266 -0
  125. package/dist/parse/parser.test.js.map +1 -0
  126. package/dist/parse/validator.d.ts +30 -0
  127. package/dist/parse/validator.d.ts.map +1 -0
  128. package/dist/parse/validator.js +115 -0
  129. package/dist/parse/validator.js.map +1 -0
  130. package/dist/parse/validator.test.d.ts +2 -0
  131. package/dist/parse/validator.test.d.ts.map +1 -0
  132. package/dist/parse/validator.test.js +45 -0
  133. package/dist/parse/validator.test.js.map +1 -0
  134. package/dist/types/ast.d.ts +158 -0
  135. package/dist/types/ast.d.ts.map +1 -0
  136. package/dist/types/ast.js +2 -0
  137. package/dist/types/ast.js.map +1 -0
  138. package/dist/types/automaton.d.ts +150 -0
  139. package/dist/types/automaton.d.ts.map +1 -0
  140. package/dist/types/automaton.js +2 -0
  141. package/dist/types/automaton.js.map +1 -0
  142. package/dist/types/containment.d.ts +257 -0
  143. package/dist/types/containment.d.ts.map +1 -0
  144. package/dist/types/containment.js +5 -0
  145. package/dist/types/containment.js.map +1 -0
  146. package/dist/types/errors.d.ts +37 -0
  147. package/dist/types/errors.d.ts.map +1 -0
  148. package/dist/types/errors.js +24 -0
  149. package/dist/types/errors.js.map +1 -0
  150. package/dist/types/index.d.ts +10 -0
  151. package/dist/types/index.d.ts.map +1 -0
  152. package/dist/types/index.js +6 -0
  153. package/dist/types/index.js.map +1 -0
  154. package/package.json +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-algebra.js","sourceRoot":"","sources":["../../src/automaton/pattern-algebra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pattern-algebra.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-algebra.test.d.ts","sourceRoot":"","sources":["../../src/automaton/pattern-algebra.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,223 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { patternIntersect, patternUnion, patternComplement, patternDifference } from './pattern-algebra';
3
+ import { compilePattern } from '../compile';
4
+ import { parsePattern } from '../parse';
5
+ import { matchPath } from '../match';
6
+ /**
7
+ * Helper to compile a pattern from source string.
8
+ */
9
+ function compile(source) {
10
+ return compilePattern(parsePattern(source));
11
+ }
12
+ describe('patternIntersect', () => {
13
+ it('should match paths matching both patterns', () => {
14
+ const srcFiles = compile('src/**');
15
+ const tsFiles = compile('**/*.ts');
16
+ const result = patternIntersect(srcFiles, tsFiles);
17
+ // Should match TypeScript files in src
18
+ expect(matchPath('/src/index.ts', result)).toBe(true);
19
+ expect(matchPath('/src/utils/helper.ts', result)).toBe(true);
20
+ // Should NOT match TypeScript files outside src
21
+ expect(matchPath('/lib/index.ts', result)).toBe(false);
22
+ // Should NOT match non-TypeScript files in src
23
+ expect(matchPath('/src/index.js', result)).toBe(false);
24
+ });
25
+ it('should create synthetic source string', () => {
26
+ const a = compile('src/**');
27
+ const b = compile('**/*.ts');
28
+ const result = patternIntersect(a, b);
29
+ expect(result.source).toBe('(src/**) ∩ (**/*.ts)');
30
+ });
31
+ it('should compute depth constraints correctly', () => {
32
+ const shallow = compile('src/*'); // exactly 2 segments
33
+ const deep = compile('**/*.ts'); // at least 1 segment
34
+ const result = patternIntersect(shallow, deep);
35
+ // Intersection should use max of minSegments
36
+ expect(result.minSegments).toBe(2);
37
+ });
38
+ it('should handle intersection of literals', () => {
39
+ const exact = compile('src/index.ts');
40
+ const pattern = compile('src/*.ts');
41
+ const result = patternIntersect(exact, pattern);
42
+ expect(matchPath('/src/index.ts', result)).toBe(true);
43
+ expect(matchPath('/src/other.ts', result)).toBe(false);
44
+ });
45
+ it('should return empty for disjoint patterns', () => {
46
+ const js = compile('**/*.js');
47
+ const ts = compile('**/*.ts');
48
+ const result = patternIntersect(js, ts);
49
+ // These patterns have no overlap
50
+ expect(matchPath('/foo.js', result)).toBe(false);
51
+ expect(matchPath('/foo.ts', result)).toBe(false);
52
+ });
53
+ });
54
+ describe('patternUnion', () => {
55
+ it('should match paths matching either pattern', () => {
56
+ const jsFiles = compile('**/*.js');
57
+ const tsFiles = compile('**/*.ts');
58
+ const result = patternUnion(jsFiles, tsFiles);
59
+ expect(matchPath('/src/index.js', result)).toBe(true);
60
+ expect(matchPath('/src/index.ts', result)).toBe(true);
61
+ expect(matchPath('/lib/utils.js', result)).toBe(true);
62
+ // Should NOT match other extensions
63
+ expect(matchPath('/src/index.css', result)).toBe(false);
64
+ });
65
+ it('should create synthetic source string', () => {
66
+ const a = compile('*.js');
67
+ const b = compile('*.ts');
68
+ const result = patternUnion(a, b);
69
+ expect(result.source).toBe('(*.js) ∪ (*.ts)');
70
+ });
71
+ it('should be unbounded if either pattern is unbounded', () => {
72
+ const bounded = compile('src/*.ts');
73
+ const unbounded = compile('**/*.ts');
74
+ const result = patternUnion(bounded, unbounded);
75
+ expect(result.isUnbounded).toBe(true);
76
+ });
77
+ it('should compute depth constraints correctly', () => {
78
+ const shallow = compile('*.ts'); // 1 segment
79
+ const deep = compile('src/**/*.ts'); // at least 2 segments
80
+ const result = patternUnion(shallow, deep);
81
+ // Union should use min of minSegments
82
+ expect(result.minSegments).toBe(1);
83
+ });
84
+ });
85
+ describe('patternComplement', () => {
86
+ it('should match paths NOT matching original pattern (simple case)', () => {
87
+ // Use a simpler pattern without globstar for complement test
88
+ const srcIndex = compile('src/index.ts');
89
+ const notSrcIndex = patternComplement(srcIndex);
90
+ // Should NOT match the exact file
91
+ expect(matchPath('/src/index.ts', notSrcIndex)).toBe(false);
92
+ // Should match other files
93
+ expect(matchPath('/src/index.js', notSrcIndex)).toBe(true);
94
+ expect(matchPath('/src/other.ts', notSrcIndex)).toBe(true);
95
+ });
96
+ it('should create synthetic source string', () => {
97
+ const a = compile('**/*.ts');
98
+ const result = patternComplement(a);
99
+ expect(result.source).toBe('¬(**/*.ts)');
100
+ });
101
+ it('should always be unbounded', () => {
102
+ const bounded = compile('src/*.ts');
103
+ const result = patternComplement(bounded);
104
+ expect(result.isUnbounded).toBe(true);
105
+ expect(result.maxSegments).toBeUndefined();
106
+ });
107
+ it('should have empty quick-reject filter', () => {
108
+ const pattern = compile('src/**/*.ts');
109
+ const result = patternComplement(pattern);
110
+ expect(result.quickReject).toEqual({});
111
+ });
112
+ });
113
+ describe('patternDifference', () => {
114
+ it('should match paths in A but not in B (simple case)', () => {
115
+ // Use simpler patterns that don't rely on complex globstar complement
116
+ const srcFiles = compile('src/*');
117
+ const indexFiles = compile('src/index.ts');
118
+ const result = patternDifference(srcFiles, indexFiles);
119
+ // Should match src files that aren't index.ts
120
+ expect(matchPath('/src/other.ts', result)).toBe(true);
121
+ expect(matchPath('/src/utils.js', result)).toBe(true);
122
+ // Should NOT match index.ts specifically
123
+ expect(matchPath('/src/index.ts', result)).toBe(false);
124
+ // Should NOT match files outside src
125
+ expect(matchPath('/lib/index.ts', result)).toBe(false);
126
+ });
127
+ it('should create synthetic source string', () => {
128
+ const a = compile('src/**');
129
+ const b = compile('**/*.test.ts');
130
+ const result = patternDifference(a, b);
131
+ expect(result.source).toBe('(src/**) \\ (**/*.test.ts)');
132
+ });
133
+ it('should preserve unbounded status from first pattern', () => {
134
+ const unbounded = compile('**/*.ts');
135
+ const bounded = compile('test/*.ts');
136
+ const result = patternDifference(unbounded, bounded);
137
+ expect(result.isUnbounded).toBe(true);
138
+ });
139
+ it('should preserve quick-reject from first pattern', () => {
140
+ const a = compile('src/**/*.ts');
141
+ const b = compile('**/*.test.ts');
142
+ const result = patternDifference(a, b);
143
+ // Should inherit A's prefix requirement
144
+ expect(result.quickReject.requiredPrefix).toBe('/src');
145
+ });
146
+ });
147
+ describe('quick-reject filter merging', () => {
148
+ describe('intersection (AND semantics)', () => {
149
+ it('should take longer prefix when one is substring of other', () => {
150
+ const a = compile('src/**');
151
+ const b = compile('src/utils/**');
152
+ const result = patternIntersect(a, b);
153
+ expect(result.quickReject.requiredPrefix).toBe('/src/utils');
154
+ });
155
+ it('should combine required literals', () => {
156
+ const a = compile('src/**/index.ts');
157
+ const b = compile('**/utils/**/index.ts');
158
+ const result = patternIntersect(a, b);
159
+ const literals = result.quickReject.requiredLiterals ?? [];
160
+ expect(literals).toContain('src');
161
+ expect(literals).toContain('index.ts');
162
+ expect(literals).toContain('utils');
163
+ });
164
+ });
165
+ describe('union (OR semantics)', () => {
166
+ it('should take common prefix only', () => {
167
+ const a = compile('src/utils/**');
168
+ const b = compile('src/lib/**');
169
+ const result = patternUnion(a, b);
170
+ expect(result.quickReject.requiredPrefix).toBe('/src/');
171
+ });
172
+ it('should take intersection of required literals', () => {
173
+ const a = compile('src/**/index.ts');
174
+ const b = compile('lib/**/index.ts');
175
+ const result = patternUnion(a, b);
176
+ const literals = result.quickReject.requiredLiterals ?? [];
177
+ expect(literals).toContain('index.ts');
178
+ // 'src' and 'lib' should NOT be required since they differ
179
+ expect(literals).not.toContain('src');
180
+ expect(literals).not.toContain('lib');
181
+ });
182
+ });
183
+ });
184
+ describe('composition of operations', () => {
185
+ it('should support chained operations (simple case)', () => {
186
+ // Use simpler patterns to test composition
187
+ const srcJs = compile('src/*.js');
188
+ const srcTs = compile('src/*.ts');
189
+ const libJs = compile('lib/*.js');
190
+ // Union of srcJs and srcTs
191
+ const srcAll = patternUnion(srcJs, srcTs);
192
+ expect(matchPath('/src/index.js', srcAll)).toBe(true);
193
+ expect(matchPath('/src/index.ts', srcAll)).toBe(true);
194
+ expect(matchPath('/lib/index.js', srcAll)).toBe(false);
195
+ // Intersection of srcAll and libJs should be empty (different directories)
196
+ const srcAndLib = patternIntersect(srcJs, libJs);
197
+ expect(matchPath('/src/index.js', srcAndLib)).toBe(false);
198
+ expect(matchPath('/lib/index.js', srcAndLib)).toBe(false);
199
+ });
200
+ it('should satisfy A ∩ B = A - (A - B) identity', () => {
201
+ const a = compile('src/**');
202
+ const b = compile('**/*.ts');
203
+ const intersection = patternIntersect(a, b);
204
+ const viaIdentity = patternDifference(a, patternDifference(a, b));
205
+ // Both should produce equivalent behavior
206
+ const testPaths = ['/src/index.ts', '/src/foo.js', '/lib/bar.ts'];
207
+ for (const path of testPaths) {
208
+ expect(matchPath(path, intersection)).toBe(matchPath(path, viaIdentity));
209
+ }
210
+ });
211
+ it('should support nested unions', () => {
212
+ // Test union of unions
213
+ const js = compile('*.js');
214
+ const ts = compile('*.ts');
215
+ const css = compile('*.css');
216
+ const scriptsAndStyles = patternUnion(patternUnion(js, ts), css);
217
+ expect(matchPath('/index.js', scriptsAndStyles)).toBe(true);
218
+ expect(matchPath('/index.ts', scriptsAndStyles)).toBe(true);
219
+ expect(matchPath('/style.css', scriptsAndStyles)).toBe(true);
220
+ expect(matchPath('/readme.md', scriptsAndStyles)).toBe(false);
221
+ });
222
+ });
223
+ //# sourceMappingURL=pattern-algebra.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-algebra.test.js","sourceRoot":"","sources":["../../src/automaton/pattern-algebra.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Automaton builder - converts pattern AST to segment automaton.
3
+ * @packageDocumentation
4
+ */
5
+ import type { PathPattern, SegmentAutomaton } from '../types';
6
+ /**
7
+ * Build a segment automaton from a pattern AST.
8
+ *
9
+ * The automaton operates on path segments (not characters).
10
+ * This representation enables:
11
+ * - O(n) matching where n is number of path segments
12
+ * - Standard automaton operations for containment checking
13
+ *
14
+ * @param pattern - Parsed pattern AST
15
+ * @returns Segment automaton (NFA)
16
+ *
17
+ * @public
18
+ */
19
+ export declare function buildAutomaton(pattern: PathPattern): SegmentAutomaton;
20
+ /**
21
+ * Get the minimum number of segments a pattern can match.
22
+ *
23
+ * @param pattern - Pattern AST
24
+ * @returns Minimum segment count
25
+ *
26
+ * @public
27
+ */
28
+ export declare function getMinSegments(pattern: PathPattern): number;
29
+ /**
30
+ * Get the maximum number of segments a pattern can match.
31
+ *
32
+ * @param pattern - Pattern AST
33
+ * @returns Maximum segment count, or undefined if unbounded (contains **)
34
+ *
35
+ * @public
36
+ */
37
+ export declare function getMaxSegments(pattern: PathPattern): number | undefined;
38
+ /**
39
+ * Check if a pattern contains a globstar (**).
40
+ *
41
+ * @param pattern - Pattern AST
42
+ * @returns true if pattern is unbounded
43
+ *
44
+ * @public
45
+ */
46
+ export declare function isUnbounded(pattern: PathPattern): boolean;
47
+ //# sourceMappingURL=automaton-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automaton-builder.d.ts","sourceRoot":"","sources":["../../src/compile/automaton-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EAKX,gBAAgB,EAGjB,MAAM,UAAU,CAAA;AAWjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CAmBrE;AAwID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAE3D;AAkBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAEvE;AAsBD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Automaton builder - converts pattern AST to segment automaton.
3
+ * @packageDocumentation
4
+ */
5
+ import { segmentToRegex } from '../match/segment-matcher';
6
+ /**
7
+ * Build a segment automaton from a pattern AST.
8
+ *
9
+ * The automaton operates on path segments (not characters).
10
+ * This representation enables:
11
+ * - O(n) matching where n is number of path segments
12
+ * - Standard automaton operations for containment checking
13
+ *
14
+ * @param pattern - Parsed pattern AST
15
+ * @returns Segment automaton (NFA)
16
+ *
17
+ * @public
18
+ */
19
+ export function buildAutomaton(pattern) {
20
+ const builder = {
21
+ states: [],
22
+ nextStateId: 0,
23
+ };
24
+ // Create initial and final states
25
+ const initialId = createState(builder, false);
26
+ const finalId = createState(builder, true);
27
+ // Build automaton for the pattern node
28
+ buildNodeAutomaton(builder, pattern.root, initialId, finalId);
29
+ return {
30
+ states: builder.states,
31
+ initialState: initialId,
32
+ acceptingStates: [finalId],
33
+ isDeterministic: false, // NFAs are not deterministic by default
34
+ };
35
+ }
36
+ /**
37
+ * Create a new state in the automaton.
38
+ */
39
+ function createState(builder, accepting) {
40
+ const id = builder.nextStateId++;
41
+ builder.states.push({
42
+ id,
43
+ transitions: [],
44
+ accepting,
45
+ });
46
+ return id;
47
+ }
48
+ /**
49
+ * Add a transition to a state.
50
+ */
51
+ function addTransition(builder, fromState, transition) {
52
+ const state = builder.states[fromState];
53
+ builder.states[fromState] = {
54
+ ...state,
55
+ transitions: [...state.transitions, transition],
56
+ };
57
+ }
58
+ /**
59
+ * Build automaton for a pattern node.
60
+ */
61
+ function buildNodeAutomaton(builder, node, startState, endState) {
62
+ if (node.type === 'sequence') {
63
+ buildSequenceAutomaton(builder, node, startState, endState);
64
+ }
65
+ else {
66
+ buildAlternationAutomaton(builder, node, startState, endState);
67
+ }
68
+ }
69
+ /**
70
+ * Build automaton for a segment sequence.
71
+ */
72
+ function buildSequenceAutomaton(builder, sequence, startState, endState) {
73
+ const segments = sequence.segments;
74
+ if (segments.length === 0) {
75
+ // Empty sequence - epsilon transition
76
+ addTransition(builder, startState, { type: 'epsilon', target: endState });
77
+ return;
78
+ }
79
+ // Create intermediate states between segments
80
+ let currentState = startState;
81
+ for (let i = 0; i < segments.length; i++) {
82
+ const segment = segments[i];
83
+ const isLast = i === segments.length - 1;
84
+ const nextState = isLast ? endState : createState(builder, false);
85
+ buildSegmentAutomaton(builder, segment, currentState, nextState);
86
+ currentState = nextState;
87
+ }
88
+ }
89
+ /**
90
+ * Build automaton for an alternation (brace expansion).
91
+ */
92
+ function buildAlternationAutomaton(builder, alternation, startState, endState) {
93
+ // Each branch connects start to end via epsilon transitions
94
+ for (const branch of alternation.branches) {
95
+ const branchStart = createState(builder, false);
96
+ const branchEnd = createState(builder, false);
97
+ // Epsilon from start to branch start
98
+ addTransition(builder, startState, { type: 'epsilon', target: branchStart });
99
+ // Build branch automaton
100
+ buildNodeAutomaton(builder, branch, branchStart, branchEnd);
101
+ // Epsilon from branch end to end
102
+ addTransition(builder, branchEnd, { type: 'epsilon', target: endState });
103
+ }
104
+ }
105
+ /**
106
+ * Build automaton for a single segment.
107
+ */
108
+ function buildSegmentAutomaton(builder, segment, startState, endState) {
109
+ switch (segment.type) {
110
+ case 'literal':
111
+ addTransition(builder, startState, {
112
+ type: 'literal',
113
+ segment: segment.value,
114
+ target: endState,
115
+ });
116
+ break;
117
+ case 'globstar':
118
+ // Globstar: can match zero or more segments
119
+ // Model as: epsilon to end (zero segments) OR consume one and loop
120
+ addTransition(builder, startState, {
121
+ type: 'globstar',
122
+ selfLoop: startState,
123
+ exit: endState,
124
+ });
125
+ break;
126
+ case 'wildcard':
127
+ case 'charclass':
128
+ case 'composite': {
129
+ const regex = segmentToRegex(segment);
130
+ if (regex) {
131
+ addTransition(builder, startState, {
132
+ type: 'wildcard',
133
+ pattern: regex,
134
+ patternSource: segment.type === 'wildcard' ? segment.pattern : '',
135
+ target: endState,
136
+ });
137
+ }
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ /**
143
+ * Get the minimum number of segments a pattern can match.
144
+ *
145
+ * @param pattern - Pattern AST
146
+ * @returns Minimum segment count
147
+ *
148
+ * @public
149
+ */
150
+ export function getMinSegments(pattern) {
151
+ return getNodeMinSegments(pattern.root);
152
+ }
153
+ function getNodeMinSegments(node) {
154
+ if (node.type === 'sequence') {
155
+ let count = 0;
156
+ for (const segment of node.segments) {
157
+ if (segment.type !== 'globstar') {
158
+ count++;
159
+ }
160
+ // Globstar contributes 0 to minimum
161
+ }
162
+ return count;
163
+ }
164
+ else {
165
+ // Alternation: minimum of all branches
166
+ return Math.min(...node.branches.map(getNodeMinSegments));
167
+ }
168
+ }
169
+ /**
170
+ * Get the maximum number of segments a pattern can match.
171
+ *
172
+ * @param pattern - Pattern AST
173
+ * @returns Maximum segment count, or undefined if unbounded (contains **)
174
+ *
175
+ * @public
176
+ */
177
+ export function getMaxSegments(pattern) {
178
+ return getNodeMaxSegments(pattern.root);
179
+ }
180
+ function getNodeMaxSegments(node) {
181
+ if (node.type === 'sequence') {
182
+ let count = 0;
183
+ for (const segment of node.segments) {
184
+ if (segment.type === 'globstar') {
185
+ return undefined; // Unbounded
186
+ }
187
+ count++;
188
+ }
189
+ return count;
190
+ }
191
+ else {
192
+ // Alternation: max of all branches (undefined if any is undefined)
193
+ const maxes = node.branches.map(getNodeMaxSegments);
194
+ if (maxes.some((m) => m === undefined)) {
195
+ return undefined;
196
+ }
197
+ return Math.max(...maxes);
198
+ }
199
+ }
200
+ /**
201
+ * Check if a pattern contains a globstar (**).
202
+ *
203
+ * @param pattern - Pattern AST
204
+ * @returns true if pattern is unbounded
205
+ *
206
+ * @public
207
+ */
208
+ export function isUnbounded(pattern) {
209
+ return getMaxSegments(pattern) === undefined;
210
+ }
211
+ //# sourceMappingURL=automaton-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automaton-builder.js","sourceRoot":"","sources":["../../src/compile/automaton-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAUzD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,MAAM,OAAO,GAAqB;QAChC,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,CAAC;KACf,CAAA;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAE1C,uCAAuC;IACvC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAE7D,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE,CAAC,OAAO,CAAC;QAC1B,eAAe,EAAE,KAAK,EAAE,wCAAwC;KACjE,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,OAAyB,EAAE,SAAkB;IAChE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAChC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB,EAAE;QACF,WAAW,EAAE,EAAE;QACf,SAAS;KACV,CAAC,CAAA;IACF,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAAyB,EAAE,SAAiB,EAAE,UAA+B;IAClG,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG;QAC1B,GAAG,KAAK;QACR,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC;KAChD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAyB,EAAE,IAAiB,EAAE,UAAkB,EAAE,QAAgB;IAC5G,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC7D,CAAC;SAAM,CAAC;QACN,yBAAyB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;IAChE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,OAAyB,EACzB,QAAyB,EACzB,UAAkB,EAClB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAA;IAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,sCAAsC;QACtC,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACzE,OAAM;IACR,CAAC;IAED,8CAA8C;IAC9C,IAAI,YAAY,GAAG,UAAU,CAAA;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,MAAM,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAEjE,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;QAChE,YAAY,GAAG,SAAS,CAAA;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,OAAyB,EACzB,WAAwB,EACxB,UAAkB,EAClB,QAAgB;IAEhB,4DAA4D;IAC5D,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC/C,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAE7C,qCAAqC;QACrC,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;QAE5E,yBAAyB;QACzB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;QAE3D,iCAAiC;QACjC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC1E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,OAAgB,EAChB,UAAkB,EAClB,QAAgB;IAEhB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE;gBACjC,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,OAAO,CAAC,KAAK;gBACtB,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAA;YACF,MAAK;QAEP,KAAK,UAAU;YACb,4CAA4C;YAC5C,mEAAmE;YACnE,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE;gBACjC,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAA;YACF,MAAK;QAEP,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YACrC,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE;oBACjC,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,KAAK;oBACd,aAAa,EAAE,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACjE,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAA;YACJ,CAAC;YACD,MAAK;QACP,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,OAAO,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAiB;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChC,KAAK,EAAE,CAAA;YACT,CAAC;YACD,oCAAoC;QACtC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,OAAO,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAiB;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,SAAS,CAAA,CAAC,YAAY;YAC/B,CAAC;YACD,KAAK,EAAE,CAAA;QACT,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,CAAC;QACN,mEAAmE;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACnD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YACvC,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAI,KAAkB,CAAC,CAAA;IACzC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,SAAS,CAAA;AAC9C,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Pattern compiler - compiles AST to efficient matching form.
3
+ * @packageDocumentation
4
+ */
5
+ import type { PathPattern, CompiledPattern } from '../types';
6
+ /**
7
+ * Compile a pattern to an efficient matching form.
8
+ *
9
+ * The compiled pattern includes:
10
+ * - Original source and AST for debugging/analysis
11
+ * - Quick-reject filters for fast path elimination
12
+ * - Segment automaton for full matching
13
+ * - Depth constraints for optimization
14
+ *
15
+ * @param pattern - Parsed pattern AST
16
+ * @returns Compiled pattern ready for matching
17
+ *
18
+ * @public
19
+ */
20
+ export declare function compilePattern(pattern: PathPattern): CompiledPattern;
21
+ /**
22
+ * Compile a pattern from source string.
23
+ *
24
+ * Convenience function that parses and compiles in one step.
25
+ *
26
+ * @param source - Pattern source string
27
+ * @returns Compiled pattern
28
+ *
29
+ * @public
30
+ */
31
+ export { parsePattern } from '../parse';
32
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/compile/compiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI5D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAepE;AAED;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Pattern compiler - compiles AST to efficient matching form.
3
+ * @packageDocumentation
4
+ */
5
+ import { buildAutomaton, getMinSegments, getMaxSegments, isUnbounded } from './automaton-builder';
6
+ import { buildQuickRejectFilter } from './quick-reject';
7
+ /**
8
+ * Compile a pattern to an efficient matching form.
9
+ *
10
+ * The compiled pattern includes:
11
+ * - Original source and AST for debugging/analysis
12
+ * - Quick-reject filters for fast path elimination
13
+ * - Segment automaton for full matching
14
+ * - Depth constraints for optimization
15
+ *
16
+ * @param pattern - Parsed pattern AST
17
+ * @returns Compiled pattern ready for matching
18
+ *
19
+ * @public
20
+ */
21
+ export function compilePattern(pattern) {
22
+ const automaton = buildAutomaton(pattern);
23
+ const quickReject = buildQuickRejectFilter(pattern);
24
+ const minSegments = getMinSegments(pattern);
25
+ const maxSegments = getMaxSegments(pattern);
26
+ return {
27
+ source: pattern.source,
28
+ ast: pattern,
29
+ quickReject,
30
+ automaton,
31
+ isUnbounded: isUnbounded(pattern),
32
+ minSegments,
33
+ maxSegments,
34
+ };
35
+ }
36
+ /**
37
+ * Compile a pattern from source string.
38
+ *
39
+ * Convenience function that parses and compiles in one step.
40
+ *
41
+ * @param source - Pattern source string
42
+ * @returns Compiled pattern
43
+ *
44
+ * @public
45
+ */
46
+ export { parsePattern } from '../parse';
47
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compile/compiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAEvD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACzC,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;IACnD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAE3C,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO;QACZ,WAAW;QACX,SAAS;QACT,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC;QACjC,WAAW;QACX,WAAW;KACZ,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Pattern compilation utilities.
3
+ * @packageDocumentation
4
+ */
5
+ export { compilePattern } from './compiler';
6
+ export { buildAutomaton, getMinSegments, getMaxSegments, isUnbounded } from './automaton-builder';
7
+ export { buildQuickRejectFilter, applyQuickReject } from './quick-reject';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compile/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Pattern compilation utilities.
3
+ * @packageDocumentation
4
+ */
5
+ export { compilePattern } from './compiler';
6
+ export { buildAutomaton, getMinSegments, getMaxSegments, isUnbounded } from './automaton-builder';
7
+ export { buildQuickRejectFilter, applyQuickReject } from './quick-reject';
8
+ //# sourceMappingURL=index.js.map