@liendev/parser 0.39.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 (153) hide show
  1. package/dist/ast/chunker.d.ts +30 -0
  2. package/dist/ast/chunker.d.ts.map +1 -0
  3. package/dist/ast/chunker.js +310 -0
  4. package/dist/ast/chunker.js.map +1 -0
  5. package/dist/ast/complexity/cognitive.d.ts +16 -0
  6. package/dist/ast/complexity/cognitive.d.ts.map +1 -0
  7. package/dist/ast/complexity/cognitive.js +137 -0
  8. package/dist/ast/complexity/cognitive.js.map +1 -0
  9. package/dist/ast/complexity/cyclomatic.d.ts +12 -0
  10. package/dist/ast/complexity/cyclomatic.d.ts.map +1 -0
  11. package/dist/ast/complexity/cyclomatic.js +54 -0
  12. package/dist/ast/complexity/cyclomatic.js.map +1 -0
  13. package/dist/ast/complexity/halstead.d.ts +56 -0
  14. package/dist/ast/complexity/halstead.d.ts.map +1 -0
  15. package/dist/ast/complexity/halstead.js +196 -0
  16. package/dist/ast/complexity/halstead.js.map +1 -0
  17. package/dist/ast/complexity/index.d.ts +13 -0
  18. package/dist/ast/complexity/index.d.ts.map +1 -0
  19. package/dist/ast/complexity/index.js +12 -0
  20. package/dist/ast/complexity/index.js.map +1 -0
  21. package/dist/ast/extractors/index.d.ts +35 -0
  22. package/dist/ast/extractors/index.d.ts.map +1 -0
  23. package/dist/ast/extractors/index.js +41 -0
  24. package/dist/ast/extractors/index.js.map +1 -0
  25. package/dist/ast/extractors/symbol-helpers.d.ts +20 -0
  26. package/dist/ast/extractors/symbol-helpers.d.ts.map +1 -0
  27. package/dist/ast/extractors/symbol-helpers.js +58 -0
  28. package/dist/ast/extractors/symbol-helpers.js.map +1 -0
  29. package/dist/ast/extractors/types.d.ts +108 -0
  30. package/dist/ast/extractors/types.d.ts.map +1 -0
  31. package/dist/ast/extractors/types.js +2 -0
  32. package/dist/ast/extractors/types.js.map +1 -0
  33. package/dist/ast/languages/javascript.d.ts +134 -0
  34. package/dist/ast/languages/javascript.d.ts.map +1 -0
  35. package/dist/ast/languages/javascript.js +787 -0
  36. package/dist/ast/languages/javascript.js.map +1 -0
  37. package/dist/ast/languages/php.d.ts +84 -0
  38. package/dist/ast/languages/php.d.ts.map +1 -0
  39. package/dist/ast/languages/php.js +452 -0
  40. package/dist/ast/languages/php.js.map +1 -0
  41. package/dist/ast/languages/python.d.ts +96 -0
  42. package/dist/ast/languages/python.d.ts.map +1 -0
  43. package/dist/ast/languages/python.js +448 -0
  44. package/dist/ast/languages/python.js.map +1 -0
  45. package/dist/ast/languages/registry.d.ts +30 -0
  46. package/dist/ast/languages/registry.d.ts.map +1 -0
  47. package/dist/ast/languages/registry.js +95 -0
  48. package/dist/ast/languages/registry.js.map +1 -0
  49. package/dist/ast/languages/rust.d.ts +113 -0
  50. package/dist/ast/languages/rust.d.ts.map +1 -0
  51. package/dist/ast/languages/rust.js +614 -0
  52. package/dist/ast/languages/rust.js.map +1 -0
  53. package/dist/ast/languages/types.d.ts +52 -0
  54. package/dist/ast/languages/types.d.ts.map +1 -0
  55. package/dist/ast/languages/types.js +2 -0
  56. package/dist/ast/languages/types.js.map +1 -0
  57. package/dist/ast/languages/typescript.d.ts +3 -0
  58. package/dist/ast/languages/typescript.d.ts.map +1 -0
  59. package/dist/ast/languages/typescript.js +134 -0
  60. package/dist/ast/languages/typescript.js.map +1 -0
  61. package/dist/ast/parser.d.ts +29 -0
  62. package/dist/ast/parser.d.ts.map +1 -0
  63. package/dist/ast/parser.js +67 -0
  64. package/dist/ast/parser.js.map +1 -0
  65. package/dist/ast/symbols.d.ts +74 -0
  66. package/dist/ast/symbols.d.ts.map +1 -0
  67. package/dist/ast/symbols.js +171 -0
  68. package/dist/ast/symbols.js.map +1 -0
  69. package/dist/ast/traversers/index.d.ts +19 -0
  70. package/dist/ast/traversers/index.d.ts.map +1 -0
  71. package/dist/ast/traversers/index.js +21 -0
  72. package/dist/ast/traversers/index.js.map +1 -0
  73. package/dist/ast/traversers/types.d.ts +98 -0
  74. package/dist/ast/traversers/types.d.ts.map +1 -0
  75. package/dist/ast/traversers/types.js +2 -0
  76. package/dist/ast/traversers/types.js.map +1 -0
  77. package/dist/ast/types.d.ts +54 -0
  78. package/dist/ast/types.d.ts.map +1 -0
  79. package/dist/ast/types.js +2 -0
  80. package/dist/ast/types.js.map +1 -0
  81. package/dist/chunk-only-index.d.ts +25 -0
  82. package/dist/chunk-only-index.d.ts.map +1 -0
  83. package/dist/chunk-only-index.js +107 -0
  84. package/dist/chunk-only-index.js.map +1 -0
  85. package/dist/chunker.d.ts +12 -0
  86. package/dist/chunker.d.ts.map +1 -0
  87. package/dist/chunker.js +98 -0
  88. package/dist/chunker.js.map +1 -0
  89. package/dist/constants.d.ts +8 -0
  90. package/dist/constants.d.ts.map +1 -0
  91. package/dist/constants.js +11 -0
  92. package/dist/constants.js.map +1 -0
  93. package/dist/content-hash.d.ts +20 -0
  94. package/dist/content-hash.d.ts.map +1 -0
  95. package/dist/content-hash.js +91 -0
  96. package/dist/content-hash.js.map +1 -0
  97. package/dist/dependency-analyzer.d.ts +79 -0
  98. package/dist/dependency-analyzer.d.ts.map +1 -0
  99. package/dist/dependency-analyzer.js +408 -0
  100. package/dist/dependency-analyzer.js.map +1 -0
  101. package/dist/ecosystem-presets.d.ts +32 -0
  102. package/dist/ecosystem-presets.d.ts.map +1 -0
  103. package/dist/ecosystem-presets.js +325 -0
  104. package/dist/ecosystem-presets.js.map +1 -0
  105. package/dist/gitignore.d.ts +22 -0
  106. package/dist/gitignore.d.ts.map +1 -0
  107. package/dist/gitignore.js +128 -0
  108. package/dist/gitignore.js.map +1 -0
  109. package/dist/index.d.ts +32 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +68 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/insights/chunk-complexity.d.ts +89 -0
  114. package/dist/insights/chunk-complexity.d.ts.map +1 -0
  115. package/dist/insights/chunk-complexity.js +332 -0
  116. package/dist/insights/chunk-complexity.js.map +1 -0
  117. package/dist/insights/types.d.ts +73 -0
  118. package/dist/insights/types.d.ts.map +1 -0
  119. package/dist/insights/types.js +9 -0
  120. package/dist/insights/types.js.map +1 -0
  121. package/dist/json-template-chunker.d.ts +12 -0
  122. package/dist/json-template-chunker.d.ts.map +1 -0
  123. package/dist/json-template-chunker.js +87 -0
  124. package/dist/json-template-chunker.js.map +1 -0
  125. package/dist/liquid-chunker.d.ts +16 -0
  126. package/dist/liquid-chunker.d.ts.map +1 -0
  127. package/dist/liquid-chunker.js +274 -0
  128. package/dist/liquid-chunker.js.map +1 -0
  129. package/dist/scanner.d.ts +16 -0
  130. package/dist/scanner.d.ts.map +1 -0
  131. package/dist/scanner.js +95 -0
  132. package/dist/scanner.js.map +1 -0
  133. package/dist/symbol-extractor.d.ts +18 -0
  134. package/dist/symbol-extractor.d.ts.map +1 -0
  135. package/dist/symbol-extractor.js +343 -0
  136. package/dist/symbol-extractor.js.map +1 -0
  137. package/dist/test-associations.d.ts +16 -0
  138. package/dist/test-associations.d.ts.map +1 -0
  139. package/dist/test-associations.js +43 -0
  140. package/dist/test-associations.js.map +1 -0
  141. package/dist/types.d.ts +75 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +2 -0
  144. package/dist/types.js.map +1 -0
  145. package/dist/utils/path-matching.d.ts +71 -0
  146. package/dist/utils/path-matching.d.ts.map +1 -0
  147. package/dist/utils/path-matching.js +258 -0
  148. package/dist/utils/path-matching.js.map +1 -0
  149. package/dist/utils/repo-id.d.ts +6 -0
  150. package/dist/utils/repo-id.d.ts.map +1 -0
  151. package/dist/utils/repo-id.js +12 -0
  152. package/dist/utils/repo-id.js.map +1 -0
  153. package/package.json +66 -0
