opencode-rag-plugin 1.0.0 → 1.2.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/ReadMe.md +463 -423
- package/dist/__tests__/chunker/c.test.d.ts +1 -0
- package/dist/__tests__/chunker/c.test.js +82 -0
- package/dist/__tests__/chunker/c.test.js.map +1 -0
- package/dist/__tests__/chunker/cpp.test.d.ts +1 -0
- package/dist/__tests__/chunker/cpp.test.js +96 -0
- package/dist/__tests__/chunker/cpp.test.js.map +1 -0
- package/dist/__tests__/chunker/csharp.test.d.ts +1 -0
- package/dist/__tests__/chunker/csharp.test.js +85 -0
- package/dist/__tests__/chunker/csharp.test.js.map +1 -0
- package/dist/__tests__/chunker/css.test.d.ts +1 -0
- package/dist/__tests__/chunker/css.test.js +64 -0
- package/dist/__tests__/chunker/css.test.js.map +1 -0
- package/dist/__tests__/chunker/factory.test.d.ts +1 -0
- package/dist/__tests__/chunker/factory.test.js +202 -0
- package/dist/__tests__/chunker/factory.test.js.map +1 -0
- package/dist/__tests__/chunker/fallback.test.d.ts +1 -0
- package/dist/__tests__/chunker/fallback.test.js +67 -0
- package/dist/__tests__/chunker/fallback.test.js.map +1 -0
- package/dist/__tests__/chunker/go.test.d.ts +1 -0
- package/dist/__tests__/chunker/go.test.js +90 -0
- package/dist/__tests__/chunker/go.test.js.map +1 -0
- package/dist/__tests__/chunker/grammar.test.d.ts +1 -0
- package/dist/__tests__/chunker/grammar.test.js +108 -0
- package/dist/__tests__/chunker/grammar.test.js.map +1 -0
- package/dist/__tests__/chunker/html.test.d.ts +1 -0
- package/dist/__tests__/chunker/html.test.js +64 -0
- package/dist/__tests__/chunker/html.test.js.map +1 -0
- package/dist/__tests__/chunker/java.test.d.ts +1 -0
- package/dist/__tests__/chunker/java.test.js +83 -0
- package/dist/__tests__/chunker/java.test.js.map +1 -0
- package/dist/__tests__/chunker/javascript.test.d.ts +1 -0
- package/dist/__tests__/chunker/javascript.test.js +88 -0
- package/dist/__tests__/chunker/javascript.test.js.map +1 -0
- package/dist/__tests__/chunker/json.test.d.ts +1 -0
- package/dist/__tests__/chunker/json.test.js +54 -0
- package/dist/__tests__/chunker/json.test.js.map +1 -0
- package/dist/__tests__/chunker/kotlin.test.d.ts +1 -0
- package/dist/__tests__/chunker/kotlin.test.js +42 -0
- package/dist/__tests__/chunker/kotlin.test.js.map +1 -0
- package/dist/__tests__/chunker/markdown.test.d.ts +1 -0
- package/dist/__tests__/chunker/markdown.test.js +76 -0
- package/dist/__tests__/chunker/markdown.test.js.map +1 -0
- package/dist/__tests__/chunker/python.test.d.ts +1 -0
- package/dist/__tests__/chunker/python.test.js +81 -0
- package/dist/__tests__/chunker/python.test.js.map +1 -0
- package/dist/__tests__/chunker/razor.test.d.ts +1 -0
- package/dist/__tests__/chunker/razor.test.js +73 -0
- package/dist/__tests__/chunker/razor.test.js.map +1 -0
- package/dist/__tests__/chunker/register.test.d.ts +1 -0
- package/dist/__tests__/chunker/register.test.js +93 -0
- package/dist/__tests__/chunker/register.test.js.map +1 -0
- package/dist/__tests__/chunker/ruby.test.d.ts +1 -0
- package/dist/__tests__/chunker/ruby.test.js +40 -0
- package/dist/__tests__/chunker/ruby.test.js.map +1 -0
- package/dist/__tests__/chunker/rust.test.d.ts +1 -0
- package/dist/__tests__/chunker/rust.test.js +42 -0
- package/dist/__tests__/chunker/rust.test.js.map +1 -0
- package/dist/__tests__/chunker/sln.test.d.ts +1 -0
- package/dist/__tests__/chunker/sln.test.js +45 -0
- package/dist/__tests__/chunker/sln.test.js.map +1 -0
- package/dist/__tests__/chunker/swift.test.d.ts +1 -0
- package/dist/__tests__/chunker/swift.test.js +49 -0
- package/dist/__tests__/chunker/swift.test.js.map +1 -0
- package/dist/__tests__/chunker/typescript.test.d.ts +1 -0
- package/dist/__tests__/chunker/typescript.test.js +92 -0
- package/dist/__tests__/chunker/typescript.test.js.map +1 -0
- package/dist/__tests__/chunker/uuid.test.d.ts +1 -0
- package/dist/__tests__/chunker/uuid.test.js +19 -0
- package/dist/__tests__/chunker/uuid.test.js.map +1 -0
- package/dist/__tests__/chunker/xml.test.d.ts +1 -0
- package/dist/__tests__/chunker/xml.test.js +50 -0
- package/dist/__tests__/chunker/xml.test.js.map +1 -0
- package/dist/__tests__/core/config.test.d.ts +1 -0
- package/dist/__tests__/core/config.test.js +75 -0
- package/dist/__tests__/core/config.test.js.map +1 -0
- package/dist/__tests__/core/fileLogger.test.d.ts +1 -0
- package/dist/__tests__/core/fileLogger.test.js +34 -0
- package/dist/__tests__/core/fileLogger.test.js.map +1 -0
- package/dist/__tests__/core/manifest.test.d.ts +1 -0
- package/dist/__tests__/core/manifest.test.js +56 -0
- package/dist/__tests__/core/manifest.test.js.map +1 -0
- package/dist/__tests__/embedder/embedBatch.test.d.ts +1 -0
- package/dist/__tests__/embedder/embedBatch.test.js +88 -0
- package/dist/__tests__/embedder/embedBatch.test.js.map +1 -0
- package/dist/__tests__/embedder/factory.test.d.ts +1 -0
- package/dist/__tests__/embedder/factory.test.js +71 -0
- package/dist/__tests__/embedder/factory.test.js.map +1 -0
- package/dist/__tests__/embedder/ollama.test.d.ts +1 -0
- package/dist/__tests__/embedder/ollama.test.js +106 -0
- package/dist/__tests__/embedder/ollama.test.js.map +1 -0
- package/dist/__tests__/embedder/openai.test.d.ts +1 -0
- package/dist/__tests__/embedder/openai.test.js +94 -0
- package/dist/__tests__/embedder/openai.test.js.map +1 -0
- package/dist/__tests__/indexer/indexer.test.d.ts +1 -0
- package/dist/__tests__/indexer/indexer.test.js +176 -0
- package/dist/__tests__/indexer/indexer.test.js.map +1 -0
- package/dist/__tests__/plugin.test.d.ts +1 -0
- package/dist/__tests__/plugin.test.js +77 -0
- package/dist/__tests__/plugin.test.js.map +1 -0
- package/dist/__tests__/retriever/retriever.test.d.ts +1 -0
- package/dist/__tests__/retriever/retriever.test.js +97 -0
- package/dist/__tests__/retriever/retriever.test.js.map +1 -0
- package/dist/__tests__/vectorstore/lancedb.test.d.ts +1 -0
- package/dist/__tests__/vectorstore/lancedb.test.js +159 -0
- package/dist/__tests__/vectorstore/lancedb.test.js.map +1 -0
- package/dist/chunker/doc.d.ts +8 -0
- package/dist/chunker/doc.js +79 -0
- package/dist/chunker/doc.js.map +1 -0
- package/dist/chunker/docx.d.ts +8 -0
- package/dist/chunker/docx.js +78 -0
- package/dist/chunker/docx.js.map +1 -0
- package/dist/chunker/excel.d.ts +8 -0
- package/dist/chunker/excel.js +78 -0
- package/dist/chunker/excel.js.map +1 -0
- package/dist/chunker/factory.d.ts +1 -0
- package/dist/chunker/factory.js +9 -0
- package/dist/chunker/factory.js.map +1 -1
- package/dist/cli.js +272 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.js +6 -1
- package/dist/core/config.js.map +1 -1
- package/dist/indexer.js +18 -0
- package/dist/indexer.js.map +1 -1
- package/dist/opencode/create-read-tool.d.ts +30 -0
- package/dist/opencode/create-read-tool.js +248 -0
- package/dist/opencode/create-read-tool.js.map +1 -0
- package/dist/opencode/read-fallback.d.ts +21 -0
- package/dist/opencode/read-fallback.js +90 -0
- package/dist/opencode/read-fallback.js.map +1 -0
- package/dist/opencode/read-format.d.ts +40 -0
- package/dist/opencode/read-format.js +86 -0
- package/dist/opencode/read-format.js.map +1 -0
- package/dist/opencode/read-query.d.ts +26 -0
- package/dist/opencode/read-query.js +39 -0
- package/dist/opencode/read-query.js.map +1 -0
- package/dist/opencode/tool-args.d.ts +51 -0
- package/dist/opencode/tool-args.js +70 -0
- package/dist/opencode/tool-args.js.map +1 -0
- package/dist/plugin.js +1 -0
- package/dist/plugin.js.map +1 -1
- package/package.json +89 -82
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { jsonChunker } from "../../chunker/json.js";
|
|
4
|
+
describe("JsonChunker", () => {
|
|
5
|
+
it("language is 'json'", () => {
|
|
6
|
+
assert.equal(jsonChunker.language, "json");
|
|
7
|
+
});
|
|
8
|
+
it("fileExtensions includes .json", () => {
|
|
9
|
+
assert.ok(jsonChunker.fileExtensions.includes(".json"));
|
|
10
|
+
assert.equal(jsonChunker.fileExtensions.length, 1);
|
|
11
|
+
});
|
|
12
|
+
it("grammarName is 'json'", () => {
|
|
13
|
+
assert.equal(jsonChunker.grammarName, "json");
|
|
14
|
+
});
|
|
15
|
+
it("nodeTypes contains pair", () => {
|
|
16
|
+
assert.ok(jsonChunker.nodeTypes.has("pair"));
|
|
17
|
+
});
|
|
18
|
+
it("chunk returns empty array for empty content", async () => {
|
|
19
|
+
const chunks = await jsonChunker.chunk("test.json", "");
|
|
20
|
+
assert.deepStrictEqual(chunks, []);
|
|
21
|
+
});
|
|
22
|
+
it("chunk returns empty array for whitespace-only content", async () => {
|
|
23
|
+
const chunks = await jsonChunker.chunk("test.json", " \n ");
|
|
24
|
+
assert.deepStrictEqual(chunks, []);
|
|
25
|
+
});
|
|
26
|
+
it("chunk extracts each pair from a JSON object", async () => {
|
|
27
|
+
const json = JSON.stringify({ name: "test", version: "1.0", private: true }, null, 2);
|
|
28
|
+
const chunks = await jsonChunker.chunk("test.json", json);
|
|
29
|
+
assert.equal(chunks.length, 3);
|
|
30
|
+
assert.ok(chunks[0].content.includes("\"name\""));
|
|
31
|
+
assert.ok(chunks[1].content.includes("\"version\""));
|
|
32
|
+
assert.ok(chunks[2].content.includes("\"private\""));
|
|
33
|
+
});
|
|
34
|
+
it("chunk handles nested objects", async () => {
|
|
35
|
+
const json = JSON.stringify({ scripts: { build: "tsc", test: "jest" }, deps: {} }, null, 2);
|
|
36
|
+
const chunks = await jsonChunker.chunk("test.json", json);
|
|
37
|
+
assert.equal(chunks.length, 2);
|
|
38
|
+
assert.ok(chunks[0].content.includes("\"scripts\""));
|
|
39
|
+
assert.ok(chunks[1].content.includes("\"deps\""));
|
|
40
|
+
});
|
|
41
|
+
it("chunk generates unique IDs", async () => {
|
|
42
|
+
const json = JSON.stringify({ a: 1, b: 2, c: 3 }, null, 2);
|
|
43
|
+
const chunks = await jsonChunker.chunk("test.json", json);
|
|
44
|
+
const ids = chunks.map((c) => c.id);
|
|
45
|
+
assert.equal(new Set(ids).size, ids.length);
|
|
46
|
+
});
|
|
47
|
+
it("chunk sets correct startLine metadata", async () => {
|
|
48
|
+
const json = JSON.stringify({ alpha: 1, beta: 2 }, null, 2);
|
|
49
|
+
const chunks = await jsonChunker.chunk("test.json", json);
|
|
50
|
+
assert.ok(chunks[0].metadata.startLine >= 1);
|
|
51
|
+
assert.ok(chunks[1].metadata.startLine > chunks[0].metadata.startLine);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=json.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/json.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { kotlinChunker } from "../../chunker/kotlin.js";
|
|
4
|
+
describe("KotlinChunker", () => {
|
|
5
|
+
it("language is 'kotlin'", () => {
|
|
6
|
+
assert.equal(kotlinChunker.language, "kotlin");
|
|
7
|
+
});
|
|
8
|
+
it("fileExtensions includes .kt and .kts", () => {
|
|
9
|
+
assert.ok(kotlinChunker.fileExtensions.includes(".kt"));
|
|
10
|
+
assert.ok(kotlinChunker.fileExtensions.includes(".kts"));
|
|
11
|
+
assert.equal(kotlinChunker.fileExtensions.length, 2);
|
|
12
|
+
});
|
|
13
|
+
it("nodeTypes contains function_declaration, class_declaration, interface_declaration, object_declaration, property_declaration", () => {
|
|
14
|
+
assert.ok(kotlinChunker.nodeTypes.has("function_declaration"));
|
|
15
|
+
assert.ok(kotlinChunker.nodeTypes.has("class_declaration"));
|
|
16
|
+
assert.ok(kotlinChunker.nodeTypes.has("interface_declaration"));
|
|
17
|
+
assert.ok(kotlinChunker.nodeTypes.has("object_declaration"));
|
|
18
|
+
assert.ok(kotlinChunker.nodeTypes.has("property_declaration"));
|
|
19
|
+
});
|
|
20
|
+
it("chunk returns empty for empty content", async () => {
|
|
21
|
+
const chunks = await kotlinChunker.chunk("test.kt", "");
|
|
22
|
+
assert.deepStrictEqual(chunks, []);
|
|
23
|
+
});
|
|
24
|
+
it("chunk parses a function definition", async () => {
|
|
25
|
+
const code = "fun greet(name: String): String {\n return \"Hello $name\"\n}";
|
|
26
|
+
const chunks = await kotlinChunker.chunk("test.kt", code);
|
|
27
|
+
assert.equal(chunks.length, 1);
|
|
28
|
+
assert.ok(chunks[0].content.includes("fun greet"));
|
|
29
|
+
});
|
|
30
|
+
it("chunk parses a class definition", async () => {
|
|
31
|
+
const code = "class Point(val x: Double, val y: Double)";
|
|
32
|
+
const chunks = await kotlinChunker.chunk("test.kt", code);
|
|
33
|
+
assert.equal(chunks.length, 1);
|
|
34
|
+
assert.ok(chunks[0].content.includes("class Point"));
|
|
35
|
+
});
|
|
36
|
+
it("chunk generates unique IDs", async () => {
|
|
37
|
+
const code = "fun a() {}\nfun b() {}\nfun c() {}";
|
|
38
|
+
const chunks = await kotlinChunker.chunk("test.kt", code);
|
|
39
|
+
assert.equal(new Set(chunks.map((c) => c.id)).size, chunks.length);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=kotlin.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kotlin.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/kotlin.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { MarkdownChunker } from "../../chunker/markdown.js";
|
|
4
|
+
describe("MarkdownChunker", () => {
|
|
5
|
+
const chunker = new MarkdownChunker();
|
|
6
|
+
it("returns empty array for empty content", async () => {
|
|
7
|
+
const chunks = await chunker.chunk("test.md", "");
|
|
8
|
+
assert.deepStrictEqual(chunks, []);
|
|
9
|
+
});
|
|
10
|
+
it("returns single chunk for content without headings", async () => {
|
|
11
|
+
const chunks = await chunker.chunk("test.md", "Some plain text\nwithout any headings.");
|
|
12
|
+
assert.equal(chunks.length, 1);
|
|
13
|
+
assert.equal(chunks[0].metadata.startLine, 1);
|
|
14
|
+
assert.equal(chunks[0].metadata.endLine, 2);
|
|
15
|
+
assert.equal(chunks[0].content, "Some plain text\nwithout any headings.");
|
|
16
|
+
});
|
|
17
|
+
it("splits on level-1 and level-2 headings", async () => {
|
|
18
|
+
const content = [
|
|
19
|
+
"# Section 1",
|
|
20
|
+
"Content of section 1",
|
|
21
|
+
"",
|
|
22
|
+
"## Section 2",
|
|
23
|
+
"Content of section 2",
|
|
24
|
+
"",
|
|
25
|
+
"# Section 3",
|
|
26
|
+
"Content of section 3",
|
|
27
|
+
].join("\n");
|
|
28
|
+
const chunks = await chunker.chunk("test.md", content);
|
|
29
|
+
assert.ok(chunks.length >= 2, `Expected at least 2 chunks, got ${chunks.length}`);
|
|
30
|
+
});
|
|
31
|
+
it("includes heading text in chunk content", async () => {
|
|
32
|
+
const content = "# Title\nSome content here.";
|
|
33
|
+
const chunks = await chunker.chunk("test.md", content);
|
|
34
|
+
assert.equal(chunks.length, 1);
|
|
35
|
+
assert.ok(chunks[0].content.includes("Title"));
|
|
36
|
+
});
|
|
37
|
+
it("sets markdown language metadata", async () => {
|
|
38
|
+
const chunks = await chunker.chunk("test.md", "# Hello\nWorld");
|
|
39
|
+
assert.equal(chunks[0].metadata.language, "markdown");
|
|
40
|
+
});
|
|
41
|
+
it("sets correct filePath", async () => {
|
|
42
|
+
const chunks = await chunker.chunk("/docs/readme.md", "# Hello\nWorld");
|
|
43
|
+
assert.equal(chunks[0].metadata.filePath, "/docs/readme.md");
|
|
44
|
+
});
|
|
45
|
+
it("handles deep headings (h3+) with end-of-file split", async () => {
|
|
46
|
+
const content = [
|
|
47
|
+
"# Main",
|
|
48
|
+
"main content",
|
|
49
|
+
"### Sub detail",
|
|
50
|
+
"detail content",
|
|
51
|
+
].join("\n");
|
|
52
|
+
const chunks = await chunker.chunk("test.md", content);
|
|
53
|
+
assert.ok(chunks.length >= 1, `Expected at least 1 chunk, got ${chunks.length}`);
|
|
54
|
+
});
|
|
55
|
+
it("generates unique ids for each chunk", async () => {
|
|
56
|
+
const content = [
|
|
57
|
+
"# First",
|
|
58
|
+
"first content",
|
|
59
|
+
"# Second",
|
|
60
|
+
"second content",
|
|
61
|
+
"# Third",
|
|
62
|
+
"third content",
|
|
63
|
+
].join("\n");
|
|
64
|
+
const chunks = await chunker.chunk("test.md", content);
|
|
65
|
+
assert.ok(chunks.length >= 3);
|
|
66
|
+
const ids = new Set(chunks.map((c) => c.id));
|
|
67
|
+
assert.equal(ids.size, chunks.length);
|
|
68
|
+
});
|
|
69
|
+
it("language property returns 'markdown'", () => {
|
|
70
|
+
assert.equal(chunker.language, "markdown");
|
|
71
|
+
});
|
|
72
|
+
it("fileExtensions includes .md and .mdx", () => {
|
|
73
|
+
assert.deepStrictEqual(chunker.fileExtensions, [".md", ".mdx"]);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=markdown.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/markdown.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { pythonChunker } from "../../chunker/python.js";
|
|
4
|
+
describe("PythonChunker", () => {
|
|
5
|
+
it("language is 'python'", () => {
|
|
6
|
+
assert.equal(pythonChunker.language, "python");
|
|
7
|
+
});
|
|
8
|
+
it("fileExtensions includes .py", () => {
|
|
9
|
+
assert.ok(pythonChunker.fileExtensions.includes(".py"));
|
|
10
|
+
});
|
|
11
|
+
it("grammarName is 'python'", () => {
|
|
12
|
+
assert.equal(pythonChunker.grammarName, "python");
|
|
13
|
+
});
|
|
14
|
+
it("nodeTypes contains expected types", () => {
|
|
15
|
+
const types = pythonChunker.nodeTypes;
|
|
16
|
+
assert.ok(types.has("function_definition"));
|
|
17
|
+
assert.ok(types.has("class_definition"));
|
|
18
|
+
assert.ok(types.has("decorated_definition"));
|
|
19
|
+
});
|
|
20
|
+
it("chunk returns empty array for empty content", async () => {
|
|
21
|
+
const chunks = await pythonChunker.chunk("test.py", "");
|
|
22
|
+
assert.deepStrictEqual(chunks, []);
|
|
23
|
+
});
|
|
24
|
+
it("chunk returns empty array for whitespace-only content", async () => {
|
|
25
|
+
const chunks = await pythonChunker.chunk("test.py", " \n \n ");
|
|
26
|
+
assert.deepStrictEqual(chunks, []);
|
|
27
|
+
});
|
|
28
|
+
it("chunk parses a function definition", async () => {
|
|
29
|
+
const code = "def hello():\n return 'world'\n";
|
|
30
|
+
const chunks = await pythonChunker.chunk("test.py", code);
|
|
31
|
+
assert.ok(chunks.length > 0, "expected at least one chunk");
|
|
32
|
+
assert.equal(chunks[0].metadata.language, "python");
|
|
33
|
+
assert.equal(chunks[0].metadata.filePath, "test.py");
|
|
34
|
+
assert.ok(chunks[0].content.includes("hello"));
|
|
35
|
+
});
|
|
36
|
+
it("chunk parses a class definition", async () => {
|
|
37
|
+
const code = "class Animal:\n def speak(self):\n return 'hello'\n";
|
|
38
|
+
const chunks = await pythonChunker.chunk("animals.py", code);
|
|
39
|
+
assert.ok(chunks.length > 0, "expected at least one chunk");
|
|
40
|
+
assert.equal(chunks[0].metadata.language, "python");
|
|
41
|
+
assert.ok(chunks[0].content.includes("class Animal"));
|
|
42
|
+
});
|
|
43
|
+
it("chunk parses a decorated definition", async () => {
|
|
44
|
+
const code = "@staticmethod\ndef helper():\n pass\n";
|
|
45
|
+
const chunks = await pythonChunker.chunk("utils.py", code);
|
|
46
|
+
assert.ok(chunks.length > 0, "expected at least one chunk");
|
|
47
|
+
assert.ok(chunks.some((c) => c.content.includes("@staticmethod") || c.content.includes("helper")));
|
|
48
|
+
});
|
|
49
|
+
it("chunk generates unique IDs for multiple definitions", async () => {
|
|
50
|
+
const code = [
|
|
51
|
+
"def foo():",
|
|
52
|
+
" pass",
|
|
53
|
+
"",
|
|
54
|
+
"def bar():",
|
|
55
|
+
" pass",
|
|
56
|
+
"",
|
|
57
|
+
"class Baz:",
|
|
58
|
+
" pass",
|
|
59
|
+
].join("\n");
|
|
60
|
+
const chunks = await pythonChunker.chunk("multi.py", code);
|
|
61
|
+
const ids = new Set(chunks.map((c) => c.id));
|
|
62
|
+
assert.equal(ids.size, chunks.length);
|
|
63
|
+
});
|
|
64
|
+
it("chunk sets correct startLine metadata", async () => {
|
|
65
|
+
const code = [
|
|
66
|
+
"# top comment",
|
|
67
|
+
"",
|
|
68
|
+
"def first():",
|
|
69
|
+
" return 1",
|
|
70
|
+
"",
|
|
71
|
+
"def second():",
|
|
72
|
+
" return 2",
|
|
73
|
+
].join("\n");
|
|
74
|
+
const chunks = await pythonChunker.chunk("lines.py", code);
|
|
75
|
+
assert.ok(chunks.length >= 2, "expected at least two chunks");
|
|
76
|
+
const firstFn = chunks.find((c) => c.content.includes("first"));
|
|
77
|
+
assert.ok(firstFn, "should find first() chunk");
|
|
78
|
+
assert.equal(firstFn.metadata.startLine, 3);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=python.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/python.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { razorChunker } from "../../chunker/razor.js";
|
|
4
|
+
describe("RazorChunker", () => {
|
|
5
|
+
it("language is 'razor'", () => {
|
|
6
|
+
assert.equal(razorChunker.language, "razor");
|
|
7
|
+
});
|
|
8
|
+
it("fileExtensions includes .razor and .cshtml", () => {
|
|
9
|
+
assert.ok(razorChunker.fileExtensions.includes(".razor"));
|
|
10
|
+
assert.ok(razorChunker.fileExtensions.includes(".cshtml"));
|
|
11
|
+
});
|
|
12
|
+
it("chunk returns empty array for empty content", async () => {
|
|
13
|
+
const chunks = await razorChunker.chunk("test.razor", "");
|
|
14
|
+
assert.deepStrictEqual(chunks, []);
|
|
15
|
+
});
|
|
16
|
+
it("returns single chunk for content without code blocks", async () => {
|
|
17
|
+
const code = "<h1>Hello</h1>\n<p>Welcome</p>";
|
|
18
|
+
const chunks = await razorChunker.chunk("page.razor", code);
|
|
19
|
+
assert.equal(chunks.length, 1);
|
|
20
|
+
assert.equal(chunks[0].metadata.language, "razor");
|
|
21
|
+
});
|
|
22
|
+
it("splits on @code block boundaries", async () => {
|
|
23
|
+
const template = "<h1>Counter</h1>\n<button>Click</button>\n";
|
|
24
|
+
const code = '@code {\n private int count = 0;\n void Inc() { count++; }\n}\n';
|
|
25
|
+
const chunks = await razorChunker.chunk("counter.razor", template + code);
|
|
26
|
+
assert.equal(chunks.length, 2, "expected template + code block");
|
|
27
|
+
assert.ok(chunks.some((c) => c.content.includes("@code")), "expected @code block");
|
|
28
|
+
assert.ok(chunks.some((c) => c.content.includes("<h1>")), "expected template chunk");
|
|
29
|
+
});
|
|
30
|
+
it("handles @functions blocks", async () => {
|
|
31
|
+
const content = "@functions {\n void Foo() { }\n}\n";
|
|
32
|
+
const chunks = await razorChunker.chunk("fn.cshtml", content);
|
|
33
|
+
assert.equal(chunks.length, 1);
|
|
34
|
+
assert.ok(chunks[0].content.includes("@functions"));
|
|
35
|
+
});
|
|
36
|
+
it("handles multiple code blocks", async () => {
|
|
37
|
+
const content = [
|
|
38
|
+
"<h1>Title</h1>",
|
|
39
|
+
"@code { int x = 1; }",
|
|
40
|
+
"<p>Body</p>",
|
|
41
|
+
"@code { int y = 2; }",
|
|
42
|
+
].join("\n");
|
|
43
|
+
const chunks = await razorChunker.chunk("multi.razor", content);
|
|
44
|
+
assert.equal(chunks.length, 4, "expected 2 templates + 2 code blocks");
|
|
45
|
+
});
|
|
46
|
+
it("sets correct startLine and endLine metadata", async () => {
|
|
47
|
+
const content = [
|
|
48
|
+
"<h1>Title</h1>",
|
|
49
|
+
"<p>intro</p>",
|
|
50
|
+
'@code {',
|
|
51
|
+
' void Foo() { }',
|
|
52
|
+
'}',
|
|
53
|
+
"<p>outro</p>",
|
|
54
|
+
].join("\n");
|
|
55
|
+
const chunks = await razorChunker.chunk("lines.razor", content);
|
|
56
|
+
const codeChunk = chunks.find((c) => c.content.includes("@code"));
|
|
57
|
+
assert.ok(codeChunk, "expected @code chunk");
|
|
58
|
+
assert.equal(codeChunk.metadata.startLine, 3);
|
|
59
|
+
assert.equal(codeChunk.metadata.endLine, 5);
|
|
60
|
+
});
|
|
61
|
+
it("generates unique ids for each chunk", async () => {
|
|
62
|
+
const content = [
|
|
63
|
+
"<h1>Title</h1>",
|
|
64
|
+
'@code { int a = 1; }',
|
|
65
|
+
"<p>Body</p>",
|
|
66
|
+
'@code { int b = 2; }',
|
|
67
|
+
].join("\n");
|
|
68
|
+
const chunks = await razorChunker.chunk("ids.razor", content);
|
|
69
|
+
const ids = new Set(chunks.map((c) => c.id));
|
|
70
|
+
assert.equal(ids.size, chunks.length);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=razor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"razor.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/razor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { registerChunker, getChunker } from "../../chunker/factory.js";
|
|
4
|
+
import { loadChunkersFromConfig } from "../../chunker/loader.js";
|
|
5
|
+
describe("registerChunker", () => {
|
|
6
|
+
const testChunker = {
|
|
7
|
+
language: "test",
|
|
8
|
+
fileExtensions: [".xyz"],
|
|
9
|
+
chunk: async (_path, content) => {
|
|
10
|
+
return [{ id: "1", content, metadata: { filePath: _path, startLine: 1, endLine: 1, language: "test" } }];
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
it("registers a chunker for new extensions", () => {
|
|
14
|
+
registerChunker(testChunker, [".xyz"]);
|
|
15
|
+
const chunker = getChunker("file.xyz");
|
|
16
|
+
assert.equal(chunker.language, "test");
|
|
17
|
+
});
|
|
18
|
+
it("uses fileExtensions from chunker when no extensions arg given", () => {
|
|
19
|
+
const autoChunker = {
|
|
20
|
+
language: "auto",
|
|
21
|
+
fileExtensions: [".abc"],
|
|
22
|
+
chunk: async (_path, content) => {
|
|
23
|
+
return [{ id: "1", content, metadata: { filePath: _path, startLine: 1, endLine: 1, language: "auto" } }];
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
registerChunker(autoChunker);
|
|
27
|
+
const chunker = getChunker("file.abc");
|
|
28
|
+
assert.equal(chunker.language, "auto");
|
|
29
|
+
});
|
|
30
|
+
it("warns and skips when extension already registered", () => {
|
|
31
|
+
const warnings = [];
|
|
32
|
+
const origWarn = console.warn;
|
|
33
|
+
console.warn = (msg) => { warnings.push(msg); };
|
|
34
|
+
try {
|
|
35
|
+
const existing = getChunker("file.ts");
|
|
36
|
+
assert.ok(existing, "TypeScript chunker should exist");
|
|
37
|
+
const overrideChunker = {
|
|
38
|
+
language: "override",
|
|
39
|
+
fileExtensions: [".ts"],
|
|
40
|
+
chunk: async () => [],
|
|
41
|
+
};
|
|
42
|
+
registerChunker(overrideChunker, [".ts"]);
|
|
43
|
+
assert.ok(warnings.some((w) => w.includes("already registered")), "expected warning");
|
|
44
|
+
const stillExisting = getChunker("file.ts");
|
|
45
|
+
assert.equal(stillExisting.language, "typescript", "existing chunker should be preserved");
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
console.warn = origWarn;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe("loadChunkersFromConfig", () => {
|
|
53
|
+
it("does nothing when chunkers array is empty", async () => {
|
|
54
|
+
await loadChunkersFromConfig({ chunkers: [] }, "/tmp");
|
|
55
|
+
// no crash = pass
|
|
56
|
+
});
|
|
57
|
+
it("does nothing when chunkers is undefined", async () => {
|
|
58
|
+
await loadChunkersFromConfig({}, "/tmp");
|
|
59
|
+
// no crash = pass
|
|
60
|
+
});
|
|
61
|
+
it("warns when module path does not exist", async () => {
|
|
62
|
+
const warnings = [];
|
|
63
|
+
const origWarn = console.warn;
|
|
64
|
+
console.warn = (msg) => { warnings.push(msg); };
|
|
65
|
+
try {
|
|
66
|
+
await loadChunkersFromConfig({ chunkers: [{ module: "./nonexistent.js", extensions: [".zzz"] }] }, "/tmp");
|
|
67
|
+
assert.ok(warnings.length > 0, "expected warning about failed load");
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
console.warn = origWarn;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
it("warns when module does not export a valid Chunker", async () => {
|
|
74
|
+
const fs = await import("node:fs/promises");
|
|
75
|
+
const pathMod = await import("node:path");
|
|
76
|
+
const os = await import("node:os");
|
|
77
|
+
const tmpDir = await fs.mkdtemp(pathMod.join(os.tmpdir(), "chunker-test-"));
|
|
78
|
+
const moduleName = "invalid.mjs";
|
|
79
|
+
await fs.writeFile(pathMod.join(tmpDir, moduleName), "export const foo = 42;\n");
|
|
80
|
+
const warnings = [];
|
|
81
|
+
const origWarn = console.warn;
|
|
82
|
+
console.warn = (msg) => { warnings.push(msg); };
|
|
83
|
+
try {
|
|
84
|
+
await loadChunkersFromConfig({ chunkers: [{ module: moduleName, extensions: [".inv"] }] }, tmpDir);
|
|
85
|
+
assert.ok(warnings.some((w) => w.includes("no .chunk()")), "expected warning about missing chunk method");
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
console.warn = origWarn;
|
|
89
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=register.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/register.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { rubyChunker } from "../../chunker/ruby.js";
|
|
4
|
+
describe("RubyChunker", () => {
|
|
5
|
+
it("language is 'ruby'", () => {
|
|
6
|
+
assert.equal(rubyChunker.language, "ruby");
|
|
7
|
+
});
|
|
8
|
+
it("fileExtensions includes .rb", () => {
|
|
9
|
+
assert.ok(rubyChunker.fileExtensions.includes(".rb"));
|
|
10
|
+
assert.equal(rubyChunker.fileExtensions.length, 1);
|
|
11
|
+
});
|
|
12
|
+
it("nodeTypes contains method, class, module, singleton_method", () => {
|
|
13
|
+
assert.ok(rubyChunker.nodeTypes.has("method"));
|
|
14
|
+
assert.ok(rubyChunker.nodeTypes.has("class"));
|
|
15
|
+
assert.ok(rubyChunker.nodeTypes.has("module"));
|
|
16
|
+
assert.ok(rubyChunker.nodeTypes.has("singleton_method"));
|
|
17
|
+
});
|
|
18
|
+
it("chunk returns empty for empty content", async () => {
|
|
19
|
+
const chunks = await rubyChunker.chunk("test.rb", "");
|
|
20
|
+
assert.deepStrictEqual(chunks, []);
|
|
21
|
+
});
|
|
22
|
+
it("chunk parses a method definition", async () => {
|
|
23
|
+
const code = "def greet(name)\n \"Hello #{name}\"\nend";
|
|
24
|
+
const chunks = await rubyChunker.chunk("test.rb", code);
|
|
25
|
+
assert.equal(chunks.length, 1);
|
|
26
|
+
assert.ok(chunks[0].content.includes("def greet"));
|
|
27
|
+
});
|
|
28
|
+
it("chunk parses a class definition", async () => {
|
|
29
|
+
const code = "class Point\n attr_accessor :x, :y\nend";
|
|
30
|
+
const chunks = await rubyChunker.chunk("test.rb", code);
|
|
31
|
+
assert.equal(chunks.length, 1);
|
|
32
|
+
assert.ok(chunks[0].content.includes("class Point"));
|
|
33
|
+
});
|
|
34
|
+
it("chunk generates unique IDs", async () => {
|
|
35
|
+
const code = "def a; end\ndef b; end\ndef c; end";
|
|
36
|
+
const chunks = await rubyChunker.chunk("test.rb", code);
|
|
37
|
+
assert.equal(new Set(chunks.map((c) => c.id)).size, chunks.length);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=ruby.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruby.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/ruby.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { rustChunker } from "../../chunker/rust.js";
|
|
4
|
+
describe("RustChunker", () => {
|
|
5
|
+
it("language is 'rust'", () => {
|
|
6
|
+
assert.equal(rustChunker.language, "rust");
|
|
7
|
+
});
|
|
8
|
+
it("fileExtensions includes .rs", () => {
|
|
9
|
+
assert.ok(rustChunker.fileExtensions.includes(".rs"));
|
|
10
|
+
assert.equal(rustChunker.fileExtensions.length, 1);
|
|
11
|
+
});
|
|
12
|
+
it("nodeTypes contains function_item, struct_item, enum_item, trait_item, impl_item, mod_item", () => {
|
|
13
|
+
assert.ok(rustChunker.nodeTypes.has("function_item"));
|
|
14
|
+
assert.ok(rustChunker.nodeTypes.has("struct_item"));
|
|
15
|
+
assert.ok(rustChunker.nodeTypes.has("enum_item"));
|
|
16
|
+
assert.ok(rustChunker.nodeTypes.has("trait_item"));
|
|
17
|
+
assert.ok(rustChunker.nodeTypes.has("impl_item"));
|
|
18
|
+
assert.ok(rustChunker.nodeTypes.has("type_item"));
|
|
19
|
+
});
|
|
20
|
+
it("chunk returns empty for empty content", async () => {
|
|
21
|
+
const chunks = await rustChunker.chunk("test.rs", "");
|
|
22
|
+
assert.deepStrictEqual(chunks, []);
|
|
23
|
+
});
|
|
24
|
+
it("chunk parses a function definition", async () => {
|
|
25
|
+
const code = "fn greet(name: &str) -> String {\n format!(\"Hello {}\", name)\n}";
|
|
26
|
+
const chunks = await rustChunker.chunk("test.rs", code);
|
|
27
|
+
assert.equal(chunks.length, 1);
|
|
28
|
+
assert.ok(chunks[0].content.includes("fn greet"));
|
|
29
|
+
});
|
|
30
|
+
it("chunk parses a struct definition", async () => {
|
|
31
|
+
const code = "struct Point {\n x: f64,\n y: f64,\n}";
|
|
32
|
+
const chunks = await rustChunker.chunk("test.rs", code);
|
|
33
|
+
assert.equal(chunks.length, 1);
|
|
34
|
+
assert.ok(chunks[0].content.includes("struct Point"));
|
|
35
|
+
});
|
|
36
|
+
it("chunk generates unique IDs", async () => {
|
|
37
|
+
const code = "fn a() {}\nfn b() {}\nfn c() {}";
|
|
38
|
+
const chunks = await rustChunker.chunk("test.rs", code);
|
|
39
|
+
assert.equal(new Set(chunks.map((c) => c.id)).size, chunks.length);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=rust.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/rust.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|