@living-architecture/riviere-query 0.2.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/README.md +11 -0
- package/dist/RiviereQuery.d.ts +486 -0
- package/dist/RiviereQuery.d.ts.map +1 -0
- package/dist/RiviereQuery.js +553 -0
- package/dist/component-queries.d.ts +8 -0
- package/dist/component-queries.d.ts.map +1 -0
- package/dist/component-queries.js +24 -0
- package/dist/cross-domain-queries.d.ts +5 -0
- package/dist/cross-domain-queries.d.ts.map +1 -0
- package/dist/cross-domain-queries.js +92 -0
- package/dist/depth-queries.d.ts +4 -0
- package/dist/depth-queries.d.ts.map +1 -0
- package/dist/depth-queries.js +54 -0
- package/dist/domain-queries.d.ts +10 -0
- package/dist/domain-queries.d.ts.map +1 -0
- package/dist/domain-queries.js +101 -0
- package/dist/domain-types.d.ts +307 -0
- package/dist/domain-types.d.ts.map +1 -0
- package/dist/domain-types.js +111 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +10 -0
- package/dist/event-queries.d.ts +5 -0
- package/dist/event-queries.d.ts.map +1 -0
- package/dist/event-queries.js +32 -0
- package/dist/event-types.d.ts +88 -0
- package/dist/event-types.d.ts.map +1 -0
- package/dist/event-types.js +1 -0
- package/dist/external-system-queries.d.ts +13 -0
- package/dist/external-system-queries.d.ts.map +1 -0
- package/dist/external-system-queries.js +54 -0
- package/dist/flow-queries.d.ts +17 -0
- package/dist/flow-queries.d.ts.map +1 -0
- package/dist/flow-queries.js +127 -0
- package/dist/graph-diff.d.ts +4 -0
- package/dist/graph-diff.d.ts.map +1 -0
- package/dist/graph-diff.js +53 -0
- package/dist/graph-validation.d.ts +5 -0
- package/dist/graph-validation.d.ts.map +1 -0
- package/dist/graph-validation.js +72 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/riviere-graph-fixtures.d.ts +37 -0
- package/dist/riviere-graph-fixtures.d.ts.map +1 -0
- package/dist/riviere-graph-fixtures.js +73 -0
- package/dist/stats-queries.d.ts +4 -0
- package/dist/stats-queries.d.ts.map +1 -0
- package/dist/stats-queries.js +14 -0
- package/package.json +29 -0
package/README.md
ADDED
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
import type { RiviereGraph, Component, Link, ComponentType, DomainOpComponent, ExternalLink } from '@living-architecture/riviere-schema';
|
|
2
|
+
import type { Entity, EntityTransition, PublishedEvent, EventHandlerInfo } from './event-types';
|
|
3
|
+
import type { State, ComponentId, LinkId, ValidationResult, GraphDiff, Domain, Flow, SearchWithFlowResult, CrossDomainLink, DomainConnection, GraphStats, ExternalDomain } from './domain-types';
|
|
4
|
+
import { type SearchWithFlowOptions } from './flow-queries';
|
|
5
|
+
export type { Entity, EntityTransition } from './event-types';
|
|
6
|
+
export type { ComponentId, LinkId, ValidationErrorCode, ValidationError, ValidationResult, Domain, ComponentCounts, ComponentModification, DiffStats, GraphDiff, Flow, FlowStep, LinkType, SearchWithFlowResult, CrossDomainLink, DomainConnection, GraphStats, ExternalDomain } from './domain-types';
|
|
7
|
+
export type { SearchWithFlowOptions } from './flow-queries';
|
|
8
|
+
export { parseComponentId } from './domain-types';
|
|
9
|
+
export { ComponentNotFoundError } from './errors';
|
|
10
|
+
/**
|
|
11
|
+
* Query and analyze Riviere architecture graphs.
|
|
12
|
+
*
|
|
13
|
+
* RiviereQuery provides methods to explore components, trace execution flows,
|
|
14
|
+
* analyze domain models, and compare graph versions.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { RiviereQuery } from '@living-architecture/riviere-query'
|
|
19
|
+
*
|
|
20
|
+
* // From JSON
|
|
21
|
+
* const query = RiviereQuery.fromJSON(graphData)
|
|
22
|
+
*
|
|
23
|
+
* // Query components
|
|
24
|
+
* const apis = query.componentsByType('API')
|
|
25
|
+
* const orderDomain = query.componentsInDomain('orders')
|
|
26
|
+
*
|
|
27
|
+
* // Trace flows
|
|
28
|
+
* const flow = query.traceFlow('orders:checkout:api:post-orders')
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class RiviereQuery {
|
|
32
|
+
private readonly graph;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new RiviereQuery instance.
|
|
35
|
+
*
|
|
36
|
+
* @param graph - A valid RiviereGraph object
|
|
37
|
+
* @throws If the graph fails schema validation
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const graph: RiviereGraph = JSON.parse(jsonString)
|
|
42
|
+
* const query = new RiviereQuery(graph)
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
constructor(graph: RiviereGraph);
|
|
46
|
+
/**
|
|
47
|
+
* Creates a RiviereQuery from raw JSON data.
|
|
48
|
+
*
|
|
49
|
+
* @param json - Raw JSON data to parse as a RiviereGraph
|
|
50
|
+
* @returns A new RiviereQuery instance
|
|
51
|
+
* @throws If the JSON fails schema validation
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const jsonData = await fetch('/graph.json').then(r => r.json())
|
|
56
|
+
* const query = RiviereQuery.fromJSON(jsonData)
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
static fromJSON(json: unknown): RiviereQuery;
|
|
60
|
+
/**
|
|
61
|
+
* Returns all components in the graph.
|
|
62
|
+
*
|
|
63
|
+
* @returns Array of all components
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const allComponents = query.components()
|
|
68
|
+
* console.log(`Total: ${allComponents.length}`)
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
components(): Component[];
|
|
72
|
+
/**
|
|
73
|
+
* Returns all links in the graph.
|
|
74
|
+
*
|
|
75
|
+
* @returns Array of all links
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const allLinks = query.links()
|
|
80
|
+
* console.log(`Total links: ${allLinks.length}`)
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
links(): Link[];
|
|
84
|
+
/**
|
|
85
|
+
* Validates the graph structure beyond schema validation.
|
|
86
|
+
*
|
|
87
|
+
* Checks for structural issues like invalid link references.
|
|
88
|
+
*
|
|
89
|
+
* @returns Validation result with any errors found
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* const result = query.validate()
|
|
94
|
+
* if (!result.valid) {
|
|
95
|
+
* console.error('Validation errors:', result.errors)
|
|
96
|
+
* }
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
validate(): ValidationResult;
|
|
100
|
+
/**
|
|
101
|
+
* Detects orphan components with no incoming or outgoing links.
|
|
102
|
+
*
|
|
103
|
+
* @returns Array of component IDs that are disconnected from the graph
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const orphanIds = query.detectOrphans()
|
|
108
|
+
* if (orphanIds.length > 0) {
|
|
109
|
+
* console.warn(`Found ${orphanIds.length} orphan nodes`)
|
|
110
|
+
* }
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
detectOrphans(): ComponentId[];
|
|
114
|
+
/**
|
|
115
|
+
* Finds the first component matching a predicate.
|
|
116
|
+
*
|
|
117
|
+
* @param predicate - Function that returns true for matching components
|
|
118
|
+
* @returns The first matching component, or undefined if none found
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```typescript
|
|
122
|
+
* const checkout = query.find(c => c.name.includes('checkout'))
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
find(predicate: (component: Component) => boolean): Component | undefined;
|
|
126
|
+
/**
|
|
127
|
+
* Finds all components matching a predicate.
|
|
128
|
+
*
|
|
129
|
+
* @param predicate - Function that returns true for matching components
|
|
130
|
+
* @returns Array of all matching components
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const orderHandlers = query.findAll(c =>
|
|
135
|
+
* c.type === 'EventHandler' && c.domain === 'orders'
|
|
136
|
+
* )
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
findAll(predicate: (component: Component) => boolean): Component[];
|
|
140
|
+
/**
|
|
141
|
+
* Finds a component by its ID.
|
|
142
|
+
*
|
|
143
|
+
* @param id - The component ID to look up
|
|
144
|
+
* @returns The component, or undefined if not found
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const component = query.componentById('orders:checkout:api:post-orders')
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
componentById(id: ComponentId): Component | undefined;
|
|
152
|
+
/**
|
|
153
|
+
* Searches components by name, domain, or type.
|
|
154
|
+
*
|
|
155
|
+
* Case-insensitive search across component name, domain, and type fields.
|
|
156
|
+
*
|
|
157
|
+
* @param query - Search term
|
|
158
|
+
* @returns Array of matching components
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* const results = query.search('order')
|
|
163
|
+
* // Matches: "PlaceOrder", "orders" domain, etc.
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
search(query: string): Component[];
|
|
167
|
+
/**
|
|
168
|
+
* Returns all components in a specific domain.
|
|
169
|
+
*
|
|
170
|
+
* @param domainName - The domain name to filter by
|
|
171
|
+
* @returns Array of components in the domain
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* const orderComponents = query.componentsInDomain('orders')
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
componentsInDomain(domainName: string): Component[];
|
|
179
|
+
/**
|
|
180
|
+
* Returns all components of a specific type.
|
|
181
|
+
*
|
|
182
|
+
* @param type - The component type to filter by
|
|
183
|
+
* @returns Array of components of that type
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* const apis = query.componentsByType('API')
|
|
188
|
+
* const events = query.componentsByType('Event')
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
componentsByType(type: ComponentType): Component[];
|
|
192
|
+
/**
|
|
193
|
+
* Returns domain information with component counts.
|
|
194
|
+
*
|
|
195
|
+
* @returns Array of Domain objects sorted by name
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* const domains = query.domains()
|
|
200
|
+
* for (const domain of domains) {
|
|
201
|
+
* console.log(`${domain.name}: ${domain.componentCounts.total} components`)
|
|
202
|
+
* }
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
domains(): Domain[];
|
|
206
|
+
/**
|
|
207
|
+
* Returns all domain operations for a specific entity.
|
|
208
|
+
*
|
|
209
|
+
* @param entityName - The entity name to get operations for
|
|
210
|
+
* @returns Array of DomainOp components targeting the entity
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* ```typescript
|
|
214
|
+
* const orderOps = query.operationsFor('Order')
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
operationsFor(entityName: string): DomainOpComponent[];
|
|
218
|
+
/**
|
|
219
|
+
* Returns entities with their domain operations.
|
|
220
|
+
*
|
|
221
|
+
* @param domainName - Optional domain to filter by
|
|
222
|
+
* @returns Array of Entity objects with their operations
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* const allEntities = query.entities()
|
|
227
|
+
* const orderEntities = query.entities('orders')
|
|
228
|
+
*
|
|
229
|
+
* for (const entity of orderEntities) {
|
|
230
|
+
* console.log(`${entity.name} has ${entity.operations.length} operations`)
|
|
231
|
+
* }
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
entities(domainName?: string): Entity[];
|
|
235
|
+
/**
|
|
236
|
+
* Returns all business rules for an entity's operations.
|
|
237
|
+
*
|
|
238
|
+
* @param entityName - The entity name to get rules for
|
|
239
|
+
* @returns Array of business rule strings
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* ```typescript
|
|
243
|
+
* const rules = query.businessRulesFor('Order')
|
|
244
|
+
* ```
|
|
245
|
+
*/
|
|
246
|
+
businessRulesFor(entityName: string): string[];
|
|
247
|
+
/**
|
|
248
|
+
* Returns state transitions for an entity.
|
|
249
|
+
*
|
|
250
|
+
* @param entityName - The entity name to get transitions for
|
|
251
|
+
* @returns Array of EntityTransition objects
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* ```typescript
|
|
255
|
+
* const transitions = query.transitionsFor('Order')
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
transitionsFor(entityName: string): EntityTransition[];
|
|
259
|
+
/**
|
|
260
|
+
* Returns ordered states for an entity based on transitions.
|
|
261
|
+
*
|
|
262
|
+
* States are ordered by transition flow from initial to final states.
|
|
263
|
+
*
|
|
264
|
+
* @param entityName - The entity name to get states for
|
|
265
|
+
* @returns Array of state names in transition order
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* const orderStates = query.statesFor('Order')
|
|
270
|
+
* // ['pending', 'confirmed', 'shipped', 'delivered']
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
statesFor(entityName: string): State[];
|
|
274
|
+
/**
|
|
275
|
+
* Returns components that are entry points to the system.
|
|
276
|
+
*
|
|
277
|
+
* Entry points are UI, API, EventHandler, or Custom components
|
|
278
|
+
* with no incoming links.
|
|
279
|
+
*
|
|
280
|
+
* @returns Array of entry point components
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```typescript
|
|
284
|
+
* const entryPoints = query.entryPoints()
|
|
285
|
+
* ```
|
|
286
|
+
*/
|
|
287
|
+
entryPoints(): Component[];
|
|
288
|
+
/**
|
|
289
|
+
* Traces the complete flow bidirectionally from a starting component.
|
|
290
|
+
*
|
|
291
|
+
* Returns all nodes and links connected to the starting point,
|
|
292
|
+
* following links in both directions.
|
|
293
|
+
*
|
|
294
|
+
* @param startComponentId - ID of the component to start tracing from
|
|
295
|
+
* @returns Object with componentIds and linkIds in the flow
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* ```typescript
|
|
299
|
+
* const flow = query.traceFlow('orders:checkout:api:post-orders')
|
|
300
|
+
* console.log(`Flow includes ${flow.componentIds.length} nodes`)
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
traceFlow(startComponentId: ComponentId): {
|
|
304
|
+
componentIds: ComponentId[];
|
|
305
|
+
linkIds: LinkId[];
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* Compares this graph with another and returns the differences.
|
|
309
|
+
*
|
|
310
|
+
* @param other - The graph to compare against
|
|
311
|
+
* @returns GraphDiff with added, removed, and modified items
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
* ```typescript
|
|
315
|
+
* const oldGraph = RiviereQuery.fromJSON(oldData)
|
|
316
|
+
* const newGraph = RiviereQuery.fromJSON(newData)
|
|
317
|
+
* const diff = newGraph.diff(oldGraph.graph)
|
|
318
|
+
*
|
|
319
|
+
* console.log(`Added: ${diff.stats.componentsAdded}`)
|
|
320
|
+
* console.log(`Removed: ${diff.stats.componentsRemoved}`)
|
|
321
|
+
* ```
|
|
322
|
+
*/
|
|
323
|
+
diff(other: RiviereGraph): GraphDiff;
|
|
324
|
+
/**
|
|
325
|
+
* Returns published events with their handlers.
|
|
326
|
+
*
|
|
327
|
+
* @param domainName - Optional domain to filter by
|
|
328
|
+
* @returns Array of PublishedEvent objects sorted by event name
|
|
329
|
+
*
|
|
330
|
+
* @example
|
|
331
|
+
* ```typescript
|
|
332
|
+
* const allEvents = query.publishedEvents()
|
|
333
|
+
* const orderEvents = query.publishedEvents('orders')
|
|
334
|
+
*
|
|
335
|
+
* for (const event of orderEvents) {
|
|
336
|
+
* console.log(`${event.eventName} has ${event.handlers.length} handlers`)
|
|
337
|
+
* }
|
|
338
|
+
* ```
|
|
339
|
+
*/
|
|
340
|
+
publishedEvents(domainName?: string): PublishedEvent[];
|
|
341
|
+
/**
|
|
342
|
+
* Returns event handlers with their subscriptions.
|
|
343
|
+
*
|
|
344
|
+
* @param eventName - Optional event name to filter handlers by
|
|
345
|
+
* @returns Array of EventHandlerInfo objects sorted by handler name
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```typescript
|
|
349
|
+
* const allHandlers = query.eventHandlers()
|
|
350
|
+
* const orderPlacedHandlers = query.eventHandlers('order-placed')
|
|
351
|
+
* ```
|
|
352
|
+
*/
|
|
353
|
+
eventHandlers(eventName?: string): EventHandlerInfo[];
|
|
354
|
+
/**
|
|
355
|
+
* Returns all flows in the graph.
|
|
356
|
+
*
|
|
357
|
+
* Each flow starts from an entry point (UI, API, or Custom with no
|
|
358
|
+
* incoming links) and traces forward through the graph.
|
|
359
|
+
*
|
|
360
|
+
* @returns Array of Flow objects with entry point and steps
|
|
361
|
+
*
|
|
362
|
+
* @example
|
|
363
|
+
* ```typescript
|
|
364
|
+
* const flows = query.flows()
|
|
365
|
+
*
|
|
366
|
+
* for (const flow of flows) {
|
|
367
|
+
* console.log(`Flow: ${flow.entryPoint.name}`)
|
|
368
|
+
* for (const step of flow.steps) {
|
|
369
|
+
* console.log(` ${step.component.name} (depth: ${step.depth})`)
|
|
370
|
+
* }
|
|
371
|
+
* }
|
|
372
|
+
* ```
|
|
373
|
+
*/
|
|
374
|
+
flows(): Flow[];
|
|
375
|
+
/**
|
|
376
|
+
* Searches for components and returns their flow context.
|
|
377
|
+
*
|
|
378
|
+
* Returns both matching component IDs and all visible IDs in their flows.
|
|
379
|
+
*
|
|
380
|
+
* @param query - Search term
|
|
381
|
+
* @param options - Search options including returnAllOnEmptyQuery
|
|
382
|
+
* @returns Object with matchingIds and visibleIds arrays
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```typescript
|
|
386
|
+
* const result = query.searchWithFlow('checkout', { returnAllOnEmptyQuery: true })
|
|
387
|
+
* console.log(`Found ${result.matchingIds.length} matches`)
|
|
388
|
+
* console.log(`Showing ${result.visibleIds.length} nodes in context`)
|
|
389
|
+
* ```
|
|
390
|
+
*/
|
|
391
|
+
searchWithFlow(query: string, options: SearchWithFlowOptions): SearchWithFlowResult;
|
|
392
|
+
/**
|
|
393
|
+
* Returns links from a domain to other domains.
|
|
394
|
+
*
|
|
395
|
+
* @param domainName - The source domain name
|
|
396
|
+
* @returns Array of CrossDomainLink objects (deduplicated by target domain and type)
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```typescript
|
|
400
|
+
* const outgoing = query.crossDomainLinks('orders')
|
|
401
|
+
* ```
|
|
402
|
+
*/
|
|
403
|
+
crossDomainLinks(domainName: string): CrossDomainLink[];
|
|
404
|
+
/**
|
|
405
|
+
* Returns cross-domain connections with API and event counts.
|
|
406
|
+
*
|
|
407
|
+
* Shows both incoming and outgoing connections for a domain.
|
|
408
|
+
*
|
|
409
|
+
* @param domainName - The domain to analyze
|
|
410
|
+
* @returns Array of DomainConnection objects
|
|
411
|
+
*
|
|
412
|
+
* @example
|
|
413
|
+
* ```typescript
|
|
414
|
+
* const connections = query.domainConnections('orders')
|
|
415
|
+
* for (const conn of connections) {
|
|
416
|
+
* console.log(`${conn.direction} to ${conn.targetDomain}: ${conn.apiCount} API, ${conn.eventCount} event`)
|
|
417
|
+
* }
|
|
418
|
+
* ```
|
|
419
|
+
*/
|
|
420
|
+
domainConnections(domainName: string): DomainConnection[];
|
|
421
|
+
/**
|
|
422
|
+
* Returns aggregate statistics about the graph.
|
|
423
|
+
*
|
|
424
|
+
* @returns GraphStats with counts for components, links, domains, APIs, entities, and events
|
|
425
|
+
*
|
|
426
|
+
* @example
|
|
427
|
+
* ```typescript
|
|
428
|
+
* const stats = query.stats()
|
|
429
|
+
* console.log(`Components: ${stats.componentCount}`)
|
|
430
|
+
* console.log(`Links: ${stats.linkCount}`)
|
|
431
|
+
* console.log(`Domains: ${stats.domainCount}`)
|
|
432
|
+
* ```
|
|
433
|
+
*/
|
|
434
|
+
stats(): GraphStats;
|
|
435
|
+
/**
|
|
436
|
+
* Calculates depth from entry points for each component.
|
|
437
|
+
*
|
|
438
|
+
* Components unreachable from entry points will not be in the map.
|
|
439
|
+
*
|
|
440
|
+
* @returns Map of component ID to depth (0 = entry point)
|
|
441
|
+
*
|
|
442
|
+
* @example
|
|
443
|
+
* ```typescript
|
|
444
|
+
* const depths = query.nodeDepths()
|
|
445
|
+
* for (const [id, depth] of depths) {
|
|
446
|
+
* console.log(`${id}: depth ${depth}`)
|
|
447
|
+
* }
|
|
448
|
+
* ```
|
|
449
|
+
*/
|
|
450
|
+
nodeDepths(): Map<ComponentId, number>;
|
|
451
|
+
/**
|
|
452
|
+
* Returns all external links in the graph.
|
|
453
|
+
*
|
|
454
|
+
* External links represent connections from components to external
|
|
455
|
+
* systems that are not part of the graph (e.g., third-party APIs).
|
|
456
|
+
*
|
|
457
|
+
* @returns Array of all external links, or empty array if none exist
|
|
458
|
+
*
|
|
459
|
+
* @example
|
|
460
|
+
* ```typescript
|
|
461
|
+
* const externalLinks = query.externalLinks()
|
|
462
|
+
* for (const link of externalLinks) {
|
|
463
|
+
* console.log(`${link.source} -> ${link.target.name}`)
|
|
464
|
+
* }
|
|
465
|
+
* ```
|
|
466
|
+
*/
|
|
467
|
+
externalLinks(): ExternalLink[];
|
|
468
|
+
/**
|
|
469
|
+
* Returns external domains that components connect to.
|
|
470
|
+
*
|
|
471
|
+
* Each unique external target is returned as a separate ExternalDomain,
|
|
472
|
+
* with aggregated source domains and connection counts.
|
|
473
|
+
*
|
|
474
|
+
* @returns Array of ExternalDomain objects, sorted alphabetically by name
|
|
475
|
+
*
|
|
476
|
+
* @example
|
|
477
|
+
* ```typescript
|
|
478
|
+
* const externals = query.externalDomains()
|
|
479
|
+
* for (const ext of externals) {
|
|
480
|
+
* console.log(`${ext.name}: ${ext.connectionCount} connections from ${ext.sourceDomains.join(', ')}`)
|
|
481
|
+
* }
|
|
482
|
+
* ```
|
|
483
|
+
*/
|
|
484
|
+
externalDomains(): ExternalDomain[];
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=RiviereQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RiviereQuery.d.ts","sourceRoot":"","sources":["../src/RiviereQuery.ts"],"names":[],"mappings":"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"}
|