@@ -0,0 +1,325 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ /**
4
+ * Predefined ecosystem presets.
5
+ * Each preset checks for marker files and provides exclude patterns
6
+ * for common build artifacts, caches, and generated files.
7
+ */
8
+ export const ECOSYSTEM_PRESETS = [
9
+ {
10
+ name: 'nodejs',
11
+ markerFiles: ['package.json'],
12
+ excludePatterns: [
13
+ '.next/**',
14
+ '**/.next/**',
15
+ '.nuxt/**',
16
+ '**/.nuxt/**',
17
+ '.vite/**',
18
+ '**/.vite/**',
19
+ '.turbo/**',
20
+ '**/.turbo/**',
21
+ '.vercel/**',
22
+ '**/.vercel/**',
23
+ '.netlify/**',
24
+ '**/.netlify/**',
25
+ 'coverage/**',
26
+ '**/coverage/**',
27
+ 'playwright-report/**',
28
+ '**/playwright-report/**',
29
+ 'test-results/**',
30
+ '**/test-results/**',
31
+ '__generated__/**',
32
+ '**/__generated__/**',
33
+ '.cache/**',
34
+ '**/.cache/**',
35
+ 'out/**',
36
+ '**/out/**',
37
+ 'public/build/**',
38
+ '**/public/build/**',
39
+ '*.bundle.js',
40
+ '**/*.bundle.js',
41
+ ],
42
+ },
43
+ {
44
+ name: 'python',
45
+ markerFiles: ['requirements.txt', 'setup.py', 'pyproject.toml', 'Pipfile'],
46
+ excludePatterns: [
47
+ 'venv/**',
48
+ '**/venv/**',
49
+ '.venv/**',
50
+ '**/.venv/**',
51
+ '__pycache__/**',
52
+ '**/__pycache__/**',
53
+ '*.pyc',
54
+ '**/*.pyc',
55
+ '*.pyo',
56
+ '**/*.pyo',
57
+ '*.pyd',
58
+ '**/*.pyd',
59
+ '*.egg-info/**',
60
+ '**/*.egg-info/**',
61
+ '.tox/**',
62
+ '**/.tox/**',
63
+ '.pytest_cache/**',
64
+ '**/.pytest_cache/**',
65
+ '.coverage',
66
+ 'htmlcov/**',
67
+ '**/htmlcov/**',
68
+ '.mypy_cache/**',
69
+ '**/.mypy_cache/**',
70
+ 'docs/_build/**',
71
+ 'migrations/**',
72
+ '**/migrations/**',
73
+ ],
74
+ },
75
+ {
76
+ name: 'php',
77
+ markerFiles: ['composer.json'],
78
+ excludePatterns: [
79
+ 'storage/**',
80
+ '**/storage/**',
81
+ 'cache/**',
82
+ '**/cache/**',
83
+ 'bootstrap/cache/**',
84
+ '**/bootstrap/cache/**',
85
+ '.phpunit.cache/**',
86
+ '**/.phpunit.cache/**',
87
+ 'public/build/**',
88
+ '**/public/build/**',
89
+ ],
90
+ },
91
+ {
92
+ name: 'laravel',
93
+ markerFiles: ['artisan'],
94
+ excludePatterns: [
95
+ 'database/migrations/**',
96
+ 'database/seeders/**',
97
+ 'database/factories/**',
98
+ 'public/**/*.js',
99
+ 'public/**/*.css',
100
+ 'public/hot',
101
+ 'public/build/**',
102
+ ],
103
+ },
104
+ {
105
+ name: 'ruby',
106
+ markerFiles: ['Gemfile'],
107
+ excludePatterns: [
108
+ 'tmp/**',
109
+ '**/tmp/**',
110
+ '.bundle/**',
111
+ '**/.bundle/**',
112
+ 'log/**',
113
+ '**/log/**',
114
+ 'coverage/**',
115
+ '**/coverage/**',
116
+ 'public/assets/**',
117
+ '**/public/assets/**',
118
+ 'public/packs/**',
119
+ '**/public/packs/**',
120
+ ],
121
+ },
122
+ {
123
+ name: 'rails',
124
+ markerFiles: ['bin/rails'],
125
+ excludePatterns: [
126
+ 'db/migrate/**',
127
+ '**/db/migrate/**',
128
+ 'db/seeds/**',
129
+ '**/db/seeds/**',
130
+ 'storage/**',
131
+ '**/storage/**',
132
+ 'tmp/**',
133
+ '**/tmp/**',
134
+ 'log/**',
135
+ '**/log/**',
136
+ 'public/assets/**',
137
+ '**/public/assets/**',
138
+ 'public/packs/**',
139
+ '**/public/packs/**',
140
+ ],
141
+ },
142
+ {
143
+ name: 'rust',
144
+ markerFiles: ['Cargo.toml'],
145
+ excludePatterns: ['target/**', '**/target/**'],
146
+ },
147
+ {
148
+ name: 'jvm',
149
+ markerFiles: ['pom.xml', 'build.gradle', 'build.gradle.kts'],
150
+ excludePatterns: [
151
+ '.gradle/**',
152
+ '**/.gradle/**',
153
+ 'target/**',
154
+ '**/target/**',
155
+ 'out/**',
156
+ '**/out/**',
157
+ '.idea/**',
158
+ '**/.idea/**',
159
+ '*.class',
160
+ '**/*.class',
161
+ ],
162
+ },
163
+ {
164
+ name: 'swift',
165
+ markerFiles: ['Package.swift', '*.xcodeproj', '*.xcworkspace'],
166
+ excludePatterns: [
167
+ '.build/**',
168
+ '**/.build/**',
169
+ 'DerivedData/**',
170
+ '**/DerivedData/**',
171
+ '*.xcodeproj/**',
172
+ '**/*.xcodeproj/**',
173
+ 'Pods/**',
174
+ '**/Pods/**',
175
+ ],
176
+ },
177
+ {
178
+ name: 'dotnet',
179
+ markerFiles: ['*.csproj', '*.sln'],
180
+ excludePatterns: [
181
+ 'bin/**',
182
+ '**/bin/**',
183
+ 'obj/**',
184
+ '**/obj/**',
185
+ 'packages/**',
186
+ '**/packages/**',
187
+ '.vs/**',
188
+ '**/.vs/**',
189
+ ],
190
+ },
191
+ {
192
+ name: 'django',
193
+ markerFiles: ['manage.py'],
194
+ excludePatterns: [
195
+ 'staticfiles/**',
196
+ '**/staticfiles/**',
197
+ 'media/**',
198
+ '**/media/**',
199
+ '*.sqlite3',
200
+ '**/*.sqlite3',
201
+ ],
202
+ },
203
+ {
204
+ name: 'astro',
205
+ markerFiles: ['astro.config.*'],
206
+ excludePatterns: ['.astro/**', '**/.astro/**'],
207
+ },
208
+ ];
209
+ /** Directories to skip when scanning for marker files in subdirectories */
210
+ const SKIP_DIRS = new Set([
211
+ 'node_modules',
212
+ 'vendor',
213
+ '.git',
214
+ '.lien',
215
+ 'dist',
216
+ 'build',
217
+ '.next',
218
+ '.nuxt',
219
+ '.vite',
220
+ '.turbo',
221
+ 'venv',
222
+ '.venv',
223
+ '__pycache__',
224
+ '.tox',
225
+ 'coverage',
226
+ '.cache',
227
+ 'target',
228
+ '.gradle',
229
+ '.idea',
230
+ 'out',
231
+ 'DerivedData',
232
+ 'Pods',
233
+ '.build',
234
+ 'obj',
235
+ '.vs',
236
+ 'tmp',
237
+ 'log',
238
+ '.bundle',
239
+ '.astro',
240
+ ]);
241
+ /** Convert a simple glob pattern (e.g. `*.csproj`) to a RegExp */
242
+ function simpleGlobToRegExp(pattern) {
243
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*');
244
+ return new RegExp(`^${escaped}$`);
245
+ }
246
+ /** Check if a marker file exists in a directory, using cached readdir for glob markers */
247
+ async function hasMarkerFile(dir, marker, dirEntryCache) {
248
+ try {
249
+ if (marker.includes('*')) {
250
+ let entries = dirEntryCache.get(dir);
251
+ if (!entries) {
252
+ entries = await fs.readdir(dir);
253
+ dirEntryCache.set(dir, entries);
254
+ }
255
+ const re = simpleGlobToRegExp(marker);
256
+ return entries.some(entry => re.test(entry));
257
+ }
258
+ await fs.access(path.join(dir, marker));
259
+ return true;
260
+ }
261
+ catch {
262
+ return false;
263
+ }
264
+ }
265
+ /** Get rootDir + immediate subdirectories, skipping known artifact dirs */
266
+ async function getSearchDirs(rootDir) {
267
+ const dirs = [rootDir];
268
+ try {
269
+ const entries = await fs.readdir(rootDir, { withFileTypes: true });
270
+ for (const entry of entries) {
271
+ if (entry.isDirectory() && !SKIP_DIRS.has(entry.name)) {
272
+ dirs.push(path.join(rootDir, entry.name));
273
+ }
274
+ }
275
+ }
276
+ catch {
277
+ // Can't read subdirs, just check root
278
+ }
279
+ return dirs;
280
+ }
281
+ /**
282
+ * Detect which ecosystems are present in a project by checking for marker files.
283
+ * Checks rootDir and immediate subdirectories (depth 1) for monorepo support.
284
+ *
285
+ * @param rootDir - Project root directory
286
+ * @returns Array of matched ecosystem names
287
+ */
288
+ export async function detectEcosystems(rootDir) {
289
+ const matched = new Set();
290
+ const searchDirs = await getSearchDirs(rootDir);
291
+ const dirEntryCache = new Map();
292
+ for (const dir of searchDirs) {
293
+ for (const preset of ECOSYSTEM_PRESETS) {
294
+ if (matched.has(preset.name))
295
+ continue;
296
+ for (const marker of preset.markerFiles) {
297
+ if (await hasMarkerFile(dir, marker, dirEntryCache)) {
298
+ matched.add(preset.name);
299
+ break;
300
+ }
301
+ }
302
+ }
303
+ }
304
+ return [...matched];
305
+ }
306
+ /**
307
+ * Get merged exclude patterns for the given ecosystem names.
308
+ * Returns a deduplicated array of exclude patterns.
309
+ *
310
+ * @param ecosystemNames - Array of ecosystem names (e.g. ['nodejs', 'python'])
311
+ * @returns Deduplicated exclude patterns
312
+ */
313
+ export function getEcosystemExcludePatterns(ecosystemNames) {
314
+ const patterns = new Set();
315
+ for (const name of ecosystemNames) {
316
+ const preset = ECOSYSTEM_PRESETS.find(p => p.name === name);
317
+ if (preset) {
318
+ for (const pattern of preset.excludePatterns) {
319
+ patterns.add(pattern);
320
+ }
321
+ }
322
+ }
323
+ return [...patterns];
324
+ }
325
+ //# sourceMappingURL=ecosystem-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem-presets.js","sourceRoot":"","sources":["../src/ecosystem-presets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Patterns that should always be ignored regardless of user configuration.
3
+ * Single source of truth — imported by scanner.ts and used by createGitignoreFilter.
4
+ */
5
+ export declare const ALWAYS_IGNORE_PATTERNS: string[];
6
+ /**
7
+ * Create a filter function that checks if a file path is gitignored.
8
+ * Discovers .gitignore files throughout the directory tree and applies
9
+ * each at its appropriate scope, plus built-in exclusions (node_modules,
10
+ * vendor, .git, .lien, dist, build, minified assets) to match the full scan
11
+ * behavior in scanner.ts.
12
+ *
13
+ * Limitation: scoped evaluation is OR across .gitignore files, so a nested
14
+ * .gitignore cannot un-ignore a pattern from a parent. Cross-scope negation
15
+ * (e.g., root ignores `*.log`, child un-ignores `!important.log`) is not
16
+ * supported. Nested .gitignore files in practice almost always ADD patterns.
17
+ *
18
+ * @param rootDir - Project root directory
19
+ * @returns Function that returns true if a relative path is ignored
20
+ */
21
+ export declare function createGitignoreFilter(rootDir: string): Promise<(relativePath: string) => boolean>;
22
+ //# sourceMappingURL=gitignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,UAgBlC,CAAC;AAuEF;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,CAuB5C"}
@@ -0,0 +1,128 @@
1
+ import ignore from 'ignore';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+ /**
5
+ * Patterns that should always be ignored regardless of user configuration.
6
+ * Single source of truth — imported by scanner.ts and used by createGitignoreFilter.
7
+ */
8
+ export const ALWAYS_IGNORE_PATTERNS = [
9
+ 'node_modules/**',
10
+ '**/node_modules/**',
11
+ 'vendor/**',
12
+ '**/vendor/**',
13
+ '.git/**',
14
+ '**/.git/**',
15
+ '.lien/**',
16
+ 'dist/**',
17
+ '**/dist/**',
18
+ 'build/**',
19
+ '**/build/**',
20
+ '*.min.js',
21
+ '**/*.min.js',
22
+ '*.min.css',
23
+ '**/*.min.css',
24
+ ];
25
+ /** Directories to skip during .gitignore discovery (no useful .gitignore inside) */
26
+ const SKIP_DIRS = new Set(['node_modules', 'vendor', '.git', '.lien', 'dist', 'build']);
27
+ /** Whether a directory entry should be traversed during .gitignore discovery */
28
+ function shouldTraverseDir(entry) {
29
+ if (!entry.isDirectory() || entry.isSymbolicLink())
30
+ return false;
31
+ if (SKIP_DIRS.has(entry.name))
32
+ return false;
33
+ // Skip hidden dirs except .github
34
+ if (entry.name.startsWith('.') && entry.name !== '.github')
35
+ return false;
36
+ return true;
37
+ }
38
+ /** Read .gitignore content from a directory, or null if not present */
39
+ async function readGitignore(absDir, entries) {
40
+ if (!entries.some(e => e.name === '.gitignore' && e.isFile()))
41
+ return null;
42
+ try {
43
+ return await fs.readFile(path.join(absDir, '.gitignore'), 'utf-8');
44
+ }
45
+ catch {
46
+ return null; // Race condition or permission issue
47
+ }
48
+ }
49
+ /**
50
+ * Walk the directory tree from rootDir, collecting .gitignore contents.
51
+ * Skips SKIP_DIRS and symlinked directories to avoid cycles.
52
+ *
53
+ * @returns Map of relative dir path ('' for root, 'packages/app' etc.) to .gitignore content
54
+ */
55
+ async function discoverGitignoreFiles(rootDir) {
56
+ const result = new Map();
57
+ const queue = [''];
58
+ let head = 0;
59
+ while (head < queue.length) {
60
+ const relDir = queue[head++];
61
+ const absDir = relDir ? path.join(rootDir, relDir) : rootDir;
62
+ let entries;
63
+ try {
64
+ entries = await fs.readdir(absDir, { withFileTypes: true });
65
+ }
66
+ catch {
67
+ continue;
68
+ }
69
+ const content = await readGitignore(absDir, entries);
70
+ if (content !== null) {
71
+ result.set(relDir, content);
72
+ }
73
+ for (const entry of entries) {
74
+ if (!shouldTraverseDir(entry))
75
+ continue;
76
+ const childRel = relDir ? `${relDir}/${entry.name}` : entry.name;
77
+ queue.push(childRel);
78
+ }
79
+ }
80
+ return result;
81
+ }
82
+ /** Check if a path matches a scoped .gitignore (root or nested) */
83
+ function matchesScopedIgnore(normalized, prefix, ig) {
84
+ if (prefix === '')
85
+ return ig.ignores(normalized);
86
+ const prefixWithSlash = prefix + '/';
87
+ if (!normalized.startsWith(prefixWithSlash))
88
+ return false;
89
+ const scopedPath = normalized.slice(prefixWithSlash.length);
90
+ return scopedPath !== '' && ig.ignores(scopedPath);
91
+ }
92
+ /**
93
+ * Create a filter function that checks if a file path is gitignored.
94
+ * Discovers .gitignore files throughout the directory tree and applies
95
+ * each at its appropriate scope, plus built-in exclusions (node_modules,
96
+ * vendor, .git, .lien, dist, build, minified assets) to match the full scan
97
+ * behavior in scanner.ts.
98
+ *
99
+ * Limitation: scoped evaluation is OR across .gitignore files, so a nested
100
+ * .gitignore cannot un-ignore a pattern from a parent. Cross-scope negation
101
+ * (e.g., root ignores `*.log`, child un-ignores `!important.log`) is not
102
+ * supported. Nested .gitignore files in practice almost always ADD patterns.
103
+ *
104
+ * @param rootDir - Project root directory
105
+ * @returns Function that returns true if a relative path is ignored
106
+ */
107
+ export async function createGitignoreFilter(rootDir) {
108
+ // Always-ignore patterns in a separate instance (cannot be negated)
109
+ const alwaysIg = ignore();
110
+ alwaysIg.add(ALWAYS_IGNORE_PATTERNS);
111
+ // Discover all .gitignore files and build scoped ignore instances
112
+ const gitignoreMap = await discoverGitignoreFiles(rootDir);
113
+ const scopedIgnores = [];
114
+ for (const [relDir, content] of gitignoreMap) {
115
+ const ig = ignore();
116
+ ig.add(content);
117
+ scopedIgnores.push({ prefix: relDir, ig });
118
+ }
119
+ // Sort by prefix length (root first) for consistent evaluation
120
+ scopedIgnores.sort((a, b) => a.prefix.length - b.prefix.length);
121
+ return (relativePath) => {
122
+ const normalized = relativePath.replace(/\\/g, '/');
123
+ if (alwaysIg.ignores(normalized))
124
+ return true;
125
+ return scopedIgnores.some(({ prefix, ig }) => matchesScopedIgnore(normalized, prefix, ig));
126
+ };
127
+ }
128
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export type { CodeChunk, ChunkMetadata, ScanOptions } from './types.js';
2
+ export type { RiskLevel, ComplexityMetricType, HalsteadDetails, ComplexityViolation, FileComplexityData, ComplexityReport, } from './insights/types.js';
3
+ export { RISK_ORDER } from './insights/types.js';
4
+ export { DEFAULT_CHUNK_SIZE, DEFAULT_CHUNK_OVERLAP, MAX_CHUNKS_PER_FILE } from './constants.js';
5
+ export { normalizePath, matchesFile, getCanonicalPath, isTestFile } from './utils/path-matching.js';
6
+ export { extractRepoId } from './utils/repo-id.js';
7
+ export { chunkByAST, shouldUseAST } from './ast/chunker.js';
8
+ export type { ASTChunkOptions } from './ast/chunker.js';
9
+ export { parseAST, detectLanguage, isASTSupported } from './ast/parser.js';
10
+ export { extractSymbolInfo, extractImports, extractImportedSymbols, extractExports, extractCallSites, } from './ast/symbols.js';
11
+ export type { SupportedLanguage, ASTChunk, SymbolInfo } from './ast/types.js';
12
+ export { getTraverser } from './ast/traversers/index.js';
13
+ export { getExtractor, getImportExtractor, getSymbolExtractor } from './ast/extractors/index.js';
14
+ export { calculateCognitiveComplexity, calculateHalstead } from './ast/complexity/index.js';
15
+ export { getSupportedExtensions, getLanguage, getAllLanguages, languageExists, } from './ast/languages/registry.js';
16
+ export { chunkFile, chunkText } from './chunker.js';
17
+ export type { ChunkOptions } from './chunker.js';
18
+ export { scanCodebase, detectFileType } from './scanner.js';
19
+ export { extractSymbols } from './symbol-extractor.js';
20
+ export { chunkLiquidFile } from './liquid-chunker.js';
21
+ export { chunkJSONTemplate } from './json-template-chunker.js';
22
+ export { createGitignoreFilter, ALWAYS_IGNORE_PATTERNS } from './gitignore.js';
23
+ export { detectEcosystems, getEcosystemExcludePatterns, ECOSYSTEM_PRESETS, } from './ecosystem-presets.js';
24
+ export type { EcosystemPreset } from './ecosystem-presets.js';
25
+ export { computeContentHash, isHashAlgorithmCompatible } from './content-hash.js';
26
+ export { findTestAssociationsFromChunks } from './test-associations.js';
27
+ export { analyzeDependencies, findTransitiveDependents, groupChunksByNormalizedPath, chunkImportsFrom, fileIsReExporter, DEPENDENT_COUNT_THRESHOLDS, COMPLEXITY_THRESHOLDS, } from './dependency-analyzer.js';
28
+ export type { FileComplexityInfo, DependencyAnalysisResult } from './dependency-analyzer.js';
29
+ export { analyzeComplexityFromChunks } from './insights/chunk-complexity.js';
30
+ export { performChunkOnlyIndex } from './chunk-only-index.js';
31
+ export type { ChunkOnlyOptions, ChunkOnlyResult } from './chunk-only-index.js';
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGxE,YAAY,EACV,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMjD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAMhG,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG5F,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAMjD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAM5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAM/D,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAM/E,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAMlF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAMxE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,EAC3B,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAM7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAM7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,68 @@
1
+ // @liendev/parser - AST parsing, complexity analysis, and semantic chunking
2
+ export { RISK_ORDER } from './insights/types.js';
3
+ // =============================================================================
4
+ // CONSTANTS
5
+ // =============================================================================
6
+ export { DEFAULT_CHUNK_SIZE, DEFAULT_CHUNK_OVERLAP, MAX_CHUNKS_PER_FILE } from './constants.js';
7
+ // =============================================================================
8
+ // UTILITIES
9
+ // =============================================================================
10
+ export { normalizePath, matchesFile, getCanonicalPath, isTestFile } from './utils/path-matching.js';
11
+ export { extractRepoId } from './utils/repo-id.js';
12
+ // =============================================================================
13
+ // AST
14
+ // =============================================================================
15
+ export { chunkByAST, shouldUseAST } from './ast/chunker.js';
16
+ export { parseAST, detectLanguage, isASTSupported } from './ast/parser.js';
17
+ export { extractSymbolInfo, extractImports, extractImportedSymbols, extractExports, extractCallSites, } from './ast/symbols.js';
18
+ export { getTraverser } from './ast/traversers/index.js';
19
+ export { getExtractor, getImportExtractor, getSymbolExtractor } from './ast/extractors/index.js';
20
+ export { calculateCognitiveComplexity, calculateHalstead } from './ast/complexity/index.js';
21
+ // AST Language Registry
22
+ export { getSupportedExtensions, getLanguage, getAllLanguages, languageExists, } from './ast/languages/registry.js';
23
+ // =============================================================================
24
+ // CHUNKING
25
+ // =============================================================================
26
+ export { chunkFile, chunkText } from './chunker.js';
27
+ // =============================================================================
28
+ // SCANNING
29
+ // =============================================================================
30
+ export { scanCodebase, detectFileType } from './scanner.js';
31
+ // =============================================================================
32
+ // SYMBOL EXTRACTION (line-based)
33
+ // =============================================================================
34
+ export { extractSymbols } from './symbol-extractor.js';
35
+ // =============================================================================
36
+ // LIQUID & JSON TEMPLATE CHUNKING
37
+ // =============================================================================
38
+ export { chunkLiquidFile } from './liquid-chunker.js';
39
+ export { chunkJSONTemplate } from './json-template-chunker.js';
40
+ // =============================================================================
41
+ // GITIGNORE
42
+ // =============================================================================
43
+ export { createGitignoreFilter, ALWAYS_IGNORE_PATTERNS } from './gitignore.js';
44
+ // =============================================================================
45
+ // ECOSYSTEM PRESETS
46
+ // =============================================================================
47
+ export { detectEcosystems, getEcosystemExcludePatterns, ECOSYSTEM_PRESETS, } from './ecosystem-presets.js';
48
+ // =============================================================================
49
+ // CONTENT HASH
50
+ // =============================================================================
51
+ export { computeContentHash, isHashAlgorithmCompatible } from './content-hash.js';
52
+ // =============================================================================
53
+ // TEST ASSOCIATIONS
54
+ // =============================================================================
55
+ export { findTestAssociationsFromChunks } from './test-associations.js';
56
+ // =============================================================================
57
+ // DEPENDENCY ANALYSIS
58
+ // =============================================================================
59
+ export { analyzeDependencies, findTransitiveDependents, groupChunksByNormalizedPath, chunkImportsFrom, fileIsReExporter, DEPENDENT_COUNT_THRESHOLDS, COMPLEXITY_THRESHOLDS, } from './dependency-analyzer.js';
60
+ // =============================================================================
61
+ // COMPLEXITY ANALYSIS (chunk-based, no VectorDB)
62
+ // =============================================================================
63
+ export { analyzeComplexityFromChunks } from './insights/chunk-complexity.js';
64
+ // =============================================================================
65
+ // CHUNK-ONLY INDEXING (no embeddings or VectorDB)
66
+ // =============================================================================
67
+ export { performChunkOnlyIndex } from './chunk-only-index.js';
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAkB5E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEhG,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,gFAAgF;AAChF,MAAM;AACN,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE5F,wBAAwB;AACxB,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,6BAA6B,CAAC;AAErC,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpD,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,gFAAgF;AAChF,iCAAiC;AACjC,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,gFAAgF;AAChF,kCAAkC;AAClC,gFAAgF;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAGhC,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAElF,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,EAC3B,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAGlC,gFAAgF;AAChF,iDAAiD;AACjD,gFAAgF;AAEhF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE7E,gFAAgF;AAChF,kDAAkD;AAClD,gFAAgF;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}