@jafreck/lore 0.1.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 (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +405 -0
  3. package/dist/cli.d.ts +19 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +345 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +22 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +16 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/indexer/call-graph.d.ts +39 -0
  12. package/dist/indexer/call-graph.d.ts.map +1 -0
  13. package/dist/indexer/call-graph.js +193 -0
  14. package/dist/indexer/call-graph.js.map +1 -0
  15. package/dist/indexer/complexity.d.ts +9 -0
  16. package/dist/indexer/complexity.d.ts.map +1 -0
  17. package/dist/indexer/complexity.js +66 -0
  18. package/dist/indexer/complexity.js.map +1 -0
  19. package/dist/indexer/config-parser.d.ts +16 -0
  20. package/dist/indexer/config-parser.d.ts.map +1 -0
  21. package/dist/indexer/config-parser.js +261 -0
  22. package/dist/indexer/config-parser.js.map +1 -0
  23. package/dist/indexer/coverage.d.ts +13 -0
  24. package/dist/indexer/coverage.d.ts.map +1 -0
  25. package/dist/indexer/coverage.js +84 -0
  26. package/dist/indexer/coverage.js.map +1 -0
  27. package/dist/indexer/db.d.ts +38 -0
  28. package/dist/indexer/db.d.ts.map +1 -0
  29. package/dist/indexer/db.js +275 -0
  30. package/dist/indexer/db.js.map +1 -0
  31. package/dist/indexer/embedder.d.ts +70 -0
  32. package/dist/indexer/embedder.d.ts.map +1 -0
  33. package/dist/indexer/embedder.js +186 -0
  34. package/dist/indexer/embedder.js.map +1 -0
  35. package/dist/indexer/ensure-python-deps.d.ts +22 -0
  36. package/dist/indexer/ensure-python-deps.d.ts.map +1 -0
  37. package/dist/indexer/ensure-python-deps.js +47 -0
  38. package/dist/indexer/ensure-python-deps.js.map +1 -0
  39. package/dist/indexer/extractors/bash.d.ts +12 -0
  40. package/dist/indexer/extractors/bash.d.ts.map +1 -0
  41. package/dist/indexer/extractors/bash.js +57 -0
  42. package/dist/indexer/extractors/bash.js.map +1 -0
  43. package/dist/indexer/extractors/c.d.ts +12 -0
  44. package/dist/indexer/extractors/c.d.ts.map +1 -0
  45. package/dist/indexer/extractors/c.js +106 -0
  46. package/dist/indexer/extractors/c.js.map +1 -0
  47. package/dist/indexer/extractors/cpp.d.ts +12 -0
  48. package/dist/indexer/extractors/cpp.d.ts.map +1 -0
  49. package/dist/indexer/extractors/cpp.js +84 -0
  50. package/dist/indexer/extractors/cpp.js.map +1 -0
  51. package/dist/indexer/extractors/csharp.d.ts +12 -0
  52. package/dist/indexer/extractors/csharp.d.ts.map +1 -0
  53. package/dist/indexer/extractors/csharp.js +79 -0
  54. package/dist/indexer/extractors/csharp.js.map +1 -0
  55. package/dist/indexer/extractors/dart.d.ts +12 -0
  56. package/dist/indexer/extractors/dart.d.ts.map +1 -0
  57. package/dist/indexer/extractors/dart.js +80 -0
  58. package/dist/indexer/extractors/dart.js.map +1 -0
  59. package/dist/indexer/extractors/elixir.d.ts +12 -0
  60. package/dist/indexer/extractors/elixir.d.ts.map +1 -0
  61. package/dist/indexer/extractors/elixir.js +87 -0
  62. package/dist/indexer/extractors/elixir.js.map +1 -0
  63. package/dist/indexer/extractors/elm.d.ts +12 -0
  64. package/dist/indexer/extractors/elm.d.ts.map +1 -0
  65. package/dist/indexer/extractors/elm.js +87 -0
  66. package/dist/indexer/extractors/elm.js.map +1 -0
  67. package/dist/indexer/extractors/go.d.ts +12 -0
  68. package/dist/indexer/extractors/go.d.ts.map +1 -0
  69. package/dist/indexer/extractors/go.js +158 -0
  70. package/dist/indexer/extractors/go.js.map +1 -0
  71. package/dist/indexer/extractors/haskell.d.ts +12 -0
  72. package/dist/indexer/extractors/haskell.d.ts.map +1 -0
  73. package/dist/indexer/extractors/haskell.js +104 -0
  74. package/dist/indexer/extractors/haskell.js.map +1 -0
  75. package/dist/indexer/extractors/java.d.ts +12 -0
  76. package/dist/indexer/extractors/java.d.ts.map +1 -0
  77. package/dist/indexer/extractors/java.js +68 -0
  78. package/dist/indexer/extractors/java.js.map +1 -0
  79. package/dist/indexer/extractors/javascript.d.ts +13 -0
  80. package/dist/indexer/extractors/javascript.d.ts.map +1 -0
  81. package/dist/indexer/extractors/javascript.js +180 -0
  82. package/dist/indexer/extractors/javascript.js.map +1 -0
  83. package/dist/indexer/extractors/julia.d.ts +12 -0
  84. package/dist/indexer/extractors/julia.d.ts.map +1 -0
  85. package/dist/indexer/extractors/julia.js +94 -0
  86. package/dist/indexer/extractors/julia.js.map +1 -0
  87. package/dist/indexer/extractors/kotlin.d.ts +12 -0
  88. package/dist/indexer/extractors/kotlin.d.ts.map +1 -0
  89. package/dist/indexer/extractors/kotlin.js +71 -0
  90. package/dist/indexer/extractors/kotlin.js.map +1 -0
  91. package/dist/indexer/extractors/lua.d.ts +12 -0
  92. package/dist/indexer/extractors/lua.d.ts.map +1 -0
  93. package/dist/indexer/extractors/lua.js +68 -0
  94. package/dist/indexer/extractors/lua.js.map +1 -0
  95. package/dist/indexer/extractors/objc.d.ts +12 -0
  96. package/dist/indexer/extractors/objc.d.ts.map +1 -0
  97. package/dist/indexer/extractors/objc.js +129 -0
  98. package/dist/indexer/extractors/objc.js.map +1 -0
  99. package/dist/indexer/extractors/ocaml.d.ts +12 -0
  100. package/dist/indexer/extractors/ocaml.d.ts.map +1 -0
  101. package/dist/indexer/extractors/ocaml.js +92 -0
  102. package/dist/indexer/extractors/ocaml.js.map +1 -0
  103. package/dist/indexer/extractors/php.d.ts +12 -0
  104. package/dist/indexer/extractors/php.d.ts.map +1 -0
  105. package/dist/indexer/extractors/php.js +99 -0
  106. package/dist/indexer/extractors/php.js.map +1 -0
  107. package/dist/indexer/extractors/python.d.ts +12 -0
  108. package/dist/indexer/extractors/python.d.ts.map +1 -0
  109. package/dist/indexer/extractors/python.js +129 -0
  110. package/dist/indexer/extractors/python.js.map +1 -0
  111. package/dist/indexer/extractors/ruby.d.ts +12 -0
  112. package/dist/indexer/extractors/ruby.d.ts.map +1 -0
  113. package/dist/indexer/extractors/ruby.js +100 -0
  114. package/dist/indexer/extractors/ruby.js.map +1 -0
  115. package/dist/indexer/extractors/rust.d.ts +12 -0
  116. package/dist/indexer/extractors/rust.d.ts.map +1 -0
  117. package/dist/indexer/extractors/rust.js +82 -0
  118. package/dist/indexer/extractors/rust.js.map +1 -0
  119. package/dist/indexer/extractors/scala.d.ts +12 -0
  120. package/dist/indexer/extractors/scala.d.ts.map +1 -0
  121. package/dist/indexer/extractors/scala.js +91 -0
  122. package/dist/indexer/extractors/scala.js.map +1 -0
  123. package/dist/indexer/extractors/swift.d.ts +12 -0
  124. package/dist/indexer/extractors/swift.d.ts.map +1 -0
  125. package/dist/indexer/extractors/swift.js +90 -0
  126. package/dist/indexer/extractors/swift.js.map +1 -0
  127. package/dist/indexer/extractors/types.d.ts +118 -0
  128. package/dist/indexer/extractors/types.d.ts.map +1 -0
  129. package/dist/indexer/extractors/types.js +43 -0
  130. package/dist/indexer/extractors/types.js.map +1 -0
  131. package/dist/indexer/extractors/typescript.d.ts +14 -0
  132. package/dist/indexer/extractors/typescript.d.ts.map +1 -0
  133. package/dist/indexer/extractors/typescript.js +172 -0
  134. package/dist/indexer/extractors/typescript.js.map +1 -0
  135. package/dist/indexer/extractors/zig.d.ts +12 -0
  136. package/dist/indexer/extractors/zig.d.ts.map +1 -0
  137. package/dist/indexer/extractors/zig.js +95 -0
  138. package/dist/indexer/extractors/zig.js.map +1 -0
  139. package/dist/indexer/git-history.d.ts +23 -0
  140. package/dist/indexer/git-history.d.ts.map +1 -0
  141. package/dist/indexer/git-history.js +144 -0
  142. package/dist/indexer/git-history.js.map +1 -0
  143. package/dist/indexer/git-hooks.d.ts +19 -0
  144. package/dist/indexer/git-hooks.d.ts.map +1 -0
  145. package/dist/indexer/git-hooks.js +74 -0
  146. package/dist/indexer/git-hooks.js.map +1 -0
  147. package/dist/indexer/index.d.ts +83 -0
  148. package/dist/indexer/index.d.ts.map +1 -0
  149. package/dist/indexer/index.js +431 -0
  150. package/dist/indexer/index.js.map +1 -0
  151. package/dist/indexer/parser.d.ts +30 -0
  152. package/dist/indexer/parser.d.ts.map +1 -0
  153. package/dist/indexer/parser.js +114 -0
  154. package/dist/indexer/parser.js.map +1 -0
  155. package/dist/indexer/poller.d.ts +50 -0
  156. package/dist/indexer/poller.d.ts.map +1 -0
  157. package/dist/indexer/poller.js +140 -0
  158. package/dist/indexer/poller.js.map +1 -0
  159. package/dist/indexer/resolver.d.ts +52 -0
  160. package/dist/indexer/resolver.d.ts.map +1 -0
  161. package/dist/indexer/resolver.js +271 -0
  162. package/dist/indexer/resolver.js.map +1 -0
  163. package/dist/indexer/test-mapper.d.ts +6 -0
  164. package/dist/indexer/test-mapper.d.ts.map +1 -0
  165. package/dist/indexer/test-mapper.js +48 -0
  166. package/dist/indexer/test-mapper.js.map +1 -0
  167. package/dist/indexer/walker.d.ts +51 -0
  168. package/dist/indexer/walker.d.ts.map +1 -0
  169. package/dist/indexer/walker.js +100 -0
  170. package/dist/indexer/walker.js.map +1 -0
  171. package/dist/indexer/watcher.d.ts +51 -0
  172. package/dist/indexer/watcher.d.ts.map +1 -0
  173. package/dist/indexer/watcher.js +107 -0
  174. package/dist/indexer/watcher.js.map +1 -0
  175. package/dist/kb-server/db.d.ts +241 -0
  176. package/dist/kb-server/db.d.ts.map +1 -0
  177. package/dist/kb-server/db.js +659 -0
  178. package/dist/kb-server/db.js.map +1 -0
  179. package/dist/kb-server/server.d.ts +35 -0
  180. package/dist/kb-server/server.d.ts.map +1 -0
  181. package/dist/kb-server/server.js +240 -0
  182. package/dist/kb-server/server.js.map +1 -0
  183. package/dist/kb-server/tools/annotations.d.ts +40 -0
  184. package/dist/kb-server/tools/annotations.d.ts.map +1 -0
  185. package/dist/kb-server/tools/annotations.js +35 -0
  186. package/dist/kb-server/tools/annotations.js.map +1 -0
  187. package/dist/kb-server/tools/architecture.d.ts +60 -0
  188. package/dist/kb-server/tools/architecture.d.ts.map +1 -0
  189. package/dist/kb-server/tools/architecture.js +174 -0
  190. package/dist/kb-server/tools/architecture.js.map +1 -0
  191. package/dist/kb-server/tools/blame.d.ts +67 -0
  192. package/dist/kb-server/tools/blame.d.ts.map +1 -0
  193. package/dist/kb-server/tools/blame.js +162 -0
  194. package/dist/kb-server/tools/blame.js.map +1 -0
  195. package/dist/kb-server/tools/coverage.d.ts +67 -0
  196. package/dist/kb-server/tools/coverage.d.ts.map +1 -0
  197. package/dist/kb-server/tools/coverage.js +74 -0
  198. package/dist/kb-server/tools/coverage.js.map +1 -0
  199. package/dist/kb-server/tools/graph.d.ts +56 -0
  200. package/dist/kb-server/tools/graph.d.ts.map +1 -0
  201. package/dist/kb-server/tools/graph.js +188 -0
  202. package/dist/kb-server/tools/graph.js.map +1 -0
  203. package/dist/kb-server/tools/history.d.ts +47 -0
  204. package/dist/kb-server/tools/history.d.ts.map +1 -0
  205. package/dist/kb-server/tools/history.js +91 -0
  206. package/dist/kb-server/tools/history.js.map +1 -0
  207. package/dist/kb-server/tools/lookup.d.ts +36 -0
  208. package/dist/kb-server/tools/lookup.d.ts.map +1 -0
  209. package/dist/kb-server/tools/lookup.js +45 -0
  210. package/dist/kb-server/tools/lookup.js.map +1 -0
  211. package/dist/kb-server/tools/metrics.d.ts +73 -0
  212. package/dist/kb-server/tools/metrics.d.ts.map +1 -0
  213. package/dist/kb-server/tools/metrics.js +79 -0
  214. package/dist/kb-server/tools/metrics.js.map +1 -0
  215. package/dist/kb-server/tools/notes.d.ts +165 -0
  216. package/dist/kb-server/tools/notes.d.ts.map +1 -0
  217. package/dist/kb-server/tools/notes.js +175 -0
  218. package/dist/kb-server/tools/notes.js.map +1 -0
  219. package/dist/kb-server/tools/routes.d.ts +38 -0
  220. package/dist/kb-server/tools/routes.d.ts.map +1 -0
  221. package/dist/kb-server/tools/routes.js +38 -0
  222. package/dist/kb-server/tools/routes.js.map +1 -0
  223. package/dist/kb-server/tools/search.d.ts +60 -0
  224. package/dist/kb-server/tools/search.d.ts.map +1 -0
  225. package/dist/kb-server/tools/search.js +170 -0
  226. package/dist/kb-server/tools/search.js.map +1 -0
  227. package/dist/kb-server/tools/snippet.d.ts +44 -0
  228. package/dist/kb-server/tools/snippet.d.ts.map +1 -0
  229. package/dist/kb-server/tools/snippet.js +49 -0
  230. package/dist/kb-server/tools/snippet.js.map +1 -0
  231. package/dist/kb-server/tools/test-map.d.ts +38 -0
  232. package/dist/kb-server/tools/test-map.d.ts.map +1 -0
  233. package/dist/kb-server/tools/test-map.js +32 -0
  234. package/dist/kb-server/tools/test-map.js.map +1 -0
  235. package/dist/kb-server/tools/writeback.d.ts +49 -0
  236. package/dist/kb-server/tools/writeback.d.ts.map +1 -0
  237. package/dist/kb-server/tools/writeback.js +68 -0
  238. package/dist/kb-server/tools/writeback.js.map +1 -0
  239. package/package.json +92 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * @module indexer/extractors/javascript
3
+ *
4
+ * P1 JavaScript language extractor. Extracts function declarations, class
5
+ * declarations, arrow/function expressions assigned to variables, and
6
+ * import statements and require() calls.
7
+ */
8
+ import { emptyResult, nodeSignature, walk, } from './types.js';
9
+ // ─── JavaScriptExtractor ──────────────────────────────────────────────────────
10
+ export class JavaScriptExtractor {
11
+ extract(tree, _source, _filePath) {
12
+ const result = emptyResult();
13
+ for (const node of walk(tree.rootNode)) {
14
+ switch (node.type) {
15
+ case 'function_declaration':
16
+ case 'generator_function_declaration':
17
+ result.symbols.push(extractNamedDecl(node, 'function'));
18
+ break;
19
+ case 'class_declaration':
20
+ result.symbols.push(extractNamedDecl(node, 'class'));
21
+ break;
22
+ case 'lexical_declaration':
23
+ case 'variable_declaration': {
24
+ const sym = maybeExtractArrowOrFunctionExpr(node);
25
+ if (sym)
26
+ result.symbols.push(sym);
27
+ break;
28
+ }
29
+ case 'import_statement':
30
+ result.imports.push(extractImport(node));
31
+ break;
32
+ case 'call_expression': {
33
+ const imp = maybeExtractRequire(node);
34
+ if (imp)
35
+ result.imports.push(imp);
36
+ const route = maybeExtractRoute(node);
37
+ if (route)
38
+ result.routes.push(route);
39
+ break;
40
+ }
41
+ }
42
+ }
43
+ return result;
44
+ }
45
+ }
46
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
47
+ function extractNamedDecl(node, kind) {
48
+ const nameNode = node.childForFieldName('name');
49
+ return {
50
+ name: nameNode?.text ?? '',
51
+ kind,
52
+ startLine: node.startPosition.row,
53
+ endLine: node.endPosition.row,
54
+ signature: nodeSignature(node),
55
+ };
56
+ }
57
+ function maybeExtractArrowOrFunctionExpr(node) {
58
+ for (const declarator of node.namedChildren) {
59
+ if (declarator.type !== 'variable_declarator')
60
+ continue;
61
+ const nameNode = declarator.childForFieldName('name');
62
+ const valueNode = declarator.childForFieldName('value');
63
+ if (!nameNode || !valueNode)
64
+ continue;
65
+ if (valueNode.type === 'arrow_function' ||
66
+ valueNode.type === 'function_expression' ||
67
+ valueNode.type === 'generator_function') {
68
+ return {
69
+ name: nameNode.text,
70
+ kind: 'function',
71
+ startLine: node.startPosition.row,
72
+ endLine: node.endPosition.row,
73
+ signature: nodeSignature(node),
74
+ };
75
+ }
76
+ }
77
+ return null;
78
+ }
79
+ function extractImport(node) {
80
+ const sourceNode = node.childForFieldName('source');
81
+ const source = stripQuotes(sourceNode?.text ?? '');
82
+ const importedNames = [];
83
+ const clauseNode = node.childForFieldName('import_clause') ?? null;
84
+ if (clauseNode) {
85
+ collectImportNames(clauseNode, importedNames);
86
+ }
87
+ return { source, importedNames };
88
+ }
89
+ function collectImportNames(node, out) {
90
+ switch (node.type) {
91
+ case 'identifier':
92
+ out.push(node.text);
93
+ break;
94
+ case 'namespace_import': {
95
+ const alias = node.namedChildren[0];
96
+ if (alias)
97
+ out.push(`* as ${alias.text}`);
98
+ break;
99
+ }
100
+ case 'named_imports':
101
+ for (const spec of node.namedChildren) {
102
+ if (spec.type === 'import_specifier') {
103
+ const name = spec.childForFieldName('name');
104
+ if (name)
105
+ out.push(name.text);
106
+ }
107
+ }
108
+ break;
109
+ default:
110
+ for (const child of node.namedChildren) {
111
+ collectImportNames(child, out);
112
+ }
113
+ }
114
+ }
115
+ /**
116
+ * Detects `require('...')` and `require("...")` call expressions.
117
+ */
118
+ function maybeExtractRequire(node) {
119
+ const fnNode = node.childForFieldName('function');
120
+ if (fnNode?.type !== 'identifier' || fnNode.text !== 'require')
121
+ return null;
122
+ const argsNode = node.childForFieldName('arguments');
123
+ if (!argsNode)
124
+ return null;
125
+ const firstArg = argsNode.namedChildren[0];
126
+ if (!firstArg ||
127
+ (firstArg.type !== 'string' && firstArg.type !== 'template_string')) {
128
+ return null;
129
+ }
130
+ const source = stripQuotes(firstArg.text);
131
+ return { source, importedNames: [] };
132
+ }
133
+ function stripQuotes(s) {
134
+ return s.replace(/^['"`]|['"`]$/g, '');
135
+ }
136
+ const JS_HTTP_METHODS = new Set([
137
+ 'get',
138
+ 'post',
139
+ 'put',
140
+ 'delete',
141
+ 'patch',
142
+ 'options',
143
+ 'head',
144
+ 'all',
145
+ ]);
146
+ function maybeExtractRoute(node) {
147
+ const fnNode = node.childForFieldName('function');
148
+ if (!fnNode || fnNode.type !== 'member_expression')
149
+ return null;
150
+ const methodNode = fnNode.childForFieldName('property');
151
+ const objectNode = fnNode.childForFieldName('object');
152
+ const method = methodNode?.text?.toLowerCase() ?? '';
153
+ if (!JS_HTTP_METHODS.has(method))
154
+ return null;
155
+ const argsNode = node.childForFieldName('arguments');
156
+ const pathNode = argsNode?.namedChildren[0];
157
+ const handlerNode = argsNode?.namedChildren[1];
158
+ if (!pathNode || !handlerNode)
159
+ return null;
160
+ if (pathNode.type !== 'string' && pathNode.type !== 'template_string')
161
+ return null;
162
+ const middleware = argsNode.namedChildren.slice(1, -1).map((n) => n.text);
163
+ return {
164
+ method: method.toUpperCase(),
165
+ path: stripQuotes(pathNode.text),
166
+ handler: handlerNode.text,
167
+ framework: inferJsFramework(objectNode?.text ?? ''),
168
+ line: node.startPosition.row,
169
+ middleware: middleware.length > 0 ? middleware : undefined,
170
+ };
171
+ }
172
+ function inferJsFramework(receiver) {
173
+ const lower = receiver.toLowerCase();
174
+ if (lower.includes('koa'))
175
+ return 'koa';
176
+ if (lower.includes('hono'))
177
+ return 'hono';
178
+ return 'express';
179
+ }
180
+ //# sourceMappingURL=javascript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/indexer/extractors/javascript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @module indexer/extractors/julia
3
+ *
4
+ * Julia language extractor. Extracts function definitions, struct/abstract type
5
+ * definitions, module definitions, and import/using statements.
6
+ */
7
+ import type Parser from 'tree-sitter';
8
+ import { type ExtractionResult, type SymbolExtractor } from './types.js';
9
+ export declare class JuliaExtractor implements SymbolExtractor {
10
+ extract(tree: Parser.Tree, _source: string, _filePath: string): ExtractionResult;
11
+ }
12
+ //# sourceMappingURL=julia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"julia.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/julia.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAIpB,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CAkCjF"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @module indexer/extractors/julia
3
+ *
4
+ * Julia language extractor. Extracts function definitions, struct/abstract type
5
+ * definitions, module definitions, and import/using statements.
6
+ */
7
+ import { emptyResult, nodeSignature, walk, } from './types.js';
8
+ // ─── JuliaExtractor ──────────────────────────────────────────────────────────
9
+ export class JuliaExtractor {
10
+ extract(tree, _source, _filePath) {
11
+ const result = emptyResult();
12
+ for (const node of walk(tree.rootNode)) {
13
+ switch (node.type) {
14
+ case 'function_definition':
15
+ result.symbols.push(extractFunction(node));
16
+ break;
17
+ case 'short_function_definition':
18
+ result.symbols.push(extractShortFunction(node));
19
+ break;
20
+ case 'struct_definition':
21
+ result.symbols.push(extractNamedNode(node, 'struct'));
22
+ break;
23
+ case 'abstract_definition':
24
+ result.symbols.push(extractNamedNode(node, 'type'));
25
+ break;
26
+ case 'module_definition':
27
+ result.symbols.push(extractNamedNode(node, 'module'));
28
+ break;
29
+ case 'macro_definition':
30
+ result.symbols.push(extractNamedNode(node, 'macro'));
31
+ break;
32
+ case 'import_statement':
33
+ result.imports.push(extractImport(node));
34
+ break;
35
+ case 'using_statement':
36
+ result.imports.push(extractImport(node));
37
+ break;
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+ }
43
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
44
+ function extractFunction(node) {
45
+ const nameNode = node.childForFieldName('name');
46
+ return {
47
+ name: nameNode?.text ?? '',
48
+ kind: 'function',
49
+ startLine: node.startPosition.row,
50
+ endLine: node.endPosition.row,
51
+ signature: nodeSignature(node),
52
+ };
53
+ }
54
+ function extractShortFunction(node) {
55
+ // `f(x) = x + 1`
56
+ const nameNode = node.childForFieldName('name');
57
+ return {
58
+ name: nameNode?.text ?? '',
59
+ kind: 'function',
60
+ startLine: node.startPosition.row,
61
+ endLine: node.endPosition.row,
62
+ signature: node.text.split('\n')[0]?.trim() ?? '',
63
+ };
64
+ }
65
+ function extractNamedNode(node, kind) {
66
+ const nameNode = node.childForFieldName('name');
67
+ return {
68
+ name: nameNode?.text ?? '',
69
+ kind,
70
+ startLine: node.startPosition.row,
71
+ endLine: node.endPosition.row,
72
+ signature: nodeSignature(node),
73
+ };
74
+ }
75
+ function extractImport(node) {
76
+ // `import Foo` or `using Foo: bar, baz` or `import Foo.Bar`
77
+ const text = node.text
78
+ .replace(/^(import|using)\s+/, '')
79
+ .trim();
80
+ const colonIdx = text.indexOf(':');
81
+ let source;
82
+ let importedNames;
83
+ if (colonIdx !== -1) {
84
+ source = text.slice(0, colonIdx).trim();
85
+ importedNames = text.slice(colonIdx + 1).split(',').map(s => s.trim()).filter(Boolean);
86
+ }
87
+ else {
88
+ source = text;
89
+ const parts = text.split('.');
90
+ importedNames = [parts[parts.length - 1] ?? ''];
91
+ }
92
+ return { source, importedNames };
93
+ }
94
+ //# sourceMappingURL=julia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"julia.js","sourceRoot":"","sources":["../../../src/indexer/extractors/julia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @module indexer/extractors/kotlin
3
+ *
4
+ * Kotlin language extractor. Extracts function declarations, class/interface/
5
+ * object declarations, and import directives.
6
+ */
7
+ import type Parser from 'tree-sitter';
8
+ import { type ExtractionResult, type SymbolExtractor } from './types.js';
9
+ export declare class KotlinExtractor implements SymbolExtractor {
10
+ extract(tree: Parser.Tree, _source: string, _filePath: string): ExtractionResult;
11
+ }
12
+ //# sourceMappingURL=kotlin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kotlin.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/kotlin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAIpB,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CA4BjF"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @module indexer/extractors/kotlin
3
+ *
4
+ * Kotlin language extractor. Extracts function declarations, class/interface/
5
+ * object declarations, and import directives.
6
+ */
7
+ import { emptyResult, nodeSignature, walk, } from './types.js';
8
+ // ─── KotlinExtractor ─────────────────────────────────────────────────────────
9
+ export class KotlinExtractor {
10
+ extract(tree, _source, _filePath) {
11
+ const result = emptyResult();
12
+ for (const node of walk(tree.rootNode)) {
13
+ switch (node.type) {
14
+ case 'function_declaration':
15
+ result.symbols.push(extractFunction(node));
16
+ break;
17
+ case 'class_declaration':
18
+ result.symbols.push(extractNamedNode(node, 'class'));
19
+ break;
20
+ case 'object_declaration':
21
+ result.symbols.push(extractNamedNode(node, 'class'));
22
+ break;
23
+ case 'interface_declaration':
24
+ result.symbols.push(extractNamedNode(node, 'interface'));
25
+ break;
26
+ case 'enum_class_body':
27
+ // Handled via parent class_declaration
28
+ break;
29
+ case 'import_header':
30
+ result.imports.push(extractImport(node));
31
+ break;
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ }
37
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
38
+ function extractFunction(node) {
39
+ // Kotlin uses `simple_identifier` for function names
40
+ const nameNode = node.childForFieldName('name') ??
41
+ node.namedChildren.find(c => c.type === 'simple_identifier');
42
+ return {
43
+ name: nameNode?.text ?? '',
44
+ kind: 'function',
45
+ startLine: node.startPosition.row,
46
+ endLine: node.endPosition.row,
47
+ signature: nodeSignature(node),
48
+ };
49
+ }
50
+ function extractNamedNode(node, kind) {
51
+ const nameNode = node.childForFieldName('name') ??
52
+ node.namedChildren.find(c => c.type === 'type_identifier' || c.type === 'simple_identifier');
53
+ return {
54
+ name: nameNode?.text ?? '',
55
+ kind,
56
+ startLine: node.startPosition.row,
57
+ endLine: node.endPosition.row,
58
+ signature: nodeSignature(node),
59
+ };
60
+ }
61
+ function extractImport(node) {
62
+ // `import com.example.Foo` or `import com.example.*`
63
+ const identNode = node.namedChildren.find(c => c.type === 'identifier');
64
+ const source = identNode?.text ??
65
+ node.text.replace(/^import\s+/, '').trim();
66
+ const parts = source.split('.');
67
+ const lastName = parts[parts.length - 1] ?? '';
68
+ const importedNames = lastName === '*' ? [] : [lastName];
69
+ return { source, importedNames };
70
+ }
71
+ //# sourceMappingURL=kotlin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kotlin.js","sourceRoot":"","sources":["../../../src/indexer/extractors/kotlin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @module indexer/extractors/lua
3
+ *
4
+ * Lua language extractor. Extracts function declarations (global, local, and
5
+ * method definitions) and `require()` calls as imports.
6
+ */
7
+ import type Parser from 'tree-sitter';
8
+ import { type ExtractionResult, type SymbolExtractor } from './types.js';
9
+ export declare class LuaExtractor implements SymbolExtractor {
10
+ extract(tree: Parser.Tree, _source: string, _filePath: string): ExtractionResult;
11
+ }
12
+ //# sourceMappingURL=lua.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lua.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/lua.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAIpB,qBAAa,YAAa,YAAW,eAAe;IAClD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CAqBjF"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @module indexer/extractors/lua
3
+ *
4
+ * Lua language extractor. Extracts function declarations (global, local, and
5
+ * method definitions) and `require()` calls as imports.
6
+ */
7
+ import { emptyResult, nodeSignature, walk, } from './types.js';
8
+ // ─── LuaExtractor ────────────────────────────────────────────────────────────
9
+ export class LuaExtractor {
10
+ extract(tree, _source, _filePath) {
11
+ const result = emptyResult();
12
+ for (const node of walk(tree.rootNode)) {
13
+ switch (node.type) {
14
+ case 'function_declaration':
15
+ result.symbols.push(extractFunction(node));
16
+ break;
17
+ case 'local_function_declaration':
18
+ result.symbols.push(extractLocalFunction(node));
19
+ break;
20
+ case 'function_call': {
21
+ const imp = tryExtractRequire(node);
22
+ if (imp)
23
+ result.imports.push(imp);
24
+ break;
25
+ }
26
+ }
27
+ }
28
+ return result;
29
+ }
30
+ }
31
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
32
+ function extractFunction(node) {
33
+ const nameNode = node.childForFieldName('name');
34
+ return {
35
+ name: nameNode?.text ?? '',
36
+ kind: 'function',
37
+ startLine: node.startPosition.row,
38
+ endLine: node.endPosition.row,
39
+ signature: nodeSignature(node),
40
+ };
41
+ }
42
+ function extractLocalFunction(node) {
43
+ const nameNode = node.childForFieldName('name');
44
+ return {
45
+ name: nameNode?.text ?? '',
46
+ kind: 'function',
47
+ startLine: node.startPosition.row,
48
+ endLine: node.endPosition.row,
49
+ signature: nodeSignature(node),
50
+ };
51
+ }
52
+ /**
53
+ * Detects `require("module")` and `require "module"` calls.
54
+ */
55
+ function tryExtractRequire(node) {
56
+ const nameNode = node.childForFieldName('name');
57
+ if (!nameNode || nameNode.text !== 'require')
58
+ return null;
59
+ const argsNode = node.childForFieldName('arguments');
60
+ if (!argsNode)
61
+ return null;
62
+ const firstArg = argsNode.namedChildren[0];
63
+ if (!firstArg)
64
+ return null;
65
+ const source = firstArg.text.replace(/^['"]|['"]$/g, '');
66
+ return { source, importedNames: [] };
67
+ }
68
+ //# sourceMappingURL=lua.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lua.js","sourceRoot":"","sources":["../../../src/indexer/extractors/lua.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAKL,WAAW,EACX,aAAa,EACb,IAAI,GACL,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAEhF,MAAM,OAAO,YAAY;IACvB,OAAO,CAAC,IAAiB,EAAE,OAAe,EAAE,SAAiB;QAC3D,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,sBAAsB;oBACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,4BAA4B;oBAC/B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,GAAG;wBAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,iFAAiF;AAEjF,SAAS,eAAe,CAAC,IAAuB;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;QAC1B,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;QACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;QAC7B,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAuB;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;QAC1B,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;QACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;QAC7B,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAuB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE1D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @module indexer/extractors/objc
3
+ *
4
+ * Objective-C language extractor. Extracts class interfaces, class implementations,
5
+ * protocol declarations, method declarations, and #import directives.
6
+ */
7
+ import type Parser from 'tree-sitter';
8
+ import { type ExtractionResult, type SymbolExtractor } from './types.js';
9
+ export declare class ObjcExtractor implements SymbolExtractor {
10
+ extract(tree: Parser.Tree, source: string, _filePath: string): ExtractionResult;
11
+ }
12
+ //# sourceMappingURL=objc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objc.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/objc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAIpB,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CAoChF"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @module indexer/extractors/objc
3
+ *
4
+ * Objective-C language extractor. Extracts class interfaces, class implementations,
5
+ * protocol declarations, method declarations, and #import directives.
6
+ */
7
+ import { emptyResult, nodeSignature, walk, } from './types.js';
8
+ // ─── ObjcExtractor ───────────────────────────────────────────────────────────
9
+ export class ObjcExtractor {
10
+ extract(tree, source, _filePath) {
11
+ const result = emptyResult();
12
+ for (const node of walk(tree.rootNode)) {
13
+ switch (node.type) {
14
+ case 'class_interface':
15
+ result.symbols.push(extractClassInterface(node));
16
+ break;
17
+ case 'class_implementation':
18
+ result.symbols.push(extractClassImpl(node));
19
+ break;
20
+ case 'protocol_declaration':
21
+ result.symbols.push(extractProtocol(node));
22
+ break;
23
+ case 'method_declaration':
24
+ case 'class_method_declaration':
25
+ case 'instance_method_declaration':
26
+ result.symbols.push(extractMethod(node));
27
+ break;
28
+ case 'category_interface':
29
+ result.symbols.push(extractCategory(node));
30
+ break;
31
+ case 'preproc_import':
32
+ result.imports.push(extractPreprocessorImport(node));
33
+ break;
34
+ case 'module_import':
35
+ result.imports.push(extractModuleImport(node));
36
+ break;
37
+ }
38
+ }
39
+ // Also extract #import directives via regex for preprocessor includes
40
+ extractHashImports(source, result);
41
+ return result;
42
+ }
43
+ }
44
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
45
+ function extractClassInterface(node) {
46
+ const nameNode = node.childForFieldName('name') ??
47
+ node.namedChildren.find(c => c.type === 'identifier');
48
+ return {
49
+ name: nameNode?.text ?? '',
50
+ kind: 'class',
51
+ startLine: node.startPosition.row,
52
+ endLine: node.endPosition.row,
53
+ signature: nodeSignature(node),
54
+ };
55
+ }
56
+ function extractClassImpl(node) {
57
+ const nameNode = node.childForFieldName('name') ??
58
+ node.namedChildren.find(c => c.type === 'identifier');
59
+ return {
60
+ name: nameNode?.text ?? '',
61
+ kind: 'impl',
62
+ startLine: node.startPosition.row,
63
+ endLine: node.endPosition.row,
64
+ signature: nodeSignature(node),
65
+ };
66
+ }
67
+ function extractProtocol(node) {
68
+ const nameNode = node.childForFieldName('name') ??
69
+ node.namedChildren.find(c => c.type === 'identifier');
70
+ return {
71
+ name: nameNode?.text ?? '',
72
+ kind: 'interface',
73
+ startLine: node.startPosition.row,
74
+ endLine: node.endPosition.row,
75
+ signature: nodeSignature(node),
76
+ };
77
+ }
78
+ function extractMethod(node) {
79
+ const selectorNode = node.childForFieldName('selector') ??
80
+ node.namedChildren.find(c => c.type === 'selector' || c.type === 'keyword_selector');
81
+ return {
82
+ name: selectorNode?.text ?? '',
83
+ kind: 'function',
84
+ startLine: node.startPosition.row,
85
+ endLine: node.endPosition.row,
86
+ signature: nodeSignature(node),
87
+ };
88
+ }
89
+ function extractCategory(node) {
90
+ const nameNode = node.childForFieldName('name') ??
91
+ node.namedChildren.find(c => c.type === 'identifier');
92
+ return {
93
+ name: nameNode?.text ?? '',
94
+ kind: 'category',
95
+ startLine: node.startPosition.row,
96
+ endLine: node.endPosition.row,
97
+ signature: nodeSignature(node),
98
+ };
99
+ }
100
+ function extractPreprocessorImport(node) {
101
+ const pathNode = node.childForFieldName('path') ??
102
+ node.namedChildren.find(c => c.type === 'string_literal' || c.type === 'system_lib_string');
103
+ const source = pathNode?.text.replace(/^["<]|[">]$/g, '') ?? '';
104
+ return { source, importedNames: [] };
105
+ }
106
+ function extractModuleImport(node) {
107
+ // @import Foundation;
108
+ const text = node.text
109
+ .replace(/^@import\s+/, '')
110
+ .replace(/\s*;?\s*$/, '')
111
+ .trim();
112
+ return { source: text, importedNames: [] };
113
+ }
114
+ /**
115
+ * Fallback: scan source for `#import "..."` and `#import <...>` directives
116
+ * that might not be captured as tree-sitter nodes.
117
+ */
118
+ function extractHashImports(source, result) {
119
+ const re = /#import\s+["<]([^">]+)[">]/g;
120
+ let match;
121
+ while ((match = re.exec(source)) !== null) {
122
+ const src = match[1];
123
+ // Avoid duplicates
124
+ if (!result.imports.some(i => i.source === src)) {
125
+ result.imports.push({ source: src, importedNames: [] });
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=objc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objc.js","sourceRoot":"","sources":["../../../src/indexer/extractors/objc.ts"],"names":[],"mappings":"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"}