ghagga-core 2.5.0 → 2.6.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/README.md +1 -1
  2. package/dist/agents/consensus.d.ts +16 -0
  3. package/dist/agents/consensus.d.ts.map +1 -1
  4. package/dist/agents/consensus.js +57 -33
  5. package/dist/agents/consensus.js.map +1 -1
  6. package/dist/agents/diagnostic.d.ts +55 -0
  7. package/dist/agents/diagnostic.d.ts.map +1 -0
  8. package/dist/agents/diagnostic.js +143 -0
  9. package/dist/agents/diagnostic.js.map +1 -0
  10. package/dist/agents/prompts.d.ts +6 -4
  11. package/dist/agents/prompts.d.ts.map +1 -1
  12. package/dist/agents/prompts.js +110 -24
  13. package/dist/agents/prompts.js.map +1 -1
  14. package/dist/agents/simple.d.ts +7 -0
  15. package/dist/agents/simple.d.ts.map +1 -1
  16. package/dist/agents/simple.js +32 -18
  17. package/dist/agents/simple.js.map +1 -1
  18. package/dist/agents/workflow.d.ts +28 -1
  19. package/dist/agents/workflow.d.ts.map +1 -1
  20. package/dist/agents/workflow.js +112 -45
  21. package/dist/agents/workflow.js.map +1 -1
  22. package/dist/enhance/enhance.d.ts.map +1 -1
  23. package/dist/enhance/enhance.js +16 -4
  24. package/dist/enhance/enhance.js.map +1 -1
  25. package/dist/format.d.ts +47 -1
  26. package/dist/format.d.ts.map +1 -1
  27. package/dist/format.js +175 -3
  28. package/dist/format.js.map +1 -1
  29. package/dist/graph/blast-radius.d.ts +57 -0
  30. package/dist/graph/blast-radius.d.ts.map +1 -0
  31. package/dist/graph/blast-radius.js +145 -0
  32. package/dist/graph/blast-radius.js.map +1 -0
  33. package/dist/graph/builder.d.ts +50 -0
  34. package/dist/graph/builder.d.ts.map +1 -0
  35. package/dist/graph/builder.js +210 -0
  36. package/dist/graph/builder.js.map +1 -0
  37. package/dist/graph/extractors/go.d.ts +9 -0
  38. package/dist/graph/extractors/go.d.ts.map +1 -0
  39. package/dist/graph/extractors/go.js +78 -0
  40. package/dist/graph/extractors/go.js.map +1 -0
  41. package/dist/graph/extractors/index.d.ts +22 -0
  42. package/dist/graph/extractors/index.d.ts.map +1 -0
  43. package/dist/graph/extractors/index.js +37 -0
  44. package/dist/graph/extractors/index.js.map +1 -0
  45. package/dist/graph/extractors/java.d.ts +9 -0
  46. package/dist/graph/extractors/java.d.ts.map +1 -0
  47. package/dist/graph/extractors/java.js +80 -0
  48. package/dist/graph/extractors/java.js.map +1 -0
  49. package/dist/graph/extractors/javascript.d.ts +9 -0
  50. package/dist/graph/extractors/javascript.d.ts.map +1 -0
  51. package/dist/graph/extractors/javascript.js +204 -0
  52. package/dist/graph/extractors/javascript.js.map +1 -0
  53. package/dist/graph/extractors/python.d.ts +9 -0
  54. package/dist/graph/extractors/python.d.ts.map +1 -0
  55. package/dist/graph/extractors/python.js +103 -0
  56. package/dist/graph/extractors/python.js.map +1 -0
  57. package/dist/graph/extractors/rust.d.ts +9 -0
  58. package/dist/graph/extractors/rust.d.ts.map +1 -0
  59. package/dist/graph/extractors/rust.js +115 -0
  60. package/dist/graph/extractors/rust.js.map +1 -0
  61. package/dist/graph/extractors/types.d.ts +31 -0
  62. package/dist/graph/extractors/types.d.ts.map +1 -0
  63. package/dist/graph/extractors/types.js +9 -0
  64. package/dist/graph/extractors/types.js.map +1 -0
  65. package/dist/graph/extractors/typescript.d.ts +9 -0
  66. package/dist/graph/extractors/typescript.d.ts.map +1 -0
  67. package/dist/graph/extractors/typescript.js +151 -0
  68. package/dist/graph/extractors/typescript.js.map +1 -0
  69. package/dist/graph/index.d.ts +15 -0
  70. package/dist/graph/index.d.ts.map +1 -0
  71. package/dist/graph/index.js +14 -0
  72. package/dist/graph/index.js.map +1 -0
  73. package/dist/graph/loader.d.ts +43 -0
  74. package/dist/graph/loader.d.ts.map +1 -0
  75. package/dist/graph/loader.js +104 -0
  76. package/dist/graph/loader.js.map +1 -0
  77. package/dist/graph/schema.d.ts +113 -0
  78. package/dist/graph/schema.d.ts.map +1 -0
  79. package/dist/graph/schema.js +144 -0
  80. package/dist/graph/schema.js.map +1 -0
  81. package/dist/health/trends.js +1 -1
  82. package/dist/health/trends.js.map +1 -1
  83. package/dist/index.d.ts +20 -5
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +10 -4
  86. package/dist/index.js.map +1 -1
  87. package/dist/memory/sqlite.js +4 -4
  88. package/dist/memory/sqlite.js.map +1 -1
  89. package/dist/pipeline.d.ts.map +1 -1
  90. package/dist/pipeline.js +291 -42
  91. package/dist/pipeline.js.map +1 -1
  92. package/dist/providers/cli-bridge.d.ts +136 -0
  93. package/dist/providers/cli-bridge.d.ts.map +1 -0
  94. package/dist/providers/cli-bridge.js +457 -0
  95. package/dist/providers/cli-bridge.js.map +1 -0
  96. package/dist/providers/fallback.d.ts +8 -0
  97. package/dist/providers/fallback.d.ts.map +1 -1
  98. package/dist/providers/fallback.js +24 -8
  99. package/dist/providers/fallback.js.map +1 -1
  100. package/dist/providers/gateway.d.ts +40 -0
  101. package/dist/providers/gateway.d.ts.map +1 -0
  102. package/dist/providers/gateway.js +52 -0
  103. package/dist/providers/gateway.js.map +1 -0
  104. package/dist/providers/generate-fn.d.ts +62 -0
  105. package/dist/providers/generate-fn.d.ts.map +1 -0
  106. package/dist/providers/generate-fn.js +84 -0
  107. package/dist/providers/generate-fn.js.map +1 -0
  108. package/dist/providers/index.d.ts +5 -0
  109. package/dist/providers/index.d.ts.map +1 -1
  110. package/dist/providers/index.js +53 -0
  111. package/dist/providers/index.js.map +1 -1
  112. package/dist/tools/plugins/index.d.ts +2 -0
  113. package/dist/tools/plugins/index.d.ts.map +1 -1
  114. package/dist/tools/plugins/index.js +7 -0
  115. package/dist/tools/plugins/index.js.map +1 -1
  116. package/dist/tools/plugins/zizmor.d.ts +22 -0
  117. package/dist/tools/plugins/zizmor.d.ts.map +1 -0
  118. package/dist/tools/plugins/zizmor.js +112 -0
  119. package/dist/tools/plugins/zizmor.js.map +1 -0
  120. package/dist/tools/resolve.js +1 -1
  121. package/dist/tools/resolve.js.map +1 -1
  122. package/dist/tools/types.d.ts +1 -1
  123. package/dist/tools/types.d.ts.map +1 -1
  124. package/dist/types.d.ts +54 -3
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js +21 -1
  127. package/dist/types.js.map +1 -1
  128. package/dist/utils/concurrency.d.ts +29 -0
  129. package/dist/utils/concurrency.d.ts.map +1 -0
  130. package/dist/utils/concurrency.js +40 -0
  131. package/dist/utils/concurrency.js.map +1 -0
  132. package/dist/utils/context-levels.d.ts +113 -0
  133. package/dist/utils/context-levels.d.ts.map +1 -0
  134. package/dist/utils/context-levels.js +255 -0
  135. package/dist/utils/context-levels.js.map +1 -0
  136. package/dist/utils/diff.d.ts +25 -0
  137. package/dist/utils/diff.d.ts.map +1 -1
  138. package/dist/utils/diff.js +28 -0
  139. package/dist/utils/diff.js.map +1 -1
  140. package/dist/utils/llm-timeout.d.ts +38 -0
  141. package/dist/utils/llm-timeout.d.ts.map +1 -0
  142. package/dist/utils/llm-timeout.js +76 -0
  143. package/dist/utils/llm-timeout.js.map +1 -0
  144. package/dist/utils/path-protection.d.ts +59 -0
  145. package/dist/utils/path-protection.d.ts.map +1 -0
  146. package/dist/utils/path-protection.js +136 -0
  147. package/dist/utils/path-protection.js.map +1 -0
  148. package/dist/utils/token-budget.d.ts +34 -1
  149. package/dist/utils/token-budget.d.ts.map +1 -1
  150. package/dist/utils/token-budget.js +108 -3
  151. package/dist/utils/token-budget.js.map +1 -1
  152. package/package.json +21 -19
  153. package/LICENSE +0 -21
