@blockml/graph 0.9.1
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/blocks/org/blockml/bml/graph/BuildIndexResult.bml +43 -0
- package/blocks/org/blockml/bml/graph/GraphEdge.bml +49 -0
- package/blocks/org/blockml/bml/graph/GraphIndexOptions.bml +43 -0
- package/blocks/org/blockml/bml/graph/GraphMember.bml +46 -0
- package/blocks/org/blockml/bml/graph/GraphNeighbor.bml +52 -0
- package/blocks/org/blockml/bml/graph/GraphNode.bml +58 -0
- package/blocks/org/blockml/bml/graph/GraphPath.bml +40 -0
- package/blocks/org/blockml/bml/graph/GraphQueryResult.bml +37 -0
- package/blocks/org/blockml/bml/graph/GraphType.bml +33 -0
- package/blocks/org/blockml/bml/graph/IndexStatus.bml +43 -0
- package/blocks/org/blockml/bml/graph/Library.bml +95 -0
- package/blocks/org/blockml/bml/graph/README.bml +36 -0
- package/blocks/org/blockml/bml/graph/capability/Ancestors.bml +40 -0
- package/blocks/org/blockml/bml/graph/capability/BuildIndex.bml +41 -0
- package/blocks/org/blockml/bml/graph/capability/Descendants.bml +43 -0
- package/blocks/org/blockml/bml/graph/capability/Members.bml +37 -0
- package/blocks/org/blockml/bml/graph/capability/Neighbors.bml +53 -0
- package/blocks/org/blockml/bml/graph/capability/OpenIndex.bml +40 -0
- package/blocks/org/blockml/bml/graph/capability/Path.bml +43 -0
- package/blocks/org/blockml/bml/graph/capability/Query.bml +43 -0
- package/blocks/org/blockml/bml/graph/capability/RebuildIndex.bml +40 -0
- package/blocks/org/blockml/bml/graph/capability/Schema.bml +37 -0
- package/blocks/org/blockml/bml/graph/capability/UsedBy.bml +52 -0
- package/blocks/org/blockml/bml/graph/capability/Uses.bml +49 -0
- package/blocks/org/blockml/bml/graph/documentation/ArchitectureOverview.bml +39 -0
- package/blocks/org/blockml/bml/graph/documentation/Introduction.bml +37 -0
- package/blocks/org/blockml/bml/graph/documentation/LayerSeparation.bml +39 -0
- package/blocks/org/blockml/bml/graph/documentation/PackageOwnership.bml +36 -0
- package/blocks/org/blockml/bml/graph/documentation/PublicApi.bml +44 -0
- package/blocks/org/blockml/bml/graph/documentation/ScopeExclusions.bml +40 -0
- package/blocks/org/blockml/bml/graph/documentation/V1Scope.bml +41 -0
- package/dist/fingerprint.d.ts +27 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +146 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/graph-index.d.ts +23 -0
- package/dist/graph-index.d.ts.map +1 -0
- package/dist/graph-index.js +49 -0
- package/dist/graph-index.js.map +1 -0
- package/dist/graph-lock.d.ts +6 -0
- package/dist/graph-lock.d.ts.map +1 -0
- package/dist/graph-lock.js +106 -0
- package/dist/graph-lock.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +159 -0
- package/dist/index.js.map +1 -0
- package/dist/ladybug-store.d.ts +19 -0
- package/dist/ladybug-store.d.ts.map +1 -0
- package/dist/ladybug-store.js +133 -0
- package/dist/ladybug-store.js.map +1 -0
- package/dist/mapper.d.ts +40 -0
- package/dist/mapper.d.ts.map +1 -0
- package/dist/mapper.js +245 -0
- package/dist/mapper.js.map +1 -0
- package/dist/operations.d.ts +14 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +375 -0
- package/dist/operations.js.map +1 -0
- package/dist/schema.d.ts +8 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +42 -0
- package/dist/schema.js.map +1 -0
- package/dist/store.d.ts +10 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +2 -0
- package/dist/store.js.map +1 -0
- package/dist/type-refs.d.ts +8 -0
- package/dist/type-refs.d.ts.map +1 -0
- package/dist/type-refs.js +48 -0
- package/dist/type-refs.js.map +1 -0
- package/dist/types.d.ts +103 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { bootstrapFullProjectRegistry } from "@blockml/framework";
|
|
4
|
+
import { buildManifest, MANIFEST_FILE, manifestIsCurrent, readManifest, resolveDbDir, resolveIndexDir, } from "./fingerprint.js";
|
|
5
|
+
import { GraphIndex } from "./graph-index.js";
|
|
6
|
+
import { acquireGraphLock } from "./graph-lock.js";
|
|
7
|
+
import { createLadybugStore, openLadybugStore, populateStore } from "./ladybug-store.js";
|
|
8
|
+
import { graphDataFromRegistry } from "./mapper.js";
|
|
9
|
+
import { MEMORY_DB_PATH } from "./store.js";
|
|
10
|
+
export { DEFAULT_GRAPH_DEPTH, DEFAULT_USES_DEPTH, INDEX_FORMAT_VERSION } from "./types.js";
|
|
11
|
+
export { GraphIndex } from "./graph-index.js";
|
|
12
|
+
export { graphDataFromRegistry } from "./mapper.js";
|
|
13
|
+
export { collectNamedTypes } from "./type-refs.js";
|
|
14
|
+
export { defaultIndexDir, resolveIndexDir } from "./fingerprint.js";
|
|
15
|
+
export { graphSchema, GRAPH_RELATIONS, GRAPH_CYPHER_EXAMPLE } from "./schema.js";
|
|
16
|
+
function resolveOptions(options = {}) {
|
|
17
|
+
const rootDir = options.rootDir ?? process.cwd();
|
|
18
|
+
const srcDir = options.srcDir ?? "blocks";
|
|
19
|
+
return {
|
|
20
|
+
rootDir,
|
|
21
|
+
srcDir,
|
|
22
|
+
libraries: options.libraries ?? [],
|
|
23
|
+
indexDir: resolveIndexDir(rootDir, options.indexDir),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function resolvedBlockCount(data) {
|
|
27
|
+
return data.blocks.filter((block) => block.resolved).length;
|
|
28
|
+
}
|
|
29
|
+
export async function buildMemoryIndex(registry, options = {}) {
|
|
30
|
+
const mapping = {};
|
|
31
|
+
if (options.rootDir !== undefined) {
|
|
32
|
+
mapping.rootDir = options.rootDir;
|
|
33
|
+
}
|
|
34
|
+
if (options.srcDir !== undefined) {
|
|
35
|
+
mapping.srcDir = options.srcDir;
|
|
36
|
+
}
|
|
37
|
+
const data = graphDataFromRegistry(registry, mapping);
|
|
38
|
+
const store = await createLadybugStore(MEMORY_DB_PATH);
|
|
39
|
+
await populateStore(store, data);
|
|
40
|
+
return new GraphIndex(store, resolvedBlockCount(data), data.members.length, data.filePaths, options.diagnostics ?? []);
|
|
41
|
+
}
|
|
42
|
+
export async function buildIndex(options = {}) {
|
|
43
|
+
const { rootDir, srcDir, libraries } = resolveOptions(options);
|
|
44
|
+
const bootstrap = bootstrapFullProjectRegistry({ rootDir, srcDir, libraries });
|
|
45
|
+
const index = await buildMemoryIndex(bootstrap.registry, {
|
|
46
|
+
rootDir,
|
|
47
|
+
srcDir,
|
|
48
|
+
diagnostics: bootstrap.diagnostics,
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
index,
|
|
52
|
+
diagnostics: bootstrap.diagnostics,
|
|
53
|
+
blocks: index.blocks,
|
|
54
|
+
members: index.memberCount,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export async function getIndexStatus(options = {}) {
|
|
58
|
+
const { rootDir, srcDir, indexDir } = resolveOptions(options);
|
|
59
|
+
const dbDir = resolveDbDir(indexDir);
|
|
60
|
+
const manifest = readManifest(indexDir);
|
|
61
|
+
if (!existsSync(dbDir) || !manifest) {
|
|
62
|
+
return { state: "missing", indexDir };
|
|
63
|
+
}
|
|
64
|
+
if (!manifestIsCurrent(manifest, rootDir, srcDir)) {
|
|
65
|
+
const status = { state: "stale", indexDir };
|
|
66
|
+
status.blocks = manifest.blocks;
|
|
67
|
+
status.members = manifest.members;
|
|
68
|
+
return status;
|
|
69
|
+
}
|
|
70
|
+
const ready = { state: "ready", indexDir };
|
|
71
|
+
ready.blocks = manifest.blocks;
|
|
72
|
+
ready.members = manifest.members;
|
|
73
|
+
return ready;
|
|
74
|
+
}
|
|
75
|
+
export async function loadIndex(options = {}) {
|
|
76
|
+
const { indexDir } = resolveOptions(options);
|
|
77
|
+
const status = await getIndexStatus(options);
|
|
78
|
+
if (status.state !== "ready") {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const manifest = readManifest(indexDir);
|
|
82
|
+
if (!manifest) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
const store = await openLadybugStore(resolveDbDir(indexDir));
|
|
86
|
+
return new GraphIndex(store, manifest.blocks, manifest.members, manifest.files.map((file) => file.path));
|
|
87
|
+
}
|
|
88
|
+
function holdUntilClose(index, release) {
|
|
89
|
+
const innerClose = index.close.bind(index);
|
|
90
|
+
let released = false;
|
|
91
|
+
const close = async () => {
|
|
92
|
+
try {
|
|
93
|
+
await innerClose();
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
if (!released) {
|
|
97
|
+
released = true;
|
|
98
|
+
await release();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return Object.assign(index, { close });
|
|
103
|
+
}
|
|
104
|
+
async function rebuildIndexUnlocked(options) {
|
|
105
|
+
const { rootDir, srcDir, libraries, indexDir } = resolveOptions(options);
|
|
106
|
+
const bootstrap = bootstrapFullProjectRegistry({ rootDir, srcDir, libraries });
|
|
107
|
+
const data = graphDataFromRegistry(bootstrap.registry, { rootDir, srcDir });
|
|
108
|
+
const dbDir = resolveDbDir(indexDir);
|
|
109
|
+
rmSync(dbDir, { recursive: true, force: true });
|
|
110
|
+
mkdirSync(indexDir, { recursive: true });
|
|
111
|
+
const store = await createLadybugStore(dbDir);
|
|
112
|
+
await populateStore(store, data);
|
|
113
|
+
const index = new GraphIndex(store, resolvedBlockCount(data), data.members.length, data.filePaths, bootstrap.diagnostics);
|
|
114
|
+
const manifest = buildManifest(rootDir, index.filePaths, index.blocks, index.memberCount);
|
|
115
|
+
writeFileSync(join(indexDir, MANIFEST_FILE), `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
116
|
+
return {
|
|
117
|
+
index,
|
|
118
|
+
diagnostics: bootstrap.diagnostics,
|
|
119
|
+
blocks: index.blocks,
|
|
120
|
+
members: index.memberCount,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export async function rebuildIndex(options = {}) {
|
|
124
|
+
const { indexDir } = resolveOptions(options);
|
|
125
|
+
const release = await acquireGraphLock(indexDir);
|
|
126
|
+
try {
|
|
127
|
+
const result = await rebuildIndexUnlocked(options);
|
|
128
|
+
holdUntilClose(result.index, release);
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
await release();
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export async function openGraph(options = {}) {
|
|
137
|
+
const { indexDir } = resolveOptions(options);
|
|
138
|
+
const release = await acquireGraphLock(indexDir);
|
|
139
|
+
try {
|
|
140
|
+
const loaded = await loadIndex(options);
|
|
141
|
+
if (loaded) {
|
|
142
|
+
holdUntilClose(loaded, release);
|
|
143
|
+
return {
|
|
144
|
+
index: loaded,
|
|
145
|
+
diagnostics: loaded.diagnostics,
|
|
146
|
+
blocks: loaded.blocks,
|
|
147
|
+
members: loaded.memberCount,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const result = await rebuildIndexUnlocked(options);
|
|
151
|
+
holdUntilClose(result.index, release);
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
await release();
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Database, Connection } from "@ladybugdb/core";
|
|
2
|
+
import type { GraphData } from "./mapper.js";
|
|
3
|
+
import type { GraphStore } from "./store.js";
|
|
4
|
+
export declare class LadybugStore implements GraphStore {
|
|
5
|
+
private readonly database;
|
|
6
|
+
private readonly connection;
|
|
7
|
+
private closed;
|
|
8
|
+
constructor(database: Database, connection: Connection);
|
|
9
|
+
exec(cypher: string, params?: Record<string, unknown>): Promise<unknown[][]>;
|
|
10
|
+
execWithColumns(cypher: string, params?: Record<string, unknown>): Promise<{
|
|
11
|
+
columns: string[];
|
|
12
|
+
rows: unknown[][];
|
|
13
|
+
}>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function openLadybugStore(databasePath: string): Promise<LadybugStore>;
|
|
17
|
+
export declare function createLadybugStore(databasePath: string): Promise<LadybugStore>;
|
|
18
|
+
export declare function populateStore(store: LadybugStore, data: GraphData): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=ladybug-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ladybug-store.d.ts","sourceRoot":"","sources":["../src/ladybug-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAyC,MAAM,aAAa,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqB7C,qBAAa,YAAa,YAAW,UAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;IAKhD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAK5E,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAC;IAgB9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B;AAED,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAQlF;AAED,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAMpF;AAiFD,wBAAsB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvF"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Database, Connection } from "@ladybugdb/core";
|
|
2
|
+
import { GRAPH_SCHEMA_DDL } from "./schema.js";
|
|
3
|
+
import { withLadybugLockRetry } from "./graph-lock.js";
|
|
4
|
+
async function rowsFromResult(result) {
|
|
5
|
+
const results = Array.isArray(result) ? result : [result];
|
|
6
|
+
const columns = results[0] ? await results[0].getColumnNames() : [];
|
|
7
|
+
const rows = [];
|
|
8
|
+
for (const item of results) {
|
|
9
|
+
const records = await item.getAll();
|
|
10
|
+
const names = await item.getColumnNames();
|
|
11
|
+
for (const record of records) {
|
|
12
|
+
rows.push(names.map((name) => record[name]));
|
|
13
|
+
}
|
|
14
|
+
item.close();
|
|
15
|
+
}
|
|
16
|
+
return { columns, rows };
|
|
17
|
+
}
|
|
18
|
+
export class LadybugStore {
|
|
19
|
+
database;
|
|
20
|
+
connection;
|
|
21
|
+
closed = false;
|
|
22
|
+
constructor(database, connection) {
|
|
23
|
+
this.database = database;
|
|
24
|
+
this.connection = connection;
|
|
25
|
+
}
|
|
26
|
+
async exec(cypher, params) {
|
|
27
|
+
const { rows } = await this.execWithColumns(cypher, params);
|
|
28
|
+
return rows;
|
|
29
|
+
}
|
|
30
|
+
async execWithColumns(cypher, params) {
|
|
31
|
+
if (params && Object.keys(params).length > 0) {
|
|
32
|
+
const prepared = await this.connection.prepare(cypher);
|
|
33
|
+
if (!prepared.isSuccess()) {
|
|
34
|
+
throw new Error(prepared.getErrorMessage() || `Failed to prepare: ${cypher}`);
|
|
35
|
+
}
|
|
36
|
+
const result = await this.connection.execute(prepared, params);
|
|
37
|
+
return rowsFromResult(result);
|
|
38
|
+
}
|
|
39
|
+
const result = await this.connection.query(cypher);
|
|
40
|
+
return rowsFromResult(result);
|
|
41
|
+
}
|
|
42
|
+
async close() {
|
|
43
|
+
if (this.closed) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.closed = true;
|
|
47
|
+
await this.connection.close();
|
|
48
|
+
await this.database.close();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export async function openLadybugStore(databasePath) {
|
|
52
|
+
return withLadybugLockRetry(async () => {
|
|
53
|
+
const database = new Database(databasePath);
|
|
54
|
+
await database.init();
|
|
55
|
+
const connection = new Connection(database);
|
|
56
|
+
await connection.init();
|
|
57
|
+
return new LadybugStore(database, connection);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export async function createLadybugStore(databasePath) {
|
|
61
|
+
const store = await openLadybugStore(databasePath);
|
|
62
|
+
for (const ddl of GRAPH_SCHEMA_DDL) {
|
|
63
|
+
await store.exec(ddl);
|
|
64
|
+
}
|
|
65
|
+
return store;
|
|
66
|
+
}
|
|
67
|
+
async function insertBlocks(store, blocks) {
|
|
68
|
+
const cypher = "CREATE (:Block {fqn: $fqn, name: $name, file: $file, library: $library, origin: $origin, resolved: $resolved, abstract: $abstract})";
|
|
69
|
+
for (const block of blocks) {
|
|
70
|
+
await store.exec(cypher, {
|
|
71
|
+
fqn: block.fqn,
|
|
72
|
+
name: block.name,
|
|
73
|
+
file: block.file,
|
|
74
|
+
library: block.library,
|
|
75
|
+
origin: block.origin,
|
|
76
|
+
resolved: block.resolved,
|
|
77
|
+
abstract: block.abstract,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function insertMembers(store, members) {
|
|
82
|
+
const cypher = "CREATE (:Member {id: $id, ownerFqn: $ownerFqn, name: $name, kind: $kind, displayFqn: $displayFqn, file: $file, line: $line, origin: $origin})";
|
|
83
|
+
for (const member of members) {
|
|
84
|
+
await store.exec(cypher, {
|
|
85
|
+
id: member.id,
|
|
86
|
+
ownerFqn: member.ownerFqn,
|
|
87
|
+
name: member.name,
|
|
88
|
+
kind: member.kind,
|
|
89
|
+
displayFqn: member.displayFqn,
|
|
90
|
+
file: member.file,
|
|
91
|
+
line: member.line,
|
|
92
|
+
origin: member.origin,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const BLOCK_TO_BLOCK = new Set(["BASE_TYPE", "CONTRACT", "HAS_SUBBLOCK"]);
|
|
97
|
+
const MEMBER_TO_BLOCK = new Set(["MEMBER_TYPE", "INPUT_TYPE", "OUTPUT_TYPE", "THROWS"]);
|
|
98
|
+
async function insertEdges(store, edges) {
|
|
99
|
+
for (const edge of edges) {
|
|
100
|
+
if (BLOCK_TO_BLOCK.has(edge.relation)) {
|
|
101
|
+
await store.exec(`MATCH (a:Block {fqn: $from}), (b:Block {fqn: $to}) CREATE (a)-[:${edge.relation} {file: $file, line: $line}]->(b)`, { from: edge.from, to: edge.to, file: edge.file, line: edge.line });
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (edge.relation === "HAS_MEMBER") {
|
|
105
|
+
await store.exec("MATCH (a:Block {fqn: $from}), (m:Member {id: $to}) CREATE (a)-[:HAS_MEMBER {file: $file, line: $line}]->(m)", { from: edge.from, to: edge.to, file: edge.file, line: edge.line });
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (edge.relation === "MEMBER_TYPE") {
|
|
109
|
+
await store.exec("MATCH (m:Member {id: $from}), (b:Block {fqn: $to}) CREATE (m)-[:MEMBER_TYPE {file: $file, line: $line, cardinality: $cardinality}]->(b)", {
|
|
110
|
+
from: edge.from,
|
|
111
|
+
to: edge.to,
|
|
112
|
+
file: edge.file,
|
|
113
|
+
line: edge.line,
|
|
114
|
+
cardinality: edge.cardinality,
|
|
115
|
+
});
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (MEMBER_TO_BLOCK.has(edge.relation)) {
|
|
119
|
+
await store.exec(`MATCH (m:Member {id: $from}), (b:Block {fqn: $to}) CREATE (m)-[:${edge.relation} {file: $file, line: $line}]->(b)`, {
|
|
120
|
+
from: edge.from,
|
|
121
|
+
to: edge.to,
|
|
122
|
+
file: edge.file,
|
|
123
|
+
line: edge.line,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export async function populateStore(store, data) {
|
|
129
|
+
await insertBlocks(store, data.blocks);
|
|
130
|
+
await insertMembers(store, data.members);
|
|
131
|
+
await insertEdges(store, data.edges);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=ladybug-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ladybug-store.js","sourceRoot":"","sources":["../src/ladybug-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,KAAK,UAAU,cAAc,CAAC,MAAmC;IAI/D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,OAAO,YAAY;IACN,QAAQ,CAAW;IACnB,UAAU,CAAa;IAChC,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,QAAkB,EAAE,UAAsB;QACpD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,MAAgC;QACzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,MAAgC;QAEhC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,sBAAsB,MAAM,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAC1C,QAAQ,EACR,MAAmD,CACpD,CAAC;YACF,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,YAAoB;IACzD,OAAO,oBAAoB,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,YAAoB;IAC3D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAmB,EAAE,MAAqB;IACpE,MAAM,MAAM,GACV,qIAAqI,CAAC;IACxI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YACvB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAmB,EAAE,OAAuB;IACvE,MAAM,MAAM,GACV,+IAA+I,CAAC;IAClJ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YACvB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;AAC1E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAExF,KAAK,UAAU,WAAW,CAAC,KAAmB,EAAE,KAAmB;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC,IAAI,CACd,mEAAmE,IAAI,CAAC,QAAQ,mCAAmC,EACnH,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACnE,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC,IAAI,CACd,6GAA6G,EAC7G,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACnE,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,KAAK,CAAC,IAAI,CACd,yIAAyI,EACzI;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CACF,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,KAAK,CAAC,IAAI,CACd,mEAAmE,IAAI,CAAC,QAAQ,mCAAmC,EACnH;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAmB,EAAE,IAAe;IACtE,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/mapper.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type TypeRegistry } from "@blockml/framework";
|
|
2
|
+
import type { GraphOrigin, GraphRelation, MemberKind } from "./types.js";
|
|
3
|
+
export interface MappedBlock {
|
|
4
|
+
fqn: string;
|
|
5
|
+
name: string;
|
|
6
|
+
file: string;
|
|
7
|
+
library: string;
|
|
8
|
+
origin: GraphOrigin;
|
|
9
|
+
resolved: boolean;
|
|
10
|
+
abstract: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface MappedMember {
|
|
13
|
+
id: string;
|
|
14
|
+
ownerFqn: string;
|
|
15
|
+
name: string;
|
|
16
|
+
kind: MemberKind;
|
|
17
|
+
displayFqn: string;
|
|
18
|
+
file: string;
|
|
19
|
+
line: number;
|
|
20
|
+
origin: GraphOrigin;
|
|
21
|
+
}
|
|
22
|
+
export interface MappedEdge {
|
|
23
|
+
relation: GraphRelation;
|
|
24
|
+
from: string;
|
|
25
|
+
to: string;
|
|
26
|
+
file: string;
|
|
27
|
+
line: number;
|
|
28
|
+
cardinality: string;
|
|
29
|
+
}
|
|
30
|
+
export interface GraphData {
|
|
31
|
+
blocks: MappedBlock[];
|
|
32
|
+
members: MappedMember[];
|
|
33
|
+
edges: MappedEdge[];
|
|
34
|
+
filePaths: string[];
|
|
35
|
+
}
|
|
36
|
+
export declare function graphDataFromRegistry(registry: TypeRegistry, options?: {
|
|
37
|
+
rootDir?: string;
|
|
38
|
+
srcDir?: string;
|
|
39
|
+
}): GraphData;
|
|
40
|
+
//# sourceMappingURL=mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"AAQA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AA2RD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,SAAS,CAmDX"}
|
package/dist/mapper.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { isAbsolute, relative, resolve } from "node:path";
|
|
2
|
+
import { projectSourceRoots } from "@blockml/framework";
|
|
3
|
+
import { collectNamedTypes } from "./type-refs.js";
|
|
4
|
+
function fqnToPackagePrefix(fqn) {
|
|
5
|
+
const segments = fqn.split(".");
|
|
6
|
+
return segments.length > 1 ? segments.slice(0, -1).join(".") : fqn;
|
|
7
|
+
}
|
|
8
|
+
function lastSegment(fqn) {
|
|
9
|
+
const parts = fqn.split(".");
|
|
10
|
+
return parts[parts.length - 1] || fqn;
|
|
11
|
+
}
|
|
12
|
+
function isPathInside(inner, outer) {
|
|
13
|
+
const a = resolve(inner);
|
|
14
|
+
const b = resolve(outer);
|
|
15
|
+
const rel = relative(b, a);
|
|
16
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
17
|
+
}
|
|
18
|
+
function originForFile(filePath, workspaceRoots) {
|
|
19
|
+
if (!filePath) {
|
|
20
|
+
return "unresolved";
|
|
21
|
+
}
|
|
22
|
+
for (const root of workspaceRoots) {
|
|
23
|
+
if (isPathInside(filePath, root)) {
|
|
24
|
+
return "workspace";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return "dependency";
|
|
28
|
+
}
|
|
29
|
+
function locFile(source, fallback) {
|
|
30
|
+
return source?.file || fallback;
|
|
31
|
+
}
|
|
32
|
+
function locLine(source) {
|
|
33
|
+
return source?.line ?? 0;
|
|
34
|
+
}
|
|
35
|
+
function memberId(ownerFqn, kind, name) {
|
|
36
|
+
return `${ownerFqn}#${kind}:${name}`;
|
|
37
|
+
}
|
|
38
|
+
function addBlock(blocks, block) {
|
|
39
|
+
const existing = blocks.get(block.fqn);
|
|
40
|
+
if (existing?.resolved && !block.resolved) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (existing && existing.resolved === block.resolved) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const mapped = {
|
|
47
|
+
fqn: block.fqn,
|
|
48
|
+
name: block.name,
|
|
49
|
+
file: block.file,
|
|
50
|
+
library: block.library ?? fqnToPackagePrefix(block.fqn),
|
|
51
|
+
origin: block.origin,
|
|
52
|
+
resolved: block.resolved,
|
|
53
|
+
abstract: block.abstract,
|
|
54
|
+
};
|
|
55
|
+
blocks.set(block.fqn, mapped);
|
|
56
|
+
}
|
|
57
|
+
function ensureTarget(blocks, fqn) {
|
|
58
|
+
if (blocks.has(fqn)) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
addBlock(blocks, {
|
|
62
|
+
fqn,
|
|
63
|
+
name: lastSegment(fqn),
|
|
64
|
+
file: "",
|
|
65
|
+
origin: "unresolved",
|
|
66
|
+
resolved: false,
|
|
67
|
+
abstract: false,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function addEdge(edges, edge) {
|
|
71
|
+
edges.push(edge);
|
|
72
|
+
}
|
|
73
|
+
function typeEdgesFromNamed(relation, from, refs, file, line, blocks, edges, workspaceRoots) {
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
for (const ref of refs) {
|
|
76
|
+
if (!ref.fqn || seen.has(ref.fqn)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
seen.add(ref.fqn);
|
|
80
|
+
ensureTarget(blocks, ref.fqn);
|
|
81
|
+
const edge = {
|
|
82
|
+
relation,
|
|
83
|
+
from,
|
|
84
|
+
to: ref.fqn,
|
|
85
|
+
file,
|
|
86
|
+
line,
|
|
87
|
+
cardinality: ref.cardinality ?? "",
|
|
88
|
+
};
|
|
89
|
+
addEdge(edges, edge);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function memberTypeRefs(member) {
|
|
93
|
+
switch (member.kind) {
|
|
94
|
+
case "property": {
|
|
95
|
+
if (member.type) {
|
|
96
|
+
const fromExpr = collectNamedTypes(member.type);
|
|
97
|
+
if (fromExpr.length > 0) {
|
|
98
|
+
return fromExpr;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return member.typeFqn ? [{ fqn: member.typeFqn }] : [];
|
|
102
|
+
}
|
|
103
|
+
case "aggregation": {
|
|
104
|
+
const refs = collectNamedTypes(member.type);
|
|
105
|
+
if (member.cardinality) {
|
|
106
|
+
return refs.map((ref) => {
|
|
107
|
+
const named = { fqn: ref.fqn };
|
|
108
|
+
const cardinality = ref.cardinality ?? member.cardinality;
|
|
109
|
+
if (cardinality) {
|
|
110
|
+
named.cardinality = cardinality;
|
|
111
|
+
}
|
|
112
|
+
return named;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return refs;
|
|
116
|
+
}
|
|
117
|
+
case "association":
|
|
118
|
+
return collectNamedTypes(member.type);
|
|
119
|
+
case "capability": {
|
|
120
|
+
const refs = [];
|
|
121
|
+
if (member.typeFqn) {
|
|
122
|
+
refs.push({ fqn: member.typeFqn });
|
|
123
|
+
}
|
|
124
|
+
return refs;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function capabilityTypeEdges(member, memberKey, file, line, blocks, edges, workspaceRoots) {
|
|
129
|
+
typeEdgesFromNamed("INPUT_TYPE", memberKey, collectNamedTypes(member.inputType), file, locLine(member.inputTypeSource) || line, blocks, edges, workspaceRoots);
|
|
130
|
+
typeEdgesFromNamed("OUTPUT_TYPE", memberKey, collectNamedTypes(member.outputType), file, locLine(member.outputTypeSource) || line, blocks, edges, workspaceRoots);
|
|
131
|
+
const throwsRefs = (member.throws ?? [])
|
|
132
|
+
.map((entry) => entry.value?.trim())
|
|
133
|
+
.filter((value) => Boolean(value))
|
|
134
|
+
.map((fqn) => ({ fqn }));
|
|
135
|
+
typeEdgesFromNamed("THROWS", memberKey, throwsRefs, file, line, blocks, edges, workspaceRoots);
|
|
136
|
+
}
|
|
137
|
+
function mapMembers(owner, file, origin, blocks, members, edges, workspaceRoots) {
|
|
138
|
+
const ownerFqn = owner.type;
|
|
139
|
+
if (!ownerFqn) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
for (const member of owner.members) {
|
|
143
|
+
const kind = member.kind;
|
|
144
|
+
const id = memberId(ownerFqn, kind, member.name);
|
|
145
|
+
const memberFile = locFile(member.source, file);
|
|
146
|
+
const memberLine = locLine(member.source);
|
|
147
|
+
members.push({
|
|
148
|
+
id,
|
|
149
|
+
ownerFqn,
|
|
150
|
+
name: member.name,
|
|
151
|
+
kind,
|
|
152
|
+
displayFqn: `${ownerFqn}.${member.name}`,
|
|
153
|
+
file: memberFile,
|
|
154
|
+
line: memberLine,
|
|
155
|
+
origin,
|
|
156
|
+
});
|
|
157
|
+
addEdge(edges, {
|
|
158
|
+
relation: "HAS_MEMBER",
|
|
159
|
+
from: ownerFqn,
|
|
160
|
+
to: id,
|
|
161
|
+
file: memberFile,
|
|
162
|
+
line: memberLine,
|
|
163
|
+
cardinality: "",
|
|
164
|
+
});
|
|
165
|
+
typeEdgesFromNamed("MEMBER_TYPE", id, memberTypeRefs(member), locFile(member.typeSource, memberFile), locLine(member.typeSource) || memberLine, blocks, edges, workspaceRoots);
|
|
166
|
+
if (member.kind === "capability") {
|
|
167
|
+
capabilityTypeEdges(member, id, memberFile, memberLine, blocks, edges, workspaceRoots);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function mapBlockRelations(block, file, blocks, edges, workspaceRoots) {
|
|
172
|
+
const fqn = block.type;
|
|
173
|
+
if (!fqn) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const parentFqn = block.baseType ||
|
|
177
|
+
(block.baseTypeExpression?.kind === "named" ? block.baseTypeExpression.fqn : undefined);
|
|
178
|
+
const baseRefs = parentFqn ? [{ fqn: parentFqn }] : [];
|
|
179
|
+
typeEdgesFromNamed("BASE_TYPE", fqn, baseRefs, locFile(block.baseTypeSource, file), locLine(block.baseTypeSource), blocks, edges, workspaceRoots);
|
|
180
|
+
const contractRefs = (block.contracts ?? [])
|
|
181
|
+
.map((entry) => entry.value?.trim())
|
|
182
|
+
.filter((value) => Boolean(value))
|
|
183
|
+
.map((value) => ({ fqn: value }));
|
|
184
|
+
typeEdgesFromNamed("CONTRACT", fqn, contractRefs, file, locLine(block.source), blocks, edges, workspaceRoots);
|
|
185
|
+
for (const sub of block.subBlocks) {
|
|
186
|
+
if (!sub.type) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
addEdge(edges, {
|
|
190
|
+
relation: "HAS_SUBBLOCK",
|
|
191
|
+
from: fqn,
|
|
192
|
+
to: sub.type,
|
|
193
|
+
file: locFile(sub.source, file),
|
|
194
|
+
line: locLine(sub.source),
|
|
195
|
+
cardinality: "",
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export function graphDataFromRegistry(registry, options = {}) {
|
|
200
|
+
const rootDir = options.rootDir ?? process.cwd();
|
|
201
|
+
const workspaceRoots = projectSourceRoots(rootDir, options.srcDir);
|
|
202
|
+
const blocks = new Map();
|
|
203
|
+
const members = [];
|
|
204
|
+
const edges = [];
|
|
205
|
+
for (const fqn of registry.keys()) {
|
|
206
|
+
const doc = registry.get(fqn);
|
|
207
|
+
const block = doc?.block;
|
|
208
|
+
if (!block?.type || !block.name) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const file = doc?.source?.filePath ?? locFile(block.source, fqn);
|
|
212
|
+
const origin = originForFile(file, workspaceRoots);
|
|
213
|
+
addBlock(blocks, {
|
|
214
|
+
fqn: block.type,
|
|
215
|
+
name: block.name,
|
|
216
|
+
file,
|
|
217
|
+
origin,
|
|
218
|
+
resolved: true,
|
|
219
|
+
abstract: block.abstract === true,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
for (const fqn of registry.keys()) {
|
|
223
|
+
const doc = registry.get(fqn);
|
|
224
|
+
const block = doc?.block;
|
|
225
|
+
if (!block?.type) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
const file = doc?.source?.filePath ?? locFile(block.source, fqn);
|
|
229
|
+
const origin = originForFile(file, workspaceRoots);
|
|
230
|
+
mapBlockRelations(block, file, blocks, edges, workspaceRoots);
|
|
231
|
+
mapMembers(block, file, origin, blocks, members, edges, workspaceRoots);
|
|
232
|
+
}
|
|
233
|
+
const filePaths = [
|
|
234
|
+
...new Set([...blocks.values()]
|
|
235
|
+
.map((block) => block.file)
|
|
236
|
+
.filter((file) => Boolean(file))),
|
|
237
|
+
].sort();
|
|
238
|
+
return {
|
|
239
|
+
blocks: [...blocks.values()].sort((a, b) => a.fqn.localeCompare(b.fqn)),
|
|
240
|
+
members: members.sort((a, b) => a.id.localeCompare(b.id)),
|
|
241
|
+
edges,
|
|
242
|
+
filePaths,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GraphMember, GraphNeighbor, GraphNode, GraphPath, GraphQueryResult } from "./types.js";
|
|
2
|
+
import { graphSchema } from "./schema.js";
|
|
3
|
+
import type { GraphStore } from "./store.js";
|
|
4
|
+
declare function loadBlock(store: GraphStore, fqn: string): Promise<GraphNode | undefined>;
|
|
5
|
+
export declare function uses(store: GraphStore, fqn: string, depth?: number): Promise<GraphNeighbor[]>;
|
|
6
|
+
export declare function usedBy(store: GraphStore, fqn: string, depth?: number): Promise<GraphNeighbor[]>;
|
|
7
|
+
export declare function neighbors(store: GraphStore, fqn: string, depth?: number): Promise<GraphNeighbor[]>;
|
|
8
|
+
export declare function ancestors(store: GraphStore, fqn: string, depth?: number): Promise<GraphNode[]>;
|
|
9
|
+
export declare function descendants(store: GraphStore, fqn: string, depth?: number): Promise<GraphNode[]>;
|
|
10
|
+
export declare function shortestPath(store: GraphStore, from: string, to: string, depth?: number): Promise<GraphPath | undefined>;
|
|
11
|
+
export declare function members(store: GraphStore, fqn: string): Promise<GraphMember[]>;
|
|
12
|
+
export declare function runQuery(store: GraphStore, cypher: string, params?: Record<string, unknown>): Promise<GraphQueryResult>;
|
|
13
|
+
export { graphSchema, loadBlock };
|
|
14
|
+
//# sourceMappingURL=operations.d.ts.map
|