@aiready/core 0.23.4 → 0.23.6

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 (109) hide show
  1. package/dist/{chunk-NGHT7JOG.mjs → chunk-Q55AMEFV.mjs} +63 -0
  2. package/dist/{client-D-cn9ydj.d.mts → client-CKcjnPXt.d.mts} +79 -1
  3. package/dist/{client-D-cn9ydj.d.ts → client-CKcjnPXt.d.ts} +79 -1
  4. package/dist/client.d.mts +1 -1
  5. package/dist/client.d.ts +1 -1
  6. package/dist/client.js +66 -0
  7. package/dist/client.mjs +9 -1
  8. package/dist/index.d.mts +10 -2
  9. package/dist/index.d.ts +10 -2
  10. package/dist/index.js +159 -21
  11. package/dist/index.mjs +102 -22
  12. package/package.json +1 -1
  13. package/dist/__tests__/parser-factory.test.d.ts +0 -5
  14. package/dist/__tests__/parser-factory.test.d.ts.map +0 -1
  15. package/dist/__tests__/parser-factory.test.js +0 -70
  16. package/dist/__tests__/parser-factory.test.js.map +0 -1
  17. package/dist/__tests__/python-parser.test.d.ts +0 -5
  18. package/dist/__tests__/python-parser.test.d.ts.map +0 -1
  19. package/dist/__tests__/python-parser.test.js +0 -194
  20. package/dist/__tests__/python-parser.test.js.map +0 -1
  21. package/dist/__tests__/scoring.test.d.ts +0 -2
  22. package/dist/__tests__/scoring.test.d.ts.map +0 -1
  23. package/dist/__tests__/scoring.test.js +0 -197
  24. package/dist/__tests__/scoring.test.js.map +0 -1
  25. package/dist/chunk-3YI4IS3D.mjs +0 -601
  26. package/dist/chunk-5HIXDC3X.mjs +0 -716
  27. package/dist/chunk-5V3L53AE.mjs +0 -805
  28. package/dist/chunk-CKVKHN3G.mjs +0 -660
  29. package/dist/chunk-COHIBX3Q.mjs +0 -635
  30. package/dist/chunk-CWRCDSKZ.mjs +0 -417
  31. package/dist/chunk-D3D3NCRR.mjs +0 -556
  32. package/dist/chunk-HCFYP7UD.mjs +0 -805
  33. package/dist/chunk-HFLFBA6F.mjs +0 -417
  34. package/dist/chunk-HKSARRCD.mjs +0 -365
  35. package/dist/chunk-JJ5JL5FX.mjs +0 -417
  36. package/dist/chunk-KDSTXVLQ.mjs +0 -724
  37. package/dist/chunk-KI7XORTN.mjs +0 -417
  38. package/dist/chunk-LTMHFNFK.mjs +0 -690
  39. package/dist/chunk-LTNXTXRI.mjs +0 -659
  40. package/dist/chunk-M22BXHBR.mjs +0 -805
  41. package/dist/chunk-MH3A3LX6.mjs +0 -615
  42. package/dist/chunk-OQ6IGDXG.mjs +0 -553
  43. package/dist/chunk-QAFB3HXQ.mjs +0 -590
  44. package/dist/chunk-QQBKXHLU.mjs +0 -678
  45. package/dist/chunk-RDHYGES7.mjs +0 -678
  46. package/dist/chunk-SWTDBVYJ.mjs +0 -660
  47. package/dist/chunk-UIWL5JQB.mjs +0 -417
  48. package/dist/chunk-UQGI67WR.mjs +0 -417
  49. package/dist/chunk-UTZOO4XO.mjs +0 -553
  50. package/dist/chunk-X4F46I5L.mjs +0 -635
  51. package/dist/chunk-XKK7YHPX.mjs +0 -619
  52. package/dist/chunk-YCA4FTEK.mjs +0 -600
  53. package/dist/chunk-ZSZRRTJM.mjs +0 -719
  54. package/dist/client-BgmiMoil.d.mts +0 -1344
  55. package/dist/client-BgmiMoil.d.ts +0 -1344
  56. package/dist/client-BxGrPuuN.d.mts +0 -1191
  57. package/dist/client-BxGrPuuN.d.ts +0 -1191
  58. package/dist/client-D9seCH4K.d.mts +0 -1334
  59. package/dist/client-D9seCH4K.d.ts +0 -1334
  60. package/dist/client-DIXIh7rw.d.mts +0 -1193
  61. package/dist/client-DIXIh7rw.d.ts +0 -1193
  62. package/dist/client-DVHXWOHw.d.mts +0 -1245
  63. package/dist/client-DVHXWOHw.d.ts +0 -1245
  64. package/dist/index.d.ts.map +0 -1
  65. package/dist/index.js.map +0 -1
  66. package/dist/parsers/parser-factory.d.ts +0 -69
  67. package/dist/parsers/parser-factory.d.ts.map +0 -1
  68. package/dist/parsers/parser-factory.js +0 -116
  69. package/dist/parsers/parser-factory.js.map +0 -1
  70. package/dist/parsers/python-parser.d.ts +0 -47
  71. package/dist/parsers/python-parser.d.ts.map +0 -1
  72. package/dist/parsers/python-parser.js +0 -243
  73. package/dist/parsers/python-parser.js.map +0 -1
  74. package/dist/parsers/typescript-parser.d.ts +0 -22
  75. package/dist/parsers/typescript-parser.d.ts.map +0 -1
  76. package/dist/parsers/typescript-parser.js +0 -242
  77. package/dist/parsers/typescript-parser.js.map +0 -1
  78. package/dist/scoring.d.ts +0 -120
  79. package/dist/scoring.d.ts.map +0 -1
  80. package/dist/scoring.js +0 -197
  81. package/dist/scoring.js.map +0 -1
  82. package/dist/types/language.d.ts +0 -172
  83. package/dist/types/language.d.ts.map +0 -1
  84. package/dist/types/language.js +0 -45
  85. package/dist/types/language.js.map +0 -1
  86. package/dist/types.d.ts +0 -122
  87. package/dist/types.d.ts.map +0 -1
  88. package/dist/types.js +0 -2
  89. package/dist/types.js.map +0 -1
  90. package/dist/utils/ast-parser.d.ts +0 -59
  91. package/dist/utils/ast-parser.d.ts.map +0 -1
  92. package/dist/utils/ast-parser.js +0 -213
  93. package/dist/utils/ast-parser.js.map +0 -1
  94. package/dist/utils/cli-helpers.d.ts +0 -54
  95. package/dist/utils/cli-helpers.d.ts.map +0 -1
  96. package/dist/utils/cli-helpers.js +0 -78
  97. package/dist/utils/cli-helpers.js.map +0 -1
  98. package/dist/utils/config.d.ts +0 -9
  99. package/dist/utils/config.d.ts.map +0 -1
  100. package/dist/utils/config.js +0 -80
  101. package/dist/utils/config.js.map +0 -1
  102. package/dist/utils/file-scanner.d.ts +0 -16
  103. package/dist/utils/file-scanner.d.ts.map +0 -1
  104. package/dist/utils/file-scanner.js +0 -104
  105. package/dist/utils/file-scanner.js.map +0 -1
  106. package/dist/utils/metrics.d.ts +0 -6
  107. package/dist/utils/metrics.d.ts.map +0 -1
  108. package/dist/utils/metrics.js +0 -8
  109. package/dist/utils/metrics.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAG1B,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAE1B,gCAAgC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}
