@archkit/graph 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.
- package/LICENSE +21 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/models/architecture-graph.d.ts +14 -0
- package/dist/models/architecture-graph.d.ts.map +1 -0
- package/dist/models/architecture-graph.js +40 -0
- package/dist/models/architecture-graph.js.map +1 -0
- package/dist/models/deps-types.d.ts +8 -0
- package/dist/models/deps-types.d.ts.map +1 -0
- package/dist/models/deps-types.js +3 -0
- package/dist/models/deps-types.js.map +1 -0
- package/dist/models/knowledge-types.d.ts +26 -0
- package/dist/models/knowledge-types.d.ts.map +1 -0
- package/dist/models/knowledge-types.js +11 -0
- package/dist/models/knowledge-types.js.map +1 -0
- package/dist/models/persist-types.d.ts +7 -0
- package/dist/models/persist-types.d.ts.map +1 -0
- package/dist/models/persist-types.js +3 -0
- package/dist/models/persist-types.js.map +1 -0
- package/dist/models/query-types.d.ts +14 -0
- package/dist/models/query-types.d.ts.map +1 -0
- package/dist/models/query-types.js +3 -0
- package/dist/models/query-types.js.map +1 -0
- package/dist/services/deps-query.d.ts +4 -0
- package/dist/services/deps-query.d.ts.map +1 -0
- package/dist/services/deps-query.js +79 -0
- package/dist/services/deps-query.js.map +1 -0
- package/dist/services/graph-meta.d.ts +3 -0
- package/dist/services/graph-meta.d.ts.map +1 -0
- package/dist/services/graph-meta.js +29 -0
- package/dist/services/graph-meta.js.map +1 -0
- package/dist/services/graph-storage.d.ts +5 -0
- package/dist/services/graph-storage.d.ts.map +1 -0
- package/dist/services/graph-storage.js +40 -0
- package/dist/services/graph-storage.js.map +1 -0
- package/dist/services/indexes.d.ts +4 -0
- package/dist/services/indexes.d.ts.map +1 -0
- package/dist/services/indexes.js +31 -0
- package/dist/services/indexes.js.map +1 -0
- package/dist/services/knowledge-storage.d.ts +6 -0
- package/dist/services/knowledge-storage.d.ts.map +1 -0
- package/dist/services/knowledge-storage.js +130 -0
- package/dist/services/knowledge-storage.js.map +1 -0
- package/dist/services/persisted-read.d.ts +5 -0
- package/dist/services/persisted-read.d.ts.map +1 -0
- package/dist/services/persisted-read.js +33 -0
- package/dist/services/persisted-read.js.map +1 -0
- package/dist/services/snippet.d.ts +3 -0
- package/dist/services/snippet.d.ts.map +1 -0
- package/dist/services/snippet.js +17 -0
- package/dist/services/snippet.js.map +1 -0
- package/dist/services/symbol-query.d.ts +4 -0
- package/dist/services/symbol-query.d.ts.map +1 -0
- package/dist/services/symbol-query.js +57 -0
- package/dist/services/symbol-query.js.map +1 -0
- package/dist/utils/jsonl.d.ts +2 -0
- package/dist/utils/jsonl.d.ts.map +1 -0
- package/dist/utils/jsonl.js +10 -0
- package/dist/utils/jsonl.js.map +1 -0
- package/dist/utils/knowledge-utils.d.ts +11 -0
- package/dist/utils/knowledge-utils.d.ts.map +1 -0
- package/dist/utils/knowledge-utils.js +174 -0
- package/dist/utils/knowledge-utils.js.map +1 -0
- package/dist/utils/sort-utils.d.ts +4 -0
- package/dist/utils/sort-utils.d.ts.map +1 -0
- package/dist/utils/sort-utils.js +15 -0
- package/dist/utils/sort-utils.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSymbolsIndex = createSymbolsIndex;
|
|
4
|
+
exports.createFilesIndex = createFilesIndex;
|
|
5
|
+
function createSymbolsIndex(nodes) {
|
|
6
|
+
const symbolMap = new Map();
|
|
7
|
+
nodes
|
|
8
|
+
.filter((node) => node.type !== 'file')
|
|
9
|
+
.forEach((node) => {
|
|
10
|
+
const existing = symbolMap.get(node.name);
|
|
11
|
+
if (existing) {
|
|
12
|
+
existing.push(node.id);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
symbolMap.set(node.name, [node.id]);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
const sortedNames = [...symbolMap.keys()].sort((left, right) => left.localeCompare(right));
|
|
19
|
+
return sortedNames.reduce((accumulator, name) => {
|
|
20
|
+
const values = symbolMap.get(name) ?? [];
|
|
21
|
+
accumulator[name] = [...values].sort((left, right) => left.localeCompare(right));
|
|
22
|
+
return accumulator;
|
|
23
|
+
}, {});
|
|
24
|
+
}
|
|
25
|
+
function createFilesIndex(nodes) {
|
|
26
|
+
return nodes
|
|
27
|
+
.filter((node) => node.type === 'file')
|
|
28
|
+
.map((node) => node.filePath)
|
|
29
|
+
.sort((left, right) => left.localeCompare(right));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=indexes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/services/indexes.ts"],"names":[],"mappings":";;AAEA,gDAuBC;AAED,4CAKC;AA9BD,SAAgB,kBAAkB,CAAC,KAAiB;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE7C,KAAK;SACF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC1B,CAAA;IAED,OAAO,WAAW,CAAC,MAAM,CAA2B,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACxC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;QAChF,OAAO,WAAW,CAAA;IACpB,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAiB;IAChD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AddKnowledgeInput, KnowledgeEntry, KnowledgeEntrySummary } from '../models/knowledge-types';
|
|
2
|
+
export declare function addKnowledgeEntry(rootDir: string, input: AddKnowledgeInput): Promise<KnowledgeEntry>;
|
|
3
|
+
export declare function listKnowledgeEntries(rootDir: string): Promise<KnowledgeEntrySummary[]>;
|
|
4
|
+
export declare function getKnowledgeEntry(rootDir: string, id: string): Promise<KnowledgeEntry | undefined>;
|
|
5
|
+
export declare function searchKnowledgeEntries(rootDir: string, query: string): Promise<KnowledgeEntrySummary[]>;
|
|
6
|
+
//# sourceMappingURL=knowledge-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-storage.d.ts","sourceRoot":"","sources":["../../src/services/knowledge-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAkB,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAoEzH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,cAAc,CAAC,CAkCzB;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAG5F;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAYrC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAqClC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addKnowledgeEntry = addKnowledgeEntry;
|
|
7
|
+
exports.listKnowledgeEntries = listKnowledgeEntries;
|
|
8
|
+
exports.getKnowledgeEntry = getKnowledgeEntry;
|
|
9
|
+
exports.searchKnowledgeEntries = searchKnowledgeEntries;
|
|
10
|
+
const promises_1 = require("node:fs/promises");
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
const knowledge_utils_1 = require("../utils/knowledge-utils");
|
|
13
|
+
function sortSummaries(entries) {
|
|
14
|
+
return [...entries].sort((left, right) => {
|
|
15
|
+
const leftKey = `${left.feature}:${left.id}`;
|
|
16
|
+
const rightKey = `${right.feature}:${right.id}`;
|
|
17
|
+
return leftKey.localeCompare(rightKey);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function sortEntries(entries) {
|
|
21
|
+
return [...entries].sort((left, right) => {
|
|
22
|
+
const leftKey = `${left.feature}:${left.id}`;
|
|
23
|
+
const rightKey = `${right.feature}:${right.id}`;
|
|
24
|
+
return leftKey.localeCompare(rightKey);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function toKnowledgePaths(rootDir) {
|
|
28
|
+
const knowledgeDir = node_path_1.default.join(rootDir, '.arch', 'knowledge');
|
|
29
|
+
return {
|
|
30
|
+
knowledgeDir,
|
|
31
|
+
entriesDir: node_path_1.default.join(knowledgeDir, 'entries'),
|
|
32
|
+
indexPath: node_path_1.default.join(knowledgeDir, 'index.json'),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async function readIndexOrEmpty(rootDir) {
|
|
36
|
+
const { indexPath } = toKnowledgePaths(rootDir);
|
|
37
|
+
try {
|
|
38
|
+
const content = await (0, promises_1.readFile)(indexPath, 'utf-8');
|
|
39
|
+
const parsed = JSON.parse(content);
|
|
40
|
+
if (!Array.isArray(parsed.entries)) {
|
|
41
|
+
return { entries: [] };
|
|
42
|
+
}
|
|
43
|
+
return { entries: sortSummaries(parsed.entries) };
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (!isMissingFileError(error)) {
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
return { entries: [] };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function writeIndex(rootDir, index) {
|
|
53
|
+
const { knowledgeDir, indexPath } = toKnowledgePaths(rootDir);
|
|
54
|
+
await (0, promises_1.mkdir)(knowledgeDir, { recursive: true });
|
|
55
|
+
const sorted = {
|
|
56
|
+
entries: sortSummaries(index.entries),
|
|
57
|
+
};
|
|
58
|
+
await (0, promises_1.writeFile)(indexPath, `${JSON.stringify(sorted, null, 2)}\n`, 'utf-8');
|
|
59
|
+
}
|
|
60
|
+
async function addKnowledgeEntry(rootDir, input) {
|
|
61
|
+
const normalized = (0, knowledge_utils_1.normalizeAddInput)(input);
|
|
62
|
+
const index = await readIndexOrEmpty(rootDir);
|
|
63
|
+
if (index.entries.some((entry) => entry.id === normalized.id)) {
|
|
64
|
+
throw new Error(`Knowledge entry already exists: ${normalized.id}`);
|
|
65
|
+
}
|
|
66
|
+
const relativeFile = (0, knowledge_utils_1.toEntryRelativeFile)(normalized.feature, normalized.createdAt, normalized.id);
|
|
67
|
+
const entry = {
|
|
68
|
+
...normalized,
|
|
69
|
+
file: relativeFile,
|
|
70
|
+
};
|
|
71
|
+
const { knowledgeDir, entriesDir } = toKnowledgePaths(rootDir);
|
|
72
|
+
await (0, promises_1.mkdir)(knowledgeDir, { recursive: true });
|
|
73
|
+
await (0, promises_1.mkdir)(node_path_1.default.join(entriesDir, normalized.feature), { recursive: true });
|
|
74
|
+
await (0, promises_1.writeFile)(node_path_1.default.join(knowledgeDir, relativeFile), (0, knowledge_utils_1.serializeKnowledgeEntry)(entry), 'utf-8');
|
|
75
|
+
await writeIndex(rootDir, {
|
|
76
|
+
entries: [...index.entries, (0, knowledge_utils_1.toSummary)(entry)],
|
|
77
|
+
});
|
|
78
|
+
return entry;
|
|
79
|
+
}
|
|
80
|
+
async function listKnowledgeEntries(rootDir) {
|
|
81
|
+
const index = await readIndexOrEmpty(rootDir);
|
|
82
|
+
return sortSummaries(index.entries);
|
|
83
|
+
}
|
|
84
|
+
async function getKnowledgeEntry(rootDir, id) {
|
|
85
|
+
const normalizedId = id.trim().toLocaleLowerCase();
|
|
86
|
+
const index = await readIndexOrEmpty(rootDir);
|
|
87
|
+
const found = index.entries.find((entry) => entry.id === normalizedId);
|
|
88
|
+
if (!found) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const { knowledgeDir } = toKnowledgePaths(rootDir);
|
|
92
|
+
const content = await (0, promises_1.readFile)(node_path_1.default.join(knowledgeDir, found.file), 'utf-8');
|
|
93
|
+
return (0, knowledge_utils_1.parseKnowledgeEntry)(content, found.file);
|
|
94
|
+
}
|
|
95
|
+
async function searchKnowledgeEntries(rootDir, query) {
|
|
96
|
+
const normalizedQuery = query.trim().toLocaleLowerCase();
|
|
97
|
+
if (normalizedQuery.length === 0) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
const index = await readIndexOrEmpty(rootDir);
|
|
101
|
+
const { knowledgeDir } = toKnowledgePaths(rootDir);
|
|
102
|
+
const loadedEntries = await Promise.all(index.entries.map(async (summary) => {
|
|
103
|
+
const content = await (0, promises_1.readFile)(node_path_1.default.join(knowledgeDir, summary.file), 'utf-8');
|
|
104
|
+
return (0, knowledge_utils_1.parseKnowledgeEntry)(content, summary.file);
|
|
105
|
+
}));
|
|
106
|
+
const matches = loadedEntries.filter((entry) => {
|
|
107
|
+
if (entry.id.toLocaleLowerCase().includes(normalizedQuery)) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
if (entry.title.toLocaleLowerCase().includes(normalizedQuery)) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
if (entry.feature.toLocaleLowerCase().includes(normalizedQuery)) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
if (entry.body.toLocaleLowerCase().includes(normalizedQuery)) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return entry.tags.some((tag) => tag.toLocaleLowerCase().includes(normalizedQuery));
|
|
120
|
+
});
|
|
121
|
+
return sortEntries(matches).map(knowledge_utils_1.toSummary);
|
|
122
|
+
}
|
|
123
|
+
function isMissingFileError(error) {
|
|
124
|
+
if (typeof error !== 'object' || error === null) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
const withCode = error;
|
|
128
|
+
return withCode.code === 'ENOENT';
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=knowledge-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-storage.js","sourceRoot":"","sources":["../../src/services/knowledge-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ArchEdge, ArchNode } from '@archkit/core';
|
|
2
|
+
export declare function readPersistedNodes(rootDir: string): Promise<ArchNode[]>;
|
|
3
|
+
export declare function readPersistedEdges(rootDir: string): Promise<ArchEdge[]>;
|
|
4
|
+
export declare function readPersistedSymbolsIndex(rootDir: string): Promise<Record<string, string[]>>;
|
|
5
|
+
//# sourceMappingURL=persisted-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persisted-read.d.ts","sourceRoot":"","sources":["../../src/services/persisted-read.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAUvD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAI7E;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAI7E;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAInC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.readPersistedNodes = readPersistedNodes;
|
|
7
|
+
exports.readPersistedEdges = readPersistedEdges;
|
|
8
|
+
exports.readPersistedSymbolsIndex = readPersistedSymbolsIndex;
|
|
9
|
+
const promises_1 = require("node:fs/promises");
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
function parseJsonl(content) {
|
|
12
|
+
return content
|
|
13
|
+
.split('\n')
|
|
14
|
+
.map((line) => line.trim())
|
|
15
|
+
.filter((line) => line.length > 0)
|
|
16
|
+
.map((line) => JSON.parse(line));
|
|
17
|
+
}
|
|
18
|
+
async function readPersistedNodes(rootDir) {
|
|
19
|
+
const nodesPath = node_path_1.default.join(rootDir, '.arch', 'graph', 'nodes.jsonl');
|
|
20
|
+
const content = await (0, promises_1.readFile)(nodesPath, 'utf-8');
|
|
21
|
+
return parseJsonl(content);
|
|
22
|
+
}
|
|
23
|
+
async function readPersistedEdges(rootDir) {
|
|
24
|
+
const edgesPath = node_path_1.default.join(rootDir, '.arch', 'graph', 'edges.jsonl');
|
|
25
|
+
const content = await (0, promises_1.readFile)(edgesPath, 'utf-8');
|
|
26
|
+
return parseJsonl(content);
|
|
27
|
+
}
|
|
28
|
+
async function readPersistedSymbolsIndex(rootDir) {
|
|
29
|
+
const symbolsPath = node_path_1.default.join(rootDir, '.arch', 'index', 'symbols.json');
|
|
30
|
+
const content = await (0, promises_1.readFile)(symbolsPath, 'utf-8');
|
|
31
|
+
return JSON.parse(content);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=persisted-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persisted-read.js","sourceRoot":"","sources":["../../src/services/persisted-read.ts"],"names":[],"mappings":";;;;;AAYA,gDAIC;AAED,gDAIC;AAED,8DAMC;AA9BD,+CAA2C;AAC3C,0DAA4B;AAG5B,SAAS,UAAU,CAAI,OAAe;IACpC,OAAO,OAAO;SACX,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAA;AACzC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;IACrE,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAClD,OAAO,UAAU,CAAW,OAAO,CAAC,CAAA;AACtC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;IACrE,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAClD,OAAO,UAAU,CAAW,OAAO,CAAC,CAAA;AACtC,CAAC;AAEM,KAAK,UAAU,yBAAyB,CAC7C,OAAe;IAEf,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAA;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../src/services/snippet.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,MAAM,CAAC,CAQjB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.extractSnippetForNode = extractSnippetForNode;
|
|
7
|
+
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
async function extractSnippetForNode(rootDir, node) {
|
|
10
|
+
const absolutePath = node_path_1.default.join(rootDir, node.filePath);
|
|
11
|
+
const source = await (0, promises_1.readFile)(absolutePath, 'utf-8');
|
|
12
|
+
const lines = source.split(/\r?\n/);
|
|
13
|
+
const startIndex = Math.max(0, node.loc.startLine - 1);
|
|
14
|
+
const endIndex = Math.min(lines.length, node.loc.endLine);
|
|
15
|
+
return lines.slice(startIndex, endIndex).join('\n');
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=snippet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../src/services/snippet.ts"],"names":[],"mappings":";;;;;AAIA,sDAWC;AAfD,+CAA2C;AAC3C,0DAA4B;AAGrB,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,IAAc;IAEd,MAAM,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEzD,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ResolvedSymbol, SymbolQueryResult } from '../models/query-types';
|
|
2
|
+
export declare function querySymbols(rootDir: string, term: string): Promise<SymbolQueryResult>;
|
|
3
|
+
export declare function resolveSymbolInput(rootDir: string, input: string): Promise<ResolvedSymbol>;
|
|
4
|
+
//# sourceMappingURL=symbol-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-query.d.ts","sourceRoot":"","sources":["../../src/services/symbol-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAG9E,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkB5F;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA8BzB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.querySymbols = querySymbols;
|
|
4
|
+
exports.resolveSymbolInput = resolveSymbolInput;
|
|
5
|
+
const persisted_read_1 = require("./persisted-read");
|
|
6
|
+
async function querySymbols(rootDir, term) {
|
|
7
|
+
const normalizedTerm = term.trim().toLocaleLowerCase();
|
|
8
|
+
const symbolsIndex = await (0, persisted_read_1.readPersistedSymbolsIndex)(rootDir);
|
|
9
|
+
const matches = Object.keys(symbolsIndex)
|
|
10
|
+
.filter((name) => name.toLocaleLowerCase().includes(normalizedTerm))
|
|
11
|
+
.sort((left, right) => left.localeCompare(right))
|
|
12
|
+
.map((name) => ({
|
|
13
|
+
name,
|
|
14
|
+
nodeIds: [...(symbolsIndex[name] ?? [])].sort((left, right) => left.localeCompare(right)),
|
|
15
|
+
}));
|
|
16
|
+
return {
|
|
17
|
+
term,
|
|
18
|
+
matches,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function resolveSymbolInput(rootDir, input) {
|
|
22
|
+
const normalizedInput = input.trim();
|
|
23
|
+
const symbolsIndex = await (0, persisted_read_1.readPersistedSymbolsIndex)(rootDir);
|
|
24
|
+
const nodes = await (0, persisted_read_1.readPersistedNodes)(rootDir);
|
|
25
|
+
const nodeMap = createNodeMap(nodes);
|
|
26
|
+
const nodeById = nodeMap.get(normalizedInput);
|
|
27
|
+
if (nodeById) {
|
|
28
|
+
return {
|
|
29
|
+
input,
|
|
30
|
+
nodes: [nodeById],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const directIds = symbolsIndex[normalizedInput] ?? [];
|
|
34
|
+
if (directIds.length > 0) {
|
|
35
|
+
return {
|
|
36
|
+
input,
|
|
37
|
+
nodes: mapIdsToNodes(directIds, nodeMap),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const caseInsensitiveIds = Object.entries(symbolsIndex)
|
|
41
|
+
.filter(([name]) => name.toLocaleLowerCase() === normalizedInput.toLocaleLowerCase())
|
|
42
|
+
.flatMap(([, nodeIds]) => nodeIds);
|
|
43
|
+
return {
|
|
44
|
+
input,
|
|
45
|
+
nodes: mapIdsToNodes(caseInsensitiveIds, nodeMap),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function createNodeMap(nodes) {
|
|
49
|
+
return new Map(nodes.map((node) => [node.id, node]));
|
|
50
|
+
}
|
|
51
|
+
function mapIdsToNodes(nodeIds, nodeMap) {
|
|
52
|
+
return [...new Set(nodeIds)]
|
|
53
|
+
.map((id) => nodeMap.get(id))
|
|
54
|
+
.filter((node) => node !== undefined)
|
|
55
|
+
.sort((left, right) => left.id.localeCompare(right.id));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=symbol-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-query.js","sourceRoot":"","sources":["../../src/services/symbol-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/utils/jsonl.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,CAM7C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toJsonl = toJsonl;
|
|
4
|
+
function toJsonl(items) {
|
|
5
|
+
if (items.length === 0) {
|
|
6
|
+
return '';
|
|
7
|
+
}
|
|
8
|
+
return `${items.map((item) => JSON.stringify(item)).join('\n')}\n`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=jsonl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/utils/jsonl.ts"],"names":[],"mappings":";;AAAA,0BAMC;AAND,SAAgB,OAAO,CAAI,KAAU;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AACpE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AddKnowledgeInput, KnowledgeEntry, KnowledgeEntrySummary } from '../models/knowledge-types';
|
|
2
|
+
export declare function normalizeFeature(input: string | undefined): string;
|
|
3
|
+
export declare function normalizeTags(tags: string[] | undefined): string[];
|
|
4
|
+
export declare function toKnowledgeId(title: string): string;
|
|
5
|
+
export declare function toCreatedAtDate(value: string | undefined): string;
|
|
6
|
+
export declare function toEntryRelativeFile(feature: string, createdAt: string, id: string): string;
|
|
7
|
+
export declare function serializeKnowledgeEntry(entry: KnowledgeEntry): string;
|
|
8
|
+
export declare function parseKnowledgeEntry(content: string, file: string): KnowledgeEntry;
|
|
9
|
+
export declare function toSummary(entry: KnowledgeEntry): KnowledgeEntrySummary;
|
|
10
|
+
export declare function normalizeAddInput(input: AddKnowledgeInput): Omit<KnowledgeEntry, 'file'>;
|
|
11
|
+
//# sourceMappingURL=knowledge-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-utils.d.ts","sourceRoot":"","sources":["../../src/utils/knowledge-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAiB,MAAM,2BAA2B,CAAA;AAIxH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIlE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAUlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAkBrE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAsFjF;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,qBAAqB,CAUtE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAUxF"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.normalizeFeature = normalizeFeature;
|
|
7
|
+
exports.normalizeTags = normalizeTags;
|
|
8
|
+
exports.toKnowledgeId = toKnowledgeId;
|
|
9
|
+
exports.toCreatedAtDate = toCreatedAtDate;
|
|
10
|
+
exports.toEntryRelativeFile = toEntryRelativeFile;
|
|
11
|
+
exports.serializeKnowledgeEntry = serializeKnowledgeEntry;
|
|
12
|
+
exports.parseKnowledgeEntry = parseKnowledgeEntry;
|
|
13
|
+
exports.toSummary = toSummary;
|
|
14
|
+
exports.normalizeAddInput = normalizeAddInput;
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
const FRONTMATTER_SEPARATOR = '---';
|
|
17
|
+
function normalizeFeature(input) {
|
|
18
|
+
const normalized = (input ?? 'general').trim().toLocaleLowerCase();
|
|
19
|
+
const slugged = slugify(normalized);
|
|
20
|
+
return slugged.length > 0 ? slugged : 'general';
|
|
21
|
+
}
|
|
22
|
+
function normalizeTags(tags) {
|
|
23
|
+
if (!tags || tags.length === 0) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const cleaned = tags
|
|
27
|
+
.map((tag) => slugify(tag))
|
|
28
|
+
.filter((tag) => tag.length > 0);
|
|
29
|
+
return [...new Set(cleaned)].sort((left, right) => left.localeCompare(right));
|
|
30
|
+
}
|
|
31
|
+
function toKnowledgeId(title) {
|
|
32
|
+
const id = slugify(title);
|
|
33
|
+
return id.length > 0 ? id : 'entry';
|
|
34
|
+
}
|
|
35
|
+
function toCreatedAtDate(value) {
|
|
36
|
+
if (value && /^\d{4}-\d{2}-\d{2}$/.test(value)) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
return new Date().toISOString().slice(0, 10);
|
|
40
|
+
}
|
|
41
|
+
function toEntryRelativeFile(feature, createdAt, id) {
|
|
42
|
+
return node_path_1.default.posix.join('entries', feature, `${createdAt}_${id}.md`);
|
|
43
|
+
}
|
|
44
|
+
function serializeKnowledgeEntry(entry) {
|
|
45
|
+
const lines = [
|
|
46
|
+
FRONTMATTER_SEPARATOR,
|
|
47
|
+
`id: ${entry.id}`,
|
|
48
|
+
`title: ${entry.title}`,
|
|
49
|
+
`type: ${entry.type}`,
|
|
50
|
+
`feature: ${entry.feature}`,
|
|
51
|
+
];
|
|
52
|
+
if (entry.tags.length > 0) {
|
|
53
|
+
lines.push('tags:');
|
|
54
|
+
entry.tags.forEach((tag) => {
|
|
55
|
+
lines.push(` - ${tag}`);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
lines.push(`createdAt: ${entry.createdAt}`, FRONTMATTER_SEPARATOR, '', entry.body);
|
|
59
|
+
return `${lines.join('\n')}\n`;
|
|
60
|
+
}
|
|
61
|
+
function parseKnowledgeEntry(content, file) {
|
|
62
|
+
const lines = content.split(/\r?\n/);
|
|
63
|
+
if (lines.length < 3 || lines[0].trim() !== FRONTMATTER_SEPARATOR) {
|
|
64
|
+
throw new Error(`Invalid knowledge entry frontmatter in ${file}`);
|
|
65
|
+
}
|
|
66
|
+
let separatorIndex = -1;
|
|
67
|
+
for (let index = 1; index < lines.length; index += 1) {
|
|
68
|
+
if (lines[index].trim() === FRONTMATTER_SEPARATOR) {
|
|
69
|
+
separatorIndex = index;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (separatorIndex < 0) {
|
|
74
|
+
throw new Error(`Invalid knowledge entry frontmatter in ${file}`);
|
|
75
|
+
}
|
|
76
|
+
let id = '';
|
|
77
|
+
let title = '';
|
|
78
|
+
let type;
|
|
79
|
+
let feature = 'general';
|
|
80
|
+
const tags = [];
|
|
81
|
+
let createdAt = '';
|
|
82
|
+
for (let index = 1; index < separatorIndex; index += 1) {
|
|
83
|
+
const line = lines[index];
|
|
84
|
+
const trimmedLine = line.trim();
|
|
85
|
+
if (trimmedLine.length === 0) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (trimmedLine === 'tags:') {
|
|
89
|
+
for (let tagIndex = index + 1; tagIndex < separatorIndex; tagIndex += 1) {
|
|
90
|
+
const tagLine = lines[tagIndex].trim();
|
|
91
|
+
if (!tagLine.startsWith('- ')) {
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
const tag = slugify(tagLine.slice(2));
|
|
95
|
+
if (tag.length > 0) {
|
|
96
|
+
tags.push(tag);
|
|
97
|
+
}
|
|
98
|
+
index = tagIndex;
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const splitIndex = line.indexOf(':');
|
|
103
|
+
if (splitIndex < 0) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const key = line.slice(0, splitIndex).trim();
|
|
107
|
+
const value = line.slice(splitIndex + 1).trim();
|
|
108
|
+
if (key === 'id') {
|
|
109
|
+
id = value;
|
|
110
|
+
}
|
|
111
|
+
else if (key === 'title') {
|
|
112
|
+
title = value;
|
|
113
|
+
}
|
|
114
|
+
else if (key === 'type' && isKnowledgeType(value)) {
|
|
115
|
+
type = value;
|
|
116
|
+
}
|
|
117
|
+
else if (key === 'feature') {
|
|
118
|
+
feature = normalizeFeature(value);
|
|
119
|
+
}
|
|
120
|
+
else if (key === 'createdAt') {
|
|
121
|
+
createdAt = value;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (id.length === 0 || title.length === 0 || !type || createdAt.length === 0) {
|
|
125
|
+
throw new Error(`Missing required metadata in knowledge entry ${file}`);
|
|
126
|
+
}
|
|
127
|
+
const body = lines.slice(separatorIndex + 1).join('\n').trim();
|
|
128
|
+
return {
|
|
129
|
+
id,
|
|
130
|
+
title,
|
|
131
|
+
type,
|
|
132
|
+
feature,
|
|
133
|
+
tags: normalizeTags(tags),
|
|
134
|
+
createdAt,
|
|
135
|
+
file,
|
|
136
|
+
body,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function toSummary(entry) {
|
|
140
|
+
return {
|
|
141
|
+
id: entry.id,
|
|
142
|
+
title: entry.title,
|
|
143
|
+
type: entry.type,
|
|
144
|
+
feature: entry.feature,
|
|
145
|
+
tags: [...entry.tags],
|
|
146
|
+
createdAt: entry.createdAt,
|
|
147
|
+
file: entry.file,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function normalizeAddInput(input) {
|
|
151
|
+
return {
|
|
152
|
+
id: toKnowledgeId(input.title),
|
|
153
|
+
title: input.title.trim(),
|
|
154
|
+
type: input.type,
|
|
155
|
+
feature: normalizeFeature(input.feature),
|
|
156
|
+
tags: normalizeTags(input.tags),
|
|
157
|
+
createdAt: toCreatedAtDate(input.createdAt),
|
|
158
|
+
body: input.body.trim(),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function slugify(value) {
|
|
162
|
+
return value
|
|
163
|
+
.toLocaleLowerCase()
|
|
164
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
165
|
+
.replace(/(^-|-$)/g, '');
|
|
166
|
+
}
|
|
167
|
+
function isKnowledgeType(value) {
|
|
168
|
+
return (value === 'decision'
|
|
169
|
+
|| value === 'workaround'
|
|
170
|
+
|| value === 'caveat'
|
|
171
|
+
|| value === 'note'
|
|
172
|
+
|| value === 'migration');
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=knowledge-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-utils.js","sourceRoot":"","sources":["../../src/utils/knowledge-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-utils.d.ts","sourceRoot":"","sources":["../../src/utils/sort-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEvD,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAEvD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAMvD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortNodes = sortNodes;
|
|
4
|
+
exports.sortEdges = sortEdges;
|
|
5
|
+
function sortNodes(nodes) {
|
|
6
|
+
return [...nodes].sort((left, right) => left.id.localeCompare(right.id));
|
|
7
|
+
}
|
|
8
|
+
function sortEdges(edges) {
|
|
9
|
+
return [...edges].sort((left, right) => {
|
|
10
|
+
const leftKey = `${left.type}:${left.from}:${left.to}:${left.filePath ?? ''}:${left.loc?.startLine ?? 0}`;
|
|
11
|
+
const rightKey = `${right.type}:${right.from}:${right.to}:${right.filePath ?? ''}:${right.loc?.startLine ?? 0}`;
|
|
12
|
+
return leftKey.localeCompare(rightKey);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=sort-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-utils.js","sourceRoot":"","sources":["../../src/utils/sort-utils.ts"],"names":[],"mappings":";;AAEA,8BAEC;AAED,8BAMC;AAVD,SAAgB,SAAS,CAAC,KAAiB;IACzC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,SAAgB,SAAS,CAAC,KAAiB;IACzC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,EAAE,CAAA;QACzG,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,EAAE,CAAA;QAC/G,OAAO,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC"}
|