@yoinkingfish/parser 0.1.1 → 0.1.3

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 (43) hide show
  1. package/dist/parsers/cpp-parser.d.ts +12 -0
  2. package/dist/parsers/cpp-parser.d.ts.map +1 -0
  3. package/dist/parsers/cpp-parser.js +51 -0
  4. package/dist/parsers/cpp-parser.js.map +1 -0
  5. package/dist/parsers/csharp-parser.d.ts +12 -0
  6. package/dist/parsers/csharp-parser.d.ts.map +1 -0
  7. package/dist/parsers/csharp-parser.js +39 -0
  8. package/dist/parsers/csharp-parser.js.map +1 -0
  9. package/dist/parsers/go-parser.d.ts +12 -0
  10. package/dist/parsers/go-parser.d.ts.map +1 -0
  11. package/dist/parsers/go-parser.js +64 -0
  12. package/dist/parsers/go-parser.js.map +1 -0
  13. package/dist/parsers/index.d.ts +11 -3
  14. package/dist/parsers/index.d.ts.map +1 -1
  15. package/dist/parsers/index.js +37 -3
  16. package/dist/parsers/index.js.map +1 -1
  17. package/dist/parsers/java-parser.d.ts +12 -0
  18. package/dist/parsers/java-parser.d.ts.map +1 -0
  19. package/dist/parsers/java-parser.js +39 -0
  20. package/dist/parsers/java-parser.js.map +1 -0
  21. package/dist/parsers/php-parser.d.ts +12 -0
  22. package/dist/parsers/php-parser.d.ts.map +1 -0
  23. package/dist/parsers/php-parser.js +48 -0
  24. package/dist/parsers/php-parser.js.map +1 -0
  25. package/dist/parsers/python-parser.d.ts +12 -0
  26. package/dist/parsers/python-parser.d.ts.map +1 -0
  27. package/dist/parsers/python-parser.js +74 -0
  28. package/dist/parsers/python-parser.js.map +1 -0
  29. package/dist/parsers/ruby-parser.d.ts +12 -0
  30. package/dist/parsers/ruby-parser.d.ts.map +1 -0
  31. package/dist/parsers/ruby-parser.js +39 -0
  32. package/dist/parsers/ruby-parser.js.map +1 -0
  33. package/dist/parsers/rust-parser.d.ts +13 -0
  34. package/dist/parsers/rust-parser.d.ts.map +1 -0
  35. package/dist/parsers/rust-parser.js +61 -0
  36. package/dist/parsers/rust-parser.js.map +1 -0
  37. package/dist/resolvers/index.d.ts +2 -1
  38. package/dist/resolvers/index.d.ts.map +1 -1
  39. package/dist/resolvers/index.js +354 -17
  40. package/dist/resolvers/index.js.map +1 -1
  41. package/dist/scanners/index.d.ts.map +1 -1
  42. package/dist/scanners/index.js.map +1 -1
  43. package/package.json +2 -2
