jumbo-cli 3.18.0 → 3.19.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 (65) hide show
  1. package/dist/application/context/relations/path/FindRelationPathController.d.ts +9 -0
  2. package/dist/application/context/relations/path/FindRelationPathController.d.ts.map +1 -0
  3. package/dist/application/context/relations/path/FindRelationPathController.js +9 -0
  4. package/dist/application/context/relations/path/FindRelationPathController.js.map +1 -0
  5. package/dist/application/context/relations/path/FindRelationPathRequest.d.ts +16 -0
  6. package/dist/application/context/relations/path/FindRelationPathRequest.d.ts.map +1 -0
  7. package/dist/application/context/relations/path/FindRelationPathRequest.js +2 -0
  8. package/dist/application/context/relations/path/FindRelationPathRequest.js.map +1 -0
  9. package/dist/application/context/relations/path/IFindRelationPathGateway.d.ts +6 -0
  10. package/dist/application/context/relations/path/IFindRelationPathGateway.d.ts.map +1 -0
  11. package/dist/application/context/relations/path/IFindRelationPathGateway.js +2 -0
  12. package/dist/application/context/relations/path/IFindRelationPathGateway.js.map +1 -0
  13. package/dist/application/context/relations/path/LocalFindRelationPathGateway.d.ts +14 -0
  14. package/dist/application/context/relations/path/LocalFindRelationPathGateway.d.ts.map +1 -0
  15. package/dist/application/context/relations/path/LocalFindRelationPathGateway.js +21 -0
  16. package/dist/application/context/relations/path/LocalFindRelationPathGateway.js.map +1 -0
  17. package/dist/application/context/relations/path/RelationPathQueryMetadata.d.ts +12 -0
  18. package/dist/application/context/relations/path/RelationPathQueryMetadata.d.ts.map +1 -0
  19. package/dist/application/context/relations/path/RelationPathQueryMetadata.js +2 -0
  20. package/dist/application/context/relations/path/RelationPathQueryMetadata.js.map +1 -0
  21. package/dist/application/context/relations/path/RelationPathResult.d.ts +13 -0
  22. package/dist/application/context/relations/path/RelationPathResult.d.ts.map +1 -0
  23. package/dist/application/context/relations/path/RelationPathResult.js +2 -0
  24. package/dist/application/context/relations/path/RelationPathResult.js.map +1 -0
  25. package/dist/application/context/relations/path/RelationShortestPathFinder.d.ts +16 -0
  26. package/dist/application/context/relations/path/RelationShortestPathFinder.d.ts.map +1 -0
  27. package/dist/application/context/relations/path/RelationShortestPathFinder.js +104 -0
  28. package/dist/application/context/relations/path/RelationShortestPathFinder.js.map +1 -0
  29. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.d.ts +7 -6
  30. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.d.ts.map +1 -1
  31. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.js +19 -72
  32. package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.js.map +1 -1
  33. package/dist/application/context/relations/traverse/RelationNodeReferenceResolver.d.ts +9 -0
  34. package/dist/application/context/relations/traverse/RelationNodeReferenceResolver.d.ts.map +1 -0
  35. package/dist/application/context/relations/traverse/RelationNodeReferenceResolver.js +29 -0
  36. package/dist/application/context/relations/traverse/RelationNodeReferenceResolver.js.map +1 -0
  37. package/dist/application/context/relations/traverse/RelationTraversalPolicy.d.ts +10 -0
  38. package/dist/application/context/relations/traverse/RelationTraversalPolicy.d.ts.map +1 -0
  39. package/dist/application/context/relations/traverse/RelationTraversalPolicy.js +31 -0
  40. package/dist/application/context/relations/traverse/RelationTraversalPolicy.js.map +1 -0
  41. package/dist/application/context/relations/traverse/RelationTraversalQuery.d.ts +12 -0
  42. package/dist/application/context/relations/traverse/RelationTraversalQuery.d.ts.map +1 -0
  43. package/dist/application/context/relations/traverse/RelationTraversalQuery.js +2 -0
  44. package/dist/application/context/relations/traverse/RelationTraversalQuery.js.map +1 -0
  45. package/dist/application/context/relations/traverse/RelationTraversalQueryNormalizer.d.ts +17 -0
  46. package/dist/application/context/relations/traverse/RelationTraversalQueryNormalizer.d.ts.map +1 -0
  47. package/dist/application/context/relations/traverse/RelationTraversalQueryNormalizer.js +34 -0
  48. package/dist/application/context/relations/traverse/RelationTraversalQueryNormalizer.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/host/HostBuilder.d.ts.map +1 -1
  52. package/dist/infrastructure/host/HostBuilder.js +14 -1
  53. package/dist/infrastructure/host/HostBuilder.js.map +1 -1
  54. package/dist/presentation/cli/commands/registry/generated-commands.d.ts.map +1 -1
  55. package/dist/presentation/cli/commands/registry/generated-commands.js +6 -0
  56. package/dist/presentation/cli/commands/registry/generated-commands.js.map +1 -1
  57. package/dist/presentation/cli/commands/relations/path/RelationPathOutputBuilder.d.ts +12 -0
  58. package/dist/presentation/cli/commands/relations/path/RelationPathOutputBuilder.d.ts.map +1 -0
  59. package/dist/presentation/cli/commands/relations/path/RelationPathOutputBuilder.js +96 -0
  60. package/dist/presentation/cli/commands/relations/path/RelationPathOutputBuilder.js.map +1 -0
  61. package/dist/presentation/cli/commands/relations/path/relations.path.d.ts +16 -0
  62. package/dist/presentation/cli/commands/relations/path/relations.path.d.ts.map +1 -0
  63. package/dist/presentation/cli/commands/relations/path/relations.path.js +101 -0
  64. package/dist/presentation/cli/commands/relations/path/relations.path.js.map +1 -0
  65. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import { FindRelationPathRequest } from "./FindRelationPathRequest.js";
