@aiready/core 0.9.4 → 0.9.5

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 (59) hide show
  1. package/dist/__tests__/parser-factory.test.d.ts +5 -0
  2. package/dist/__tests__/parser-factory.test.d.ts.map +1 -0
  3. package/dist/__tests__/parser-factory.test.js +58 -0
  4. package/dist/__tests__/parser-factory.test.js.map +1 -0
  5. package/dist/__tests__/python-parser.test.d.ts +5 -0
  6. package/dist/__tests__/python-parser.test.d.ts.map +1 -0
  7. package/dist/__tests__/python-parser.test.js +192 -0
  8. package/dist/__tests__/python-parser.test.js.map +1 -0
  9. package/dist/__tests__/scoring.test.d.ts +2 -0
  10. package/dist/__tests__/scoring.test.d.ts.map +1 -0
  11. package/dist/__tests__/scoring.test.js +180 -0
  12. package/dist/__tests__/scoring.test.js.map +1 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/parsers/parser-factory.d.ts +69 -0
  16. package/dist/parsers/parser-factory.d.ts.map +1 -0
  17. package/dist/parsers/parser-factory.js +114 -0
  18. package/dist/parsers/parser-factory.js.map +1 -0
  19. package/dist/parsers/python-parser.d.ts +42 -0
  20. package/dist/parsers/python-parser.d.ts.map +1 -0
  21. package/dist/parsers/python-parser.js +241 -0
  22. package/dist/parsers/python-parser.js.map +1 -0
  23. package/dist/parsers/typescript-parser.d.ts +17 -0
  24. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  25. package/dist/parsers/typescript-parser.js +216 -0
  26. package/dist/parsers/typescript-parser.js.map +1 -0
  27. package/dist/scoring.d.ts +110 -0
  28. package/dist/scoring.d.ts.map +1 -0
  29. package/dist/scoring.js +195 -0
  30. package/dist/scoring.js.map +1 -0
  31. package/dist/types/language.d.ts +161 -0
  32. package/dist/types/language.d.ts.map +1 -0
  33. package/dist/types/language.js +45 -0
  34. package/dist/types/language.js.map +1 -0
  35. package/dist/types.d.ts +104 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +2 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/utils/ast-parser.d.ts +50 -0
  40. package/dist/utils/ast-parser.d.ts.map +1 -0
  41. package/dist/utils/ast-parser.js +216 -0
  42. package/dist/utils/ast-parser.js.map +1 -0
  43. package/dist/utils/cli-helpers.d.ts +37 -0
  44. package/dist/utils/cli-helpers.d.ts.map +1 -0
  45. package/dist/utils/cli-helpers.js +76 -0
  46. package/dist/utils/cli-helpers.js.map +1 -0
  47. package/dist/utils/config.d.ts +4 -0
  48. package/dist/utils/config.d.ts.map +1 -0
  49. package/dist/utils/config.js +82 -0
  50. package/dist/utils/config.js.map +1 -0
  51. package/dist/utils/file-scanner.d.ts +16 -0
  52. package/dist/utils/file-scanner.d.ts.map +1 -0
  53. package/dist/utils/file-scanner.js +100 -0
  54. package/dist/utils/file-scanner.js.map +1 -0
  55. package/dist/utils/metrics.d.ts +6 -0
  56. package/dist/utils/metrics.d.ts.map +1 -0
  57. package/dist/utils/metrics.js +8 -0
  58. package/dist/utils/metrics.js.map +1 -0
  59. package/package.json +1 -1
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Parser Factory - Manages language-specific parsers
3
+ *
4
+ * This factory provides a centralized way to access the appropriate parser
5
+ * for a given file based on its extension.
6
+ */
7
+ import { LANGUAGE_EXTENSIONS, } from '../types/language';
8
+ import { TypeScriptParser } from './typescript-parser';
9
+ import { PythonParser } from './python-parser';
10
+ /**
11
+ * Factory for creating and managing language parsers
12
+ */
13
+ export class ParserFactory {
14
+ constructor() {
15
+ this.parsers = new Map();
16
+ this.extensionMap = new Map(Object.entries(LANGUAGE_EXTENSIONS).map(([ext, lang]) => [ext, lang]));
17
+ // Register default parsers
18
+ this.registerParser(new TypeScriptParser());
19
+ this.registerParser(new PythonParser());
20
+ }
21
+ /**
22
+ * Get singleton instance
23
+ */
24
+ static getInstance() {
25
+ if (!ParserFactory.instance) {
26
+ ParserFactory.instance = new ParserFactory();
27
+ }
28
+ return ParserFactory.instance;
29
+ }
30
+ /**
31
+ * Register a language parser
32
+ */
33
+ registerParser(parser) {
34
+ this.parsers.set(parser.language, parser);
35
+ // Map extensions to this parser
36
+ parser.extensions.forEach(ext => {
37
+ this.extensionMap.set(ext, parser.language);
38
+ });
39
+ }
40
+ /**
41
+ * Get parser for a specific language
42
+ */
43
+ getParserForLanguage(language) {
44
+ return this.parsers.get(language) || null;
45
+ }
46
+ /**
47
+ * Get parser for a file based on its extension
48
+ */
49
+ getParserForFile(filePath) {
50
+ const ext = this.getFileExtension(filePath);
51
+ const language = this.extensionMap.get(ext);
52
+ if (!language) {
53
+ return null;
54
+ }
55
+ return this.parsers.get(language) || null;
56
+ }
57
+ /**
58
+ * Check if a file is supported
59
+ */
60
+ isSupported(filePath) {
61
+ return this.getParserForFile(filePath) !== null;
62
+ }
63
+ /**
64
+ * Get all registered languages
65
+ */
66
+ getSupportedLanguages() {
67
+ return Array.from(this.parsers.keys());
68
+ }
69
+ /**
70
+ * Get all supported file extensions
71
+ */
72
+ getSupportedExtensions() {
73
+ return Array.from(this.extensionMap.keys());
74
+ }
75
+ /**
76
+ * Get language for a file
77
+ */
78
+ getLanguageForFile(filePath) {
79
+ const ext = this.getFileExtension(filePath);
80
+ return this.extensionMap.get(ext) || null;
81
+ }
82
+ /**
83
+ * Extract file extension (with dot)
84
+ */
85
+ getFileExtension(filePath) {
86
+ const match = filePath.match(/\.[^.]+$/);
87
+ return match ? match[0].toLowerCase() : '';
88
+ }
89
+ /**
90
+ * Reset factory (useful for testing)
91
+ */
92
+ static reset() {
93
+ ParserFactory.instance = new ParserFactory();
94
+ }
95
+ }
96
+ /**
97
+ * Convenience function to get parser for a file
98
+ */
99
+ export function getParser(filePath) {
100
+ return ParserFactory.getInstance().getParserForFile(filePath);
101
+ }
102
+ /**
103
+ * Convenience function to check if file is supported
104
+ */
105
+ export function isFileSupported(filePath) {
106
+ return ParserFactory.getInstance().isSupported(filePath);
107
+ }
108
+ /**
109
+ * Get all supported languages
110
+ */
111
+ export function getSupportedLanguages() {
112
+ return ParserFactory.getInstance().getSupportedLanguages();
113
+ }
114
+ //# sourceMappingURL=parser-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-factory.js","sourceRoot":"","sources":["../../src/parsers/parser-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Python Parser using tree-sitter
3
+ *
4
+ * Parses Python files using tree-sitter-python for accurate AST parsing
5
+ */
6
+ import { Language, LanguageParser, ParseResult, NamingConvention } from '../types/language';
7
+ /**
8
+ * Python Parser implementation
9
+ *
10
+ * Note: This implementation will use tree-sitter-python for parsing.
11
+ * For now, it provides a skeleton that can be filled in once web-tree-sitter
12
+ * is properly configured.
13
+ */
14
+ export declare class PythonParser implements LanguageParser {
15
+ readonly language = Language.Python;
16
+ readonly extensions: string[];
17
+ private parser;
18
+ private initialized;
19
+ /**
20
+ * Initialize the tree-sitter parser
21
+ * This is async because tree-sitter WASM needs to be loaded
22
+ */
23
+ initialize(): Promise<void>;
24
+ parse(code: string, filePath: string): ParseResult;
25
+ getNamingConventions(): NamingConvention;
26
+ canHandle(filePath: string): boolean;
27
+ /**
28
+ * Regex-based import extraction (temporary implementation)
29
+ */
30
+ private extractImportsRegex;
31
+ /**
32
+ * Regex-based export extraction (temporary implementation)
33
+ *
34
+ * Python doesn't have explicit exports like JavaScript.
35
+ * We extract:
36
+ * - Functions defined at module level (def)
37
+ * - Classes defined at module level (class)
38
+ * - Variables in __all__ list
39
+ */
40
+ private extractExportsRegex;
41
+ }
42
+ //# sourceMappingURL=python-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/python-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EAGX,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;GAMG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,QAAQ,mBAAmB;IACpC,QAAQ,CAAC,UAAU,WAAW;IAC9B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IAsBlD,oBAAoB,IAAI,gBAAgB;IA8BxC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwE3B;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;CAqF5B"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Python Parser using tree-sitter
3
+ *
4
+ * Parses Python files using tree-sitter-python for accurate AST parsing
5
+ */
6
+ import { Language, ParseError, } from '../types/language';
7
+ /**
8
+ * Python Parser implementation
9
+ *
10
+ * Note: This implementation will use tree-sitter-python for parsing.
11
+ * For now, it provides a skeleton that can be filled in once web-tree-sitter
12
+ * is properly configured.
13
+ */
14
+ export class PythonParser {
15
+ constructor() {
16
+ this.language = Language.Python;
17
+ this.extensions = ['.py'];
18
+ this.parser = null;
19
+ this.initialized = false;
20
+ }
21
+ /**
22
+ * Initialize the tree-sitter parser
23
+ * This is async because tree-sitter WASM needs to be loaded
24
+ */
25
+ async initialize() {
26
+ if (this.initialized)
27
+ return;
28
+ try {
29
+ // TODO: Initialize tree-sitter-python
30
+ // const Parser = await import('web-tree-sitter');
31
+ // await Parser.init();
32
+ // this.parser = new Parser();
33
+ // const Python = await Parser.Language.load('tree-sitter-python.wasm');
34
+ // this.parser.setLanguage(Python);
35
+ this.initialized = true;
36
+ }
37
+ catch (error) {
38
+ throw new Error(`Failed to initialize Python parser: ${error.message}`);
39
+ }
40
+ }
41
+ parse(code, filePath) {
42
+ // TODO: Implement when tree-sitter is configured
43
+ // For now, return a basic parse with regex-based extraction
44
+ try {
45
+ const imports = this.extractImportsRegex(code, filePath);
46
+ const exports = this.extractExportsRegex(code, filePath);
47
+ return {
48
+ exports,
49
+ imports,
50
+ language: Language.Python,
51
+ warnings: ['Python parsing is currently using regex-based extraction. Tree-sitter support coming soon.'],
52
+ };
53
+ }
54
+ catch (error) {
55
+ throw new ParseError(`Failed to parse Python file ${filePath}: ${error.message}`, filePath);
56
+ }
57
+ }
58
+ getNamingConventions() {
59
+ // PEP 8 naming conventions
60
+ return {
61
+ // snake_case for variables and functions
62
+ variablePattern: /^[a-z_][a-z0-9_]*$/,
63
+ functionPattern: /^[a-z_][a-z0-9_]*$/,
64
+ // PascalCase for classes
65
+ classPattern: /^[A-Z][a-zA-Z0-9]*$/,
66
+ // UPPER_CASE for constants
67
+ constantPattern: /^[A-Z][A-Z0-9_]*$/,
68
+ // Python special methods and common exceptions
69
+ exceptions: [
70
+ '__init__',
71
+ '__str__',
72
+ '__repr__',
73
+ '__name__',
74
+ '__main__',
75
+ '__file__',
76
+ '__doc__',
77
+ '__all__',
78
+ '__version__',
79
+ '__author__',
80
+ '__dict__',
81
+ '__class__',
82
+ '__module__',
83
+ '__bases__',
84
+ ],
85
+ };
86
+ }
87
+ canHandle(filePath) {
88
+ return filePath.toLowerCase().endsWith('.py');
89
+ }
90
+ /**
91
+ * Regex-based import extraction (temporary implementation)
92
+ */
93
+ extractImportsRegex(code, filePath) {
94
+ const imports = [];
95
+ const lines = code.split('\n');
96
+ // Match: import module
97
+ // Match: import module as alias
98
+ // Match: from module import name
99
+ // Match: from module import name1, name2
100
+ // Match: from module import *
101
+ const importRegex = /^\s*import\s+([a-zA-Z0-9_., ]+)/;
102
+ const fromImportRegex = /^\s*from\s+([a-zA-Z0-9_.]+)\s+import\s+(.+)/;
103
+ lines.forEach((line, idx) => {
104
+ // Skip comments
105
+ if (line.trim().startsWith('#'))
106
+ return;
107
+ // Handle "import module"
108
+ const importMatch = line.match(importRegex);
109
+ if (importMatch) {
110
+ const modules = importMatch[1].split(',').map(m => m.trim().split(' as ')[0]);
111
+ modules.forEach(module => {
112
+ imports.push({
113
+ source: module,
114
+ specifiers: [module],
115
+ loc: {
116
+ start: { line: idx + 1, column: 0 },
117
+ end: { line: idx + 1, column: line.length },
118
+ },
119
+ });
120
+ });
121
+ return;
122
+ }
123
+ // Handle "from module import ..."
124
+ const fromMatch = line.match(fromImportRegex);
125
+ if (fromMatch) {
126
+ const module = fromMatch[1];
127
+ const imports_str = fromMatch[2];
128
+ // Handle "from module import *"
129
+ if (imports_str.trim() === '*') {
130
+ imports.push({
131
+ source: module,
132
+ specifiers: ['*'],
133
+ loc: {
134
+ start: { line: idx + 1, column: 0 },
135
+ end: { line: idx + 1, column: line.length },
136
+ },
137
+ });
138
+ return;
139
+ }
140
+ // Handle "from module import name1, name2"
141
+ const specifiers = imports_str
142
+ .split(',')
143
+ .map(s => s.trim().split(' as ')[0]);
144
+ imports.push({
145
+ source: module,
146
+ specifiers,
147
+ loc: {
148
+ start: { line: idx + 1, column: 0 },
149
+ end: { line: idx + 1, column: line.length },
150
+ },
151
+ });
152
+ }
153
+ });
154
+ return imports;
155
+ }
156
+ /**
157
+ * Regex-based export extraction (temporary implementation)
158
+ *
159
+ * Python doesn't have explicit exports like JavaScript.
160
+ * We extract:
161
+ * - Functions defined at module level (def)
162
+ * - Classes defined at module level (class)
163
+ * - Variables in __all__ list
164
+ */
165
+ extractExportsRegex(code, filePath) {
166
+ const exports = [];
167
+ const lines = code.split('\n');
168
+ // Extract functions: def function_name(
169
+ const functionRegex = /^def\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/;
170
+ // Extract classes: class ClassName
171
+ const classRegex = /^class\s+([a-zA-Z_][a-zA-Z0-9_]*)/;
172
+ // Extract from __all__
173
+ const allRegex = /__all__\s*=\s*\[([^\]]+)\]/;
174
+ let inClass = false;
175
+ let classIndent = 0;
176
+ lines.forEach((line, idx) => {
177
+ const indent = line.search(/\S/);
178
+ // Track if we're inside a class (for filtering out methods)
179
+ if (line.match(classRegex)) {
180
+ inClass = true;
181
+ classIndent = indent;
182
+ }
183
+ else if (inClass && indent <= classIndent && line.trim()) {
184
+ inClass = false;
185
+ }
186
+ // Skip if inside a class (methods are not module-level exports)
187
+ if (inClass) {
188
+ // But do extract the class itself
189
+ const classMatch = line.match(classRegex);
190
+ if (classMatch) {
191
+ exports.push({
192
+ name: classMatch[1],
193
+ type: 'class',
194
+ loc: {
195
+ start: { line: idx + 1, column: indent },
196
+ end: { line: idx + 1, column: line.length },
197
+ },
198
+ });
199
+ }
200
+ return;
201
+ }
202
+ // Extract functions (only at module level)
203
+ const funcMatch = line.match(functionRegex);
204
+ if (funcMatch && indent === 0) {
205
+ const name = funcMatch[1];
206
+ // Skip private functions (starting with _) unless in __all__
207
+ if (!name.startsWith('_') || name.startsWith('__')) {
208
+ exports.push({
209
+ name,
210
+ type: 'function',
211
+ loc: {
212
+ start: { line: idx + 1, column: 0 },
213
+ end: { line: idx + 1, column: line.length },
214
+ },
215
+ });
216
+ }
217
+ }
218
+ // Extract from __all__
219
+ const allMatch = line.match(allRegex);
220
+ if (allMatch) {
221
+ const names = allMatch[1]
222
+ .split(',')
223
+ .map(n => n.trim().replace(/['"]/g, ''));
224
+ names.forEach(name => {
225
+ if (name && !exports.find(e => e.name === name)) {
226
+ exports.push({
227
+ name,
228
+ type: 'variable',
229
+ loc: {
230
+ start: { line: idx + 1, column: 0 },
231
+ end: { line: idx + 1, column: line.length },
232
+ },
233
+ });
234
+ }
235
+ });
236
+ }
237
+ });
238
+ return exports;
239
+ }
240
+ }
241
+ //# sourceMappingURL=python-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-parser.js","sourceRoot":"","sources":["../../src/parsers/python-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * TypeScript/JavaScript Parser
3
+ *
4
+ * Parses TypeScript and JavaScript files using @typescript-eslint/typescript-estree
5
+ */
6
+ import { Language, LanguageParser, ParseResult, NamingConvention } from '../types/language';
7
+ export declare class TypeScriptParser implements LanguageParser {
8
+ readonly language = Language.TypeScript;
9
+ readonly extensions: string[];
10
+ parse(code: string, filePath: string): ParseResult;
11
+ getNamingConventions(): NamingConvention;
12
+ canHandle(filePath: string): boolean;
13
+ private extractImports;
14
+ private extractExports;
15
+ private extractFromDeclaration;
16
+ }
17
+ //# sourceMappingURL=typescript-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/typescript-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EAGX,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,QAAQ,uBAAuB;IACxC,QAAQ,CAAC,UAAU,WAAkC;IAErD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IA8BlD,oBAAoB,IAAI,gBAAgB;IAcxC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpC,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,sBAAsB;CA0F/B"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * TypeScript/JavaScript Parser
3
+ *
4
+ * Parses TypeScript and JavaScript files using @typescript-eslint/typescript-estree
5
+ */
6
+ import { parse } from '@typescript-eslint/typescript-estree';
7
+ import { Language, ParseError, } from '../types/language';
8
+ export class TypeScriptParser {
9
+ constructor() {
10
+ this.language = Language.TypeScript;
11
+ this.extensions = ['.ts', '.tsx', '.js', '.jsx'];
12
+ }
13
+ parse(code, filePath) {
14
+ try {
15
+ const isJavaScript = filePath.match(/\.jsx?$/i);
16
+ const ast = parse(code, {
17
+ loc: true,
18
+ range: true,
19
+ jsx: filePath.match(/\.[jt]sx$/i) !== null,
20
+ filePath,
21
+ sourceType: 'module',
22
+ ecmaVersion: 'latest',
23
+ });
24
+ const imports = this.extractImports(ast);
25
+ const exports = this.extractExports(ast, imports);
26
+ return {
27
+ exports,
28
+ imports,
29
+ language: isJavaScript ? Language.JavaScript : Language.TypeScript,
30
+ warnings: [],
31
+ };
32
+ }
33
+ catch (error) {
34
+ const err = error;
35
+ throw new ParseError(`Failed to parse ${filePath}: ${err.message}`, filePath);
36
+ }
37
+ }
38
+ getNamingConventions() {
39
+ return {
40
+ // camelCase for variables and functions
41
+ variablePattern: /^[a-z][a-zA-Z0-9]*$/,
42
+ functionPattern: /^[a-z][a-zA-Z0-9]*$/,
43
+ // PascalCase for classes
44
+ classPattern: /^[A-Z][a-zA-Z0-9]*$/,
45
+ // UPPER_CASE for constants
46
+ constantPattern: /^[A-Z][A-Z0-9_]*$/,
47
+ // Common exceptions (React hooks, etc.)
48
+ exceptions: ['__filename', '__dirname', '__esModule'],
49
+ };
50
+ }
51
+ canHandle(filePath) {
52
+ return this.extensions.some(ext => filePath.toLowerCase().endsWith(ext));
53
+ }
54
+ extractImports(ast) {
55
+ const imports = [];
56
+ for (const node of ast.body) {
57
+ if (node.type === 'ImportDeclaration') {
58
+ const specifiers = [];
59
+ let isTypeOnly = false;
60
+ // @ts-ignore - importKind exists but not in types
61
+ if (node.importKind === 'type') {
62
+ isTypeOnly = true;
63
+ }
64
+ for (const spec of node.specifiers) {
65
+ if (spec.type === 'ImportSpecifier') {
66
+ const imported = spec.imported;
67
+ const name = imported.type === 'Identifier' ? imported.name : imported.value;
68
+ specifiers.push(name);
69
+ }
70
+ else if (spec.type === 'ImportDefaultSpecifier') {
71
+ specifiers.push('default');
72
+ }
73
+ else if (spec.type === 'ImportNamespaceSpecifier') {
74
+ specifiers.push('*');
75
+ }
76
+ }
77
+ imports.push({
78
+ source: node.source.value,
79
+ specifiers,
80
+ isTypeOnly,
81
+ loc: node.loc
82
+ ? {
83
+ start: { line: node.loc.start.line, column: node.loc.start.column },
84
+ end: { line: node.loc.end.line, column: node.loc.end.column },
85
+ }
86
+ : undefined,
87
+ });
88
+ }
89
+ }
90
+ return imports;
91
+ }
92
+ extractExports(ast, imports) {
93
+ const exports = [];
94
+ const importedNames = new Set(imports.flatMap(imp => imp.specifiers.filter(s => s !== '*' && s !== 'default')));
95
+ for (const node of ast.body) {
96
+ if (node.type === 'ExportNamedDeclaration' && node.declaration) {
97
+ const extracted = this.extractFromDeclaration(node.declaration, importedNames);
98
+ exports.push(...extracted);
99
+ }
100
+ else if (node.type === 'ExportDefaultDeclaration') {
101
+ // Default export
102
+ let name = 'default';
103
+ let type = 'default';
104
+ if (node.declaration.type === 'FunctionDeclaration' &&
105
+ node.declaration.id) {
106
+ name = node.declaration.id.name;
107
+ type = 'function';
108
+ }
109
+ else if (node.declaration.type === 'ClassDeclaration' &&
110
+ node.declaration.id) {
111
+ name = node.declaration.id.name;
112
+ type = 'class';
113
+ }
114
+ exports.push({
115
+ name,
116
+ type,
117
+ loc: node.loc
118
+ ? {
119
+ start: { line: node.loc.start.line, column: node.loc.start.column },
120
+ end: { line: node.loc.end.line, column: node.loc.end.column },
121
+ }
122
+ : undefined,
123
+ });
124
+ }
125
+ }
126
+ return exports;
127
+ }
128
+ extractFromDeclaration(declaration, importedNames) {
129
+ const exports = [];
130
+ if (declaration.type === 'FunctionDeclaration' && declaration.id) {
131
+ exports.push({
132
+ name: declaration.id.name,
133
+ type: 'function',
134
+ parameters: declaration.params.map((p) => p.type === 'Identifier' ? p.name : 'unknown'),
135
+ loc: declaration.loc
136
+ ? {
137
+ start: {
138
+ line: declaration.loc.start.line,
139
+ column: declaration.loc.start.column,
140
+ },
141
+ end: { line: declaration.loc.end.line, column: declaration.loc.end.column },
142
+ }
143
+ : undefined,
144
+ });
145
+ }
146
+ else if (declaration.type === 'ClassDeclaration' && declaration.id) {
147
+ exports.push({
148
+ name: declaration.id.name,
149
+ type: 'class',
150
+ loc: declaration.loc
151
+ ? {
152
+ start: {
153
+ line: declaration.loc.start.line,
154
+ column: declaration.loc.start.column,
155
+ },
156
+ end: { line: declaration.loc.end.line, column: declaration.loc.end.column },
157
+ }
158
+ : undefined,
159
+ });
160
+ }
161
+ else if (declaration.type === 'VariableDeclaration') {
162
+ for (const declarator of declaration.declarations) {
163
+ if (declarator.id.type === 'Identifier') {
164
+ exports.push({
165
+ name: declarator.id.name,
166
+ type: 'const',
167
+ loc: declarator.loc
168
+ ? {
169
+ start: {
170
+ line: declarator.loc.start.line,
171
+ column: declarator.loc.start.column,
172
+ },
173
+ end: {
174
+ line: declarator.loc.end.line,
175
+ column: declarator.loc.end.column,
176
+ },
177
+ }
178
+ : undefined,
179
+ });
180
+ }
181
+ }
182
+ }
183
+ else if (declaration.type === 'TSTypeAliasDeclaration') {
184
+ exports.push({
185
+ name: declaration.id.name,
186
+ type: 'type',
187
+ loc: declaration.loc
188
+ ? {
189
+ start: {
190
+ line: declaration.loc.start.line,
191
+ column: declaration.loc.start.column,
192
+ },
193
+ end: { line: declaration.loc.end.line, column: declaration.loc.end.column },
194
+ }
195
+ : undefined,
196
+ });
197
+ }
198
+ else if (declaration.type === 'TSInterfaceDeclaration') {
199
+ exports.push({
200
+ name: declaration.id.name,
201
+ type: 'interface',
202
+ loc: declaration.loc
203
+ ? {
204
+ start: {
205
+ line: declaration.loc.start.line,
206
+ column: declaration.loc.start.column,
207
+ },
208
+ end: { line: declaration.loc.end.line, column: declaration.loc.end.column },
209
+ }
210
+ : undefined,
211
+ });
212
+ }
213
+ return exports;
214
+ }
215
+ }
216
+ //# sourceMappingURL=typescript-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-parser.js","sourceRoot":"","sources":["../../src/parsers/typescript-parser.ts"],"names":[],"mappings":"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"}