@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.
Files changed (76) hide show
  1. package/blocks/org/blockml/bml/graph/BuildIndexResult.bml +43 -0
  2. package/blocks/org/blockml/bml/graph/GraphEdge.bml +49 -0
  3. package/blocks/org/blockml/bml/graph/GraphIndexOptions.bml +43 -0
  4. package/blocks/org/blockml/bml/graph/GraphMember.bml +46 -0
  5. package/blocks/org/blockml/bml/graph/GraphNeighbor.bml +52 -0
  6. package/blocks/org/blockml/bml/graph/GraphNode.bml +58 -0
  7. package/blocks/org/blockml/bml/graph/GraphPath.bml +40 -0
  8. package/blocks/org/blockml/bml/graph/GraphQueryResult.bml +37 -0
  9. package/blocks/org/blockml/bml/graph/GraphType.bml +33 -0
  10. package/blocks/org/blockml/bml/graph/IndexStatus.bml +43 -0
  11. package/blocks/org/blockml/bml/graph/Library.bml +95 -0
  12. package/blocks/org/blockml/bml/graph/README.bml +36 -0
  13. package/blocks/org/blockml/bml/graph/capability/Ancestors.bml +40 -0
  14. package/blocks/org/blockml/bml/graph/capability/BuildIndex.bml +41 -0
  15. package/blocks/org/blockml/bml/graph/capability/Descendants.bml +43 -0
  16. package/blocks/org/blockml/bml/graph/capability/Members.bml +37 -0
  17. package/blocks/org/blockml/bml/graph/capability/Neighbors.bml +53 -0
  18. package/blocks/org/blockml/bml/graph/capability/OpenIndex.bml +40 -0
  19. package/blocks/org/blockml/bml/graph/capability/Path.bml +43 -0
  20. package/blocks/org/blockml/bml/graph/capability/Query.bml +43 -0
  21. package/blocks/org/blockml/bml/graph/capability/RebuildIndex.bml +40 -0
  22. package/blocks/org/blockml/bml/graph/capability/Schema.bml +37 -0
  23. package/blocks/org/blockml/bml/graph/capability/UsedBy.bml +52 -0
  24. package/blocks/org/blockml/bml/graph/capability/Uses.bml +49 -0
  25. package/blocks/org/blockml/bml/graph/documentation/ArchitectureOverview.bml +39 -0
  26. package/blocks/org/blockml/bml/graph/documentation/Introduction.bml +37 -0
  27. package/blocks/org/blockml/bml/graph/documentation/LayerSeparation.bml +39 -0
  28. package/blocks/org/blockml/bml/graph/documentation/PackageOwnership.bml +36 -0
  29. package/blocks/org/blockml/bml/graph/documentation/PublicApi.bml +44 -0
  30. package/blocks/org/blockml/bml/graph/documentation/ScopeExclusions.bml +40 -0
  31. package/blocks/org/blockml/bml/graph/documentation/V1Scope.bml +41 -0
  32. package/dist/fingerprint.d.ts +27 -0
  33. package/dist/fingerprint.d.ts.map +1 -0
  34. package/dist/fingerprint.js +146 -0
  35. package/dist/fingerprint.js.map +1 -0
  36. package/dist/graph-index.d.ts +23 -0
  37. package/dist/graph-index.d.ts.map +1 -0
  38. package/dist/graph-index.js +49 -0
  39. package/dist/graph-index.js.map +1 -0
  40. package/dist/graph-lock.d.ts +6 -0
  41. package/dist/graph-lock.d.ts.map +1 -0
  42. package/dist/graph-lock.js +106 -0
  43. package/dist/graph-lock.js.map +1 -0
  44. package/dist/index.d.ts +23 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +159 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/ladybug-store.d.ts +19 -0
  49. package/dist/ladybug-store.d.ts.map +1 -0
  50. package/dist/ladybug-store.js +133 -0
  51. package/dist/ladybug-store.js.map +1 -0
  52. package/dist/mapper.d.ts +40 -0
  53. package/dist/mapper.d.ts.map +1 -0
  54. package/dist/mapper.js +245 -0
  55. package/dist/mapper.js.map +1 -0
  56. package/dist/operations.d.ts +14 -0
  57. package/dist/operations.d.ts.map +1 -0
  58. package/dist/operations.js +375 -0
  59. package/dist/operations.js.map +1 -0
  60. package/dist/schema.d.ts +8 -0
  61. package/dist/schema.d.ts.map +1 -0
  62. package/dist/schema.js +42 -0
  63. package/dist/schema.js.map +1 -0
  64. package/dist/store.d.ts +10 -0
  65. package/dist/store.d.ts.map +1 -0
  66. package/dist/store.js +2 -0
  67. package/dist/store.js.map +1 -0
  68. package/dist/type-refs.d.ts +8 -0
  69. package/dist/type-refs.d.ts.map +1 -0
  70. package/dist/type-refs.js +48 -0
  71. package/dist/type-refs.js.map +1 -0
  72. package/dist/types.d.ts +103 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +4 -0
  75. package/dist/types.js.map +1 -0
  76. 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":"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"}
@@ -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