2
+ import { IFindRelationPathGateway } from "./IFindRelationPathGateway.js";
3
+ import { RelationPathResult } from "./RelationPathResult.js";
4
+ export declare class FindRelationPathController {
5
+ private readonly gateway;
6
+ constructor(gateway: IFindRelationPathGateway);
7
+ handle(request: FindRelationPathRequest): Promise<RelationPathResult>;
8
+ }
9
+ //# sourceMappingURL=FindRelationPathController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FindRelationPathController.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/FindRelationPathController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,wBAAwB;IAExD,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAG5E"}
@@ -0,0 +1,9 @@
1
+ export class FindRelationPathController {
2
+ constructor(gateway) {
3
+ this.gateway = gateway;
4
+ }
5
+ async handle(request) {
6
+ return this.gateway.findPath(request);
7
+ }
8
+ }
9
+ //# sourceMappingURL=FindRelationPathController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FindRelationPathController.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/FindRelationPathController.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,0BAA0B;IACrC,YAA6B,OAAiC;QAAjC,YAAO,GAAP,OAAO,CAA0B;IAAG,CAAC;IAElE,KAAK,CAAC,MAAM,CAAC,OAAgC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,16 @@
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 FindRelationPathRequest {
5
+ readonly fromEntityId: string;
6
+ readonly fromEntityType?: EntityTypeValue;
7
+ readonly toEntityId: string;
8
+ readonly toEntityType?: EntityTypeValue;
9
+ readonly maxDepth?: number;
10
+ readonly direction?: RelationDirection;
11
+ readonly relationType?: string;
12
+ readonly relatedEntityType?: EntityTypeValue;
13
+ readonly strength?: RelationStrengthValue;
14
+ readonly status?: RelationStatusFilter;
15
+ }
16
+ //# sourceMappingURL=FindRelationPathRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FindRelationPathRequest.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/FindRelationPathRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;IACxC,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=FindRelationPathRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FindRelationPathRequest.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/FindRelationPathRequest.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { FindRelationPathRequest } from "./FindRelationPathRequest.js";
2
+ import { RelationPathResult } from "./RelationPathResult.js";
3
+ export interface IFindRelationPathGateway {
4
+ findPath(request: FindRelationPathRequest): Promise<RelationPathResult>;
5
+ }
6
+ //# sourceMappingURL=IFindRelationPathGateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IFindRelationPathGateway.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/IFindRelationPathGateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACzE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IFindRelationPathGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IFindRelationPathGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/IFindRelationPathGateway.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { RelationNodeReferenceResolver } from "../traverse/RelationNodeReferenceResolver.js";
2
+ import { RelationTraversalQueryNormalizer } from "../traverse/RelationTraversalQueryNormalizer.js";
3
+ import { FindRelationPathRequest } from "./FindRelationPathRequest.js";
4
+ import { IFindRelationPathGateway } from "./IFindRelationPathGateway.js";
5
+ import { RelationPathResult } from "./RelationPathResult.js";
6
+ import { RelationShortestPathFinder } from "./RelationShortestPathFinder.js";
7
+ export declare class LocalFindRelationPathGateway implements IFindRelationPathGateway {
8
+ private readonly nodeResolver;
9
+ private readonly queryNormalizer;
10
+ private readonly shortestPathFinder;
11
+ constructor(nodeResolver: RelationNodeReferenceResolver, queryNormalizer: RelationTraversalQueryNormalizer, shortestPathFinder: RelationShortestPathFinder);
12
+ findPath(request: FindRelationPathRequest): Promise<RelationPathResult>;
13
+ }
14
+ //# sourceMappingURL=LocalFindRelationPathGateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalFindRelationPathGateway.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/LocalFindRelationPathGateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,qBAAa,4BAA6B,YAAW,wBAAwB;IAEzE,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAFlB,YAAY,EAAE,6BAA6B,EAC3C,eAAe,EAAE,gCAAgC,EACjD,kBAAkB,EAAE,0BAA0B;IAG3D,QAAQ,CACZ,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC;CA2B/B"}
@@ -0,0 +1,21 @@
1
+ export class LocalFindRelationPathGateway {
2
+ constructor(nodeResolver, queryNormalizer, shortestPathFinder) {
3
+ this.nodeResolver = nodeResolver;
4
+ this.queryNormalizer = queryNormalizer;
5
+ this.shortestPathFinder = shortestPathFinder;
6
+ }
7
+ async findPath(request) {
8
+ const query = this.queryNormalizer.normalize({
9
+ depth: request.maxDepth,
10
+ direction: request.direction,
11
+ relationType: request.relationType,
12
+ relatedEntityType: request.relatedEntityType,
13
+ strength: request.strength,
14
+ status: request.status,
15
+ }, 5);
16
+ const from = await this.nodeResolver.resolve(request.fromEntityId, request.fromEntityType, "--from-type", "From entity");
17
+ const to = await this.nodeResolver.resolve(request.toEntityId, request.toEntityType, "--to-type", "To entity");
18
+ return this.shortestPathFinder.find(from, to, query);
19
+ }
20
+ }
21
+ //# sourceMappingURL=LocalFindRelationPathGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalFindRelationPathGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/LocalFindRelationPathGateway.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,4BAA4B;IACvC,YACmB,YAA2C,EAC3C,eAAiD,EACjD,kBAA8C;QAF9C,iBAAY,GAAZ,YAAY,CAA+B;QAC3C,oBAAe,GAAf,eAAe,CAAkC;QACjD,uBAAkB,GAAlB,kBAAkB,CAA4B;IAC9D,CAAC;IAEJ,KAAK,CAAC,QAAQ,CACZ,OAAgC;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAC1C;YACE,KAAK,EAAE,OAAO,CAAC,QAAQ;YACvB,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,EACD,CAAC,CACF,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAC1C,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,cAAc,EACtB,aAAa,EACb,aAAa,CACd,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CACxC,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,YAAY,EACpB,WAAW,EACX,WAAW,CACZ,CAAC;QAEF,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,12 @@
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 RelationPathQueryMetadata {
5
+ readonly maxDepth: number;
6
+ readonly direction: RelationDirection;
7
+ readonly relationType?: string;
8
+ readonly entityType?: EntityTypeValue;
9
+ readonly strength?: RelationStrengthValue;
10
+ readonly status: RelationStatusFilter;
11
+ }
12
+ //# sourceMappingURL=RelationPathQueryMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationPathQueryMetadata.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/RelationPathQueryMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationPathQueryMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationPathQueryMetadata.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/RelationPathQueryMetadata.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { RelationView } from "../RelationView.js";
2
+ import { RelationNodeReference } from "../get/RelationNodeReference.js";
3
+ import { RelationPathQueryMetadata } from "./RelationPathQueryMetadata.js";
4
+ export interface RelationPathResult {
5
+ readonly found: boolean;
6
+ readonly from: RelationNodeReference;
7
+ readonly to: RelationNodeReference;
8
+ readonly hopCount: number;
9
+ readonly nodes: RelationNodeReference[];
10
+ readonly edges: RelationView[];
11
+ readonly query: RelationPathQueryMetadata;
12
+ }
13
+ //# sourceMappingURL=RelationPathResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationPathResult.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/RelationPathResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,EAAE,EAAE,qBAAqB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationPathResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationPathResult.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/RelationPathResult.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { IRelationViewReader } from "../get/IRelationViewReader.js";
2
+ import { RelationNodeReference } from "../get/RelationNodeReference.js";
3
+ import { RelationTraversalPolicy } from "../traverse/RelationTraversalPolicy.js";
4
+ import { RelationTraversalQuery } from "../traverse/RelationTraversalQuery.js";
5
+ import { RelationPathResult } from "./RelationPathResult.js";
6
+ export declare class RelationShortestPathFinder {
7
+ private readonly relationViewReader;
8
+ private readonly traversalPolicy;
9
+ constructor(relationViewReader: IRelationViewReader, traversalPolicy?: RelationTraversalPolicy);
10
+ find(from: RelationNodeReference, to: RelationNodeReference, query: RelationTraversalQuery): Promise<RelationPathResult>;
11
+ private stableTransitions;
12
+ private reconstruct;
13
+ private foundResult;
14
+ private toQueryMetadata;
15
+ }
16
+ //# sourceMappingURL=RelationShortestPathFinder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationShortestPathFinder.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/RelationShortestPathFinder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAY7D,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBADf,kBAAkB,EAAE,mBAAmB,EACvC,eAAe,0BAAgC;IAG5D,IAAI,CACR,IAAI,EAAE,qBAAqB,EAC3B,EAAE,EAAE,qBAAqB,EACzB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IAiE9B,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,WAAW;IAgCnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,eAAe;CAYxB"}
@@ -0,0 +1,104 @@
1
+ import { RelationTraversalPolicy } from "../traverse/RelationTraversalPolicy.js";
2
+ export class RelationShortestPathFinder {
3
+ constructor(relationViewReader, traversalPolicy = new RelationTraversalPolicy()) {
4
+ this.relationViewReader = relationViewReader;
5
+ this.traversalPolicy = traversalPolicy;
6
+ }
7
+ async find(from, to, query) {
8
+ const queryMetadata = this.toQueryMetadata(query);
9
+ if (this.traversalPolicy.nodeKey(from) === this.traversalPolicy.nodeKey(to)) {
10
+ return this.foundResult(from, to, [from], [], queryMetadata);
11
+ }
12
+ const visited = new Set([this.traversalPolicy.nodeKey(from)]);
13
+ const predecessors = new Map();
14
+ let frontier = [from];
15
+ for (let depth = 1; depth <= query.depth && frontier.length > 0; depth++) {
16
+ const next = new Map();
17
+ const stableFrontier = [...frontier].sort((left, right) => this.traversalPolicy.compareNodes(left, right));
18
+ for (const current of stableFrontier) {
19
+ const adjacent = await this.relationViewReader.findAll({
20
+ entity: current,
21
+ direction: query.direction,
22
+ relationType: query.relationType,
23
+ relatedEntityType: query.relatedEntityType,
24
+ strength: query.strength,
25
+ status: query.status,
26
+ });
27
+ const transitions = this.stableTransitions(current, adjacent, query);
28
+ for (const transition of transitions) {
29
+ const key = this.traversalPolicy.nodeKey(transition.node);
30
+ if (visited.has(key))
31
+ continue;
32
+ visited.add(key);
33
+ predecessors.set(key, { previous: current, edge: transition.edge });
34
+ if (key === this.traversalPolicy.nodeKey(to)) {
35
+ const path = this.reconstruct(from, to, predecessors);
36
+ return this.foundResult(from, to, path.nodes, path.edges, queryMetadata);
37
+ }
38
+ next.set(key, transition.node);
39
+ }
40
+ }
41
+ frontier = [...next.values()];
42
+ }
43
+ return {
44
+ found: false,
45
+ from,
46
+ to,
47
+ hopCount: 0,
48
+ nodes: [],
49
+ edges: [],
50
+ query: queryMetadata,
51
+ };
52
+ }
53
+ stableTransitions(current, adjacent, query) {
54
+ return adjacent
55
+ .map((edge) => {
56
+ const node = this.traversalPolicy.relatedNode(current, edge, query.direction);
57
+ return node ? { node, edge } : undefined;
58
+ })
59
+ .filter((transition) => transition !== undefined)
60
+ .sort((left, right) => this.traversalPolicy.compareNodes(left.node, right.node) ||
61
+ this.traversalPolicy.compareEdges(left.edge, right.edge));
62
+ }
63
+ reconstruct(from, to, predecessors) {
64
+ const reversedNodes = [to];
65
+ const reversedEdges = [];
66
+ let cursor = to;
67
+ while (this.traversalPolicy.nodeKey(cursor) !==
68
+ this.traversalPolicy.nodeKey(from)) {
69
+ const predecessor = predecessors.get(this.traversalPolicy.nodeKey(cursor));
70
+ if (!predecessor) {
71
+ throw new Error("Relation path reconstruction encountered an incomplete predecessor chain.");
72
+ }
73
+ reversedEdges.push(predecessor.edge);
74
+ reversedNodes.push(predecessor.previous);
75
+ cursor = predecessor.previous;
76
+ }
77
+ return {
78
+ nodes: reversedNodes.reverse(),
79
+ edges: reversedEdges.reverse(),
80
+ };
81
+ }
82
+ foundResult(from, to, nodes, edges, query) {
83
+ return {
84
+ found: true,
85
+ from,
86
+ to,
87
+ hopCount: edges.length,
88
+ nodes,
89
+ edges,
90
+ query,
91
+ };
92
+ }
93
+ toQueryMetadata(query) {
94
+ return {
95
+ maxDepth: query.depth,
96
+ direction: query.direction,
97
+ relationType: query.relationType,
98
+ entityType: query.relatedEntityType,
99
+ strength: query.strength,
100
+ status: query.status,
101
+ };
102
+ }
103
+ }
104
+ //# sourceMappingURL=RelationShortestPathFinder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationShortestPathFinder.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/path/RelationShortestPathFinder.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,18 @@
1
1
  import { IRelationViewReader } from "../get/IRelationViewReader.js";