@@ -0,0 +1,204 @@
1
+ /**
2
+ * JavaScript Extractor
3
+ *
4
+ * Regex-based extractor for JavaScript/JSX/MJS/CJS files.
5
+ * Handles ES module imports/exports AND CommonJS require/module.exports.
6
+ */
7
+ // ─── ES Module Import Patterns ──────────────────────────────────
8
+ /** import { x, y } from 'module' */
9
+ const NAMED_IMPORT_RE = /import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/g;
10
+ /** import x from 'module' */
11
+ const DEFAULT_IMPORT_RE = /import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;
12
+ /** import * as x from 'module' */
13
+ const NAMESPACE_IMPORT_RE = /import\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;
14
+ /** import 'module' */
15
+ const SIDE_EFFECT_IMPORT_RE = /import\s+['"]([^'"]+)['"]/g;
16
+ /** import x, { y, z } from 'module' */
17
+ const MIXED_IMPORT_RE = /import\s+(\w+)\s*,\s*{([^}]+)}\s+from\s+['"]([^'"]+)['"]/g;
18
+ // ─── CommonJS Import Patterns ───────────────────────────────────
19
+ /** const x = require('module') / const { x, y } = require('module') */
20
+ const REQUIRE_RE = /(?:const|let|var)\s+(?:(\w+)|{([^}]+)})\s*=\s*require\(\s*['"]([^'"]+)['"]\s*\)/g;
21
+ /** require('module') — bare require (side-effect) */
22
+ const BARE_REQUIRE_RE = /^require\(\s*['"]([^'"]+)['"]\s*\)/gm;
23
+ // ─── ES Module Export Patterns ──────────────────────────────────
24
+ /** export function x() / export async function x() */
25
+ const EXPORT_FUNCTION_RE = /export\s+(?:async\s+)?function\s+(\w+)/g;
26
+ /** export class x */
27
+ const EXPORT_CLASS_RE = /export\s+class\s+(\w+)/g;
28
+ /** export const/let/var x */
29
+ const EXPORT_VARIABLE_RE = /export\s+(?:const|let|var)\s+(\w+)/g;
30
+ /** export default */
31
+ const EXPORT_DEFAULT_RE = /export\s+default\s+(?:function\s+(\w+)|class\s+(\w+)|(\w+))/g;
32
+ /** export { x, y } */
33
+ const EXPORT_NAMED_RE = /export\s+{([^}]+)}/g;
34
+ /** export default anonymous */
35
+ const EXPORT_DEFAULT_ANON_RE = /export\s+default\s+(?:function|class)\s*[({]/g;
36
+ // ─── CommonJS Export Patterns ───────────────────────────────────
37
+ /** module.exports = x / module.exports = { x, y } */
38
+ const MODULE_EXPORTS_RE = /module\.exports\s*=\s*(?:{([^}]+)}|(\w+))/g;
39
+ /** exports.x = ... */
40
+ const EXPORTS_PROP_RE = /exports\.(\w+)\s*=/g;
41
+ // ─── Extractor ──────────────────────────────────────────────────
42
+ export const javascriptExtractor = {
43
+ language: 'javascript',
44
+ extensions: ['.js', '.jsx', '.mjs', '.cjs'],
45
+ extractImports(content) {
46
+ const imports = [];
47
+ const seen = new Set();
48
+ // Mixed default + named
49
+ for (const match of content.matchAll(MIXED_IMPORT_RE)) {
50
+ const defaultName = match[1];
51
+ const namedPart = match[2];
52
+ const source = match[3];
53
+ const symbols = [
54
+ defaultName,
55
+ ...namedPart
56
+ .split(',')
57
+ .map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
58
+ .filter(Boolean),
59
+ ];
60
+ const key = `${source}:${symbols.sort().join(',')}`;
61
+ if (!seen.has(key)) {
62
+ seen.add(key);
63
+ imports.push({ source, symbols });
64
+ }
65
+ }
66
+ // Named imports
67
+ for (const match of content.matchAll(NAMED_IMPORT_RE)) {
68
+ const symbols = match[1]
69
+ ?.split(',')
70
+ .map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
71
+ .filter(Boolean);
72
+ const source = match[2];
73
+ const key = `${source}:named`;
74
+ if (!seen.has(key)) {
75
+ seen.add(key);
76
+ imports.push({ source, symbols });
77
+ }
78
+ }
79
+ // Default imports
80
+ for (const match of content.matchAll(DEFAULT_IMPORT_RE)) {
81
+ const name = match[1];
82
+ const source = match[2];
83
+ const key = `${source}:default`;
84
+ if (!seen.has(key)) {
85
+ seen.add(key);
86
+ imports.push({ source, symbols: [name] });
87
+ }
88
+ }
89
+ // Namespace imports
90
+ for (const match of content.matchAll(NAMESPACE_IMPORT_RE)) {
91
+ const name = match[1];
92
+ const source = match[2];
93
+ const key = `${source}:namespace`;
94
+ if (!seen.has(key)) {
95
+ seen.add(key);
96
+ imports.push({ source, symbols: [name] });
97
+ }
98
+ }
99
+ // Side-effect imports
100
+ for (const match of content.matchAll(SIDE_EFFECT_IMPORT_RE)) {
101
+ const source = match[1];
102
+ const key = `${source}:side-effect`;
103
+ if (!seen.has(key)) {
104
+ seen.add(key);
105
+ imports.push({ source, symbols: [] });
106
+ }
107
+ }
108
+ // CommonJS require
109
+ for (const match of content.matchAll(REQUIRE_RE)) {
110
+ const defaultName = match[1];
111
+ const namedPart = match[2];
112
+ const source = match[3];
113
+ const symbols = defaultName
114
+ ? [defaultName]
115
+ : namedPart
116
+ ? namedPart
117
+ .split(',')
118
+ .map((s) => s.trim().replace(/\s*:\s*\w+/, ''))
119
+ .filter(Boolean)
120
+ : [];
121
+ const key = `${source}:require`;
122
+ if (!seen.has(key)) {
123
+ seen.add(key);
124
+ imports.push({ source, symbols });
125
+ }
126
+ }
127
+ // Bare require
128
+ for (const match of content.matchAll(BARE_REQUIRE_RE)) {
129
+ const source = match[1];
130
+ const key = `${source}:bare-require`;
131
+ if (!seen.has(key)) {
132
+ seen.add(key);
133
+ imports.push({ source, symbols: [] });
134
+ }
135
+ }
136
+ return imports;
137
+ },
138
+ extractExports(content) {
139
+ const exports = [];
140
+ const seen = new Set();
141
+ function add(name, kind) {
142
+ if (!seen.has(name)) {
143
+ seen.add(name);
144
+ exports.push({ name, kind });
145
+ }
146
+ }
147
+ // export default (named)
148
+ for (const match of content.matchAll(EXPORT_DEFAULT_RE)) {
149
+ const name = match[1] ?? match[2] ?? match[3];
150
+ if (name)
151
+ add(name, 'default');
152
+ }
153
+ // export default (anonymous)
154
+ for (const _match of content.matchAll(EXPORT_DEFAULT_ANON_RE)) {
155
+ if (!seen.has('default'))
156
+ add('default', 'default');
157
+ }
158
+ // export function
159
+ for (const match of content.matchAll(EXPORT_FUNCTION_RE)) {
160
+ add(match[1], 'function');
161
+ }
162
+ // export class
163
+ for (const match of content.matchAll(EXPORT_CLASS_RE)) {
164
+ add(match[1], 'class');
165
+ }
166
+ // export const/let/var
167
+ for (const match of content.matchAll(EXPORT_VARIABLE_RE)) {
168
+ add(match[1], 'variable');
169
+ }
170
+ // export { x, y }
171
+ for (const match of content.matchAll(EXPORT_NAMED_RE)) {
172
+ const names = match[1]
173
+ ?.split(',')
174
+ .map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
175
+ .filter(Boolean);
176
+ for (const name of names) {
177
+ add(name, 'variable');
178
+ }
179
+ }
180
+ // module.exports = { x, y } or module.exports = x
181
+ for (const match of content.matchAll(MODULE_EXPORTS_RE)) {
182
+ const objectPart = match[1];
183
+ const singleName = match[2];
184
+ if (objectPart) {
185
+ const names = objectPart
186
+ .split(',')
187
+ .map((s) => s.trim().split(/\s*:\s*/)[0])
188
+ .filter(Boolean);
189
+ for (const name of names) {
190
+ add(name, 'variable');
191
+ }
192
+ }
193
+ else if (singleName) {
194
+ add(singleName, 'default');
195
+ }
196
+ }
197
+ // exports.x = ...
198
+ for (const match of content.matchAll(EXPORTS_PROP_RE)) {
199
+ add(match[1], 'variable');
200
+ }
201
+ return exports;
202
+ },
203
+ };
204
+ //# sourceMappingURL=javascript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/graph/extractors/javascript.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,mEAAmE;AAEnE,oCAAoC;AACpC,MAAM,eAAe,GAAG,+CAA+C,CAAC;AAExE,6BAA6B;AAC7B,MAAM,iBAAiB,GAAG,2CAA2C,CAAC;AAEtE,kCAAkC;AAClC,MAAM,mBAAmB,GAAG,qDAAqD,CAAC;AAElF,sBAAsB;AACtB,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAE3D,uCAAuC;AACvC,MAAM,eAAe,GAAG,2DAA2D,CAAC;AAEpF,mEAAmE;AAEnE,uEAAuE;AACvE,MAAM,UAAU,GACd,kFAAkF,CAAC;AAErF,qDAAqD;AACrD,MAAM,eAAe,GAAG,sCAAsC,CAAC;AAE/D,mEAAmE;AAEnE,sDAAsD;AACtD,MAAM,kBAAkB,GAAG,yCAAyC,CAAC;AAErE,qBAAqB;AACrB,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAElD,6BAA6B;AAC7B,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,qBAAqB;AACrB,MAAM,iBAAiB,GAAG,8DAA8D,CAAC;AAEzF,sBAAsB;AACtB,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,+BAA+B;AAC/B,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAE/E,mEAAmE;AAEnE,qDAAqD;AACrD,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AAEvE,sBAAsB;AACtB,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,mEAAmE;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAAc;IAC5C,QAAQ,EAAE,YAAY;IACtB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAE3C,cAAc,CAAC,OAAe;QAC5B,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,wBAAwB;QACxB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,OAAO,GAAG;gBACd,WAAW;gBACX,GAAG,SAAS;qBACT,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;qBAC/C,MAAM,CAAC,OAAO,CAAC;aACnB,CAAC;YACF,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;gBACtB,EAAE,KAAK,CAAC,GAAG,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;iBAC/C,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,MAAM,QAAQ,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,MAAM,UAAU,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,MAAM,YAAY,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,MAAM,cAAc,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,OAAO,GAAG,WAAW;gBACzB,CAAC,CAAC,CAAC,WAAW,CAAC;gBACf,CAAC,CAAC,SAAS;oBACT,CAAC,CAAC,SAAS;yBACN,KAAK,CAAC,GAAG,CAAC;yBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;yBAC9C,MAAM,CAAC,OAAO,CAAC;oBACpB,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,GAAG,GAAG,GAAG,MAAM,UAAU,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,eAAe;QACf,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,MAAM,eAAe,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,SAAS,GAAG,CAAC,IAAY,EAAE,IAAwB;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,kBAAkB;QAClB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,eAAe;QACf,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,kBAAkB;QAClB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,EAAE,KAAK,CAAC,GAAG,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;iBAC/C,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,UAAU;qBACrB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAC;qBACzC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Python Extractor
3
+ *
4
+ * Regex-based extractor for Python files.
5
+ * Handles absolute imports, relative imports, and function/class definitions.
6
+ */
7
+ import type { Extractor } from './types.js';
8
+ export declare const pythonExtractor: Extractor;
9
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/python.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AA0BpE,eAAO,MAAM,eAAe,EAAE,SA8F7B,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Python Extractor
3
+ *
4
+ * Regex-based extractor for Python files.
5
+ * Handles absolute imports, relative imports, and function/class definitions.
6
+ */
7
+ // ─── Import Patterns ────────────────────────────────────────────
8
+ /** from x import y, z */
9
+ const FROM_IMPORT_RE = /^from\s+(\.{0,3}\w[\w.]*|\.{1,3})\s+import\s+(.+)$/gm;
10
+ /** import x / import x, y / import x as y */
11
+ const IMPORT_RE = /^import\s+([\w.]+(?:\s+as\s+\w+)?(?:\s*,\s*[\w.]+(?:\s+as\s+\w+)?)*)$/gm;
12
+ // ─── Export Patterns ────────────────────────────────────────────
13
+ /** def function_name( */
14
+ const FUNCTION_DEF_RE = /^def\s+(\w+)\s*\(/gm;
15
+ /** class ClassName */
16
+ const CLASS_DEF_RE = /^class\s+(\w+)/gm;
17
+ /** Top-level variable assignment: NAME = ... (UPPERCASE convention for module-level constants) */
18
+ const TOP_LEVEL_VAR_RE = /^([A-Z_][A-Z0-9_]*)\s*=/gm;
19
+ /** __all__ = ['x', 'y', 'z'] — explicit export list */
20
+ const ALL_LIST_RE = /__all__\s*=\s*\[([^\]]+)\]/;
21
+ // ─── Extractor ──────────────────────────────────────────────────
22
+ export const pythonExtractor = {
23
+ language: 'python',
24
+ extensions: ['.py'],
25
+ extractImports(content) {
26
+ const imports = [];
27
+ const seen = new Set();
28
+ // from x import y, z
29
+ for (const match of content.matchAll(FROM_IMPORT_RE)) {
30
+ const source = match[1];
31
+ const importPart = match[2]?.trim();
32
+ // Handle `from x import (y, z)` — multi-line with parens
33
+ const cleaned = importPart.replace(/[()]/g, '');
34
+ const symbols = cleaned
35
+ .split(',')
36
+ .map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
37
+ .filter((s) => Boolean(s) && s !== '*');
38
+ const key = `${source}:from`;
39
+ if (!seen.has(key)) {
40
+ seen.add(key);
41
+ imports.push({ source, symbols });
42
+ }
43
+ }
44
+ // import x / import x, y
45
+ for (const match of content.matchAll(IMPORT_RE)) {
46
+ const modulesPart = match[1];
47
+ const modules = modulesPart
48
+ .split(',')
49
+ .map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
50
+ .filter(Boolean);
51
+ for (const mod of modules) {
52
+ const key = `${mod}:import`;
53
+ if (!seen.has(key)) {
54
+ seen.add(key);
55
+ imports.push({ source: mod, symbols: [] });
56
+ }
57
+ }
58
+ }
59
+ return imports;
60
+ },
61
+ extractExports(content) {
62
+ const exports = [];
63
+ const seen = new Set();
64
+ function add(name, kind) {
65
+ if (!seen.has(name)) {
66
+ seen.add(name);
67
+ exports.push({ name, kind });
68
+ }
69
+ }
70
+ // Check for __all__ — if present, only export those names
71
+ const allMatch = content.match(ALL_LIST_RE);
72
+ if (allMatch) {
73
+ const names = allMatch[1]
74
+ ?.split(',')
75
+ .map((s) => s.trim().replace(/['"]/g, ''))
76
+ .filter(Boolean);
77
+ for (const name of names) {
78
+ add(name, 'variable');
79
+ }
80
+ return exports;
81
+ }
82
+ // Public functions (not starting with _)
83
+ for (const match of content.matchAll(FUNCTION_DEF_RE)) {
84
+ const name = match[1];
85
+ if (!name.startsWith('_')) {
86
+ add(name, 'function');
87
+ }
88
+ }
89
+ // Public classes (not starting with _)
90
+ for (const match of content.matchAll(CLASS_DEF_RE)) {
91
+ const name = match[1];
92
+ if (!name.startsWith('_')) {
93
+ add(name, 'class');
94
+ }
95
+ }
96
+ // Top-level constants
97
+ for (const match of content.matchAll(TOP_LEVEL_VAR_RE)) {
98
+ add(match[1], 'variable');
99
+ }
100
+ return exports;
101
+ },
102
+ };
103
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/graph/extractors/python.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Rust Extractor
3
+ *
4
+ * Regex-based extractor for Rust files.
5
+ * Handles use statements, mod declarations, and pub exports.
6
+ */
7
+ import type { Extractor } from './types.js';
8
+ export declare const rustExtractor: Extractor;
9
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/rust.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AAmCpE,eAAO,MAAM,aAAa,EAAE,SAoG3B,CAAC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Rust Extractor
3
+ *
4
+ * Regex-based extractor for Rust files.
5
+ * Handles use statements, mod declarations, and pub exports.
6
+ */
7
+ // ─── Import Patterns ────────────────────────────────────────────
8
+ /** use crate::module::item; / use super::module; / use std::collections::HashMap; */
9
+ const USE_RE = /^use\s+([\w:]+(?:::\{[^}]+\})?(?:::\*)?)\s*;/gm;
10
+ /** mod module_name; — external module declaration (links to another file) */
11
+ const MOD_RE = /^(?:pub\s+)?mod\s+(\w+)\s*;/gm;
12
+ // ─── Export Patterns ────────────────────────────────────────────
13
+ /** pub fn function_name */
14
+ const PUB_FN_RE = /^pub(?:\([\w]+\))?\s+(?:async\s+)?fn\s+(\w+)/gm;
15
+ /** pub struct StructName */
16
+ const PUB_STRUCT_RE = /^pub(?:\([\w]+\))?\s+struct\s+(\w+)/gm;
17
+ /** pub enum EnumName */
18
+ const PUB_ENUM_RE = /^pub(?:\([\w]+\))?\s+enum\s+(\w+)/gm;
19
+ /** pub trait TraitName */
20
+ const PUB_TRAIT_RE = /^pub(?:\([\w]+\))?\s+trait\s+(\w+)/gm;
21
+ /** pub type TypeName */
22
+ const PUB_TYPE_RE = /^pub(?:\([\w]+\))?\s+type\s+(\w+)/gm;
23
+ /** pub const/static CONST_NAME */
24
+ const PUB_CONST_RE = /^pub(?:\([\w]+\))?\s+(?:const|static)\s+(\w+)/gm;
25
+ /** pub mod module_name { ... } — inline public module */
26
+ const PUB_MOD_RE = /^pub\s+mod\s+(\w+)/gm;
27
+ // ─── Extractor ──────────────────────────────────────────────────
28
+ export const rustExtractor = {
29
+ language: 'rust',
30
+ extensions: ['.rs'],
31
+ extractImports(content) {
32
+ const imports = [];
33
+ const seen = new Set();
34
+ // use statements
35
+ for (const match of content.matchAll(USE_RE)) {
36
+ const fullPath = match[1];
37
+ // Handle grouped imports: use std::collections::{HashMap, BTreeMap}
38
+ const braceMatch = fullPath.match(/^(.+)::\{([^}]+)\}$/);
39
+ if (braceMatch) {
40
+ const prefix = braceMatch[1];
41
+ const symbols = braceMatch[2]
42
+ ?.split(',')
43
+ .map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
44
+ .filter(Boolean);
45
+ const key = `${prefix}:use`;
46
+ if (!seen.has(key)) {
47
+ seen.add(key);
48
+ imports.push({ source: prefix, symbols });
49
+ }
50
+ }
51
+ else {
52
+ // Single import: use crate::module::Item
53
+ const parts = fullPath.split('::');
54
+ const lastPart = parts[parts.length - 1];
55
+ const symbols = lastPart === '*' ? [] : [lastPart];
56
+ const source = parts.slice(0, -1).join('::') || fullPath;
57
+ const key = `${fullPath}:use`;
58
+ if (!seen.has(key)) {
59
+ seen.add(key);
60
+ imports.push({ source, symbols });
61
+ }
62
+ }
63
+ }
64
+ // mod declarations (external modules)
65
+ for (const match of content.matchAll(MOD_RE)) {
66
+ const modName = match[1];
67
+ const key = `mod:${modName}`;
68
+ if (!seen.has(key)) {
69
+ seen.add(key);
70
+ imports.push({ source: modName, symbols: [] });
71
+ }
72
+ }
73
+ return imports;
74
+ },
75
+ extractExports(content) {
76
+ const exports = [];
77
+ const seen = new Set();
78
+ function add(name, kind) {
79
+ if (!seen.has(name)) {
80
+ seen.add(name);
81
+ exports.push({ name, kind });
82
+ }
83
+ }
84
+ // pub fn
85
+ for (const match of content.matchAll(PUB_FN_RE)) {
86
+ add(match[1], 'function');
87
+ }
88
+ // pub struct
89
+ for (const match of content.matchAll(PUB_STRUCT_RE)) {
90
+ add(match[1], 'type');
91
+ }
92
+ // pub enum
93
+ for (const match of content.matchAll(PUB_ENUM_RE)) {
94
+ add(match[1], 'type');
95
+ }
96
+ // pub trait
97
+ for (const match of content.matchAll(PUB_TRAIT_RE)) {
98
+ add(match[1], 'type');
99
+ }
100
+ // pub type
101
+ for (const match of content.matchAll(PUB_TYPE_RE)) {
102
+ add(match[1], 'type');
103
+ }
104
+ // pub const/static
105
+ for (const match of content.matchAll(PUB_CONST_RE)) {
106
+ add(match[1], 'variable');
107
+ }
108
+ // pub mod
109
+ for (const match of content.matchAll(PUB_MOD_RE)) {
110
+ add(match[1], 'variable');
111
+ }
112
+ return exports;
113
+ },
114
+ };
115
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/graph/extractors/rust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Extractor Types
3
+ *
4
+ * Shared interfaces for language-specific import/export extractors.
5
+ * Extractors are pure functions that parse file content using regex
6
+ * patterns — no native dependencies (no tree-sitter).
7
+ */
8
+ import type { SupportedLanguage } from '../schema.js';
9
+ export interface ImportInfo {
10
+ /** Module path (e.g., './utils', 'lodash', 'fmt') */
11
+ source: string;
12
+ /** Imported symbol names (empty array for namespace/default imports) */
13
+ symbols: string[];
14
+ }
15
+ export interface ExportInfo {
16
+ /** Exported symbol name */
17
+ name: string;
18
+ /** Kind of export */
19
+ kind: 'function' | 'class' | 'variable' | 'type' | 'default';
20
+ }
21
+ export interface Extractor {
22
+ /** Language this extractor handles */
23
+ language: SupportedLanguage;
24
+ /** File extensions this extractor applies to (e.g., ['.ts', '.tsx']) */
25
+ extensions: string[];
26
+ /** Extract import statements from file content */
27
+ extractImports(content: string): ImportInfo[];
28
+ /** Extract export declarations from file content */
29
+ extractExports(content: string): ExportInfo[];
30
+ }
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IAEf,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9D;AAID,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,wEAAwE;IACxE,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,kDAAkD;IAClD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAE9C,oDAAoD;IACpD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;CAC/C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Extractor Types
3
+ *
4
+ * Shared interfaces for language-specific import/export extractors.
5
+ * Extractors are pure functions that parse file content using regex
6
+ * patterns — no native dependencies (no tree-sitter).
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/graph/extractors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * TypeScript Extractor
3
+ *
4
+ * Regex-based extractor for TypeScript/TSX files.
5
+ * Handles ES module imports/exports including type-only imports.
6
+ */
7
+ import type { Extractor } from './types.js';
8
+ export declare const typescriptExtractor: Extractor;
9
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/typescript.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AA4CpE,eAAO,MAAM,mBAAmB,EAAE,SAmIjC,CAAC"}