jumbo-cli 3.17.0 → 3.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/application/context/relations/get/GetRelationsRequest.d.ts +10 -2
  2. package/dist/application/context/relations/get/GetRelationsRequest.d.ts.map +1 -1
  3. package/dist/application/context/relations/get/IRelationViewReader.d.ts +4 -6
  4. package/dist/application/context/relations/get/IRelationViewReader.d.ts.map +1 -1
  5. package/dist/application/context/relations/get/LocalGetRelationsGateway.d.ts +1 -0
  6. package/dist/application/context/relations/get/LocalGetRelationsGateway.d.ts.map +1 -1
  7. package/dist/application/context/relations/get/LocalGetRelationsGateway.js +30 -0
  8. package/dist/application/context/relations/get/LocalGetRelationsGateway.js.map +1 -1
  9. package/dist/application/context/relations/get/RelationDirection.d.ts +2 -0
  10. package/dist/application/context/relations/get/RelationDirection.d.ts.map +1 -0
  11. package/dist/application/context/relations/get/RelationDirection.js +2 -0
  12. package/dist/application/context/relations/get/RelationDirection.js.map +1 -0
  13. package/dist/application/context/relations/get/RelationListFilter.d.ts +15 -0
  14. package/dist/application/context/relations/get/RelationListFilter.d.ts.map +1 -0
  15. package/dist/application/context/relations/get/RelationListFilter.js +2 -0
  16. package/dist/application/context/relations/get/RelationListFilter.js.map +1 -0
  17. package/dist/application/context/relations/get/RelationNodeReference.d.ts +6 -0
  18. package/dist/application/context/relations/get/RelationNodeReference.d.ts.map +1 -0
  19. package/dist/application/context/relations/get/RelationNodeReference.js +2 -0
  20. package/dist/application/context/relations/get/RelationNodeReference.js.map +1 -0
  21. package/dist/application/context/relations/get/RelationStatusFilter.d.ts +2 -0
  22. package/dist/application/context/relations/get/RelationStatusFilter.d.ts.map +1 -0
  23. package/dist/application/context/relations/get/RelationStatusFilter.js +2 -0
  24. package/dist/application/context/relations/get/RelationStatusFilter.js.map +1 -0
  25. package/dist/application/context/relations/traverse/ITraverseRelationsGateway.d.ts +6 -0
  26. package/dist/application/context/relations/traverse/ITraverseRelationsGateway.d.ts.map +1 -0
  27. package/dist/application/context/relations/traverse/ITraverseRelationsGateway.js +2 -0
  28. package/dist/application/context/relations/traverse/ITraverseRelationsGateway.js.map +1 -0
  29. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.d.ts +17 -0
  30. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.d.ts.map +1 -0
  31. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.js +138 -0
  32. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.js.map +1 -0
  33. package/dist/application/context/relations/traverse/RelationTraversalNode.d.ts +5 -0
  34. package/dist/application/context/relations/traverse/RelationTraversalNode.d.ts.map +1 -0
  35. package/dist/application/context/relations/traverse/RelationTraversalNode.js +2 -0
  36. package/dist/application/context/relations/traverse/RelationTraversalNode.js.map +1 -0
  37. package/dist/application/context/relations/traverse/RelationTraversalResult.d.ts +13 -0
  38. package/dist/application/context/relations/traverse/RelationTraversalResult.d.ts.map +1 -0
  39. package/dist/application/context/relations/traverse/RelationTraversalResult.js +2 -0
  40. package/dist/application/context/relations/traverse/RelationTraversalResult.js.map +1 -0
  41. package/dist/application/context/relations/traverse/TraverseRelationsController.d.ts +9 -0
  42. package/dist/application/context/relations/traverse/TraverseRelationsController.d.ts.map +1 -0
  43. package/dist/application/context/relations/traverse/TraverseRelationsController.js +9 -0
  44. package/dist/application/context/relations/traverse/TraverseRelationsController.js.map +1 -0
  45. package/dist/application/context/relations/traverse/TraverseRelationsRequest.d.ts +15 -0
  46. package/dist/application/context/relations/traverse/TraverseRelationsRequest.d.ts.map +1 -0
  47. package/dist/application/context/relations/traverse/TraverseRelationsRequest.js +2 -0
  48. package/dist/application/context/relations/traverse/TraverseRelationsRequest.js.map +1 -0
  49. package/dist/application/host/IApplicationContainer.d.ts +2 -0
  50. package/dist/application/host/IApplicationContainer.d.ts.map +1 -1
  51. package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.d.ts +7 -1
  52. package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.d.ts.map +1 -1
  53. package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.js +75 -12
  54. package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.js.map +1 -1
  55. package/dist/infrastructure/host/HostBuilder.d.ts.map +1 -1
  56. package/dist/infrastructure/host/HostBuilder.js +5 -0
  57. package/dist/infrastructure/host/HostBuilder.js.map +1 -1
  58. package/dist/presentation/cli/commands/registry/generated-commands.d.ts.map +1 -1
  59. package/dist/presentation/cli/commands/registry/generated-commands.js +6 -0
  60. package/dist/presentation/cli/commands/registry/generated-commands.js.map +1 -1
  61. package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.d.ts +2 -5
  62. package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.d.ts.map +1 -1
  63. package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.js +15 -1
  64. package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.js.map +1 -1
  65. package/dist/presentation/cli/commands/relations/list/relations.list.d.ts +4 -0
  66. package/dist/presentation/cli/commands/relations/list/relations.list.d.ts.map +1 -1
  67. package/dist/presentation/cli/commands/relations/list/relations.list.js +35 -12
  68. package/dist/presentation/cli/commands/relations/list/relations.list.js.map +1 -1
  69. package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.d.ts +13 -0
  70. package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.d.ts.map +1 -0
  71. package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.js +95 -0
  72. package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.js.map +1 -0
  73. package/dist/presentation/cli/commands/relations/traverse/relations.traverse.d.ts +15 -0
  74. package/dist/presentation/cli/commands/relations/traverse/relations.traverse.d.ts.map +1 -0
  75. package/dist/presentation/cli/commands/relations/traverse/relations.traverse.js +66 -0
  76. package/dist/presentation/cli/commands/relations/traverse/relations.traverse.js.map +1 -0
  77. package/package.json +1 -1