@@ -0,0 +1,12 @@
1
+ /**
2
+ * C/C++ Parser — extracts #include directives.
3
+ * Supports: #include <header>, #include "header", #include "path/header.h"
4
+ */
5
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
6
+ export declare class CppParser implements LanguageParser {
7
+ readonly supportedExtensions: string[];
8
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
9
+ private getLineNumber;
10
+ private dedupe;
11
+ }
12
+ //# sourceMappingURL=cpp-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpp-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/cpp-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAEtF,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,mBAAmB,WAY1B;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB5E,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * C/C++ Parser — extracts #include directives.
3
+ * Supports: #include <header>, #include "header", #include "path/header.h"
4
+ */
5
+ export class CppParser {
6
+ supportedExtensions = [
7
+ "c",
8
+ "cc",
9
+ "cpp",
10
+ "cxx",
11
+ "c++",
12
+ "h",
13
+ "hh",
14
+ "hpp",
15
+ "hxx",
16
+ "h++",
17
+ "inl",
18
+ ];
19
+ async parseFile(source, context) {
20
+ const dependencies = [];
21
+ // Match: #include <header> or #include "header"
22
+ const includes = source.matchAll(/^\s*#include\s*[<"]([^>"]+)[>"]/gm);
23
+ for (const match of includes) {
24
+ dependencies.push({
25
+ specifier: match[1],
26
+ type: "import",
27
+ line: this.getLineNumber(source, match.index ?? 0),
28
+ });
29
+ }
30
+ return {
31
+ filePath: context.filePath,
32
+ relativePath: context.relativePath,
33
+ language: "cpp",
34
+ dependencies: this.dedupe(dependencies),
35
+ };
36
+ }
37
+ getLineNumber(source, index) {
38
+ return source.substring(0, index).split("\n").length;
39
+ }
40
+ dedupe(deps) {
41
+ const seen = new Set();
42
+ return deps.filter((d) => {
43
+ const key = `${d.type}:${d.specifier}`;
44
+ if (seen.has(key))
45
+ return false;
46
+ seen.add(key);
47
+ return true;
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=cpp-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpp-parser.js","sourceRoot":"","sources":["../../src/parsers/cpp-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,SAAS;IACX,mBAAmB,GAAG;QAC7B,GAAG;QACH,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,GAAG;QACH,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAqB;QACnD,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,gDAAgD;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;QACtE,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAa;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,IAAqB;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * C# Parser — extracts using directives and namespace imports.
3
+ * Supports: using System; using System.Collections.Generic; using static System.Math;
4
+ */
5
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
6
+ export declare class CSharpParser implements LanguageParser {
7
+ readonly supportedExtensions: string[];
8
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
9
+ private getLineNumber;
10
+ private dedupe;
11
+ }
12
+ //# sourceMappingURL=csharp-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/csharp-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAEtF,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,mBAAmB,WAAU;IAEhC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB5E,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * C# Parser — extracts using directives and namespace imports.
3
+ * Supports: using System; using System.Collections.Generic; using static System.Math;
4
+ */
5
+ export class CSharpParser {
6
+ supportedExtensions = ["cs"];
7
+ async parseFile(source, context) {
8
+ const dependencies = [];
9
+ // Match: using System; using System.Collections.Generic; using static System.Math;
10
+ const usings = source.matchAll(/^\s*using\s+(?:static\s+)?([\w.]+);/gm);
11
+ for (const match of usings) {
12
+ dependencies.push({
13
+ specifier: match[1],
14
+ type: "import",
15
+ line: this.getLineNumber(source, match.index ?? 0),
16
+ });
17
+ }
18
+ return {
19
+ filePath: context.filePath,
20
+ relativePath: context.relativePath,
21
+ language: "csharp",
22
+ dependencies: this.dedupe(dependencies),
23
+ };
24
+ }
25
+ getLineNumber(source, index) {
26
+ return source.substring(0, index).split("\n").length;
27
+ }
28
+ dedupe(deps) {
29
+ const seen = new Set();
30
+ return deps.filter((d) => {
31
+ const key = `${d.type}:${d.specifier}`;
32
+ if (seen.has(key))
33
+ return false;
34
+ seen.add(key);
35
+ return true;
36
+ });
37
+ }
38
+ }
39
+ //# sourceMappingURL=csharp-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp-parser.js","sourceRoot":"","sources":["../../src/parsers/csharp-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,YAAY;IACd,mBAAmB,GAAG,CAAC,IAAI,CAAC,CAAC;IAEtC,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAqB;QACnD,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,mFAAmF;QACnF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;QACxE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAa;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,IAAqB;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Go Parser — extracts imports using Go's import statement patterns.
3
+ * Supports: import "pkg", import ( "pkg1"; "pkg2" ), import alias "pkg"
4
+ */
5
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
6
+ export declare class GoParser implements LanguageParser {
7
+ readonly supportedExtensions: string[];
8
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
9
+ private getLineNumber;
10
+ private dedupe;
11
+ }
12
+ //# sourceMappingURL=go-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/go-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAEtF,qBAAa,QAAS,YAAW,cAAc;IAC7C,QAAQ,CAAC,mBAAmB,WAAU;IAEhC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAgD5E,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Go Parser — extracts imports using Go's import statement patterns.
3
+ * Supports: import "pkg", import ( "pkg1"; "pkg2" ), import alias "pkg"
4
+ */
5
+ export class GoParser {
6
+ supportedExtensions = ["go"];
7
+ async parseFile(source, context) {
8
+ const dependencies = [];
9
+ // Match single-line imports: import "pkg"
10
+ const singleImports = source.matchAll(/^\s*import\s+"([^"]+)"/gm);
11
+ for (const match of singleImports) {
12
+ dependencies.push({
13
+ specifier: match[1],
14
+ type: "import",
15
+ line: this.getLineNumber(source, match.index ?? 0),
16
+ });
17
+ }
18
+ // Match multi-line imports: import ( "pkg1"; "pkg2" )
19
+ const multiImports = source.matchAll(/import\s*\(([\s\S]*?)\)/gm);
20
+ for (const match of multiImports) {
21
+ const block = match[1];
22
+ const imports = block.match(/"([^"]+)"/g);
23
+ if (imports) {
24
+ for (const imp of imports) {
25
+ const pkg = imp.replace(/"/g, "");
26
+ dependencies.push({
27
+ specifier: pkg,
28
+ type: "import",
29
+ line: this.getLineNumber(source, match.index ?? 0),
30
+ });
31
+ }
32
+ }
33
+ }
34
+ // Match aliased imports: import alias "pkg"
35
+ const aliasedImports = source.matchAll(/^\s*import\s+(\w+)\s+"([^"]+)"/gm);
36
+ for (const match of aliasedImports) {
37
+ dependencies.push({
38
+ specifier: match[2],
39
+ type: "import",
40
+ line: this.getLineNumber(source, match.index ?? 0),
41
+ });
42
+ }
43
+ return {
44
+ filePath: context.filePath,
45
+ relativePath: context.relativePath,
46
+ language: "go",
47
+ dependencies: this.dedupe(dependencies),
48
+ };
49
+ }
50
+ getLineNumber(source, index) {
51
+ return source.substring(0, index).split("\n").length;
52
+ }
53
+ dedupe(deps) {
54
+ const seen = new Set();
55
+ return deps.filter((d) => {
56
+ const key = `${d.type}:${d.specifier}`;
57
+ if (seen.has(key))
58
+ return false;
59
+ seen.add(key);
60
+ return true;
61
+ });
62
+ }
63
+ }
64
+ //# sourceMappingURL=go-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.js","sourceRoot":"","sources":["../../src/parsers/go-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,QAAQ;IACV,mBAAmB,GAAG,CAAC,IAAI,CAAC,CAAC;IAEtC,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAqB;QACnD,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,0CAA0C;QAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,sDAAsD;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,IAAI,CAAC;wBAChB,SAAS,EAAE,GAAG;wBACd,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;qBACnD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAa;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,IAAqB;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Parsers — LanguageParser abstraction and registry.
2
+ * Parsers LanguageParser abstraction and registry.
3
3
  */
4
4
  export interface ParseContext {
5
5
  filePath: string;
@@ -9,7 +9,7 @@ export interface ParseContext {
9
9
  }
10
10
  export interface RawDependency {
11
11
  specifier: string;
12
- type: "import" | "require" | "dynamic-import" | "unknown";
12
+ type: "import" | "require" | "dynamic-import" | "require" | "unknown";
13
13
  line?: number;
14
14
  }
15
15
  export interface ParseResult {
@@ -27,4 +27,12 @@ export declare const parserRegistry: LanguageParser[];
27
27
  export declare function getParserForExtension(ext: string): LanguageParser | undefined;
28
28
  export declare function getParserForFile(filePath: string): LanguageParser | undefined;
29
29
  export { TypeScriptParser } from "./typescript-parser.js";
30
- //# sourceMappingURL=index.d.ts.map
30
+ export { PythonParser } from "./python-parser.js";
31
+ export { GoParser } from "./go-parser.js";
32
+ export { RustParser } from "./rust-parser.js";
33
+ export { JavaParser } from "./java-parser.js";
34
+ export { CSharpParser } from "./csharp-parser.js";
35
+ export { PHPParser } from "./php-parser.js";
36
+ export { RubyParser } from "./ruby-parser.js";
37
+ export { CppParser } from "./cpp-parser.js";
38
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACxE;AAID,eAAO,MAAM,cAAc,EAAE,cAAc,EAAe,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG7E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG7E;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACxE;AAaD,eAAO,MAAM,cAAc,EAAE,cAAc,EAU1C,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG7E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG7E;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,10 +1,36 @@
1
1
  /**
2
- * Parsers — LanguageParser abstraction and registry.
2
+ * Parsers LanguageParser abstraction and registry.
3
3
  */
4
4
  import { TypeScriptParser } from "./typescript-parser.js";
5
- // Registry — add new language parsers here
5
+ import { PythonParser } from "./python-parser.js";
6
+ import { GoParser } from "./go-parser.js";
7
+ import { RustParser } from "./rust-parser.js";
8
+ import { JavaParser } from "./java-parser.js";
9
+ import { CSharpParser } from "./csharp-parser.js";
10
+ import { PHPParser } from "./php-parser.js";
11
+ import { RubyParser } from "./ruby-parser.js";
12
+ import { CppParser } from "./cpp-parser.js";
13
+ // Registry — all supported language parsers
6
14
  const tsParser = new TypeScriptParser();
7
- export const parserRegistry = [tsParser];
15
+ const pythonParser = new PythonParser();
16
+ const goParser = new GoParser();
17
+ const rustParser = new RustParser();
18
+ const javaParser = new JavaParser();
19
+ const csharpParser = new CSharpParser();
20
+ const phpParser = new PHPParser();
21
+ const rubyParser = new RubyParser();
22
+ const cppParser = new CppParser();
23
+ export const parserRegistry = [
24
+ tsParser,
25
+ pythonParser,
26
+ goParser,
27
+ rustParser,
28
+ javaParser,
29
+ csharpParser,
30
+ phpParser,
31
+ rubyParser,
32
+ cppParser,
33
+ ];
8
34
  export function getParserForExtension(ext) {
9
35
  const lower = ext.toLowerCase().replace(/^\./, "");
10
36
  return parserRegistry.find((p) => p.supportedExtensions.includes(lower));
@@ -15,4 +41,12 @@ export function getParserForFile(filePath) {
15
41
  }
16
42
  // Re-export concrete parsers
17
43
  export { TypeScriptParser } from "./typescript-parser.js";
44
+ export { PythonParser } from "./python-parser.js";
45
+ export { GoParser } from "./go-parser.js";
46
+ export { RustParser } from "./rust-parser.js";
47
+ export { JavaParser } from "./java-parser.js";
48
+ export { CSharpParser } from "./csharp-parser.js";
49
+ export { PHPParser } from "./php-parser.js";
50
+ export { RubyParser } from "./ruby-parser.js";
51
+ export { CppParser } from "./cpp-parser.js";
18
52
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AA4B1D,6CAA6C;AAC7C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAqB,CAAC,QAAQ,CAAC,CAAC;AAE3D,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC5C,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA4B5C,4CAA4C;AAC5C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACxC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAChC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACpC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACpC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAClC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACpC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,UAAU;IACV,YAAY;IACZ,SAAS;IACT,UAAU;IACV,SAAS;CACV,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC5C,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Java Parser — extracts imports using Java import statements.
3
+ * Supports: import pkg.Class, import pkg.*, import static pkg.Class.field
4
+ */
5
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
6
+ export declare class JavaParser implements LanguageParser {
7
+ readonly supportedExtensions: string[];
8
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
9
+ private getLineNumber;
10
+ private dedupe;
11
+ }
12
+ //# sourceMappingURL=java-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/java-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAEtF,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,mBAAmB,WAAY;IAElC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB5E,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Java Parser — extracts imports using Java import statements.
3
+ * Supports: import pkg.Class, import pkg.*, import static pkg.Class.field
4
+ */
5
+ export class JavaParser {
6
+ supportedExtensions = ["java"];
7
+ async parseFile(source, context) {
8
+ const dependencies = [];
9
+ // Match: import pkg.Class; import pkg.*;
10
+ const imports = source.matchAll(/^\s*import\s+(?:static\s+)?([\w.]+(?:\.\*)?);/gm);
11
+ for (const match of imports) {
12
+ dependencies.push({
13
+ specifier: match[1],
14
+ type: "import",
15
+ line: this.getLineNumber(source, match.index ?? 0),
16
+ });
17
+ }
18
+ return {
19
+ filePath: context.filePath,
20
+ relativePath: context.relativePath,
21
+ language: "java",
22
+ dependencies: this.dedupe(dependencies),
23
+ };
24
+ }
25
+ getLineNumber(source, index) {
26
+ return source.substring(0, index).split("\n").length;
27
+ }
28
+ dedupe(deps) {
29
+ const seen = new Set();
30
+ return deps.filter((d) => {
31
+ const key = `${d.type}:${d.specifier}`;
32
+ if (seen.has(key))
33
+ return false;
34
+ seen.add(key);
35
+ return true;
36
+ });
37
+ }
38
+ }
39
+ //# sourceMappingURL=java-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-parser.js","sourceRoot":"","sources":["../../src/parsers/java-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,UAAU;IACZ,mBAAmB,GAAG,CAAC,MAAM,CAAC,CAAC;IAExC,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAqB;QACnD,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,yCAAyC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,iDAAiD,CAAC,CAAC;QACnF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,MAAM;YAChB,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAa;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,IAAqB;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * PHP Parser — extracts use statements and require/include statements.
3
+ * Supports: use Namespace\Class; use function Namespace\func; require 'file.php';
4
+ */
5
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
6
+ export declare class PHPParser implements LanguageParser {
7
+ readonly supportedExtensions: string[];
8
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
9
+ private getLineNumber;
10
+ private dedupe;
11
+ }
12
+ //# sourceMappingURL=php-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/php-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAEtF,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,mBAAmB,WAA4C;IAElE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAiC5E,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * PHP Parser — extracts use statements and require/include statements.
3
+ * Supports: use Namespace\Class; use function Namespace\func; require 'file.php';
4
+ */
5
+ export class PHPParser {
6
+ supportedExtensions = ["php", "phtml", "php5", "php7", "php8"];
7
+ async parseFile(source, context) {
8
+ const dependencies = [];
9
+ // Match: use Namespace\Class; use function Namespace\func;
10
+ const uses = source.matchAll(/^\s*use\s+(?:function\s+|const\s+)?([\w\\]+);/gm);
11
+ for (const match of uses) {
12
+ dependencies.push({
13
+ specifier: match[1],
14
+ type: "import",
15
+ line: this.getLineNumber(source, match.index ?? 0),
16
+ });
17
+ }
18
+ // Match: require 'file.php'; require_once 'file.php';
19
+ const requires = source.matchAll(/(?:require|require_once|include|include_once)\s*[(\s]*['"]([^'"]+)['"]/gm);
20
+ for (const match of requires) {
21
+ dependencies.push({
22
+ specifier: match[1],
23
+ type: "require",
24
+ line: this.getLineNumber(source, match.index ?? 0),
25
+ });
26
+ }
27
+ return {
28
+ filePath: context.filePath,
29
+ relativePath: context.relativePath,
30
+ language: "php",
31
+ dependencies: this.dedupe(dependencies),
32
+ };
33
+ }
34
+ getLineNumber(source, index) {
35
+ return source.substring(0, index).split("\n").length;
36
+ }
37
+ dedupe(deps) {
38
+ const seen = new Set();
39
+ return deps.filter((d) => {
40
+ const key = `${d.type}:${d.specifier}`;
41
+ if (seen.has(key))
42
+ return false;
43
+ seen.add(key);
44
+ return true;
45
+ });
46
+ }
47
+ }
48
+ //# sourceMappingURL=php-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php-parser.js","sourceRoot":"","sources":["../../src/parsers/php-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,SAAS;IACX,mBAAmB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAExE,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAqB;QACnD,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,2DAA2D;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,iDAAiD,CAAC,CAAC;QAChF,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,sDAAsD;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAC9B,0EAA0E,CAC3E,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAa;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,IAAqB;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Python Parser — extracts imports using Python's AST patterns.
3
+ * Supports: import x, from x import y, import x as y, from . import x
4
+ */
5
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
6
+ export declare class PythonParser implements LanguageParser {
7
+ readonly supportedExtensions: string[];
8
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
9
+ private getLineNumber;
10
+ private dedupe;
11
+ }
12
+ //# 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;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAEtF,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,mBAAmB,WAAwB;IAE9C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA8D5E,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Python Parser — extracts imports using Python's AST patterns.
3
+ * Supports: import x, from x import y, import x as y, from . import x
4
+ */
5
+ export class PythonParser {
6
+ supportedExtensions = ["py", "pyw", "pyi"];
7
+ async parseFile(source, context) {
8
+ const dependencies = [];
9
+ // Match: from module import name
10
+ const fromImports = source.matchAll(/^\s*from\s+([\w.]+)\s+import\s+([\w.,\s*]+)/gm);
11
+ for (const match of fromImports) {
12
+ const module = match[1];
13
+ const imports = match[2].split(",").map((s) => s
14
+ .trim()
15
+ .split(/\s+as\s+/)[0]
16
+ .trim());
17
+ for (const imp of imports) {
18
+ if (imp && imp !== "*") {
19
+ dependencies.push({
20
+ specifier: module,
21
+ type: "import",
22
+ line: this.getLineNumber(source, match.index ?? 0),
23
+ });
24
+ }
25
+ }
26
+ }
27
+ // Match: import module
28
+ const directImports = source.matchAll(/^\s*import\s+([\w.,\s*]+)/gm);
29
+ for (const match of directImports) {
30
+ const imports = match[1].split(",").map((s) => s
31
+ .trim()
32
+ .split(/\s+as\s+/)[0]
33
+ .trim());
34
+ for (const imp of imports) {
35
+ if (imp) {
36
+ dependencies.push({
37
+ specifier: imp,
38
+ type: "import",
39
+ line: this.getLineNumber(source, match.index ?? 0),
40
+ });
41
+ }
42
+ }
43
+ }
44
+ // Relative imports (from . import x, from ..module import x)
45
+ const relativeImports = source.matchAll(/^\s*from\s+(\.+[\w.]*)\s+import\s+/gm);
46
+ for (const match of relativeImports) {
47
+ dependencies.push({
48
+ specifier: match[1],
49
+ type: "import",
50
+ line: this.getLineNumber(source, match.index ?? 0),
51
+ });
52
+ }
53
+ return {
54
+ filePath: context.filePath,
55
+ relativePath: context.relativePath,
56
+ language: "python",
57
+ dependencies: this.dedupe(dependencies),
58
+ };
59
+ }
60
+ getLineNumber(source, index) {
61
+ return source.substring(0, index).split("\n").length;
62
+ }
63
+ dedupe(deps) {
64
+ const seen = new Set();
65
+ return deps.filter((d) => {
66
+ const key = `${d.type}:${d.specifier}`;
67
+ if (seen.has(key))
68
+ return false;
69
+ seen.add(key);
70
+ return true;
71
+ });
72
+ }
73
+ }
74
+ //# 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,12 @@
1
+ /**
2
+ * Ruby Parser — extracts require and require_relative statements.
3
+ * Supports: require 'gem', require_relative 'file', require 'path/to/file'
4
+ */
5
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
6
+ export declare class RubyParser implements LanguageParser {
7
+ readonly supportedExtensions: string[];
8
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
9
+ private getLineNumber;
10
+ private dedupe;
11
+ }
12
+ //# sourceMappingURL=ruby-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/ruby-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAEtF,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,mBAAmB,WAAoC;IAE1D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB5E,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Ruby Parser — extracts require and require_relative statements.
3
+ * Supports: require 'gem', require_relative 'file', require 'path/to/file'
4
+ */
5
+ export class RubyParser {
6
+ supportedExtensions = ["rb", "rbw", "rake", "gemspec"];
7
+ async parseFile(source, context) {
8
+ const dependencies = [];
9
+ // Match: require 'gem'; require_relative 'file'
10
+ const requires = source.matchAll(/^\s*require(?:_relative)?\s*[(\s]*['"]([^'"]+)['"]/gm);
11
+ for (const match of requires) {
12
+ dependencies.push({
13
+ specifier: match[1],
14
+ type: "require",
15
+ line: this.getLineNumber(source, match.index ?? 0),
16
+ });
17
+ }
18
+ return {
19
+ filePath: context.filePath,
20
+ relativePath: context.relativePath,
21
+ language: "ruby",
22
+ dependencies: this.dedupe(dependencies),
23
+ };
24
+ }
25
+ getLineNumber(source, index) {
26
+ return source.substring(0, index).split("\n").length;
27
+ }
28
+ dedupe(deps) {
29
+ const seen = new Set();
30
+ return deps.filter((d) => {
31
+ const key = `${d.type}:${d.specifier}`;
32
+ if (seen.has(key))
33
+ return false;
34
+ seen.add(key);
35
+ return true;
36
+ });
37
+ }
38
+ }
39
+ //# sourceMappingURL=ruby-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby-parser.js","sourceRoot":"","sources":["../../src/parsers/ruby-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,UAAU;IACZ,mBAAmB,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAEhE,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAqB;QACnD,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,gDAAgD;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,sDAAsD,CAAC,CAAC;QACzF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,MAAM;YAChB,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAa;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,IAAqB;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Rust Parser — extracts imports using Rust's use/mod patterns.
3
+ * Supports: use crate::module, use crate::module::*, use crate::module::{a, b}
4
+ * mod module; use crate::module;
5
+ */
6
+ import { LanguageParser, ParseContext, ParseResult } from "./index.js";
7
+ export declare class RustParser implements LanguageParser {
8
+ readonly supportedExtensions: string[];
9
+ parseFile(source: string, context: ParseContext): Promise<ParseResult>;
10
+ private getLineNumber;
11
+ private dedupe;
12
+ }
13
+ //# sourceMappingURL=rust-parser.d.ts.map