@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 @@
1
+ {"version":3,"file":"liquid-chunker.d.ts","sourceRoot":"","sources":["../src/liquid-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsX5C;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAW,EACtB,YAAY,GAAE,MAAW,EACzB,aAAa,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,SAAS,EAAE,CAyBb"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Extract schema name from JSON content
3
+ *
4
+ * Extracts the "name" field from Shopify schema JSON.
5
+ * Uses JSON.parse to properly handle escaped quotes and other JSON edge cases.
6
+ *
7
+ * Example:
8
+ * {% schema %}
9
+ * {
10
+ * "name": "My \"Special\" Section",
11
+ * "settings": []
12
+ * }
13
+ * {% endschema %}
14
+ *
15
+ * Returns: 'My "Special" Section' (with literal quotes, unescaped)
16
+ */
17
+ function extractSchemaName(schemaContent) {
18
+ try {
19
+ // Remove Liquid tags to isolate JSON content
20
+ // Replace {% schema %} and {% endschema %} (with optional whitespace control)
21
+ const jsonContent = schemaContent
22
+ .replace(/\{%-?\s*schema\s*-?%\}/g, '')
23
+ .replace(/\{%-?\s*endschema\s*-?%\}/g, '')
24
+ .trim();
25
+ // Parse the JSON
26
+ const schema = JSON.parse(jsonContent);
27
+ // Ensure name is a string before returning
28
+ return typeof schema.name === 'string' ? schema.name : undefined;
29
+ }
30
+ catch {
31
+ // Invalid JSON - return undefined
32
+ // This is acceptable: schema blocks with invalid JSON won't have names extracted
33
+ }
34
+ return undefined;
35
+ }
36
+ /**
37
+ * Remove Liquid comment blocks from content to avoid extracting tags from comments
38
+ *
39
+ * Example:
40
+ * {% comment %}Don't use {% render 'old-snippet' %}{% endcomment %}
41
+ * → (removed)
42
+ */
43
+ function removeComments(content) {
44
+ // Remove {% comment %}...{% endcomment %} blocks (with optional whitespace control)
45
+ return content.replace(/\{%-?\s*comment\s*-?%\}[\s\S]*?\{%-?\s*endcomment\s*-?%\}/g, '');
46
+ }
47
+ /**
48
+ * Extract dependencies from {% render %}, {% include %}, and {% section %} tags
49
+ *
50
+ * Examples:
51
+ * - {% render 'product-card' %} → 'product-card'
52
+ * - {% render "cart-item", product: product %} → 'cart-item'
53
+ * - {% include 'snippets/header' %} → 'snippets/header'
54
+ * - {% section 'announcement-bar' %} → 'announcement-bar'
55
+ *
56
+ * Limitations:
57
+ * - Does not handle escaped quotes in snippet names (e.g., {% render 'name\'s' %})
58
+ * - This is acceptable because Shopify snippet names map to filenames, and
59
+ * filesystem restrictions prevent quotes in filenames (snippets/name's.liquid is invalid)
60
+ * - In practice, Shopify snippet names use only alphanumeric, dash, and underscore
61
+ *
62
+ * Note: Expects content with comments already removed for performance
63
+ *
64
+ * @param contentWithoutComments - Content with Liquid comments already removed
65
+ */
66
+ function extractRenderTags(contentWithoutComments) {
67
+ const dependencies = new Set();
68
+ // Match {% render 'snippet-name' %} or {% render "snippet-name" %}
69
+ // Note: Does not handle escaped quotes - see function docs for rationale
70
+ const renderPattern = /\{%-?\s*render\s+['"]([^'"]+)['"]/g;
71
+ let match;
72
+ while ((match = renderPattern.exec(contentWithoutComments)) !== null) {
73
+ dependencies.add(match[1]);
74
+ }
75
+ // Match {% include 'snippet-name' %} or {% include "snippet-name" %}
76
+ const includePattern = /\{%-?\s*include\s+['"]([^'"]+)['"]/g;
77
+ while ((match = includePattern.exec(contentWithoutComments)) !== null) {
78
+ dependencies.add(match[1]);
79
+ }
80
+ // Match {% section 'section-name' %} or {% section "section-name" %}
81
+ const sectionPattern = /\{%-?\s*section\s+['"]([^'"]+)['"]/g;
82
+ while ((match = sectionPattern.exec(contentWithoutComments)) !== null) {
83
+ dependencies.add(match[1]);
84
+ }
85
+ return Array.from(dependencies);
86
+ }
87
+ /**
88
+ * Find all special Liquid blocks in the template
89
+ *
90
+ * Limitation: Does not support nested blocks of the same type.
91
+ * - Matches first start tag with first end tag
92
+ * - This is acceptable because Shopify Liquid does not allow nested blocks
93
+ * - Example invalid: {% schema %}...{% schema %}...{% endschema %} (Shopify rejects this)
94
+ * - If malformed input contains nested blocks, only outermost block is extracted
95
+ */
96
+ function findLiquidBlocks(content) {
97
+ const lines = content.split('\n');
98
+ const blocks = [];
99
+ // Regex patterns for Liquid blocks
100
+ // Note: Matches first start → first end (no nesting support, which is correct for Shopify)
101
+ const blockPatterns = [
102
+ { type: 'schema', start: /\{%-?\s*schema\s*-?%\}/, end: /\{%-?\s*endschema\s*-?%\}/ },
103
+ { type: 'style', start: /\{%-?\s*style\s*-?%\}/, end: /\{%-?\s*endstyle\s*-?%\}/ },
104
+ {
105
+ type: 'javascript',
106
+ start: /\{%-?\s*javascript\s*-?%\}/,
107
+ end: /\{%-?\s*endjavascript\s*-?%\}/,
108
+ },
109
+ ];
110
+ for (const pattern of blockPatterns) {
111
+ let searchStart = 0;
112
+ while (searchStart < lines.length) {
113
+ // Find start tag
114
+ const startIdx = lines.findIndex((line, idx) => idx >= searchStart && pattern.start.test(line));
115
+ if (startIdx === -1)
116
+ break;
117
+ // Find end tag (allow same line for single-line blocks)
118
+ const endIdx = lines.findIndex((line, idx) => idx >= startIdx && pattern.end.test(line));
119
+ if (endIdx === -1) {
120
+ // No end tag found, treat rest as template
121
+ break;
122
+ }
123
+ // Extract block content
124
+ const blockContent = lines.slice(startIdx, endIdx + 1).join('\n');
125
+ blocks.push({
126
+ type: pattern.type,
127
+ startLine: startIdx,
128
+ endLine: endIdx,
129
+ content: blockContent,
130
+ });
131
+ searchStart = endIdx + 1;
132
+ }
133
+ }
134
+ return blocks.sort((a, b) => a.startLine - b.startLine);
135
+ }
136
+ /**
137
+ * Create a CodeChunk with consistent structure
138
+ */
139
+ function createCodeChunk(content, startLine, endLine, filepath, type, options = {}) {
140
+ return {
141
+ content,
142
+ metadata: {
143
+ file: filepath,
144
+ startLine,
145
+ endLine,
146
+ language: 'liquid',
147
+ type,
148
+ symbolName: options.symbolName,
149
+ symbolType: options.symbolType,
150
+ imports: options.imports?.length ? options.imports : undefined,
151
+ ...(options.repoId && { repoId: options.repoId }),
152
+ ...(options.orgId && { orgId: options.orgId }),
153
+ },
154
+ };
155
+ }
156
+ /**
157
+ * Split a large block into multiple chunks with overlap
158
+ */
159
+ function splitLargeBlock(block, ctx, symbolName, imports, tenantContext) {
160
+ const chunks = [];
161
+ const blockLines = block.content.split('\n');
162
+ const { chunkSize, chunkOverlap, filepath } = ctx.params;
163
+ for (let offset = 0; offset < blockLines.length; offset += chunkSize - chunkOverlap) {
164
+ const endOffset = Math.min(offset + chunkSize, blockLines.length);
165
+ const chunkContent = blockLines.slice(offset, endOffset).join('\n');
166
+ if (chunkContent.trim().length > 0) {
167
+ chunks.push(createCodeChunk(chunkContent, block.startLine + offset + 1, block.startLine + endOffset, filepath, 'block', { symbolName, symbolType: block.type, imports, ...tenantContext }));
168
+ }
169
+ if (endOffset >= blockLines.length)
170
+ break;
171
+ }
172
+ return chunks;
173
+ }
174
+ /**
175
+ * Create chunks from a special Liquid block (schema, style, javascript)
176
+ * Returns the chunks and marks covered lines
177
+ */
178
+ function processSpecialBlock(block, ctx, coveredLines, tenantContext) {
179
+ // Mark lines as covered
180
+ for (let i = block.startLine; i <= block.endLine; i++) {
181
+ coveredLines.add(i);
182
+ }
183
+ // Extract metadata
184
+ const symbolName = block.type === 'schema' ? extractSchemaName(block.content) : undefined;
185
+ // Extract imports from cleaned content
186
+ const blockContentWithoutComments = ctx.linesWithoutComments
187
+ .slice(block.startLine, block.endLine + 1)
188
+ .join('\n');
189
+ const imports = extractRenderTags(blockContentWithoutComments);
190
+ const blockLineCount = block.endLine - block.startLine + 1;
191
+ const maxBlockSize = ctx.params.chunkSize * 3;
192
+ // Keep small blocks as single chunk, split large ones
193
+ if (blockLineCount <= maxBlockSize) {
194
+ return [
195
+ createCodeChunk(block.content, block.startLine + 1, block.endLine + 1, ctx.params.filepath, 'block', { symbolName, symbolType: block.type, imports, ...tenantContext }),
196
+ ];
197
+ }
198
+ return splitLargeBlock(block, ctx, symbolName, imports, tenantContext);
199
+ }
200
+ /**
201
+ * Create a template chunk from accumulated lines
202
+ */
203
+ function flushTemplateChunk(currentChunk, chunkStartLine, endLine, ctx, tenantContext) {
204
+ if (currentChunk.length === 0)
205
+ return null;
206
+ const chunkContent = currentChunk.join('\n');
207
+ if (chunkContent.trim().length === 0)
208
+ return null;
209
+ const cleanedChunk = ctx.linesWithoutComments.slice(chunkStartLine, endLine).join('\n');
210
+ const imports = extractRenderTags(cleanedChunk);
211
+ return createCodeChunk(chunkContent, chunkStartLine + 1, endLine, ctx.params.filepath, 'template', { imports, ...tenantContext });
212
+ }
213
+ /**
214
+ * Process uncovered template content into chunks
215
+ */
216
+ function processTemplateContent(ctx, coveredLines, tenantContext) {
217
+ const chunks = [];
218
+ const { lines, params } = ctx;
219
+ const { chunkSize, chunkOverlap } = params;
220
+ let currentChunk = [];
221
+ let chunkStartLine = 0;
222
+ const flush = (endLine) => {
223
+ const chunk = flushTemplateChunk(currentChunk, chunkStartLine, endLine, ctx, tenantContext);
224
+ if (chunk)
225
+ chunks.push(chunk);
226
+ };
227
+ for (let i = 0; i < lines.length; i++) {
228
+ if (coveredLines.has(i)) {
229
+ flush(i);
230
+ currentChunk = [];
231
+ continue;
232
+ }
233
+ if (currentChunk.length === 0) {
234
+ chunkStartLine = i;
235
+ }
236
+ currentChunk.push(lines[i]);
237
+ if (currentChunk.length >= chunkSize) {
238
+ flush(i + 1);
239
+ currentChunk = currentChunk.slice(-chunkOverlap);
240
+ chunkStartLine = Math.max(0, i + 1 - chunkOverlap);
241
+ }
242
+ }
243
+ flush(lines.length);
244
+ return chunks;
245
+ }
246
+ /**
247
+ * Chunk a Liquid template file
248
+ *
249
+ * Special handling for:
250
+ * - {% schema %} blocks (kept together, extract section name)
251
+ * - {% style %} blocks (kept together)
252
+ * - {% javascript %} blocks (kept together)
253
+ * - {% render %}, {% include %}, and {% section %} tags (tracked as imports)
254
+ * - Regular template content (chunked by lines)
255
+ */
256
+ export function chunkLiquidFile(filepath, content, chunkSize = 75, chunkOverlap = 10, tenantContext) {
257
+ // Build context once for reuse across helpers
258
+ const contentWithoutComments = removeComments(content);
259
+ const ctx = {
260
+ lines: content.split('\n'),
261
+ linesWithoutComments: contentWithoutComments.split('\n'),
262
+ params: { filepath, chunkSize, chunkOverlap },
263
+ };
264
+ // Find special blocks and track covered lines
265
+ const blocks = findLiquidBlocks(content);
266
+ const coveredLines = new Set();
267
+ // Process special blocks
268
+ const blockChunks = blocks.flatMap(block => processSpecialBlock(block, ctx, coveredLines, tenantContext));
269
+ // Process uncovered template content
270
+ const templateChunks = processTemplateContent(ctx, coveredLines, tenantContext);
271
+ // Combine and sort by line number
272
+ return [...blockChunks, ...templateChunks].sort((a, b) => a.metadata.startLine - b.metadata.startLine);
273
+ }
274
+ //# sourceMappingURL=liquid-chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquid-chunker.js","sourceRoot":"","sources":["../src/liquid-chunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ScanOptions } from './types.js';
2
+ /**
3
+ * Scan codebase for files matching include/exclude patterns.
4
+ */
5
+ export declare function scanCodebase(options: ScanOptions): Promise<string[]>;
6
+ /**
7
+ * Detect broad file type from extension (includes non-AST languages like Go, Rust, Markdown, etc.).
8
+ * For AST-supported language detection, use the AST parser's detectLanguage instead.
9
+ */
10
+ export declare function detectFileType(filepath: string): string;
11
+ /**
12
+ * @deprecated Use detectFileType instead. This alias exists for backwards
13
+ * compatibility with deep imports.
14
+ */
15
+ export declare const detectLanguage: typeof detectFileType;
16
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkB9C;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoC1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkCvD;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,uBAAiB,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { glob } from 'glob';
2
+ import ignore from 'ignore';
3
+ import fs from 'fs/promises';
4
+ import path from 'path';
5
+ import { ALWAYS_IGNORE_PATTERNS } from './gitignore.js';
6
+ /**
7
+ * Load .gitignore from the given paths (first match wins) and return an ignore instance.
8
+ */
9
+ async function loadGitignore(...dirs) {
10
+ for (const dir of dirs) {
11
+ try {
12
+ const content = await fs.readFile(path.join(dir, '.gitignore'), 'utf-8');
13
+ return ignore().add(content);
14
+ }
15
+ catch {
16
+ // Try next path
17
+ }
18
+ }
19
+ return ignore();
20
+ }
21
+ /**
22
+ * Scan codebase for files matching include/exclude patterns.
23
+ */
24
+ export async function scanCodebase(options) {
25
+ const { rootDir, includePatterns = [], excludePatterns = [] } = options;
26
+ const ig = await loadGitignore(rootDir);
27
+ ig.add([...ALWAYS_IGNORE_PATTERNS, ...excludePatterns]);
28
+ // Determine patterns to search for
29
+ const patterns = includePatterns.length > 0
30
+ ? includePatterns
31
+ : ['**/*.{ts,tsx,js,jsx,py,php,go,rs,java,cpp,c,cs,h,md,mdx}'];
32
+ // Combine always-ignored patterns with exclude patterns for glob
33
+ const globIgnorePatterns = [...ALWAYS_IGNORE_PATTERNS, ...excludePatterns];
34
+ // Find all code files
35
+ const allFiles = [];
36
+ for (const pattern of patterns) {
37
+ const files = await glob(pattern, {
38
+ cwd: rootDir,
39
+ absolute: true,
40
+ nodir: true,
41
+ ignore: globIgnorePatterns,
42
+ });
43
+ allFiles.push(...files);
44
+ }
45
+ // Remove duplicates
46
+ const uniqueFiles = Array.from(new Set(allFiles));
47
+ // Filter using ignore patterns
48
+ return uniqueFiles.filter(file => {
49
+ const relativePath = path.relative(rootDir, file);
50
+ return !ig.ignores(relativePath);
51
+ });
52
+ }
53
+ /**
54
+ * Detect broad file type from extension (includes non-AST languages like Go, Rust, Markdown, etc.).
55
+ * For AST-supported language detection, use the AST parser's detectLanguage instead.
56
+ */
57
+ export function detectFileType(filepath) {
58
+ const ext = path.extname(filepath).toLowerCase();
59
+ const languageMap = {
60
+ '.ts': 'typescript',
61
+ '.tsx': 'typescript',
62
+ '.js': 'javascript',
63
+ '.jsx': 'javascript',
64
+ '.mjs': 'javascript',
65
+ '.cjs': 'javascript',
66
+ '.vue': 'vue',
67
+ '.py': 'python',
68
+ '.go': 'go',
69
+ '.rs': 'rust',
70
+ '.java': 'java',
71
+ '.cpp': 'cpp',
72
+ '.cc': 'cpp',
73
+ '.cxx': 'cpp',
74
+ '.c': 'c',
75
+ '.h': 'c',
76
+ '.hpp': 'cpp',
77
+ '.php': 'php',
78
+ '.rb': 'ruby',
79
+ '.swift': 'swift',
80
+ '.kt': 'kotlin',
81
+ '.cs': 'csharp',
82
+ '.scala': 'scala',
83
+ '.liquid': 'liquid',
84
+ '.md': 'markdown',
85
+ '.mdx': 'markdown',
86
+ '.markdown': 'markdown',
87
+ };
88
+ return languageMap[ext] || 'unknown';
89
+ }
90
+ /**
91
+ * @deprecated Use detectFileType instead. This alias exists for backwards
92
+ * compatibility with deep imports.
93
+ */
94
+ export const detectLanguage = detectFileType;
95
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Symbol extraction utilities for different programming languages.
3
+ * Extracts function, class, and interface names from code chunks for better indexing.
4
+ */
5
+ export interface ExtractedSymbols {
6
+ functions: string[];
7
+ classes: string[];
8
+ interfaces: string[];
9
+ }
10
+ /**
11
+ * Extract symbols (functions, classes, interfaces) from code content.
12
+ *
13
+ * @param content - The code content to extract symbols from
14
+ * @param language - The programming language of the content
15
+ * @returns Extracted symbols organized by type
16
+ */
17
+ export declare function extractSymbols(content: string, language: string): ExtractedSymbols;
18
+ //# sourceMappingURL=symbol-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-extractor.d.ts","sourceRoot":"","sources":["../src/symbol-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAmDD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAUlF"}