@@ -1,7 +1,15 @@
1
- import { EntityTypeValue } from "../../../../domain/relations/Constants.js";
1
+ import { EntityTypeValue, RelationStrengthValue } from "../../../../domain/relations/Constants.js";
2
+ import { RelationDirection } from "./RelationDirection.js";
3
+ import { RelationStatusFilter } from "./RelationStatusFilter.js";
4
+ import { RelationNodeReference } from "./RelationNodeReference.js";
2
5
  export interface GetRelationsRequest {
6
+ readonly entity?: RelationNodeReference;
3
7
  readonly entityType?: EntityTypeValue;
4
8
  readonly entityId?: string;
5
- readonly status: "active" | "deactivated" | "removed" | "all";
9
+ readonly direction?: RelationDirection;
10
+ readonly relationType?: string;
11
+ readonly relatedEntityType?: EntityTypeValue;
12
+ readonly strength?: RelationStrengthValue;
13
+ readonly status: RelationStatusFilter;
6
14
  }
7
15
  //# sourceMappingURL=GetRelationsRequest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GetRelationsRequest.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/GetRelationsRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;CAC/D"}
1
+ {"version":3,"file":"GetRelationsRequest.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/GetRelationsRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,eAAe,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC"}
@@ -2,13 +2,9 @@
2
2
  * Port interface for listing relations from the projection store.
3
3
  * Used by ListRelationsQueryHandler to retrieve relation list with optional filtering.
4
4
  */
5
- import { RelationView } from "../RelationView.js";
6
5
  import { EntityTypeValue } from "../../../../domain/relations/Constants.js";