2
2
  import { ITraverseRelationsGateway } from "./ITraverseRelationsGateway.js";
3
+ import { RelationNodeReferenceResolver } from "./RelationNodeReferenceResolver.js";
4
+ import { RelationTraversalPolicy } from "./RelationTraversalPolicy.js";
5
+ import { RelationTraversalQueryNormalizer } from "./RelationTraversalQueryNormalizer.js";
3
6
  import { RelationTraversalResult } from "./RelationTraversalResult.js";
4
7
  import { TraverseRelationsRequest } from "./TraverseRelationsRequest.js";
5
8
  export declare class LocalTraverseRelationsGateway implements ITraverseRelationsGateway {
6
9
  private readonly relationViewReader;
7
- constructor(relationViewReader: IRelationViewReader);
10
+ private readonly nodeResolver;
11
+ private readonly queryNormalizer;
12
+ private readonly traversalPolicy;
13
+ constructor(relationViewReader: IRelationViewReader, nodeResolver?: RelationNodeReferenceResolver, queryNormalizer?: RelationTraversalQueryNormalizer, traversalPolicy?: RelationTraversalPolicy);
8
14
  traverse(request: TraverseRelationsRequest): Promise<RelationTraversalResult>;
9
15
  private normalize;
10
16
  private resolveRoot;
11
- private relatedNode;
12
- private assertEntityType;
13
- private nodeKey;
14
- private compareNodes;
15
- private compareEdges;
16
17
  }
