@handong66/evidoc-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.
@@ -0,0 +1,20 @@
1
+ import type { DriftReport } from "@handong66/evidoc-core";
2
+ export type GraphNodeKind = "document" | "source" | "symbol" | "api" | "claim" | "command";
3
+ export type GraphEdgeKind = "references" | "declares" | "covers" | "changes" | "invalidates";
4
+ export interface GraphNode {
5
+ id: string;
6
+ kind: GraphNodeKind;
7
+ path?: string;
8
+ label?: string;
9
+ }
10
+ export interface GraphEdge {
11
+ from: string;
12
+ to: string;
13
+ kind: GraphEdgeKind;
14
+ }
15
+ export interface DriftGraph {
16
+ nodes: GraphNode[];
17
+ edges: GraphEdge[];
18
+ }
19
+ export declare function createEmptyGraph(): DriftGraph;
20
+ export declare function buildDriftGraph(report: DriftReport): DriftGraph;
@@ -0,0 +1,76 @@
1
+ export function createEmptyGraph() {
2
+ return { nodes: [], edges: [] };
3
+ }
4
+ export function buildDriftGraph(report) {
5
+ const graph = createEmptyGraph();
6
+ const nodes = new Map();
7
+ const edges = new Set();
8
+ function addNode(node) {
9
+ if (!nodes.has(node.id))
10
+ nodes.set(node.id, node);
11
+ }
12
+ function addEdge(edge) {
13
+ edges.add(`${edge.from}\t${edge.to}\t${edge.kind}`);
14
+ }
15
+ for (const document of report.documents) {
16
+ addNode({
17
+ id: `document:${document.path}`,
18
+ kind: "document",
19
+ path: document.path,
20
+ label: document.path
21
+ });
22
+ }
23
+ for (const finding of report.findings) {
24
+ const docNode = `document:${finding.docPath}`;
25
+ const ruleNode = `rule:${finding.ruleId}`;
26
+ addNode({ id: docNode, kind: "document", path: finding.docPath, label: finding.docPath });
27
+ addNode({ id: ruleNode, kind: "claim", label: finding.ruleId });
28
+ addEdge({ from: ruleNode, to: docNode, kind: "invalidates" });
29
+ for (const evidence of finding.evidence) {
30
+ const evidenceNode = evidenceToNode(evidence);
31
+ addNode(evidenceNode);
32
+ addEdge({ from: docNode, to: evidenceNode.id, kind: "references" });
33
+ addEdge({ from: evidenceNode.id, to: ruleNode, kind: "covers" });
34
+ }
35
+ }
36
+ graph.nodes = [...nodes.values()].sort((a, b) => a.id.localeCompare(b.id));
37
+ graph.edges = [...edges]
38
+ .map((edge) => {
39
+ const [from, to, kind] = edge.split("\t");
40
+ return { from, to, kind };
41
+ })
42
+ .sort((a, b) => `${a.from}${a.to}${a.kind}`.localeCompare(`${b.from}${b.to}${b.kind}`));
43
+ return graph;
44
+ }
45
+ function evidenceToNode(evidence) {
46
+ if (evidence.kind === "symbol") {
47
+ const [path] = evidence.subject.split("#");
48
+ return {
49
+ id: `symbol:${evidence.subject}`,
50
+ kind: "symbol",
51
+ path,
52
+ label: evidence.subject
53
+ };
54
+ }
55
+ if (evidence.kind === "api") {
56
+ return {
57
+ id: `api:${evidence.subject}`,
58
+ kind: "api",
59
+ label: evidence.subject
60
+ };
61
+ }
62
+ if (evidence.kind === "command") {
63
+ return {
64
+ id: `command:${evidence.subject}`,
65
+ kind: "command",
66
+ label: evidence.subject
67
+ };
68
+ }
69
+ return {
70
+ id: `source:${evidence.subject}`,
71
+ kind: "source",
72
+ path: evidence.subject,
73
+ label: evidence.subject
74
+ };
75
+ }
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@handong66/evidoc-graph",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "prepublishOnly": "node ../../scripts/ensure-built-package.mjs"
7
+ },
8
+ "exports": {
9
+ ".": "./dist/src/index.js"
10
+ },
11
+ "types": "./dist/src/index.d.ts",
12
+ "files": [
13
+ "dist/src"
14
+ ],
15
+ "dependencies": {
16
+ "@handong66/evidoc-core": "0.1.0"
17
+ },
18
+ "license": "MIT",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/handong66/Evidoc.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/handong66/Evidoc/issues"
25
+ },
26
+ "homepage": "https://github.com/handong66/Evidoc#readme"
27
+ }