7
- export interface RelationListFilter {
8
- entityType?: EntityTypeValue;
9
- entityId?: string;
10
- status?: "active" | "deactivated" | "removed" | "all";
11
- }
6
+ import { RelationView } from "../RelationView.js";
7
+ import { RelationListFilter } from "./RelationListFilter.js";
12
8
  export interface IRelationViewReader {
13
9
  /**
14
10
  * Retrieves all relations, optionally filtered by entity or status.
@@ -16,5 +12,7 @@ export interface IRelationViewReader {
16
12
  * @returns Array of relation views ordered by creation date
17
13
  */
18
14
  findAll(filter?: RelationListFilter): Promise<RelationView[]>;
15
+ /** Returns the distinct projection endpoint types associated with an entity ID. */
16
+ findEndpointTypes(entityId: string): Promise<EntityTypeValue[]>;
19
17
  }
20
18
  //# sourceMappingURL=IRelationViewReader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IRelationViewReader.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/IRelationViewReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;CACvD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAC/D"}
1
+ {"version":3,"file":"IRelationViewReader.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/IRelationViewReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE9D,mFAAmF;IACnF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CACjE"}
@@ -6,5 +6,6 @@ export declare class LocalGetRelationsGateway implements IGetRelationsGateway {
6
6
  private readonly relationViewReader;
7
7
  constructor(relationViewReader: IRelationViewReader);
8
8
  getRelations(request: GetRelationsRequest): Promise<GetRelationsResponse>;
9
+ private validate;
9
10
  }
10
11
  //# sourceMappingURL=LocalGetRelationsGateway.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalGetRelationsGateway.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/LocalGetRelationsGateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qBAAa,wBAAyB,YAAW,oBAAoB;IAEjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,mBAAmB;IAGpD,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAQhF"}
1
+ {"version":3,"file":"LocalGetRelationsGateway.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/LocalGetRelationsGateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,qBAAa,wBAAyB,YAAW,oBAAoB;IAEjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,mBAAmB;IAGpD,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoB/E,OAAO,CAAC,QAAQ;CAoBjB"}
@@ -1,14 +1,44 @@
1
+ import { EntityType, RelationStrength } from "../../../../domain/relations/Constants.js";
1
2
  export class LocalGetRelationsGateway {
2
3
  constructor(relationViewReader) {
3
4
  this.relationViewReader = relationViewReader;
4
5
  }
5
6
  async getRelations(request) {
7
+ this.validate(request);
8
+ const entity = request.entity ?? (request.entityType && request.entityId
9
+ ? { entityType: request.entityType, entityId: request.entityId }
10
+ : undefined);
6
11
  const relations = await this.relationViewReader.findAll({
12
+ entity,
7
13
  entityType: request.entityType,
8
14
  entityId: request.entityId,
15
+ direction: request.direction,
16
+ relationType: request.relationType,
17
+ relatedEntityType: request.relatedEntityType,
18
+ strength: request.strength,
9
19
  status: request.status,
10
20
  });
11
21
  return { relations };
12
22
  }
23
+ validate(request) {
24
+ if (request.direction && !["in", "out", "both"].includes(request.direction)) {
25
+ throw new Error("Direction must be one of: in, out, both.");
26
+ }
27
+ if (!["active", "deactivated", "removed", "all"].includes(request.status)) {
28
+ throw new Error("Status must be one of: active, deactivated, removed, all.");
29
+ }
30
+ if (request.entityType && !Object.values(EntityType).includes(request.entityType)) {
31
+ throw new Error(`Entity type must be one of: ${Object.values(EntityType).join(", ")}.`);
32
+ }
33
+ if (request.entity && !Object.values(EntityType).includes(request.entity.entityType)) {
34
+ throw new Error(`Entity type must be one of: ${Object.values(EntityType).join(", ")}.`);
35
+ }
36
+ if (request.relatedEntityType && !Object.values(EntityType).includes(request.relatedEntityType)) {
37
+ throw new Error(`Related entity type must be one of: ${Object.values(EntityType).join(", ")}.`);
38
+ }
39
+ if (request.strength && !Object.values(RelationStrength).includes(request.strength)) {
40
+ throw new Error("Strength must be one of: strong, medium, weak.");
41
+ }
42
+ }
13
43
  }
