@know-graph/core 0.4.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.
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/connectors/cache.d.ts +25 -0
- package/dist/connectors/cache.d.ts.map +1 -0
- package/dist/connectors/cache.js +73 -0
- package/dist/connectors/cache.js.map +1 -0
- package/dist/connectors/index.d.ts +12 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +7 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/jira-connector.d.ts +26 -0
- package/dist/connectors/jira-connector.d.ts.map +1 -0
- package/dist/connectors/jira-connector.js +234 -0
- package/dist/connectors/jira-connector.js.map +1 -0
- package/dist/connectors/notion-connector.d.ts +24 -0
- package/dist/connectors/notion-connector.d.ts.map +1 -0
- package/dist/connectors/notion-connector.js +246 -0
- package/dist/connectors/notion-connector.js.map +1 -0
- package/dist/connectors/rate-limiter.d.ts +23 -0
- package/dist/connectors/rate-limiter.d.ts.map +1 -0
- package/dist/connectors/rate-limiter.js +54 -0
- package/dist/connectors/rate-limiter.js.map +1 -0
- package/dist/connectors/registry.d.ts +15 -0
- package/dist/connectors/registry.d.ts.map +1 -0
- package/dist/connectors/registry.js +72 -0
- package/dist/connectors/registry.js.map +1 -0
- package/dist/connectors/types.d.ts +142 -0
- package/dist/connectors/types.d.ts.map +1 -0
- package/dist/connectors/types.js +35 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts +9 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js +11 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts +2 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js +4 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js.map +1 -0
- package/dist/coverage/coverage-calculator.d.ts +3 -0
- package/dist/coverage/coverage-calculator.d.ts.map +1 -0
- package/dist/coverage/coverage-calculator.js +204 -0
- package/dist/coverage/coverage-calculator.js.map +1 -0
- package/dist/coverage/index.d.ts +3 -0
- package/dist/coverage/index.d.ts.map +1 -0
- package/dist/coverage/index.js +2 -0
- package/dist/coverage/index.js.map +1 -0
- package/dist/coverage/types.d.ts +38 -0
- package/dist/coverage/types.d.ts.map +1 -0
- package/dist/coverage/types.js +13 -0
- package/dist/coverage/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/database.d.ts +32 -0
- package/dist/indexer/database.d.ts.map +1 -0
- package/dist/indexer/database.js +242 -0
- package/dist/indexer/database.js.map +1 -0
- package/dist/indexer/index.d.ts +7 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +4 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/indexer.d.ts +12 -0
- package/dist/indexer/indexer.d.ts.map +1 -0
- package/dist/indexer/indexer.js +145 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/indexer/schema.d.ts +21 -0
- package/dist/indexer/schema.d.ts.map +1 -0
- package/dist/indexer/schema.js +122 -0
- package/dist/indexer/schema.js.map +1 -0
- package/dist/indexer/types.d.ts +85 -0
- package/dist/indexer/types.d.ts.map +1 -0
- package/dist/indexer/types.js +2 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/parsers/generic-parser.d.ts +3 -0
- package/dist/parsers/generic-parser.d.ts.map +1 -0
- package/dist/parsers/generic-parser.js +150 -0
- package/dist/parsers/generic-parser.js.map +1 -0
- package/dist/parsers/go-parser.d.ts +3 -0
- package/dist/parsers/go-parser.d.ts.map +1 -0
- package/dist/parsers/go-parser.js +437 -0
- package/dist/parsers/go-parser.js.map +1 -0
- package/dist/parsers/index.d.ts +10 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +8 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/java-parser.d.ts +3 -0
- package/dist/parsers/java-parser.d.ts.map +1 -0
- package/dist/parsers/java-parser.js +321 -0
- package/dist/parsers/java-parser.js.map +1 -0
- package/dist/parsers/metadata-extractor.d.ts +25 -0
- package/dist/parsers/metadata-extractor.d.ts.map +1 -0
- package/dist/parsers/metadata-extractor.js +137 -0
- package/dist/parsers/metadata-extractor.js.map +1 -0
- package/dist/parsers/python-parser.d.ts +3 -0
- package/dist/parsers/python-parser.d.ts.map +1 -0
- package/dist/parsers/python-parser.js +226 -0
- package/dist/parsers/python-parser.js.map +1 -0
- package/dist/parsers/registry.d.ts +3 -0
- package/dist/parsers/registry.d.ts.map +1 -0
- package/dist/parsers/registry.js +41 -0
- package/dist/parsers/registry.js.map +1 -0
- package/dist/parsers/types.d.ts +23 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +2 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/parsers/typescript-parser.d.ts +3 -0
- package/dist/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/parsers/typescript-parser.js +321 -0
- package/dist/parsers/typescript-parser.js.map +1 -0
- package/dist/query/index.d.ts +3 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +2 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/query-engine.d.ts +40 -0
- package/dist/query/query-engine.d.ts.map +1 -0
- package/dist/query/query-engine.js +126 -0
- package/dist/query/query-engine.js.map +1 -0
- package/dist/suggest/index.d.ts +3 -0
- package/dist/suggest/index.d.ts.map +1 -0
- package/dist/suggest/index.js +2 -0
- package/dist/suggest/index.js.map +1 -0
- package/dist/suggest/suggestion-engine.d.ts +7 -0
- package/dist/suggest/suggestion-engine.d.ts.map +1 -0
- package/dist/suggest/suggestion-engine.js +239 -0
- package/dist/suggest/suggestion-engine.js.map +1 -0
- package/dist/suggest/types.d.ts +29 -0
- package/dist/suggest/types.d.ts.map +1 -0
- package/dist/suggest/types.js +13 -0
- package/dist/suggest/types.js.map +1 -0
- package/dist/types/entity.d.ts +336 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entity.js +99 -0
- package/dist/types/entity.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/manifest.d.ts +488 -0
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +66 -0
- package/dist/types/manifest.js.map +1 -0
- package/dist/types/parse-result.d.ts +25 -0
- package/dist/types/parse-result.d.ts.map +1 -0
- package/dist/types/parse-result.js +2 -0
- package/dist/types/parse-result.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +3 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/rules.d.ts +9 -0
- package/dist/validation/rules.d.ts.map +1 -0
- package/dist/validation/rules.js +119 -0
- package/dist/validation/rules.js.map +1 -0
- package/dist/validation/types.d.ts +34 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +2 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validator.d.ts +10 -0
- package/dist/validation/validator.d.ts.map +1 -0
- package/dist/validation/validator.js +111 -0
- package/dist/validation/validator.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { extractMetadata } from './metadata-extractor.js';
|
|
2
|
+
const JAVA_EXTENSIONS = ['.java'];
|
|
3
|
+
/**
|
|
4
|
+
* Regex to match JavaDoc comment blocks: /** ... * /
|
|
5
|
+
*/
|
|
6
|
+
const JAVADOC_REGEX = /\/\*\*[\s\S]*?\*\//g;
|
|
7
|
+
/**
|
|
8
|
+
* Regex to match class or record declarations.
|
|
9
|
+
*/
|
|
10
|
+
const JAVA_CLASS_REGEX = /^(?:public|private|protected)?\s*(?:static\s+)?(?:final\s+)?(?:abstract\s+)?(?:class|record)\s+(\w+)(?:<[^>]*>)?(?:\s+extends\s+\S+)?(?:\s+implements\s+[^{]+)?\s*[({]/;
|
|
11
|
+
/**
|
|
12
|
+
* Regex to match interface declarations.
|
|
13
|
+
*/
|
|
14
|
+
const JAVA_INTERFACE_REGEX = /^(?:public|private|protected)?\s*(?:static\s+)?interface\s+(\w+)(?:<[^>]*>)?(?:\s+extends\s+[^{]+)?\s*\{/;
|
|
15
|
+
/**
|
|
16
|
+
* Regex to match enum declarations.
|
|
17
|
+
*/
|
|
18
|
+
const JAVA_ENUM_REGEX = /^(?:public|private|protected)?\s*(?:static\s+)?enum\s+(\w+)(?:\s+implements\s+[^{]+)?\s*\{/;
|
|
19
|
+
/**
|
|
20
|
+
* Regex to match method declarations inside a class.
|
|
21
|
+
*/
|
|
22
|
+
const JAVA_METHOD_REGEX = /^\s+(?:(?:public|private|protected|static|final|abstract|synchronized|native|default)\s+)*(?:<[^>]*>\s+)?(\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(([^)]*)\)/;
|
|
23
|
+
/**
|
|
24
|
+
* Regex to match Java annotations (e.g., @Override, @PostMapping("/api")).
|
|
25
|
+
*/
|
|
26
|
+
const JAVA_ANNOTATION_REGEX = /^\s*@\w+/;
|
|
27
|
+
/**
|
|
28
|
+
* Regex to match package declarations.
|
|
29
|
+
*/
|
|
30
|
+
const JAVA_PACKAGE_REGEX = /^package\s+([\w.]+)\s*;/;
|
|
31
|
+
function getLineNumber(source, charIndex) {
|
|
32
|
+
let line = 1;
|
|
33
|
+
for (let i = 0; i < charIndex && i < source.length; i++) {
|
|
34
|
+
if (source[i] === '\n') {
|
|
35
|
+
line++;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return line;
|
|
39
|
+
}
|
|
40
|
+
function stripJavadoc(raw) {
|
|
41
|
+
// Remove /** and */
|
|
42
|
+
const inner = raw.slice(3, -2);
|
|
43
|
+
// Remove leading * on each line
|
|
44
|
+
const lines = inner.split('\n').map((line) => line.replace(/^\s*\*\s?/, ''));
|
|
45
|
+
return lines.join('\n').trim();
|
|
46
|
+
}
|
|
47
|
+
function findAllJavadocBlocks(content) {
|
|
48
|
+
const results = [];
|
|
49
|
+
let match;
|
|
50
|
+
const regex = new RegExp(JAVADOC_REGEX.source, 'g');
|
|
51
|
+
while ((match = regex.exec(content)) !== null) {
|
|
52
|
+
const startLine = getLineNumber(content, match.index);
|
|
53
|
+
const endIndex = match.index + match[0].length;
|
|
54
|
+
const endLine = getLineNumber(content, endIndex - 1);
|
|
55
|
+
results.push({
|
|
56
|
+
content: stripJavadoc(match[0]),
|
|
57
|
+
startLine,
|
|
58
|
+
endLine,
|
|
59
|
+
endIndex,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return results;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get the next non-empty line after the given character index,
|
|
66
|
+
* skipping Java annotations (@Override, @PostMapping, etc.).
|
|
67
|
+
* Returns the trimmed line content.
|
|
68
|
+
*/
|
|
69
|
+
function getNextCodeLine(content, afterIndex) {
|
|
70
|
+
const rest = content.slice(afterIndex);
|
|
71
|
+
const lines = rest.split('\n');
|
|
72
|
+
for (const line of lines) {
|
|
73
|
+
const trimmed = line.trim();
|
|
74
|
+
if (trimmed === '')
|
|
75
|
+
continue;
|
|
76
|
+
if (JAVA_ANNOTATION_REGEX.test(trimmed))
|
|
77
|
+
continue;
|
|
78
|
+
return trimmed;
|
|
79
|
+
}
|
|
80
|
+
return '';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the next non-empty line after the given character index,
|
|
84
|
+
* skipping Java annotations. Returns the raw (unstripped) line.
|
|
85
|
+
*/
|
|
86
|
+
function getNextCodeLineRaw(content, afterIndex) {
|
|
87
|
+
const rest = content.slice(afterIndex);
|
|
88
|
+
const lines = rest.split('\n');
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
if (line.trim() === '')
|
|
91
|
+
continue;
|
|
92
|
+
if (JAVA_ANNOTATION_REGEX.test(line.trim()))
|
|
93
|
+
continue;
|
|
94
|
+
return line;
|
|
95
|
+
}
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get the line number of the next non-empty, non-annotation line
|
|
100
|
+
* after the given character index.
|
|
101
|
+
*/
|
|
102
|
+
function getNextCodeLineNumber(content, afterIndex) {
|
|
103
|
+
const baseLine = getLineNumber(content, afterIndex);
|
|
104
|
+
const rest = content.slice(afterIndex);
|
|
105
|
+
const lines = rest.split('\n');
|
|
106
|
+
for (let i = 0; i < lines.length; i++) {
|
|
107
|
+
const trimmed = lines[i]?.trim() ?? '';
|
|
108
|
+
if (trimmed === '')
|
|
109
|
+
continue;
|
|
110
|
+
if (JAVA_ANNOTATION_REGEX.test(trimmed))
|
|
111
|
+
continue;
|
|
112
|
+
return baseLine + i;
|
|
113
|
+
}
|
|
114
|
+
return baseLine;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the next non-empty line (without skipping annotations).
|
|
118
|
+
* Used for checking package declarations.
|
|
119
|
+
*/
|
|
120
|
+
function getNextNonEmptyLine(content, afterIndex) {
|
|
121
|
+
const rest = content.slice(afterIndex);
|
|
122
|
+
const lines = rest.split('\n');
|
|
123
|
+
for (const line of lines) {
|
|
124
|
+
const trimmed = line.trim();
|
|
125
|
+
if (trimmed !== '') {
|
|
126
|
+
return trimmed;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return '';
|
|
130
|
+
}
|
|
131
|
+
function isModuleLevelJavadoc(content, startLine) {
|
|
132
|
+
const lines = content.split('\n');
|
|
133
|
+
for (let i = 0; i < startLine - 1; i++) {
|
|
134
|
+
const line = lines[i]?.trim() ?? '';
|
|
135
|
+
if (line === '' ||
|
|
136
|
+
line.startsWith('//') ||
|
|
137
|
+
line.startsWith('/*') ||
|
|
138
|
+
line.startsWith('*')) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
// Check for package/import declarations - those are fine before module-level javadoc
|
|
142
|
+
if (line.startsWith('package ') || line.startsWith('import ')) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
function findEnclosingClassName(content, lineNumber) {
|
|
150
|
+
const lines = content.split('\n');
|
|
151
|
+
const targetLine = lines[lineNumber - 1];
|
|
152
|
+
if (!targetLine)
|
|
153
|
+
return undefined;
|
|
154
|
+
const targetIndent = targetLine.search(/\S/);
|
|
155
|
+
if (targetIndent <= 0)
|
|
156
|
+
return undefined;
|
|
157
|
+
for (let i = lineNumber - 2; i >= 0; i--) {
|
|
158
|
+
const line = lines[i];
|
|
159
|
+
if (line === undefined)
|
|
160
|
+
continue;
|
|
161
|
+
const currentIndent = line.search(/\S/);
|
|
162
|
+
if (currentIndent === -1)
|
|
163
|
+
continue;
|
|
164
|
+
if (currentIndent < targetIndent) {
|
|
165
|
+
const trimmed = line.trim();
|
|
166
|
+
const classMatch = trimmed.match(JAVA_CLASS_REGEX);
|
|
167
|
+
if (classMatch) {
|
|
168
|
+
return classMatch[1];
|
|
169
|
+
}
|
|
170
|
+
const ifaceMatch = trimmed.match(JAVA_INTERFACE_REGEX);
|
|
171
|
+
if (ifaceMatch) {
|
|
172
|
+
return ifaceMatch[1];
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
function getModuleName(filePath) {
|
|
180
|
+
const parts = filePath.split('/');
|
|
181
|
+
const fileName = parts[parts.length - 1] ?? '';
|
|
182
|
+
return fileName.replace(/\.java$/, '');
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Build a method signature from a raw line match.
|
|
186
|
+
* Extracts modifiers, return type, name, and parameters.
|
|
187
|
+
*/
|
|
188
|
+
function buildMethodSignature(rawLine) {
|
|
189
|
+
const trimmed = rawLine.trim();
|
|
190
|
+
// Remove opening brace if present
|
|
191
|
+
const withoutBrace = trimmed.replace(/\s*\{.*$/, '');
|
|
192
|
+
return withoutBrace;
|
|
193
|
+
}
|
|
194
|
+
export function createJavaParser() {
|
|
195
|
+
return {
|
|
196
|
+
name: 'java',
|
|
197
|
+
supportedExtensions: JAVA_EXTENSIONS,
|
|
198
|
+
parse(content, filePath) {
|
|
199
|
+
const javadocBlocks = findAllJavadocBlocks(content);
|
|
200
|
+
const results = [];
|
|
201
|
+
for (const javadoc of javadocBlocks) {
|
|
202
|
+
const extraction = extractMetadata(javadoc.content, javadoc.startLine);
|
|
203
|
+
if (!extraction.metadata) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const metadata = extraction.metadata;
|
|
207
|
+
const nextLine = getNextCodeLine(content, javadoc.endIndex);
|
|
208
|
+
const nextLineRaw = getNextCodeLineRaw(content, javadoc.endIndex);
|
|
209
|
+
const nextLineNumber = getNextCodeLineNumber(content, javadoc.endIndex);
|
|
210
|
+
// Try to match class or record declaration
|
|
211
|
+
const classMatch = nextLine.match(JAVA_CLASS_REGEX);
|
|
212
|
+
if (classMatch) {
|
|
213
|
+
results.push({
|
|
214
|
+
name: classMatch[1],
|
|
215
|
+
filePath,
|
|
216
|
+
line: nextLineNumber,
|
|
217
|
+
column: 1,
|
|
218
|
+
language: 'java',
|
|
219
|
+
entityType: metadata.type,
|
|
220
|
+
metadata,
|
|
221
|
+
rawDocstring: javadoc.content,
|
|
222
|
+
});
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
// Try to match interface declaration
|
|
226
|
+
const ifaceMatch = nextLine.match(JAVA_INTERFACE_REGEX);
|
|
227
|
+
if (ifaceMatch) {
|
|
228
|
+
results.push({
|
|
229
|
+
name: ifaceMatch[1],
|
|
230
|
+
filePath,
|
|
231
|
+
line: nextLineNumber,
|
|
232
|
+
column: 1,
|
|
233
|
+
language: 'java',
|
|
234
|
+
entityType: metadata.type,
|
|
235
|
+
metadata,
|
|
236
|
+
rawDocstring: javadoc.content,
|
|
237
|
+
});
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
// Try to match enum declaration
|
|
241
|
+
const enumMatch = nextLine.match(JAVA_ENUM_REGEX);
|
|
242
|
+
if (enumMatch) {
|
|
243
|
+
results.push({
|
|
244
|
+
name: enumMatch[1],
|
|
245
|
+
filePath,
|
|
246
|
+
line: nextLineNumber,
|
|
247
|
+
column: 1,
|
|
248
|
+
language: 'java',
|
|
249
|
+
entityType: metadata.type,
|
|
250
|
+
metadata,
|
|
251
|
+
rawDocstring: javadoc.content,
|
|
252
|
+
});
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
// Try to match method declaration (inside a class)
|
|
256
|
+
const methodMatch = nextLineRaw.match(JAVA_METHOD_REGEX);
|
|
257
|
+
if (methodMatch) {
|
|
258
|
+
const name = methodMatch[2];
|
|
259
|
+
const parent = findEnclosingClassName(content, nextLineNumber);
|
|
260
|
+
const signature = buildMethodSignature(nextLineRaw);
|
|
261
|
+
results.push({
|
|
262
|
+
name,
|
|
263
|
+
filePath,
|
|
264
|
+
line: nextLineNumber,
|
|
265
|
+
column: 1,
|
|
266
|
+
language: 'java',
|
|
267
|
+
entityType: metadata.type,
|
|
268
|
+
metadata,
|
|
269
|
+
rawDocstring: javadoc.content,
|
|
270
|
+
signature,
|
|
271
|
+
parent,
|
|
272
|
+
});
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// Check for package declaration (module-level)
|
|
276
|
+
const nextNonEmpty = getNextNonEmptyLine(content, javadoc.endIndex);
|
|
277
|
+
const packageMatch = nextNonEmpty.match(JAVA_PACKAGE_REGEX);
|
|
278
|
+
if (packageMatch && isModuleLevelJavadoc(content, javadoc.startLine)) {
|
|
279
|
+
results.push({
|
|
280
|
+
name: packageMatch[1],
|
|
281
|
+
filePath,
|
|
282
|
+
line: javadoc.startLine,
|
|
283
|
+
column: 1,
|
|
284
|
+
language: 'java',
|
|
285
|
+
entityType: metadata.type,
|
|
286
|
+
metadata,
|
|
287
|
+
rawDocstring: javadoc.content,
|
|
288
|
+
});
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// Module-level JavaDoc or unrecognized target
|
|
292
|
+
if (isModuleLevelJavadoc(content, javadoc.startLine)) {
|
|
293
|
+
results.push({
|
|
294
|
+
name: getModuleName(filePath),
|
|
295
|
+
filePath,
|
|
296
|
+
line: javadoc.startLine,
|
|
297
|
+
column: 1,
|
|
298
|
+
language: 'java',
|
|
299
|
+
entityType: metadata.type,
|
|
300
|
+
metadata,
|
|
301
|
+
rawDocstring: javadoc.content,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
results.push({
|
|
306
|
+
name: 'unknown',
|
|
307
|
+
filePath,
|
|
308
|
+
line: javadoc.startLine,
|
|
309
|
+
column: 1,
|
|
310
|
+
language: 'java',
|
|
311
|
+
entityType: metadata.type,
|
|
312
|
+
metadata,
|
|
313
|
+
rawDocstring: javadoc.content,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return results;
|
|
318
|
+
},
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=java-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-parser.js","sourceRoot":"","sources":["../../src/parsers/java-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CoreMetadata, ExtendedMetadata } from '../types/entity.js';
|
|
2
|
+
export interface ExtractionError {
|
|
3
|
+
readonly message: string;
|
|
4
|
+
readonly line?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ExtractionResult {
|
|
7
|
+
readonly metadata: CoreMetadata | ExtendedMetadata | null;
|
|
8
|
+
readonly errors: readonly ExtractionError[];
|
|
9
|
+
readonly rawYaml: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Extract the YAML content following a @knowgraph marker from a comment block.
|
|
13
|
+
* Returns null if no @knowgraph marker is found.
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractKnowgraphYaml(commentBlock: string): string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Parse YAML string and validate against knowgraph schemas.
|
|
18
|
+
* Tries ExtendedMetadataSchema first, then falls back to CoreMetadataSchema.
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseAndValidateMetadata(yamlString: string, baseLineOffset?: number): ExtractionResult;
|
|
21
|
+
/**
|
|
22
|
+
* Extract and validate @knowgraph metadata from a comment block.
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractMetadata(commentBlock: string, baseLineOffset?: number): ExtractionResult;
|
|
25
|
+
//# sourceMappingURL=metadata-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-extractor.d.ts","sourceRoot":"","sources":["../../src/parsers/metadata-extractor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAC1D,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAwBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBxE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,cAAc,GAAE,MAAU,GACzB,gBAAgB,CAkElB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,cAAc,GAAE,MAAU,GACzB,gBAAgB,CAWlB"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @knowgraph
|
|
3
|
+
* type: module
|
|
4
|
+
* description: Extracts and validates @knowgraph YAML metadata from comment blocks
|
|
5
|
+
* owner: knowgraph-core
|
|
6
|
+
* status: stable
|
|
7
|
+
* tags: [parser, yaml, extraction, metadata]
|
|
8
|
+
* context:
|
|
9
|
+
* business_goal: Transform raw code comments into structured, validated metadata
|
|
10
|
+
* domain: parser-engine
|
|
11
|
+
*/
|
|
12
|
+
import { parse as parseYaml } from 'yaml';
|
|
13
|
+
import { CoreMetadataSchema, ExtendedMetadataSchema } from '../types/entity.js';
|
|
14
|
+
/**
|
|
15
|
+
* Remove common leading whitespace from all non-empty lines.
|
|
16
|
+
*/
|
|
17
|
+
function dedent(text) {
|
|
18
|
+
const lines = text.split('\n');
|
|
19
|
+
const nonEmptyLines = lines.filter((line) => line.trim().length > 0);
|
|
20
|
+
if (nonEmptyLines.length === 0)
|
|
21
|
+
return text;
|
|
22
|
+
const minIndent = Math.min(...nonEmptyLines.map((line) => {
|
|
23
|
+
const match = line.match(/^(\s*)/);
|
|
24
|
+
return match ? match[1].length : 0;
|
|
25
|
+
}));
|
|
26
|
+
if (minIndent === 0)
|
|
27
|
+
return text;
|
|
28
|
+
return lines
|
|
29
|
+
.map((line) => (line.trim().length > 0 ? line.slice(minIndent) : line))
|
|
30
|
+
.join('\n');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Extract the YAML content following a @knowgraph marker from a comment block.
|
|
34
|
+
* Returns null if no @knowgraph marker is found.
|
|
35
|
+
*/
|
|
36
|
+
export function extractKnowgraphYaml(commentBlock) {
|
|
37
|
+
const marker = '@knowgraph';
|
|
38
|
+
const markerIndex = commentBlock.indexOf(marker);
|
|
39
|
+
if (markerIndex === -1) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const afterMarker = commentBlock.slice(markerIndex + marker.length);
|
|
43
|
+
// Strip leading asterisks/hashes from each line (JSDoc or Python comment style)
|
|
44
|
+
const lines = afterMarker.split('\n').map((line) => {
|
|
45
|
+
// Remove leading whitespace + * + optional space (JSDoc style)
|
|
46
|
+
const jsDocStripped = line.replace(/^\s*\*\s?/, '');
|
|
47
|
+
if (jsDocStripped !== line)
|
|
48
|
+
return jsDocStripped;
|
|
49
|
+
// Remove leading whitespace + # + optional space (Python/shell comment style)
|
|
50
|
+
const hashStripped = line.replace(/^\s*#\s?/, '');
|
|
51
|
+
if (hashStripped !== line)
|
|
52
|
+
return hashStripped;
|
|
53
|
+
return line;
|
|
54
|
+
});
|
|
55
|
+
// Dedent to handle indented docstrings (e.g., Python method docstrings)
|
|
56
|
+
// then trim leading/trailing whitespace
|
|
57
|
+
return dedent(lines.join('\n')).trim();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Parse YAML string and validate against knowgraph schemas.
|
|
61
|
+
* Tries ExtendedMetadataSchema first, then falls back to CoreMetadataSchema.
|
|
62
|
+
*/
|
|
63
|
+
export function parseAndValidateMetadata(yamlString, baseLineOffset = 0) {
|
|
64
|
+
if (!yamlString.trim()) {
|
|
65
|
+
return {
|
|
66
|
+
metadata: null,
|
|
67
|
+
errors: [{ message: 'Empty YAML content', line: baseLineOffset }],
|
|
68
|
+
rawYaml: yamlString,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
let parsed;
|
|
72
|
+
try {
|
|
73
|
+
parsed = parseYaml(yamlString);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const message = error instanceof Error ? error.message : 'Invalid YAML';
|
|
77
|
+
return {
|
|
78
|
+
metadata: null,
|
|
79
|
+
errors: [
|
|
80
|
+
{ message: `YAML parse error: ${message}`, line: baseLineOffset },
|
|
81
|
+
],
|
|
82
|
+
rawYaml: yamlString,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (parsed === null || parsed === undefined || typeof parsed !== 'object') {
|
|
86
|
+
return {
|
|
87
|
+
metadata: null,
|
|
88
|
+
errors: [
|
|
89
|
+
{ message: 'YAML did not produce an object', line: baseLineOffset },
|
|
90
|
+
],
|
|
91
|
+
rawYaml: yamlString,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Try extended schema first (superset of core)
|
|
95
|
+
const extendedResult = ExtendedMetadataSchema.safeParse(parsed);
|
|
96
|
+
if (extendedResult.success) {
|
|
97
|
+
return {
|
|
98
|
+
metadata: extendedResult.data,
|
|
99
|
+
errors: [],
|
|
100
|
+
rawYaml: yamlString,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Try core schema
|
|
104
|
+
const coreResult = CoreMetadataSchema.safeParse(parsed);
|
|
105
|
+
if (coreResult.success) {
|
|
106
|
+
return {
|
|
107
|
+
metadata: coreResult.data,
|
|
108
|
+
errors: [],
|
|
109
|
+
rawYaml: yamlString,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Both failed; report errors from extended schema (more informative)
|
|
113
|
+
const errors = extendedResult.error.issues.map((issue) => ({
|
|
114
|
+
message: `Validation error at ${issue.path.join('.')}: ${issue.message}`,
|
|
115
|
+
line: baseLineOffset,
|
|
116
|
+
}));
|
|
117
|
+
return {
|
|
118
|
+
metadata: null,
|
|
119
|
+
errors,
|
|
120
|
+
rawYaml: yamlString,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Extract and validate @knowgraph metadata from a comment block.
|
|
125
|
+
*/
|
|
126
|
+
export function extractMetadata(commentBlock, baseLineOffset = 0) {
|
|
127
|
+
const yamlContent = extractKnowgraphYaml(commentBlock);
|
|
128
|
+
if (yamlContent === null) {
|
|
129
|
+
return {
|
|
130
|
+
metadata: null,
|
|
131
|
+
errors: [],
|
|
132
|
+
rawYaml: '',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return parseAndValidateMetadata(yamlContent, baseLineOffset);
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=metadata-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-extractor.js","sourceRoot":"","sources":["../../src/parsers/metadata-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/python-parser.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA6NzC,wBAAgB,kBAAkB,IAAI,MAAM,CAkE3C"}
|