@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.
Files changed (50) hide show
  1. package/README.md +11 -0
  2. package/dist/RiviereQuery.d.ts +486 -0
  3. package/dist/RiviereQuery.d.ts.map +1 -0
  4. package/dist/RiviereQuery.js +553 -0
  5. package/dist/component-queries.d.ts +8 -0
  6. package/dist/component-queries.d.ts.map +1 -0
  7. package/dist/component-queries.js +24 -0
  8. package/dist/cross-domain-queries.d.ts +5 -0
  9. package/dist/cross-domain-queries.d.ts.map +1 -0
  10. package/dist/cross-domain-queries.js +92 -0
  11. package/dist/depth-queries.d.ts +4 -0
  12. package/dist/depth-queries.d.ts.map +1 -0
  13. package/dist/depth-queries.js +54 -0
  14. package/dist/domain-queries.d.ts +10 -0
  15. package/dist/domain-queries.d.ts.map +1 -0
  16. package/dist/domain-queries.js +101 -0
  17. package/dist/domain-types.d.ts +307 -0
  18. package/dist/domain-types.d.ts.map +1 -0
  19. package/dist/domain-types.js +111 -0
  20. package/dist/errors.d.ts +6 -0
  21. package/dist/errors.d.ts.map +1 -0
  22. package/dist/errors.js +10 -0
  23. package/dist/event-queries.d.ts +5 -0
  24. package/dist/event-queries.d.ts.map +1 -0
  25. package/dist/event-queries.js +32 -0
  26. package/dist/event-types.d.ts +88 -0
  27. package/dist/event-types.d.ts.map +1 -0
  28. package/dist/event-types.js +1 -0
  29. package/dist/external-system-queries.d.ts +13 -0
  30. package/dist/external-system-queries.d.ts.map +1 -0
  31. package/dist/external-system-queries.js +54 -0
  32. package/dist/flow-queries.d.ts +17 -0
  33. package/dist/flow-queries.d.ts.map +1 -0
  34. package/dist/flow-queries.js +127 -0
  35. package/dist/graph-diff.d.ts +4 -0
  36. package/dist/graph-diff.d.ts.map +1 -0
  37. package/dist/graph-diff.js +53 -0
  38. package/dist/graph-validation.d.ts +5 -0
  39. package/dist/graph-validation.d.ts.map +1 -0
  40. package/dist/graph-validation.js +72 -0
  41. package/dist/index.d.ts +5 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +4 -0
  44. package/dist/riviere-graph-fixtures.d.ts +37 -0
  45. package/dist/riviere-graph-fixtures.d.ts.map +1 -0
  46. package/dist/riviere-graph-fixtures.js +73 -0
  47. package/dist/stats-queries.d.ts +4 -0
  48. package/dist/stats-queries.d.ts.map +1 -0
  49. package/dist/stats-queries.js +14 -0
  50. package/package.json +29 -0
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # query
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build query` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test query` to execute the unit tests via [Vitest](https://vitest.dev/).
@@ -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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"}