14
44
  //# sourceMappingURL=LocalGetRelationsGateway.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalGetRelationsGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/LocalGetRelationsGateway.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,wBAAwB;IACnC,YACmB,kBAAuC;QAAvC,uBAAkB,GAAlB,kBAAkB,CAAqB;IACvD,CAAC;IAEJ,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YACtD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"LocalGetRelationsGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/LocalGetRelationsGateway.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAEzF,MAAM,OAAO,wBAAwB;IACnC,YACmB,kBAAuC;QAAvC,uBAAkB,GAAlB,kBAAkB,CAAqB;IACvD,CAAC;IAEJ,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAC/B,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ;YACpC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;YAChE,CAAC,CAAC,SAAS,CACd,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YACtD,MAAM;YACN,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAEO,QAAQ,CAAC,OAA4B;QAC3C,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChG,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export type RelationDirection = "in" | "out" | "both";
2
+ //# sourceMappingURL=RelationDirection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationDirection.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationDirection.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationDirection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationDirection.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationDirection.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { EntityTypeValue, RelationStrengthValue } from "../../../../domain/relations/Constants.js";
2
+ import { RelationDirection } from "./RelationDirection.js";
3
+ import { RelationStatusFilter } from "./RelationStatusFilter.js";
4
+ import { RelationNodeReference } from "./RelationNodeReference.js";
5
+ export interface RelationListFilter {
6
+ readonly entity?: RelationNodeReference;
7
+ readonly entityType?: EntityTypeValue;
8
+ readonly entityId?: string;
9
+ readonly direction?: RelationDirection;
10
+ readonly relationType?: string;
11
+ readonly relatedEntityType?: EntityTypeValue;
12
+ readonly strength?: RelationStrengthValue;
13
+ readonly status?: RelationStatusFilter;
14
+ }
15
+ //# sourceMappingURL=RelationListFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationListFilter.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationListFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,eAAe,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC;CACxC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationListFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationListFilter.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationListFilter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { EntityTypeValue } from "../../../../domain/relations/Constants.js";
2
+ export interface RelationNodeReference {
3
+ readonly entityType: EntityTypeValue;
4
+ readonly entityId: string;
5
+ }
6
+ //# sourceMappingURL=RelationNodeReference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationNodeReference.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationNodeReference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationNodeReference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationNodeReference.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationNodeReference.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type RelationStatusFilter = "active" | "deactivated" | "removed" | "all";
2
+ //# sourceMappingURL=RelationStatusFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationStatusFilter.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationStatusFilter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationStatusFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationStatusFilter.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationStatusFilter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { RelationTraversalResult } from "./RelationTraversalResult.js";
2
+ import { TraverseRelationsRequest } from "./TraverseRelationsRequest.js";
3
+ export interface ITraverseRelationsGateway {
4
+ traverse(request: TraverseRelationsRequest): Promise<RelationTraversalResult>;
5
+ }
6
+ //# sourceMappingURL=ITraverseRelationsGateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITraverseRelationsGateway.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/ITraverseRelationsGateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC/E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ITraverseRelationsGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITraverseRelationsGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/ITraverseRelationsGateway.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { IRelationViewReader } from "../get/IRelationViewReader.js";
2
+ import { ITraverseRelationsGateway } from "./ITraverseRelationsGateway.js";
3
+ import { RelationTraversalResult } from "./RelationTraversalResult.js";
4
+ import { TraverseRelationsRequest } from "./TraverseRelationsRequest.js";
5
+ export declare class LocalTraverseRelationsGateway implements ITraverseRelationsGateway {
6
+ private readonly relationViewReader;
7
+ constructor(relationViewReader: IRelationViewReader);
8
+ traverse(request: TraverseRelationsRequest): Promise<RelationTraversalResult>;
9
+ private normalize;
10
+ private resolveRoot;
11
+ private relatedNode;
12
+ private assertEntityType;
13
+ private nodeKey;
14
+ private compareNodes;
15
+ private compareEdges;
16
+ }
17
+ //# sourceMappingURL=LocalTraverseRelationsGateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalTraverseRelationsGateway.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/LocalTraverseRelationsGateway.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAIpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAczE,qBAAa,6BAA8B,YAAW,yBAAyB;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,mBAAmB;IAE9D,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAgEnF,OAAO,CAAC,SAAS;YAwCH,WAAW;IAoBzB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;CAQrB"}
@@ -0,0 +1,138 @@
1
+ import { EntityType, RelationStrength, } from "../../../../domain/relations/Constants.js";
2
+ export class LocalTraverseRelationsGateway {
3
+ constructor(relationViewReader) {
4
+ this.relationViewReader = relationViewReader;
5
+ }
6
+ async traverse(request) {
7
+ const normalized = this.normalize(request);
8
+ const root = await this.resolveRoot(normalized.entityId, normalized.entityType);
9
+ const visited = new Set([this.nodeKey(root)]);
10
+ const nodes = new Map();
11
+ const edges = new Map();
12
+ let frontier = [root];
13
+ let truncated = false;
14
+ traversal: for (let distance = 1; distance <= normalized.depth && frontier.length > 0; distance++) {
15
+ const next = new Map();
16
+ for (const current of [...frontier].sort((left, right) => this.compareNodes(left, right))) {
17
+ const adjacent = await this.relationViewReader.findAll({
18
+ entity: current,
19
+ direction: normalized.direction,
20
+ relationType: normalized.relationType,
21
+ relatedEntityType: normalized.relatedEntityType,
22
+ strength: normalized.strength,
23
+ status: normalized.status,
24
+ });
25
+ for (const edge of [...adjacent].sort((left, right) => this.compareEdges(left, right))) {
26
+ if (edges.has(edge.relationId))
27
+ continue;
28
+ edges.set(edge.relationId, edge);
29
+ const related = this.relatedNode(current, edge, normalized.direction);
30
+ if (related) {
31
+ const relatedKey = this.nodeKey(related);
32
+ if (!visited.has(relatedKey)) {
33
+ visited.add(relatedKey);
34
+ const traversalNode = { ...related, distance };
35
+ nodes.set(relatedKey, traversalNode);
36
+ next.set(relatedKey, related);
37
+ }
38
+ }
39
+ if (edges.size === normalized.limit) {
40
+ truncated = true;
41
+ break traversal;
42
+ }
43
+ }
44
+ }
45
+ frontier = [...next.values()];
46
+ }
47
+ const stableNodes = [...nodes.values()].sort((left, right) => left.distance - right.distance || this.compareNodes(left, right));
48
+ const stableEdges = [...edges.values()].sort((left, right) => this.compareEdges(left, right));
49
+ return {
50
+ root,
51
+ nodes: stableNodes,
52
+ edges: stableEdges,
53
+ requestedDepth: normalized.depth,
54
+ reachedDepth: stableNodes.reduce((maximum, node) => Math.max(maximum, node.distance), 0),
55
+ limit: normalized.limit,
56
+ truncated,
57
+ };
58
+ }
59
+ normalize(request) {
60
+ const entityId = request.entityId?.trim();
61
+ if (!entityId)
62
+ throw new Error("Entity ID must be provided.");
63
+ const depth = request.depth ?? 1;
64
+ if (!Number.isInteger(depth) || depth < 1 || depth > 5) {
65
+ throw new Error("Depth must be an integer from 1 through 5.");
66
+ }
67
+ const limit = request.limit ?? 100;
68
+ if (!Number.isInteger(limit) || limit < 1 || limit > 1000) {
69
+ throw new Error("Limit must be an integer from 1 through 1000.");
70
+ }
71
+ const direction = request.direction ?? "both";
72
+ if (!["in", "out", "both"].includes(direction)) {
73
+ throw new Error("Direction must be one of: in, out, both.");
74
+ }
75
+ const status = request.status ?? "active";
76
+ if (!["active", "deactivated", "removed", "all"].includes(status)) {
77
+ throw new Error("Status must be one of: active, deactivated, removed, all.");
78
+ }
79
+ if (request.entityType)
80
+ this.assertEntityType(request.entityType, "Entity type");
81
+ if (request.relatedEntityType)
82
+ this.assertEntityType(request.relatedEntityType, "Related entity type");
83
+ if (request.strength && !Object.values(RelationStrength).includes(request.strength)) {
84
+ throw new Error("Strength must be one of: strong, medium, weak.");
85
+ }
86
+ return {
87
+ ...request,
88
+ entityId,
89
+ depth,
90
+ direction,
91
+ status,
92
+ limit,
93
+ };
94
+ }
95
+ async resolveRoot(entityId, explicitType) {
96
+ if (explicitType)
97
+ return { entityType: explicitType, entityId };
98
+ const candidates = await this.relationViewReader.findEndpointTypes(entityId);
99
+ if (candidates.length === 1)
100
+ return { entityType: candidates[0], entityId };
101
+ if (candidates.length === 0) {
102
+ throw new Error(`No endpoint type can be inferred for entity ID '${entityId}'. Specify --entity-type explicitly.`);
103
+ }
104
+ throw new Error(`Entity ID '${entityId}' matches multiple endpoint types: ${[...candidates].sort().join(", ")}. ` +
105
+ "Specify --entity-type explicitly.");
106
+ }
107
+ relatedNode(current, edge, direction) {
108
+ const isFrom = edge.fromEntityType === current.entityType && edge.fromEntityId === current.entityId;
109
+ const isTo = edge.toEntityType === current.entityType && edge.toEntityId === current.entityId;
110
+ if (isFrom && direction !== "in") {
111
+ return { entityType: edge.toEntityType, entityId: edge.toEntityId };
112
+ }
113
+ if (isTo && direction !== "out") {
114
+ return { entityType: edge.fromEntityType, entityId: edge.fromEntityId };
115
+ }
116
+ return undefined;
117
+ }
118
+ assertEntityType(value, label) {
119
+ if (!Object.values(EntityType).includes(value)) {
120
+ throw new Error(`${label} must be one of: ${Object.values(EntityType).join(", ")}.`);
121
+ }
122
+ }
123
+ nodeKey(node) {
124
+ return `${node.entityType}\u0000${node.entityId}`;
125
+ }
126
+ compareNodes(left, right) {
127
+ return left.entityType.localeCompare(right.entityType) || left.entityId.localeCompare(right.entityId);
128
+ }
129
+ compareEdges(left, right) {
130
+ return left.createdAt.localeCompare(right.createdAt)
131
+ || left.relationId.localeCompare(right.relationId)
132
+ || left.fromEntityType.localeCompare(right.fromEntityType)
133
+ || left.fromEntityId.localeCompare(right.fromEntityId)
134
+ || left.toEntityType.localeCompare(right.toEntityType)
135
+ || left.toEntityId.localeCompare(right.toEntityId);
136
+ }
137
+ }
138
+ //# sourceMappingURL=LocalTraverseRelationsGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalTraverseRelationsGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/LocalTraverseRelationsGateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { RelationNodeReference } from "../get/RelationNodeReference.js";
2
+ export interface RelationTraversalNode extends RelationNodeReference {
3
+ readonly distance: number;
4
+ }
5
+ //# sourceMappingURL=RelationTraversalNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationTraversalNode.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/RelationTraversalNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationTraversalNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationTraversalNode.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/RelationTraversalNode.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { RelationView } from "../RelationView.js";
2
+ import { RelationNodeReference } from "../get/RelationNodeReference.js";
3
+ import { RelationTraversalNode } from "./RelationTraversalNode.js";
4
+ export interface RelationTraversalResult {
5
+ readonly root: RelationNodeReference;
6
+ readonly nodes: RelationTraversalNode[];
7
+ readonly edges: RelationView[];
8
+ readonly requestedDepth: number;
9
+ readonly reachedDepth: number;
10
+ readonly limit: number;
11
+ readonly truncated: boolean;
12
+ }
13
+ //# sourceMappingURL=RelationTraversalResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationTraversalResult.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/RelationTraversalResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationTraversalResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationTraversalResult.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/RelationTraversalResult.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { ITraverseRelationsGateway } from "./ITraverseRelationsGateway.js";
2
+ import { RelationTraversalResult } from "./RelationTraversalResult.js";
3
+ import { TraverseRelationsRequest } from "./TraverseRelationsRequest.js";
4
+ export declare class TraverseRelationsController {
5
+ private readonly gateway;
6
+ constructor(gateway: ITraverseRelationsGateway);
7
+ handle(request: TraverseRelationsRequest): Promise<RelationTraversalResult>;
8
+ }
9
+ //# sourceMappingURL=TraverseRelationsController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraverseRelationsController.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/TraverseRelationsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,qBAAa,2BAA2B;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,yBAAyB;IAEzD,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAGlF"}
@@ -0,0 +1,9 @@
1
+ export class TraverseRelationsController {
2
+ constructor(gateway) {
3
+ this.gateway = gateway;
4
+ }
5
+ async handle(request) {
6
+ return this.gateway.traverse(request);
7
+ }
8
+ }
9
+ //# sourceMappingURL=TraverseRelationsController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraverseRelationsController.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/TraverseRelationsController.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,2BAA2B;IACtC,YAA6B,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAG,CAAC;IAEnE,KAAK,CAAC,MAAM,CAAC,OAAiC;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { EntityTypeValue, RelationStrengthValue } from "../../../../domain/relations/Constants.js";
2
+ import { RelationDirection } from "../get/RelationDirection.js";
3
+ import { RelationStatusFilter } from "../get/RelationStatusFilter.js";
4
+ export interface TraverseRelationsRequest {
5
+ readonly entityId: string;
6
+ readonly entityType?: EntityTypeValue;
7
+ readonly depth?: number;
8
+ readonly direction?: RelationDirection;
9
+ readonly relationType?: string;
10
+ readonly relatedEntityType?: EntityTypeValue;
11
+ readonly strength?: RelationStrengthValue;
12
+ readonly status?: RelationStatusFilter;
13
+ readonly limit?: number;
14
+ }
15
+ //# sourceMappingURL=TraverseRelationsRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraverseRelationsRequest.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/TraverseRelationsRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,eAAe,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TraverseRelationsRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraverseRelationsRequest.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/TraverseRelationsRequest.ts"],"names":[],"mappings":""}
@@ -296,6 +296,7 @@ import { IValuePropositionRemovedEventWriter } from "../context/value-propositio
296
296
  import { AddRelationController } from "../context/relations/add/AddRelationController.js";
297
297
  import { RemoveRelationController } from "../context/relations/remove/RemoveRelationController.js";
298
298
  import { GetRelationsController } from "../context/relations/get/GetRelationsController.js";
299
+ import { TraverseRelationsController } from "../context/relations/traverse/TraverseRelationsController.js";
299
300
  import { AddGuidelineController } from "../context/guidelines/add/AddGuidelineController.js";
300
301
  import { UpdateGuidelineController } from "../context/guidelines/update/UpdateGuidelineController.js";
301
302
  import { RemoveGuidelineController } from "../context/guidelines/remove/RemoveGuidelineController.js";
@@ -538,6 +539,7 @@ export interface IApplicationContainer {
538
539
  addRelationController: AddRelationController;
539
540
  removeRelationController: RemoveRelationController;
540
541
  getRelationsController: GetRelationsController;
542
+ traverseRelationsController: TraverseRelationsController;
541
543
  relationAddedEventStore: IRelationAddedEventWriter;
542
544
  relationRemovedEventStore: IRelationRemovedEventWriter & IRelationRemovedEventReader;
543
545
  relationAddedProjector: IRelationAddedProjector & IRelationAddedReader;