17
18
  //# sourceMappingURL=LocalTraverseRelationsGateway.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"LocalTraverseRelationsGateway.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/LocalTraverseRelationsGateway.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAQzE,qBAAa,6BAA8B,YAAW,yBAAyB;IAE3E,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAHf,kBAAkB,EAAE,mBAAmB,EACvC,YAAY,gCAAwD,EACpE,eAAe,mCAAyC,EACxD,eAAe,0BAAgC;IAG5D,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA2EnF,OAAO,CAAC,SAAS;YAkBH,WAAW;CAM1B"}
@@ -1,19 +1,24 @@
1
- import { EntityType, RelationStrength, } from "../../../../domain/relations/Constants.js";
1
+ import { RelationNodeReferenceResolver } from "./RelationNodeReferenceResolver.js";
2
+ import { RelationTraversalPolicy } from "./RelationTraversalPolicy.js";
3
+ import { RelationTraversalQueryNormalizer } from "./RelationTraversalQueryNormalizer.js";
2
4
  export class LocalTraverseRelationsGateway {
3
- constructor(relationViewReader) {
5
+ constructor(relationViewReader, nodeResolver = new RelationNodeReferenceResolver(relationViewReader), queryNormalizer = new RelationTraversalQueryNormalizer(), traversalPolicy = new RelationTraversalPolicy()) {
4
6
  this.relationViewReader = relationViewReader;
7
+ this.nodeResolver = nodeResolver;
8
+ this.queryNormalizer = queryNormalizer;
9
+ this.traversalPolicy = traversalPolicy;
5
10
  }
6
11
  async traverse(request) {
7
12
  const normalized = this.normalize(request);
8
13
  const root = await this.resolveRoot(normalized.entityId, normalized.entityType);
9
- const visited = new Set([this.nodeKey(root)]);
14
+ const visited = new Set([this.traversalPolicy.nodeKey(root)]);
10
15
  const nodes = new Map();
11
16
  const edges = new Map();
12
17
  let frontier = [root];
13
18
  let truncated = false;
14
19
  traversal: for (let distance = 1; distance <= normalized.depth && frontier.length > 0; distance++) {
15
20
  const next = new Map();
16
- for (const current of [...frontier].sort((left, right) => this.compareNodes(left, right))) {
21
+ for (const current of [...frontier].sort((left, right) => this.traversalPolicy.compareNodes(left, right))) {
17
22
  const adjacent = await this.relationViewReader.findAll({
18
23
  entity: current,
19
24
  direction: normalized.direction,
@@ -22,13 +27,13 @@ export class LocalTraverseRelationsGateway {
22
27
  strength: normalized.strength,
23
28
  status: normalized.status,
24
29
  });
25
- for (const edge of [...adjacent].sort((left, right) => this.compareEdges(left, right))) {
30
+ for (const edge of [...adjacent].sort((left, right) => this.traversalPolicy.compareEdges(left, right))) {
26
31
  if (edges.has(edge.relationId))
27
32
  continue;
28
33
  edges.set(edge.relationId, edge);
29
- const related = this.relatedNode(current, edge, normalized.direction);
34
+ const related = this.traversalPolicy.relatedNode(current, edge, normalized.direction);
30
35
  if (related) {
31
- const relatedKey = this.nodeKey(related);
36
+ const relatedKey = this.traversalPolicy.nodeKey(related);
32
37
  if (!visited.has(relatedKey)) {
33
38
  visited.add(relatedKey);
34
39
  const traversalNode = { ...related, distance };
@@ -44,8 +49,9 @@ export class LocalTraverseRelationsGateway {
44
49
  }
45
50
  frontier = [...next.values()];
46
51
  }
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));
52
+ const stableNodes = [...nodes.values()].sort((left, right) => left.distance - right.distance ||
53
+ this.traversalPolicy.compareNodes(left, right));
54
+ const stableEdges = [...edges.values()].sort((left, right) => this.traversalPolicy.compareEdges(left, right));
49
55
  return {
50
56
  root,
51
57
  nodes: stableNodes,
@@ -60,79 +66,20 @@ export class LocalTraverseRelationsGateway {
60
66
  const entityId = request.entityId?.trim();
61
67
  if (!entityId)
62
68
  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
69
  const limit = request.limit ?? 100;
68
70
  if (!Number.isInteger(limit) || limit < 1 || limit > 1000) {
69
71
  throw new Error("Limit must be an integer from 1 through 1000.");
70
72
  }
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
- }
73
+ const query = this.queryNormalizer.normalize(request);
86
74
  return {
87
- ...request,
75
+ ...query,
88
76
  entityId,
89
- depth,
90
- direction,
91
- status,
77
+ entityType: request.entityType,
92
78
  limit,
93
79
  };
94
80
  }
95
81
  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);
82
+ return this.nodeResolver.resolve(entityId, explicitType);
136
83
  }
137
84
  }
138
85
  //# sourceMappingURL=LocalTraverseRelationsGateway.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalTraverseRelationsGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/LocalTraverseRelationsGateway.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,gBAAgB,GACjB,MAAM,2CAA2C,CAAC;AAuBnD,MAAM,OAAO,6BAA6B;IACxC,YAA6B,kBAAuC;QAAvC,uBAAkB,GAAlB,kBAAkB,CAAqB;IAAG,CAAC;IAExE,KAAK,CAAC,QAAQ,CAAC,OAAiC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC9C,IAAI,QAAQ,GAA4B,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,SAAS,EACT,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,IAAI,UAAU,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;YACvF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiC,CAAC;YAEtD,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBACrD,MAAM,EAAE,OAAO;oBACf,SAAS,EAAE,UAAU,CAAC,SAAS;oBAC/B,YAAY,EAAE,UAAU,CAAC,YAAY;oBACrC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;oBAC/C,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBAEH,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;oBACvF,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;wBAAE,SAAS;oBAEzC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;oBACtE,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;4BAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;4BACxB,MAAM,aAAa,GAA0B,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC;4BACtE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;4BACrC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;wBAChC,CAAC;oBACH,CAAC;oBAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC;wBACpC,SAAS,GAAG,IAAI,CAAC;wBACjB,MAAM,SAAS,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC3D,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CACjE,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAE9F,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;YAClB,cAAc,EAAE,UAAU,CAAC,KAAK;YAChC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxF,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,SAAS;SACV,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,OAAiC;QACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAE9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAC9C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC1C,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,iBAAiB;YAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;QACvG,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;QAED,OAAO;YACL,GAAG,OAAO;YACV,QAAQ;YACR,KAAK;YACL,SAAS;YACT,MAAM;YACN,KAAK;SACN,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,QAAgB,EAChB,YAAyC;QAEzC,IAAI,YAAY;YAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;QAEhE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC7E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,mDAAmD,QAAQ,sCAAsC,CAClG,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CACb,cAAc,QAAQ,sCAAsC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACjG,mCAAmC,CACpC,CAAC;IACJ,CAAC;IAEO,WAAW,CACjB,OAA8B,EAC9B,IAAkB,EAClB,SAA4B;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC;QACpG,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC;QAE9F,IAAI,MAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACjC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,IAAI,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,gBAAgB,CAAC,KAAsB,EAAE,KAAa;QAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,IAA2B;QACzC,OAAO,GAAG,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC;IAEO,YAAY,CAAC,IAA2B,EAAE,KAA4B;QAC5E,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxG,CAAC;IAEO,YAAY,CAAC,IAAkB,EAAE,KAAmB;QAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;eAC/C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;eAC/C,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;eACvD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;eACnD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;eACnD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;CACF"}
1
+ {"version":3,"file":"LocalTraverseRelationsGateway.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/LocalTraverseRelationsGateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { EntityTypeValue } from "../../../../domain/relations/Constants.js";
2
+ import { IRelationViewReader } from "../get/IRelationViewReader.js";
3
+ import { RelationNodeReference } from "../get/RelationNodeReference.js";
4
+ export declare class RelationNodeReferenceResolver {
5
+ private readonly relationViewReader;
6
+ constructor(relationViewReader: IRelationViewReader);
7
+ resolve(entityId: string, explicitType?: EntityTypeValue, typeOption?: string, endpointLabel?: string): Promise<RelationNodeReference>;
8
+ }
9
+ //# sourceMappingURL=RelationNodeReferenceResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationNodeReferenceResolver.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/RelationNodeReferenceResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,qBAAa,6BAA6B;IAC5B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,mBAAmB;IAE9D,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,eAAe,EAC9B,UAAU,SAAkB,EAC5B,aAAa,SAAW,GACvB,OAAO,CAAC,qBAAqB,CAAC;CAgClC"}
@@ -0,0 +1,29 @@
1
+ import { EntityType, } from "../../../../domain/relations/Constants.js";
2
+ export class RelationNodeReferenceResolver {
3
+ constructor(relationViewReader) {
4
+ this.relationViewReader = relationViewReader;
5
+ }
6
+ async resolve(entityId, explicitType, typeOption = "--entity-type", endpointLabel = "Entity") {
7
+ const normalizedEntityId = entityId?.trim();
8
+ if (!normalizedEntityId) {
9
+ throw new Error(`${endpointLabel} ID must be provided.`);
10
+ }
11
+ if (explicitType) {
12
+ if (!Object.values(EntityType).includes(explicitType)) {
13
+ throw new Error(`${endpointLabel} type must be one of: ${Object.values(EntityType).join(", ")}.`);
14
+ }
15
+ return { entityType: explicitType, entityId: normalizedEntityId };
16
+ }
17
+ const candidates = await this.relationViewReader.findEndpointTypes(normalizedEntityId);
18
+ if (candidates.length === 1) {
19
+ return { entityType: candidates[0], entityId: normalizedEntityId };
20
+ }
21
+ if (candidates.length === 0) {
22
+ throw new Error(`No endpoint type can be inferred for entity ID '${normalizedEntityId}'. ` +
23
+ `Specify ${typeOption} explicitly.`);
24
+ }
25
+ throw new Error(`Entity ID '${normalizedEntityId}' matches multiple endpoint types: ` +
26
+ `${[...candidates].sort().join(", ")}. Specify ${typeOption} explicitly.`);
27
+ }
28
+ }
29
+ //# sourceMappingURL=RelationNodeReferenceResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationNodeReferenceResolver.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/RelationNodeReferenceResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,GAEX,MAAM,2CAA2C,CAAC;AAInD,MAAM,OAAO,6BAA6B;IACxC,YAA6B,kBAAuC;QAAvC,uBAAkB,GAAlB,kBAAkB,CAAqB;IAAG,CAAC;IAExE,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,YAA8B,EAC9B,UAAU,GAAG,eAAe,EAC5B,aAAa,GAAG,QAAQ;QAExB,MAAM,kBAAkB,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,uBAAuB,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CACb,GAAG,aAAa,yBAAyB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjF,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;QACpE,CAAC;QAED,MAAM,UAAU,GACd,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;QACrE,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,mDAAmD,kBAAkB,KAAK;gBACxE,WAAW,UAAU,cAAc,CACtC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CACb,cAAc,kBAAkB,qCAAqC;YACnE,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,UAAU,cAAc,CAC5E,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { RelationView } from "../RelationView.js";
2
+ import { RelationDirection } from "../get/RelationDirection.js";
3
+ import { RelationNodeReference } from "../get/RelationNodeReference.js";
4
+ export declare class RelationTraversalPolicy {
5
+ relatedNode(current: RelationNodeReference, edge: RelationView, direction: RelationDirection): RelationNodeReference | undefined;
6
+ nodeKey(node: RelationNodeReference): string;
7
+ compareNodes(left: RelationNodeReference, right: RelationNodeReference): number;
8
+ compareEdges(left: RelationView, right: RelationView): number;
9
+ }
10
+ //# sourceMappingURL=RelationTraversalPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationTraversalPolicy.d.ts","sourceRoot":"","sources":["../../../../../src/application/context/relations/traverse/RelationTraversalPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,qBAAa,uBAAuB;IAClC,WAAW,CACT,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,iBAAiB,GAC3B,qBAAqB,GAAG,SAAS;IAiBpC,OAAO,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM;IAI5C,YAAY,CACV,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,qBAAqB,GAC3B,MAAM;IAOT,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;CAU9D"}