@szabadkai/graphite 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 (148) hide show
  1. package/README.md +427 -0
  2. package/dist/cli/formatters.d.ts +3 -0
  3. package/dist/cli/formatters.js +61 -0
  4. package/dist/cli/formatters.js.map +1 -0
  5. package/dist/cli/index.d.ts +2 -0
  6. package/dist/cli/index.js +186 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/index.d.ts +6 -0
  9. package/dist/index.js +23 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/indexer/call-resolver.d.ts +8 -0
  12. package/dist/indexer/call-resolver.js +161 -0
  13. package/dist/indexer/call-resolver.js.map +1 -0
  14. package/dist/indexer/extractors/calls.d.ts +17 -0
  15. package/dist/indexer/extractors/calls.js +206 -0
  16. package/dist/indexer/extractors/calls.js.map +1 -0
  17. package/dist/indexer/extractors/classes.d.ts +35 -0
  18. package/dist/indexer/extractors/classes.js +209 -0
  19. package/dist/indexer/extractors/classes.js.map +1 -0
  20. package/dist/indexer/extractors/exports.d.ts +12 -0
  21. package/dist/indexer/extractors/exports.js +267 -0
  22. package/dist/indexer/extractors/exports.js.map +1 -0
  23. package/dist/indexer/extractors/functions.d.ts +12 -0
  24. package/dist/indexer/extractors/functions.js +169 -0
  25. package/dist/indexer/extractors/functions.js.map +1 -0
  26. package/dist/indexer/extractors/imports.d.ts +12 -0
  27. package/dist/indexer/extractors/imports.js +195 -0
  28. package/dist/indexer/extractors/imports.js.map +1 -0
  29. package/dist/indexer/extractors/index.d.ts +7 -0
  30. package/dist/indexer/extractors/index.js +24 -0
  31. package/dist/indexer/extractors/index.js.map +1 -0
  32. package/dist/indexer/extractors/types.d.ts +12 -0
  33. package/dist/indexer/extractors/types.js +138 -0
  34. package/dist/indexer/extractors/types.js.map +1 -0
  35. package/dist/indexer/extractors/variables.d.ts +10 -0
  36. package/dist/indexer/extractors/variables.js +134 -0
  37. package/dist/indexer/extractors/variables.js.map +1 -0
  38. package/dist/indexer/file-discovery.d.ts +7 -0
  39. package/dist/indexer/file-discovery.js +92 -0
  40. package/dist/indexer/file-discovery.js.map +1 -0
  41. package/dist/indexer/file-indexer.d.ts +2 -0
  42. package/dist/indexer/file-indexer.js +267 -0
  43. package/dist/indexer/file-indexer.js.map +1 -0
  44. package/dist/indexer/graph-contract.d.ts +25 -0
  45. package/dist/indexer/graph-contract.js +7 -0
  46. package/dist/indexer/graph-contract.js.map +1 -0
  47. package/dist/indexer/hasher.d.ts +1 -0
  48. package/dist/indexer/hasher.js +11 -0
  49. package/dist/indexer/hasher.js.map +1 -0
  50. package/dist/indexer/import-resolver.d.ts +11 -0
  51. package/dist/indexer/import-resolver.js +131 -0
  52. package/dist/indexer/import-resolver.js.map +1 -0
  53. package/dist/indexer/index.d.ts +11 -0
  54. package/dist/indexer/index.js +28 -0
  55. package/dist/indexer/index.js.map +1 -0
  56. package/dist/indexer/inheritance-resolver.d.ts +7 -0
  57. package/dist/indexer/inheritance-resolver.js +119 -0
  58. package/dist/indexer/inheritance-resolver.js.map +1 -0
  59. package/dist/indexer/parser.d.ts +5 -0
  60. package/dist/indexer/parser.js +48 -0
  61. package/dist/indexer/parser.js.map +1 -0
  62. package/dist/indexer/path-utils.d.ts +3 -0
  63. package/dist/indexer/path-utils.js +20 -0
  64. package/dist/indexer/path-utils.js.map +1 -0
  65. package/dist/indexer/project-indexer.d.ts +14 -0
  66. package/dist/indexer/project-indexer.js +167 -0
  67. package/dist/indexer/project-indexer.js.map +1 -0
  68. package/dist/indexer/property-parsers.d.ts +20 -0
  69. package/dist/indexer/property-parsers.js +81 -0
  70. package/dist/indexer/property-parsers.js.map +1 -0
  71. package/dist/mcp/index.d.ts +3 -0
  72. package/dist/mcp/index.js +20 -0
  73. package/dist/mcp/index.js.map +1 -0
  74. package/dist/mcp/response-formatter.d.ts +10 -0
  75. package/dist/mcp/response-formatter.js +47 -0
  76. package/dist/mcp/response-formatter.js.map +1 -0
  77. package/dist/mcp/server.d.ts +10 -0
  78. package/dist/mcp/server.js +118 -0
  79. package/dist/mcp/server.js.map +1 -0
  80. package/dist/mcp/tools-list.d.ts +9 -0
  81. package/dist/mcp/tools-list.js +12 -0
  82. package/dist/mcp/tools-list.js.map +1 -0
  83. package/dist/mcp/tools.d.ts +13 -0
  84. package/dist/mcp/tools.js +163 -0
  85. package/dist/mcp/tools.js.map +1 -0
  86. package/dist/query/analyze-impact.d.ts +18 -0
  87. package/dist/query/analyze-impact.js +58 -0
  88. package/dist/query/analyze-impact.js.map +1 -0
  89. package/dist/query/find-callees.d.ts +12 -0
  90. package/dist/query/find-callees.js +46 -0
  91. package/dist/query/find-callees.js.map +1 -0
  92. package/dist/query/find-callers.d.ts +12 -0
  93. package/dist/query/find-callers.js +46 -0
  94. package/dist/query/find-callers.js.map +1 -0
  95. package/dist/query/find-definition.d.ts +3 -0
  96. package/dist/query/find-definition.js +41 -0
  97. package/dist/query/find-definition.js.map +1 -0
  98. package/dist/query/find-dependency-path.d.ts +2 -0
  99. package/dist/query/find-dependency-path.js +39 -0
  100. package/dist/query/find-dependency-path.js.map +1 -0
  101. package/dist/query/find-implementations.d.ts +10 -0
  102. package/dist/query/find-implementations.js +34 -0
  103. package/dist/query/find-implementations.js.map +1 -0
  104. package/dist/query/get-exports.d.ts +3 -0
  105. package/dist/query/get-exports.js +82 -0
  106. package/dist/query/get-exports.js.map +1 -0
  107. package/dist/query/get-file-structure.d.ts +3 -0
  108. package/dist/query/get-file-structure.js +58 -0
  109. package/dist/query/get-file-structure.js.map +1 -0
  110. package/dist/query/get-graph-stats.d.ts +21 -0
  111. package/dist/query/get-graph-stats.js +42 -0
  112. package/dist/query/get-graph-stats.js.map +1 -0
  113. package/dist/query/index.d.ts +11 -0
  114. package/dist/query/index.js +28 -0
  115. package/dist/query/index.js.map +1 -0
  116. package/dist/query/search-symbols.d.ts +6 -0
  117. package/dist/query/search-symbols.js +75 -0
  118. package/dist/query/search-symbols.js.map +1 -0
  119. package/dist/query/types.d.ts +41 -0
  120. package/dist/query/types.js +36 -0
  121. package/dist/query/types.js.map +1 -0
  122. package/dist/storage/database.d.ts +13 -0
  123. package/dist/storage/database.js +49 -0
  124. package/dist/storage/database.js.map +1 -0
  125. package/dist/storage/index.d.ts +7 -0
  126. package/dist/storage/index.js +24 -0
  127. package/dist/storage/index.js.map +1 -0
  128. package/dist/storage/migrations/001_initial.sql +59 -0
  129. package/dist/storage/migrations/002_add_name_index.sql +9 -0
  130. package/dist/storage/migrator.d.ts +9 -0
  131. package/dist/storage/migrator.js +86 -0
  132. package/dist/storage/migrator.js.map +1 -0
  133. package/dist/storage/paths.d.ts +5 -0
  134. package/dist/storage/paths.js +25 -0
  135. package/dist/storage/paths.js.map +1 -0
  136. package/dist/storage/reader.d.ts +10 -0
  137. package/dist/storage/reader.js +103 -0
  138. package/dist/storage/reader.js.map +1 -0
  139. package/dist/storage/schema.d.ts +14 -0
  140. package/dist/storage/schema.js +18 -0
  141. package/dist/storage/schema.js.map +1 -0
  142. package/dist/storage/types.d.ts +42 -0
  143. package/dist/storage/types.js +3 -0
  144. package/dist/storage/types.js.map +1 -0
  145. package/dist/storage/writer.d.ts +13 -0
  146. package/dist/storage/writer.js +160 -0
  147. package/dist/storage/writer.js.map +1 -0
  148. package/package.json +47 -0
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractFunctions = extractFunctions;
4
+ function walkTree(root) {
5
+ const nodes = [];
6
+ const stack = [root];
7
+ while (stack.length > 0) {
8
+ const current = stack.pop();
9
+ if (!current) {
10
+ continue;
11
+ }
12
+ nodes.push(current);
13
+ for (let index = current.namedChildren.length - 1; index >= 0; index -= 1) {
14
+ stack.push(current.namedChildren[index]);
15
+ }
16
+ }
17
+ return nodes;
18
+ }
19
+ function hasKeywordChild(node, keyword) {
20
+ return node.children.some((child) => child.type === keyword);
21
+ }
22
+ function isInsideExportStatement(node) {
23
+ let cursor = node;
24
+ while (cursor) {
25
+ if (cursor.type === "export_statement") {
26
+ return true;
27
+ }
28
+ cursor = cursor.parent;
29
+ }
30
+ return false;
31
+ }
32
+ function normalizeArrowParameters(parametersText) {
33
+ const trimmed = parametersText.trim();
34
+ if (!trimmed) {
35
+ return "()";
36
+ }
37
+ if (trimmed.startsWith("(") || trimmed.startsWith("{")) {
38
+ return trimmed;
39
+ }
40
+ return `(${trimmed})`;
41
+ }
42
+ function getParametersSignature(node) {
43
+ const parametersNode = node.childForFieldName("parameters") ?? node.childForFieldName("parameter");
44
+ if (parametersNode) {
45
+ if (node.type === "arrow_function") {
46
+ return normalizeArrowParameters(parametersNode.text);
47
+ }
48
+ return parametersNode.text.trim();
49
+ }
50
+ if (node.type === "arrow_function") {
51
+ const arrowTokenIndex = node.text.indexOf("=>");
52
+ if (arrowTokenIndex > -1) {
53
+ return node.text
54
+ .slice(0, arrowTokenIndex)
55
+ .trim()
56
+ .replace(/^async\s+/, "")
57
+ .trim()
58
+ .replace(/^\((.*)\)$/u, "($1)")
59
+ .replace(/^(?!\().+$/u, (value) => normalizeArrowParameters(value));
60
+ }
61
+ }
62
+ return "()";
63
+ }
64
+ function extractArrowFunctionName(node) {
65
+ const variableDeclarator = node.parent;
66
+ if (!variableDeclarator || variableDeclarator.type !== "variable_declarator") {
67
+ return null;
68
+ }
69
+ const valueNode = variableDeclarator.childForFieldName("value");
70
+ if (!valueNode || valueNode.id !== node.id) {
71
+ return null;
72
+ }
73
+ const nameNode = variableDeclarator.childForFieldName("name");
74
+ if (!nameNode) {
75
+ return null;
76
+ }
77
+ return nameNode.text.trim() || null;
78
+ }
79
+ function collectExportedLocalNames(root) {
80
+ const exportedNames = new Set();
81
+ for (const node of walkTree(root)) {
82
+ if (node.type !== "export_statement") {
83
+ continue;
84
+ }
85
+ const clauseNode = node.namedChildren.find((child) => child.type === "export_clause");
86
+ if (!clauseNode) {
87
+ const valueNode = node.childForFieldName("value");
88
+ if (valueNode?.type === "identifier" && valueNode.text.trim()) {
89
+ exportedNames.add(valueNode.text.trim());
90
+ }
91
+ continue;
92
+ }
93
+ for (const clauseChild of clauseNode.namedChildren) {
94
+ if (clauseChild.type !== "export_specifier") {
95
+ continue;
96
+ }
97
+ const localNameNode = clauseChild.childForFieldName("name");
98
+ if (localNameNode?.text.trim()) {
99
+ exportedNames.add(localNameNode.text.trim());
100
+ }
101
+ }
102
+ }
103
+ return exportedNames;
104
+ }
105
+ function toExtractedFunction(node, name, kind, exportedNames) {
106
+ return {
107
+ name,
108
+ kind,
109
+ startLine: node.startPosition.row + 1,
110
+ endLine: node.endPosition.row + 1,
111
+ isAsync: hasKeywordChild(node, "async"),
112
+ isExported: isInsideExportStatement(node) || exportedNames.has(name),
113
+ signature: getParametersSignature(node)
114
+ };
115
+ }
116
+ function extractNamedDeclaration(node, kind, exportedNames) {
117
+ const nameNode = node.childForFieldName("name");
118
+ if (!nameNode) {
119
+ return null;
120
+ }
121
+ return toExtractedFunction(node, nameNode.text.trim(), kind, exportedNames);
122
+ }
123
+ function extractFunctions(tree) {
124
+ const extracted = [];
125
+ const exportedNames = collectExportedLocalNames(tree.rootNode);
126
+ for (const node of walkTree(tree.rootNode)) {
127
+ if (node.type === "function_declaration") {
128
+ const extractedFunction = extractNamedDeclaration(node, "function_declaration", exportedNames);
129
+ if (extractedFunction) {
130
+ extracted.push(extractedFunction);
131
+ }
132
+ continue;
133
+ }
134
+ if (node.type === "generator_function_declaration") {
135
+ const extractedFunction = extractNamedDeclaration(node, "generator_function_declaration", exportedNames);
136
+ if (extractedFunction) {
137
+ extracted.push(extractedFunction);
138
+ }
139
+ continue;
140
+ }
141
+ if (node.type === "arrow_function") {
142
+ const functionName = extractArrowFunctionName(node);
143
+ if (!functionName) {
144
+ continue;
145
+ }
146
+ extracted.push(toExtractedFunction(node, functionName, "arrow_function", exportedNames));
147
+ continue;
148
+ }
149
+ // H4: Handle function expressions (const handler = function() {})
150
+ if (node.type === "function_expression" || node.type === "generator_function") {
151
+ const nameNode = node.childForFieldName("name");
152
+ if (nameNode?.text.trim()) {
153
+ // Named function expression: const x = function myFunc() {}
154
+ extracted.push(toExtractedFunction(node, nameNode.text.trim(), "function_declaration", exportedNames));
155
+ continue;
156
+ }
157
+ // Unnamed function expression assigned to a variable
158
+ const variableDeclarator = node.parent;
159
+ if (variableDeclarator?.type === "variable_declarator") {
160
+ const varNameNode = variableDeclarator.childForFieldName("name");
161
+ if (varNameNode?.text.trim()) {
162
+ extracted.push(toExtractedFunction(node, varNameNode.text.trim(), "function_declaration", exportedNames));
163
+ }
164
+ }
165
+ }
166
+ }
167
+ return extracted;
168
+ }
169
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/indexer/extractors/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type Parser from "tree-sitter";
2
+ export type ImportKind = "default" | "named" | "namespace" | "side_effect" | "require";
3
+ export interface ExtractedImport {
4
+ kind: ImportKind;
5
+ sourcePath: string;
6
+ importedName: string | null;
7
+ localName: string | null;
8
+ isTypeOnly: boolean;
9
+ startLine: number;
10
+ endLine: number;
11
+ }
12
+ export declare function extractImports(tree: Parser.Tree): ExtractedImport[];
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractImports = extractImports;
4
+ function walkTree(root) {
5
+ const nodes = [];
6
+ const stack = [root];
7
+ while (stack.length > 0) {
8
+ const current = stack.pop();
9
+ if (!current) {
10
+ continue;
11
+ }
12
+ nodes.push(current);
13
+ for (let index = current.namedChildren.length - 1; index >= 0; index -= 1) {
14
+ stack.push(current.namedChildren[index]);
15
+ }
16
+ }
17
+ return nodes;
18
+ }
19
+ function stripQuotes(text) {
20
+ return text.replace(/^['\"]|['\"]$/g, "").trim();
21
+ }
22
+ function getSourcePath(node) {
23
+ const sourceNode = node.childForFieldName("source");
24
+ if (!sourceNode) {
25
+ return null;
26
+ }
27
+ return stripQuotes(sourceNode.text);
28
+ }
29
+ function hasTypeKeyword(node) {
30
+ return node.children.some((child) => child.type === "type");
31
+ }
32
+ function extractFromImportStatement(node) {
33
+ const sourcePath = getSourcePath(node);
34
+ if (!sourcePath) {
35
+ return [];
36
+ }
37
+ const clauseNode = node.namedChildren.find((child) => child.type === "import_clause");
38
+ const startLine = node.startPosition.row + 1;
39
+ const endLine = node.endPosition.row + 1;
40
+ if (!clauseNode) {
41
+ return [
42
+ {
43
+ kind: "side_effect",
44
+ sourcePath,
45
+ importedName: null,
46
+ localName: null,
47
+ isTypeOnly: false,
48
+ startLine,
49
+ endLine
50
+ }
51
+ ];
52
+ }
53
+ const globalTypeOnly = hasTypeKeyword(node);
54
+ const imports = [];
55
+ for (const child of clauseNode.namedChildren) {
56
+ if (child.type === "identifier") {
57
+ imports.push({
58
+ kind: "default",
59
+ sourcePath,
60
+ importedName: "default",
61
+ localName: child.text.trim(),
62
+ isTypeOnly: globalTypeOnly,
63
+ startLine,
64
+ endLine
65
+ });
66
+ continue;
67
+ }
68
+ if (child.type === "namespace_import") {
69
+ const localNode = child.namedChildren.find((candidate) => candidate.type === "identifier");
70
+ imports.push({
71
+ kind: "namespace",
72
+ sourcePath,
73
+ importedName: "*",
74
+ localName: localNode?.text.trim() || null,
75
+ isTypeOnly: globalTypeOnly,
76
+ startLine,
77
+ endLine
78
+ });
79
+ continue;
80
+ }
81
+ if (child.type === "named_imports") {
82
+ for (const specifier of child.namedChildren) {
83
+ if (specifier.type !== "import_specifier") {
84
+ continue;
85
+ }
86
+ const importedNameNode = specifier.childForFieldName("name");
87
+ if (!importedNameNode?.text.trim()) {
88
+ continue;
89
+ }
90
+ const aliasNode = specifier.childForFieldName("alias");
91
+ imports.push({
92
+ kind: "named",
93
+ sourcePath,
94
+ importedName: importedNameNode.text.trim(),
95
+ localName: aliasNode?.text.trim() || importedNameNode.text.trim(),
96
+ isTypeOnly: globalTypeOnly || hasTypeKeyword(specifier),
97
+ startLine,
98
+ endLine
99
+ });
100
+ }
101
+ }
102
+ }
103
+ return imports;
104
+ }
105
+ function extractFromRequireCall(node) {
106
+ if (node.type !== "call_expression") {
107
+ return [];
108
+ }
109
+ const functionNode = node.childForFieldName("function");
110
+ if (!functionNode || functionNode.type !== "identifier" || functionNode.text !== "require") {
111
+ return [];
112
+ }
113
+ const argumentsNode = node.childForFieldName("arguments");
114
+ if (!argumentsNode || argumentsNode.namedChildren.length !== 1) {
115
+ return [];
116
+ }
117
+ const firstArgument = argumentsNode.namedChildren[0];
118
+ if (firstArgument.type !== "string") {
119
+ return [];
120
+ }
121
+ const sourcePath = stripQuotes(firstArgument.text);
122
+ const variableDeclarator = node.parent;
123
+ const nameNode = variableDeclarator?.type === "variable_declarator"
124
+ ? variableDeclarator.childForFieldName("name")
125
+ : null;
126
+ const collectRequireBindings = (patternNode) => {
127
+ if (patternNode.type === "identifier") {
128
+ const name = patternNode.text.trim();
129
+ return name ? [{ importedName: "default", localName: name }] : [];
130
+ }
131
+ if (patternNode.type === "shorthand_property_identifier_pattern") {
132
+ const name = patternNode.text.trim();
133
+ return name ? [{ importedName: name, localName: name }] : [];
134
+ }
135
+ if (patternNode.type === "pair_pattern") {
136
+ const keyNode = patternNode.childForFieldName("key");
137
+ const valueNode = patternNode.childForFieldName("value");
138
+ const importedName = keyNode?.text.trim() || "";
139
+ if (valueNode?.type === "identifier") {
140
+ const localName = valueNode.text.trim();
141
+ if (importedName && localName) {
142
+ return [{ importedName, localName }];
143
+ }
144
+ }
145
+ if (valueNode) {
146
+ return collectRequireBindings(valueNode);
147
+ }
148
+ return [];
149
+ }
150
+ if (patternNode.type === "assignment_pattern") {
151
+ const leftNode = patternNode.childForFieldName("left");
152
+ return leftNode ? collectRequireBindings(leftNode) : [];
153
+ }
154
+ return patternNode.namedChildren.flatMap((child) => collectRequireBindings(child));
155
+ };
156
+ const bindings = nameNode ? collectRequireBindings(nameNode) : [];
157
+ const startLine = node.startPosition.row + 1;
158
+ const endLine = node.endPosition.row + 1;
159
+ if (bindings.length === 0) {
160
+ return [
161
+ {
162
+ kind: "require",
163
+ sourcePath,
164
+ importedName: null,
165
+ localName: null,
166
+ isTypeOnly: false,
167
+ startLine,
168
+ endLine
169
+ }
170
+ ];
171
+ }
172
+ return bindings.map((binding) => ({
173
+ kind: "require",
174
+ sourcePath,
175
+ importedName: binding.importedName,
176
+ localName: binding.localName,
177
+ isTypeOnly: false,
178
+ startLine,
179
+ endLine
180
+ }));
181
+ }
182
+ function extractImports(tree) {
183
+ const imports = [];
184
+ for (const node of walkTree(tree.rootNode)) {
185
+ if (node.type === "import_statement") {
186
+ imports.push(...extractFromImportStatement(node));
187
+ continue;
188
+ }
189
+ if (node.type === "call_expression") {
190
+ imports.push(...extractFromRequireCall(node));
191
+ }
192
+ }
193
+ return imports;
194
+ }
195
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../src/indexer/extractors/imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "./functions";
2
+ export * from "./classes";
3
+ export * from "./types";
4
+ export * from "./variables";
5
+ export * from "./imports";
6
+ export * from "./exports";
7
+ export * from "./calls";
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./functions"), exports);
18
+ __exportStar(require("./classes"), exports);
19
+ __exportStar(require("./types"), exports);
20
+ __exportStar(require("./variables"), exports);
21
+ __exportStar(require("./imports"), exports);
22
+ __exportStar(require("./exports"), exports);
23
+ __exportStar(require("./calls"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexer/extractors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,4CAA0B;AAC1B,0CAAwB;AACxB,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,0CAAwB"}
@@ -0,0 +1,12 @@
1
+ import type Parser from "tree-sitter";
2
+ export type ExtractedTypeKind = "interface" | "type_alias" | "enum";
3
+ export interface ExtractedType {
4
+ kind: ExtractedTypeKind;
5
+ name: string;
6
+ startLine: number;
7
+ endLine: number;
8
+ isExported: boolean;
9
+ memberNames: string[];
10
+ signature: string | null;
11
+ }
12
+ export declare function extractTypes(tree: Parser.Tree): ExtractedType[];
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractTypes = extractTypes;
4
+ function walkTree(root) {
5
+ const nodes = [];
6
+ const stack = [root];
7
+ while (stack.length > 0) {
8
+ const current = stack.pop();
9
+ if (!current) {
10
+ continue;
11
+ }
12
+ nodes.push(current);
13
+ for (let index = current.namedChildren.length - 1; index >= 0; index -= 1) {
14
+ stack.push(current.namedChildren[index]);
15
+ }
16
+ }
17
+ return nodes;
18
+ }
19
+ function collectExportedLocalNames(root) {
20
+ const exportedNames = new Set();
21
+ for (const node of walkTree(root)) {
22
+ if (node.type !== "export_statement") {
23
+ continue;
24
+ }
25
+ const clauseNode = node.namedChildren.find((child) => child.type === "export_clause");
26
+ if (!clauseNode) {
27
+ const valueNode = node.childForFieldName("value");
28
+ if (valueNode?.type === "identifier" && valueNode.text.trim()) {
29
+ exportedNames.add(valueNode.text.trim());
30
+ }
31
+ continue;
32
+ }
33
+ for (const clauseChild of clauseNode.namedChildren) {
34
+ if (clauseChild.type !== "export_specifier") {
35
+ continue;
36
+ }
37
+ const localNameNode = clauseChild.childForFieldName("name");
38
+ if (localNameNode?.text.trim()) {
39
+ exportedNames.add(localNameNode.text.trim());
40
+ }
41
+ }
42
+ }
43
+ return exportedNames;
44
+ }
45
+ function isInsideExportStatement(node) {
46
+ let cursor = node;
47
+ while (cursor) {
48
+ if (cursor.type === "export_statement") {
49
+ return true;
50
+ }
51
+ cursor = cursor.parent;
52
+ }
53
+ return false;
54
+ }
55
+ function extractName(node) {
56
+ const nameNode = node.childForFieldName("name");
57
+ return nameNode?.text.trim() || null;
58
+ }
59
+ function extractInterfaceMembers(node) {
60
+ const bodyNode = node.childForFieldName("body");
61
+ if (!bodyNode) {
62
+ return [];
63
+ }
64
+ return bodyNode.namedChildren
65
+ .map((memberNode) => memberNode.childForFieldName("name")?.text.trim() || null)
66
+ .filter((name) => Boolean(name));
67
+ }
68
+ function extractEnumMembers(node) {
69
+ const bodyNode = node.childForFieldName("body");
70
+ if (!bodyNode) {
71
+ return [];
72
+ }
73
+ return bodyNode.namedChildren
74
+ .map((memberNode) => {
75
+ const nameNode = memberNode.childForFieldName("name");
76
+ if (nameNode?.text.trim()) {
77
+ return nameNode.text.trim();
78
+ }
79
+ return memberNode.text.split("=")[0]?.trim() || null;
80
+ })
81
+ .filter((name) => Boolean(name));
82
+ }
83
+ function extractTypes(tree) {
84
+ const extracted = [];
85
+ const exportedNames = collectExportedLocalNames(tree.rootNode);
86
+ for (const node of walkTree(tree.rootNode)) {
87
+ if (node.type === "interface_declaration") {
88
+ const name = extractName(node);
89
+ if (!name) {
90
+ continue;
91
+ }
92
+ extracted.push({
93
+ kind: "interface",
94
+ name,
95
+ startLine: node.startPosition.row + 1,
96
+ endLine: node.endPosition.row + 1,
97
+ isExported: isInsideExportStatement(node) || exportedNames.has(name),
98
+ memberNames: extractInterfaceMembers(node),
99
+ signature: null
100
+ });
101
+ continue;
102
+ }
103
+ if (node.type === "type_alias_declaration") {
104
+ const name = extractName(node);
105
+ if (!name) {
106
+ continue;
107
+ }
108
+ const valueNode = node.childForFieldName("value");
109
+ extracted.push({
110
+ kind: "type_alias",
111
+ name,
112
+ startLine: node.startPosition.row + 1,
113
+ endLine: node.endPosition.row + 1,
114
+ isExported: isInsideExportStatement(node) || exportedNames.has(name),
115
+ memberNames: [],
116
+ signature: valueNode?.text.trim() || null
117
+ });
118
+ continue;
119
+ }
120
+ if (node.type === "enum_declaration") {
121
+ const name = extractName(node);
122
+ if (!name) {
123
+ continue;
124
+ }
125
+ extracted.push({
126
+ kind: "enum",
127
+ name,
128
+ startLine: node.startPosition.row + 1,
129
+ endLine: node.endPosition.row + 1,
130
+ isExported: isInsideExportStatement(node) || exportedNames.has(name),
131
+ memberNames: extractEnumMembers(node),
132
+ signature: null
133
+ });
134
+ }
135
+ }
136
+ return extracted;
137
+ }
138
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/indexer/extractors/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type Parser from "tree-sitter";
2
+ export type VariableDeclarationKind = "const" | "let" | "var";
3
+ export interface ExtractedVariable {
4
+ name: string;
5
+ kind: VariableDeclarationKind;
6
+ startLine: number;
7
+ endLine: number;
8
+ isExported: boolean;
9
+ }
10
+ export declare function extractVariables(tree: Parser.Tree): ExtractedVariable[];