code-kg 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/README.md +100 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.js +68 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/codekg-config.d.ts +14 -0
- package/dist/codekg-config.js +81 -0
- package/dist/codekg-config.js.map +1 -0
- package/dist/commands/graph.d.ts +7 -0
- package/dist/commands/graph.js +49 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.js +13 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/insights.d.ts +7 -0
- package/dist/commands/insights.js +31 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/path.d.ts +7 -0
- package/dist/commands/path.js +47 -0
- package/dist/commands/path.js.map +1 -0
- package/dist/commands/reindex.d.ts +6 -0
- package/dist/commands/reindex.js +13 -0
- package/dist/commands/reindex.js.map +1 -0
- package/dist/commands/run.d.ts +6 -0
- package/dist/commands/run.js +20 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/serve.d.ts +8 -0
- package/dist/commands/serve.js +25 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.js +30 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +602 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/babel-fallback.d.ts +7 -0
- package/dist/indexer/babel-fallback.js +583 -0
- package/dist/indexer/babel-fallback.js.map +1 -0
- package/dist/indexer/file-discovery.d.ts +6 -0
- package/dist/indexer/file-discovery.js +106 -0
- package/dist/indexer/file-discovery.js.map +1 -0
- package/dist/indexer/indexer.d.ts +90 -0
- package/dist/indexer/indexer.js +620 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/indexer/metrics.d.ts +39 -0
- package/dist/indexer/metrics.js +147 -0
- package/dist/indexer/metrics.js.map +1 -0
- package/dist/indexer/structure-detector.d.ts +16 -0
- package/dist/indexer/structure-detector.js +159 -0
- package/dist/indexer/structure-detector.js.map +1 -0
- package/dist/indexer/ts-parser.d.ts +86 -0
- package/dist/indexer/ts-parser.js +437 -0
- package/dist/indexer/ts-parser.js.map +1 -0
- package/dist/model/edge.d.ts +21 -0
- package/dist/model/edge.js +25 -0
- package/dist/model/edge.js.map +1 -0
- package/dist/model/graph.d.ts +10 -0
- package/dist/model/graph.js +20 -0
- package/dist/model/graph.js.map +1 -0
- package/dist/model/node.d.ts +24 -0
- package/dist/model/node.js +22 -0
- package/dist/model/node.js.map +1 -0
- package/dist/query/query-dsl.d.ts +17 -0
- package/dist/query/query-dsl.js +75 -0
- package/dist/query/query-dsl.js.map +1 -0
- package/dist/query/query-engine.d.ts +32 -0
- package/dist/query/query-engine.js +126 -0
- package/dist/query/query-engine.js.map +1 -0
- package/dist/server/api.d.ts +19 -0
- package/dist/server/api.js +29 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/app.d.ts +7 -0
- package/dist/server/app.js +509 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/graph-controller.d.ts +147 -0
- package/dist/server/graph-controller.js +186 -0
- package/dist/server/graph-controller.js.map +1 -0
- package/dist/server/routes.d.ts +3 -0
- package/dist/server/routes.js +19 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/ui.d.ts +1 -0
- package/dist/server/ui.js +1165 -0
- package/dist/server/ui.js.map +1 -0
- package/dist/store/sqlite-store.d.ts +83 -0
- package/dist/store/sqlite-store.js +647 -0
- package/dist/store/sqlite-store.js.map +1 -0
- package/dist/utils/ids.d.ts +2 -0
- package/dist/utils/ids.js +9 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/utils/path.d.ts +3 -0
- package/dist/utils/path.js +21 -0
- package/dist/utils/path.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_QUERY_DEPTH = void 0;
|
|
4
|
+
exports.isReferencesQuery = isReferencesQuery;
|
|
5
|
+
exports.isDependenciesQuery = isDependenciesQuery;
|
|
6
|
+
exports.normalizeDepth = normalizeDepth;
|
|
7
|
+
exports.canonicalizeQuery = canonicalizeQuery;
|
|
8
|
+
exports.parseGraphQuery = parseGraphQuery;
|
|
9
|
+
exports.MAX_QUERY_DEPTH = 32;
|
|
10
|
+
function isReferencesQuery(query) {
|
|
11
|
+
return query.type === "references";
|
|
12
|
+
}
|
|
13
|
+
function isDependenciesQuery(query) {
|
|
14
|
+
return query.type === "dependencies";
|
|
15
|
+
}
|
|
16
|
+
function normalizeDepth(depth, fallback = 1) {
|
|
17
|
+
if (!Number.isFinite(depth)) {
|
|
18
|
+
return fallback;
|
|
19
|
+
}
|
|
20
|
+
const normalized = Math.floor(Number(depth));
|
|
21
|
+
if (normalized < 0) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
if (normalized > exports.MAX_QUERY_DEPTH) {
|
|
25
|
+
return exports.MAX_QUERY_DEPTH;
|
|
26
|
+
}
|
|
27
|
+
return normalized;
|
|
28
|
+
}
|
|
29
|
+
function canonicalizeQuery(query) {
|
|
30
|
+
if (isReferencesQuery(query)) {
|
|
31
|
+
return {
|
|
32
|
+
type: "references",
|
|
33
|
+
symbol: query.symbol.trim(),
|
|
34
|
+
depth: normalizeDepth(query.depth, 1),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const target = query.target?.trim();
|
|
38
|
+
return {
|
|
39
|
+
type: "dependencies",
|
|
40
|
+
target: target ? target : undefined,
|
|
41
|
+
depth: normalizeDepth(query.depth, 1),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function assertObject(value) {
|
|
45
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
46
|
+
throw new Error("Query must be an object.");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function parseGraphQuery(input) {
|
|
50
|
+
assertObject(input);
|
|
51
|
+
const type = input.type;
|
|
52
|
+
if (type === "references") {
|
|
53
|
+
const symbol = typeof input.symbol === "string" ? input.symbol.trim() : "";
|
|
54
|
+
if (!symbol) {
|
|
55
|
+
throw new Error("References query requires a non-empty symbol.");
|
|
56
|
+
}
|
|
57
|
+
const depth = typeof input.depth === "number" ? input.depth : undefined;
|
|
58
|
+
return canonicalizeQuery({
|
|
59
|
+
type: "references",
|
|
60
|
+
symbol,
|
|
61
|
+
depth,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (type === "dependencies") {
|
|
65
|
+
const target = typeof input.target === "string" ? input.target.trim() : undefined;
|
|
66
|
+
const depth = typeof input.depth === "number" ? input.depth : undefined;
|
|
67
|
+
return canonicalizeQuery({
|
|
68
|
+
type: "dependencies",
|
|
69
|
+
target,
|
|
70
|
+
depth,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
throw new Error(`Unsupported query type: ${String(type)}`);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=query-dsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-dsl.js","sourceRoot":"","sources":["../../src/query/query-dsl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type GraphQuery } from "./query-dsl";
|
|
2
|
+
export interface QueryNode {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
name: string | null;
|
|
6
|
+
path: string | null;
|
|
7
|
+
props: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface QueryEdge {
|
|
10
|
+
id: string;
|
|
11
|
+
fromId: string;
|
|
12
|
+
toId: string;
|
|
13
|
+
type: string;
|
|
14
|
+
props: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export interface QueryGraph {
|
|
17
|
+
nodes: QueryNode[];
|
|
18
|
+
edges: QueryEdge[];
|
|
19
|
+
}
|
|
20
|
+
export interface QueryResult {
|
|
21
|
+
query: GraphQuery;
|
|
22
|
+
nodes: QueryNode[];
|
|
23
|
+
edges: QueryEdge[];
|
|
24
|
+
}
|
|
25
|
+
export interface QueryDataSource {
|
|
26
|
+
findNodesByName(symbol: string): QueryNode[];
|
|
27
|
+
getNodeById(nodeId: string): QueryNode | null;
|
|
28
|
+
getIncomingEdges(nodeId: string): QueryEdge[];
|
|
29
|
+
getOutgoingEdges(nodeId: string): QueryEdge[];
|
|
30
|
+
getFileDependencyGraph(): QueryGraph;
|
|
31
|
+
}
|
|
32
|
+
export declare function executeDeterministicQuery(rawQuery: GraphQuery, dataSource: QueryDataSource): QueryResult;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeDeterministicQuery = executeDeterministicQuery;
|
|
4
|
+
const query_dsl_1 = require("./query-dsl");
|
|
5
|
+
const REFERENCE_EDGE_TYPES = new Set(["REFERENCES", "CALLS"]);
|
|
6
|
+
function sortNodes(nodes) {
|
|
7
|
+
return [...nodes].sort((left, right) => left.id.localeCompare(right.id));
|
|
8
|
+
}
|
|
9
|
+
function sortEdges(edges) {
|
|
10
|
+
return [...edges].sort((left, right) => left.id.localeCompare(right.id));
|
|
11
|
+
}
|
|
12
|
+
function executeReferencesQuery(query, dataSource) {
|
|
13
|
+
const seeds = sortNodes(dataSource.findNodesByName(query.symbol));
|
|
14
|
+
const nodeById = new Map(seeds.map((node) => [node.id, node]));
|
|
15
|
+
const edgeById = new Map();
|
|
16
|
+
const queue = [];
|
|
17
|
+
const bestRemaining = new Map();
|
|
18
|
+
for (const seed of seeds) {
|
|
19
|
+
const remaining = query.depth ?? 1;
|
|
20
|
+
queue.push({ nodeId: seed.id, remaining });
|
|
21
|
+
bestRemaining.set(seed.id, remaining);
|
|
22
|
+
}
|
|
23
|
+
while (queue.length > 0) {
|
|
24
|
+
const next = queue.shift();
|
|
25
|
+
if (!next || next.remaining <= 0) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const incoming = sortEdges(dataSource.getIncomingEdges(next.nodeId)).filter((edge) => REFERENCE_EDGE_TYPES.has(edge.type.toUpperCase()));
|
|
29
|
+
for (const edge of incoming) {
|
|
30
|
+
edgeById.set(edge.id, edge);
|
|
31
|
+
const fromNode = dataSource.getNodeById(edge.fromId);
|
|
32
|
+
if (!fromNode) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
nodeById.set(fromNode.id, fromNode);
|
|
36
|
+
const remaining = next.remaining - 1;
|
|
37
|
+
const currentBest = bestRemaining.get(fromNode.id) ?? -1;
|
|
38
|
+
if (remaining > currentBest) {
|
|
39
|
+
bestRemaining.set(fromNode.id, remaining);
|
|
40
|
+
queue.push({ nodeId: fromNode.id, remaining });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
query,
|
|
46
|
+
nodes: sortNodes(nodeById.values()),
|
|
47
|
+
edges: sortEdges(edgeById.values()),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function executeDependenciesQuery(query, dataSource) {
|
|
51
|
+
const graph = dataSource.getFileDependencyGraph();
|
|
52
|
+
const allNodes = sortNodes(graph.nodes);
|
|
53
|
+
const allEdges = sortEdges(graph.edges);
|
|
54
|
+
if (!query.target) {
|
|
55
|
+
return {
|
|
56
|
+
query,
|
|
57
|
+
nodes: allNodes,
|
|
58
|
+
edges: allEdges,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const startNodes = allNodes.filter((node) => node.id === query.target || node.path === query.target || node.name === query.target);
|
|
62
|
+
if (startNodes.length === 0) {
|
|
63
|
+
return {
|
|
64
|
+
query,
|
|
65
|
+
nodes: [],
|
|
66
|
+
edges: [],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const nodeById = new Map(allNodes.map((node) => [node.id, node]));
|
|
70
|
+
const outgoingByNode = new Map();
|
|
71
|
+
for (const edge of allEdges) {
|
|
72
|
+
const existing = outgoingByNode.get(edge.fromId);
|
|
73
|
+
if (existing) {
|
|
74
|
+
existing.push(edge);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
outgoingByNode.set(edge.fromId, [edge]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const [nodeId, edges] of outgoingByNode) {
|
|
81
|
+
outgoingByNode.set(nodeId, sortEdges(edges));
|
|
82
|
+
}
|
|
83
|
+
const depth = query.depth ?? 1;
|
|
84
|
+
const visitedNodes = new Set(startNodes.map((node) => node.id));
|
|
85
|
+
const visitedEdges = new Set();
|
|
86
|
+
const queue = startNodes.map((node) => ({
|
|
87
|
+
nodeId: node.id,
|
|
88
|
+
remaining: depth,
|
|
89
|
+
}));
|
|
90
|
+
const bestRemaining = new Map(startNodes.map((node) => [node.id, depth]));
|
|
91
|
+
while (queue.length > 0) {
|
|
92
|
+
const next = queue.shift();
|
|
93
|
+
if (!next || next.remaining <= 0) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const outgoing = outgoingByNode.get(next.nodeId) ?? [];
|
|
97
|
+
for (const edge of outgoing) {
|
|
98
|
+
visitedEdges.add(edge.id);
|
|
99
|
+
visitedNodes.add(edge.toId);
|
|
100
|
+
const remaining = next.remaining - 1;
|
|
101
|
+
const currentBest = bestRemaining.get(edge.toId) ?? -1;
|
|
102
|
+
if (remaining > currentBest) {
|
|
103
|
+
bestRemaining.set(edge.toId, remaining);
|
|
104
|
+
queue.push({ nodeId: edge.toId, remaining });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const edgeById = new Map(allEdges.map((edge) => [edge.id, edge]));
|
|
109
|
+
return {
|
|
110
|
+
query,
|
|
111
|
+
nodes: sortNodes([...visitedNodes]
|
|
112
|
+
.map((nodeId) => nodeById.get(nodeId))
|
|
113
|
+
.filter((node) => Boolean(node))),
|
|
114
|
+
edges: sortEdges([...visitedEdges]
|
|
115
|
+
.map((edgeId) => edgeById.get(edgeId))
|
|
116
|
+
.filter((edge) => Boolean(edge))),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function executeDeterministicQuery(rawQuery, dataSource) {
|
|
120
|
+
const query = (0, query_dsl_1.canonicalizeQuery)(rawQuery);
|
|
121
|
+
if ((0, query_dsl_1.isDependenciesQuery)(query)) {
|
|
122
|
+
return executeDependenciesQuery(query, dataSource);
|
|
123
|
+
}
|
|
124
|
+
return executeReferencesQuery(query, dataSource);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=query-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-engine.js","sourceRoot":"","sources":["../../src/query/query-engine.ts"],"names":[],"mappings":";;AAmMA,8DAUC;AA7MD,2CAMqB;AAqCrB,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAE9D,SAAS,SAAS,CAAC,KAA0B;IAC3C,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,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS,CAAC,KAA0B;IAC3C,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,CAAC;AAC3E,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAsB,EACtB,UAA2B;IAE3B,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAoB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE9C,MAAM,KAAK,GAAiD,EAAE,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CACzE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAC5D,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACrC,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACzD,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;gBAC5B,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;QACL,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAwB,EACxB,UAA2B;IAE3B,MAAM,KAAK,GAAG,UAAU,CAAC,sBAAsB,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO;YACL,KAAK;YACL,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CACvF,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,KAAK;YACL,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;QAC7C,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,KAAK,GAAiD,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpF,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC,CAAC;IACJ,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAC3C,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACrC,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvD,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;gBAC5B,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAErF,OAAO;QACL,KAAK;QACL,KAAK,EAAE,SAAS,CACd,CAAC,GAAG,YAAY,CAAC;aACd,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aACrC,MAAM,CAAC,CAAC,IAAI,EAAqB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACtD;QACD,KAAK,EAAE,SAAS,CACd,CAAC,GAAG,YAAY,CAAC;aACd,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aACrC,MAAM,CAAC,CAAC,IAAI,EAAqB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACtD;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,yBAAyB,CACvC,QAAoB,EACpB,UAA2B;IAE3B,MAAM,KAAK,GAAG,IAAA,6BAAiB,EAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,IAAA,+BAAmB,EAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Response } from 'express';
|
|
2
|
+
export interface ApiErrorObject {
|
|
3
|
+
code: string;
|
|
4
|
+
message: string;
|
|
5
|
+
details?: unknown;
|
|
6
|
+
}
|
|
7
|
+
export interface ApiSuccess<T> {
|
|
8
|
+
ok: true;
|
|
9
|
+
data: T;
|
|
10
|
+
}
|
|
11
|
+
export interface ApiFailure {
|
|
12
|
+
ok: false;
|
|
13
|
+
error: ApiErrorObject;
|
|
14
|
+
}
|
|
15
|
+
export type ApiEnvelope<T> = ApiSuccess<T> | ApiFailure;
|
|
16
|
+
export declare function sendSuccess<T>(res: Response, data: T, status?: number): Response<ApiSuccess<T>>;
|
|
17
|
+
export declare function sendError(res: Response, code: string, message: string, status?: number, details?: unknown): Response<ApiFailure>;
|
|
18
|
+
export declare function getFirstString(value: unknown): string | undefined;
|
|
19
|
+
export declare function toErrorMessage(error: unknown): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendSuccess = sendSuccess;
|
|
4
|
+
exports.sendError = sendError;
|
|
5
|
+
exports.getFirstString = getFirstString;
|
|
6
|
+
exports.toErrorMessage = toErrorMessage;
|
|
7
|
+
function sendSuccess(res, data, status = 200) {
|
|
8
|
+
return res.status(status).json({ ok: true, data });
|
|
9
|
+
}
|
|
10
|
+
function sendError(res, code, message, status = 400, details) {
|
|
11
|
+
const error = details === undefined ? { code, message } : { code, message, details };
|
|
12
|
+
return res.status(status).json({ ok: false, error });
|
|
13
|
+
}
|
|
14
|
+
function getFirstString(value) {
|
|
15
|
+
if (typeof value === 'string') {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
if (Array.isArray(value) && typeof value[0] === 'string') {
|
|
19
|
+
return value[0];
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
function toErrorMessage(error) {
|
|
24
|
+
if (error instanceof Error && error.message) {
|
|
25
|
+
return error.message;
|
|
26
|
+
}
|
|
27
|
+
return 'Unknown internal error';
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":";;AAoBA,kCAEC;AAED,8BAWC;AAED,wCAUC;AAED,wCAMC;AAnCD,SAAgB,WAAW,CAAI,GAAa,EAAE,IAAO,EAAE,MAAM,GAAG,GAAG;IACjE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,SAAS,CACvB,GAAa,EACb,IAAY,EACZ,OAAe,EACf,MAAM,GAAG,GAAG,EACZ,OAAiB;IAEjB,MAAM,KAAK,GACT,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAEzE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Express } from 'express';
|
|
2
|
+
import { type GraphQueryEngine } from './graph-controller';
|
|
3
|
+
export interface CreateAppOptions {
|
|
4
|
+
engine?: GraphQueryEngine;
|
|
5
|
+
}
|
|
6
|
+
export declare function createApp(options?: CreateAppOptions): Express;
|
|
7
|
+
export default createApp;
|