@@ -1,69 +0,0 @@
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, LanguageParser } from '../types/language';
8
- /**
9
- * Factory for creating and managing language parsers
10
- */
11
- export declare class ParserFactory {
12
- private static instance;
13
- private parsers;
14
- private extensionMap;
15
- private constructor();
16
- /**
17
- * Get singleton instance
18
- */
19
- static getInstance(): ParserFactory;
20
- /**
21
- * Register a language parser
22
- */
23
- registerParser(parser: LanguageParser): void;
24
- /**
25
- * Get parser for a specific language
26
- */
27
- getParserForLanguage(language: Language): LanguageParser | null;
28
- /**
29
- * Get parser for a file based on its extension
30
- */
31
- getParserForFile(filePath: string): LanguageParser | null;
32
- /**
33
- * Check if a file is supported
34
- */
35
- isSupported(filePath: string): boolean;
36
- /**
37
- * Get all registered languages
38
- */
39
- getSupportedLanguages(): Language[];
40
- /**
41
- * Get all supported file extensions
42
- */
43
- getSupportedExtensions(): string[];
44
- /**
45
- * Get language for a file
46
- */
47
- getLanguageForFile(filePath: string): Language | null;
48
- /**
49
- * Extract file extension (with dot)
50
- */
51
- private getFileExtension;
52
- /**
53
- * Reset factory (useful for testing)
54
- */
55
- static reset(): void;
56
- }
57
- /**
58
- * Convenience function to get parser for a file
59
- */
60
- export declare function getParser(filePath: string): LanguageParser | null;
61
- /**
62
- * Convenience function to check if file is supported
63
- */
64
- export declare function isFileSupported(filePath: string): boolean;
65
- /**
66
- * Get all supported languages
67
- */
68
- export declare function getSupportedLanguages(): Language[];
69
- //# sourceMappingURL=parser-factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser-factory.d.ts","sourceRoot":"","sources":["../../src/parsers/parser-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EACR,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,YAAY,CAAwB;IAE5C,OAAO;IAWP;;OAEG;WACW,WAAW,IAAI,aAAa;IAO1C;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IASnD;;OAEG;IACI,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,IAAI;IAItE;;OAEG;IACI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAWhE;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,qBAAqB,IAAI,QAAQ,EAAE;IAI1C;;OAEG;IACI,sBAAsB,IAAI,MAAM,EAAE;IAIzC;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAK5D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;WACW,KAAK,IAAI,IAAI;CAG5B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAElD"}
@@ -1,116 +0,0 @@
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(
17
- Object.entries(LANGUAGE_EXTENSIONS).map(([ext, lang]) => [ext, lang])
18
- );
19
- // Register default parsers
20
- this.registerParser(new TypeScriptParser());
21
- this.registerParser(new PythonParser());
22
- }
23
- /**
24
- * Get singleton instance
25
- */
26
- static getInstance() {
27
- if (!ParserFactory.instance) {
28
- ParserFactory.instance = new ParserFactory();
29
- }
30
- return ParserFactory.instance;
31
- }
32
- /**
33
- * Register a language parser
34
- */
35
- registerParser(parser) {
36
- this.parsers.set(parser.language, parser);
37
- // Map extensions to this parser
38
- parser.extensions.forEach((ext) => {
39
- this.extensionMap.set(ext, parser.language);
40
- });
41
- }
42
- /**
43
- * Get parser for a specific language
44
- */
45
- getParserForLanguage(language) {
46
- return this.parsers.get(language) || null;
47
- }
48
- /**
49
- * Get parser for a file based on its extension
50
- */
51
- getParserForFile(filePath) {
52
- const ext = this.getFileExtension(filePath);
53
- const language = this.extensionMap.get(ext);
54
- if (!language) {
55
- return null;
56
- }
57
- return this.parsers.get(language) || null;
58
- }
59
- /**
60
- * Check if a file is supported
61
- */
62
- isSupported(filePath) {
63
- return this.getParserForFile(filePath) !== null;
64
- }
65
- /**
66
- * Get all registered languages
67
- */
68
- getSupportedLanguages() {
69
- return Array.from(this.parsers.keys());
70
- }
71
- /**
72
- * Get all supported file extensions
73
- */
74
- getSupportedExtensions() {
75
- return Array.from(this.extensionMap.keys());
76
- }
77
- /**
78
- * Get language for a file
79
- */
80
- getLanguageForFile(filePath) {
81
- const ext = this.getFileExtension(filePath);
82
- return this.extensionMap.get(ext) || null;
83
- }
84
- /**
85
- * Extract file extension (with dot)
86
- */
87
- getFileExtension(filePath) {
88
- const match = filePath.match(/\.[^.]+$/);
89
- return match ? match[0].toLowerCase() : '';
90
- }
91
- /**
92
- * Reset factory (useful for testing)
93
- */
94
- static reset() {
95
- ParserFactory.instance = new ParserFactory();
96
- }
97
- }
98
- /**
99
- * Convenience function to get parser for a file
100
- */
101
- export function getParser(filePath) {
102
- return ParserFactory.getInstance().getParserForFile(filePath);
103
- }
104
- /**
105
- * Convenience function to check if file is supported
106
- */
107
- export function isFileSupported(filePath) {
108
- return ParserFactory.getInstance().isSupported(filePath);
109
- }
110
- /**
111
- * Get all supported languages
112
- */
113
- export function getSupportedLanguages() {
114
- return ParserFactory.getInstance().getSupportedLanguages();
115
- }
116
- //# sourceMappingURL=parser-factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser-factory.js","sourceRoot":"","sources":["../../src/parsers/parser-factory.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Python Parser using tree-sitter
3
- *
4
- * Parses Python files using tree-sitter-python for accurate AST parsing
5
- */
6
- import {
7
- Language,
8
- LanguageParser,
9
- ParseResult,
10
- NamingConvention,
11
- } from '../types/language';
12
- /**
13
- * Python Parser implementation
14
- *
15
- * Note: This implementation will use tree-sitter-python for parsing.
16
- * For now, it provides a skeleton that can be filled in once web-tree-sitter
17
- * is properly configured.
18
- */
19
- export declare class PythonParser implements LanguageParser {
20
- readonly language = Language.Python;
21
- readonly extensions: string[];
22
- private parser;
23
- private initialized;
24
- /**
25
- * Initialize the tree-sitter parser
26
- * This is async because tree-sitter WASM needs to be loaded
27
- */
28
- initialize(): Promise<void>;
29
- parse(code: string, filePath: string): ParseResult;
30
- getNamingConventions(): NamingConvention;
31
- canHandle(filePath: string): boolean;
32
- /**
33
- * Regex-based import extraction (temporary implementation)
34
- */
35
- private extractImportsRegex;
36
- /**
37
- * Regex-based export extraction (temporary implementation)
38
- *
39
- * Python doesn't have explicit exports like JavaScript.
40
- * We extract:
41
- * - Functions defined at module level (def)
42
- * - Classes defined at module level (class)
43
- * - Variables in __all__ list
44
- */
45
- private extractExportsRegex;
46
- }
47
- //# sourceMappingURL=python-parser.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,243 +0,0 @@
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) return;
27
- try {
28
- // TODO: Initialize tree-sitter-python
29
- // const Parser = await import('web-tree-sitter');
30
- // await Parser.init();
31
- // this.parser = new Parser();
32
- // const Python = await Parser.Language.load('tree-sitter-python.wasm');
33
- // this.parser.setLanguage(Python);
34
- this.initialized = true;
35
- } catch (error) {
36
- throw new Error(`Failed to initialize Python parser: ${error.message}`);
37
- }
38
- }
39
- parse(code, filePath) {
40
- // TODO: Implement when tree-sitter is configured
41
- // For now, return a basic parse with regex-based extraction
42
- try {
43
- const imports = this.extractImportsRegex(code, filePath);
44
- const exports = this.extractExportsRegex(code, filePath);
45
- return {
46
- exports,
47
- imports,
48
- language: Language.Python,
49
- warnings: [
50
- 'Python parsing is currently using regex-based extraction. Tree-sitter support coming soon.',
51
- ],
52
- };
53
- } catch (error) {
54
- throw new ParseError(
55
- `Failed to parse Python file ${filePath}: ${error.message}`,
56
- filePath
57
- );
58
- }
59
- }
60
- getNamingConventions() {
61
- // PEP 8 naming conventions
62
- return {
63
- // snake_case for variables and functions
64
- variablePattern: /^[a-z_][a-z0-9_]*$/,
65
- functionPattern: /^[a-z_][a-z0-9_]*$/,
66
- // PascalCase for classes
67
- classPattern: /^[A-Z][a-zA-Z0-9]*$/,
68
- // UPPER_CASE for constants
69
- constantPattern: /^[A-Z][A-Z0-9_]*$/,
70
- // Python special methods and common exceptions
71
- exceptions: [
72
- '__init__',
73
- '__str__',
74
- '__repr__',
75
- '__name__',
76
- '__main__',
77
- '__file__',
78
- '__doc__',
79
- '__all__',
80
- '__version__',
81
- '__author__',
82
- '__dict__',
83
- '__class__',
84
- '__module__',
85
- '__bases__',
86
- ],
87
- };
88
- }
89
- canHandle(filePath) {
90
- return filePath.toLowerCase().endsWith('.py');
91
- }
92
- /**
93
- * Regex-based import extraction (temporary implementation)
94
- */
95
- extractImportsRegex(code, filePath) {
96
- const imports = [];
97
- const lines = code.split('\n');
98
- // Match: import module
99
- // Match: import module as alias
100
- // Match: from module import name
101
- // Match: from module import name1, name2
102
- // Match: from module import *
103
- const importRegex = /^\s*import\s+([a-zA-Z0-9_., ]+)/;
104
- const fromImportRegex = /^\s*from\s+([a-zA-Z0-9_.]+)\s+import\s+(.+)/;
105
- lines.forEach((line, idx) => {
106
- // Skip comments
107
- if (line.trim().startsWith('#')) return;
108
- // Handle "import module"
109
- const importMatch = line.match(importRegex);
110
- if (importMatch) {
111
- const modules = importMatch[1]
112
- .split(',')
113
- .map((m) => m.trim().split(' as ')[0]);
114
- modules.forEach((module) => {
115
- imports.push({
116
- source: module,
117
- specifiers: [module],
118
- loc: {
119
- start: { line: idx + 1, column: 0 },
120
- end: { line: idx + 1, column: line.length },
121
- },
122
- });
123
- });
124
- return;
125
- }
126
- // Handle "from module import ..."
127
- const fromMatch = line.match(fromImportRegex);
128
- if (fromMatch) {
129
- const module = fromMatch[1];
130
- const imports_str = fromMatch[2];
131
- // Handle "from module import *"
132
- if (imports_str.trim() === '*') {
133
- imports.push({
134
- source: module,
135
- specifiers: ['*'],
136
- loc: {
137
- start: { line: idx + 1, column: 0 },
138
- end: { line: idx + 1, column: line.length },
139
- },
140
- });
141
- return;
142
- }
143
- // Handle "from module import name1, name2"
144
- const specifiers = imports_str
145
- .split(',')
146
- .map((s) => s.trim().split(' as ')[0]);
147
- imports.push({
148
- source: module,
149
- specifiers,
150
- loc: {
151
- start: { line: idx + 1, column: 0 },
152
- end: { line: idx + 1, column: line.length },
153
- },
154
- });
155
- }
156
- });
157
- return imports;
158
- }
159
- /**
160
- * Regex-based export extraction (temporary implementation)
161
- *
162
- * Python doesn't have explicit exports like JavaScript.
163
- * We extract:
164
- * - Functions defined at module level (def)
165
- * - Classes defined at module level (class)
166
- * - Variables in __all__ list
167
- */
168
- extractExportsRegex(code, filePath) {
169
- const exports = [];
170
- const lines = code.split('\n');
171
- // Extract functions: def function_name(
172
- const functionRegex = /^def\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/;
173
- // Extract classes: class ClassName
174
- const classRegex = /^class\s+([a-zA-Z_][a-zA-Z0-9_]*)/;
175
- // Extract from __all__
176
- const allRegex = /__all__\s*=\s*\[([^\]]+)\]/;
177
- let inClass = false;
178
- let classIndent = 0;
179
- lines.forEach((line, idx) => {
180
- const indent = line.search(/\S/);
181
- // Track if we're inside a class (for filtering out methods)
182
- if (line.match(classRegex)) {
183
- inClass = true;
184
- classIndent = indent;
185
- } else if (inClass && indent <= classIndent && line.trim()) {
186
- inClass = false;
187
- }
188
- // Skip if inside a class (methods are not module-level exports)
189
- if (inClass) {
190
- // But do extract the class itself
191
- const classMatch = line.match(classRegex);
192
- if (classMatch) {
193
- exports.push({
194
- name: classMatch[1],
195
- type: 'class',
196
- loc: {
197
- start: { line: idx + 1, column: indent },
198
- end: { line: idx + 1, column: line.length },
199
- },
200
- });
201
- }
202
- return;
203
- }
204
- // Extract functions (only at module level)
205
- const funcMatch = line.match(functionRegex);
206
- if (funcMatch && indent === 0) {
207
- const name = funcMatch[1];
208
- // Skip private functions (starting with _) unless in __all__
209
- if (!name.startsWith('_') || name.startsWith('__')) {
210
- exports.push({
211
- name,
212
- type: 'function',
213
- loc: {
214
- start: { line: idx + 1, column: 0 },
215
- end: { line: idx + 1, column: line.length },
216
- },
217
- });
218
- }
219
- }
220
- // Extract from __all__
221
- const allMatch = line.match(allRegex);
222
- if (allMatch) {
223
- const names = allMatch[1]
224
- .split(',')
225
- .map((n) => n.trim().replace(/['"]/g, ''));
226
- names.forEach((name) => {
227
- if (name && !exports.find((e) => e.name === name)) {
228
- exports.push({
229
- name,
230
- type: 'variable',
231
- loc: {
232
- start: { line: idx + 1, column: 0 },
233
- end: { line: idx + 1, column: line.length },
234
- },
235
- });
236
- }
237
- });
238
- }
239
- });
240
- return exports;
241
- }
242
- }
243
- //# sourceMappingURL=python-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"python-parser.js","sourceRoot":"","sources":["../../src/parsers/python-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EAMR,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IAAzB;QACW,aAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC3B,eAAU,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,WAAM,GAAQ,IAAI,CAAC;QACnB,gBAAW,GAAG,KAAK,CAAC;IAwP9B,CAAC;IAtPC;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,IAAI,CAAC;YACH,sCAAsC;YACtC,kDAAkD;YAClD,uBAAuB;YACvB,8BAA8B;YAC9B,wEAAwE;YACxE,mCAAmC;YAEnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uCAAwC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,QAAgB;QAClC,iDAAiD;QACjD,4DAA4D;QAE5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEzD,OAAO;gBACL,OAAO;gBACP,OAAO;gBACP,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,QAAQ,EAAE,CAAC,4FAA4F,CAAC;aACzG,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,UAAU,CAClB,+BAA+B,QAAQ,KAAM,KAAe,CAAC,OAAO,EAAE,EACtE,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oBAAoB;QAClB,2BAA2B;QAC3B,OAAO;YACL,yCAAyC;YACzC,eAAe,EAAE,oBAAoB;YACrC,eAAe,EAAE,oBAAoB;YACrC,yBAAyB;YACzB,YAAY,EAAE,qBAAqB;YACnC,2BAA2B;YAC3B,eAAe,EAAE,mBAAmB;YACpC,+CAA+C;YAC/C,UAAU,EAAE;gBACV,UAAU;gBACV,SAAS;gBACT,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,SAAS;gBACT,SAAS;gBACT,aAAa;gBACb,YAAY;gBACZ,UAAU;gBACV,WAAW;gBACX,YAAY;gBACZ,WAAW;aACZ;SACF,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,QAAgB;QACxD,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,uBAAuB;QACvB,gCAAgC;QAChC,iCAAiC;QACjC,yCAAyC;QACzC,8BAA8B;QAE9B,MAAM,WAAW,GAAG,iCAAiC,CAAC;QACtD,MAAM,eAAe,GAAG,6CAA6C,CAAC;QAEtE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC1B,gBAAgB;YAChB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO;YAExC,yBAAyB;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBACvB,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,CAAC,MAAM,CAAC;wBACpB,GAAG,EAAE;4BACH,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;4BACnC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;yBAC5C;qBACF,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,kCAAkC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAEjC,gCAAgC;gBAChC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBAC/B,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,CAAC,GAAG,CAAC;wBACjB,GAAG,EAAE;4BACH,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;4BACnC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;yBAC5C;qBACF,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,2CAA2C;gBAC3C,MAAM,UAAU,GAAG,WAAW;qBAC3B,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEvC,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,MAAM;oBACd,UAAU;oBACV,GAAG,EAAE;wBACH,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;wBACnC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;qBAC5C;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACK,mBAAmB,CAAC,IAAY,EAAE,QAAgB;QACxD,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,wCAAwC;QACxC,MAAM,aAAa,GAAG,sCAAsC,CAAC;QAE7D,mCAAmC;QACnC,MAAM,UAAU,GAAG,mCAAmC,CAAC;QAEvD,uBAAuB;QACvB,MAAM,QAAQ,GAAG,4BAA4B,CAAC;QAE9C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEjC,4DAA4D;YAC5D,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,IAAI,CAAC;gBACf,WAAW,GAAG,MAAM,CAAC;YACvB,CAAC;iBAAM,IAAI,OAAO,IAAI,MAAM,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3D,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;YAED,gEAAgE;YAChE,IAAI,OAAO,EAAE,CAAC;gBACZ,kCAAkC;gBAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;wBACnB,IAAI,EAAE,OAAO;wBACb,GAAG,EAAE;4BACH,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;4BACxC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;yBAC5C;qBACF,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YAED,2CAA2C;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5C,IAAI,SAAS,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC1B,6DAA6D;gBAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI;wBACJ,IAAI,EAAE,UAAU;wBAChB,GAAG,EAAE;4BACH,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;4BACnC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;yBAC5C;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;qBACtB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBAE3C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;wBAChD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI;4BACJ,IAAI,EAAE,UAAU;4BAChB,GAAG,EAAE;gCACH,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gCACnC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;6BAC5C;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,22 +0,0 @@
1
- /**
2
- * TypeScript/JavaScript Parser
3
- *
4
- * Parses TypeScript and JavaScript files using @typescript-eslint/typescript-estree
5
- */
6
- import {
7
- Language,
8
- LanguageParser,
9
- ParseResult,
10
- NamingConvention,
11
- } from '../types/language';
12
- export declare class TypeScriptParser implements LanguageParser {
13
- readonly language = Language.TypeScript;
14
- readonly extensions: string[];
15
- parse(code: string, filePath: string): ParseResult;
16
- getNamingConventions(): NamingConvention;
17
- canHandle(filePath: string): boolean;
18
- private extractImports;
19
- private extractExports;
20
- private extractFromDeclaration;
21
- }
22
- //# sourceMappingURL=typescript-parser.d.ts.map
@@ -1 +0,0 @@
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"}