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.
- package/dist/application/context/relations/get/GetRelationsRequest.d.ts +10 -2
- package/dist/application/context/relations/get/GetRelationsRequest.d.ts.map +1 -1
- package/dist/application/context/relations/get/IRelationViewReader.d.ts +4 -6
- package/dist/application/context/relations/get/IRelationViewReader.d.ts.map +1 -1
- package/dist/application/context/relations/get/LocalGetRelationsGateway.d.ts +1 -0
- package/dist/application/context/relations/get/LocalGetRelationsGateway.d.ts.map +1 -1
- package/dist/application/context/relations/get/LocalGetRelationsGateway.js +30 -0
- package/dist/application/context/relations/get/LocalGetRelationsGateway.js.map +1 -1
- package/dist/application/context/relations/get/RelationDirection.d.ts +2 -0
- package/dist/application/context/relations/get/RelationDirection.d.ts.map +1 -0
- package/dist/application/context/relations/get/RelationDirection.js +2 -0
- package/dist/application/context/relations/get/RelationDirection.js.map +1 -0
- package/dist/application/context/relations/get/RelationListFilter.d.ts +15 -0
- package/dist/application/context/relations/get/RelationListFilter.d.ts.map +1 -0
- package/dist/application/context/relations/get/RelationListFilter.js +2 -0
- package/dist/application/context/relations/get/RelationListFilter.js.map +1 -0
- package/dist/application/context/relations/get/RelationNodeReference.d.ts +6 -0
- package/dist/application/context/relations/get/RelationNodeReference.d.ts.map +1 -0
- package/dist/application/context/relations/get/RelationNodeReference.js +2 -0
- package/dist/application/context/relations/get/RelationNodeReference.js.map +1 -0
- package/dist/application/context/relations/get/RelationStatusFilter.d.ts +2 -0
- package/dist/application/context/relations/get/RelationStatusFilter.d.ts.map +1 -0
- package/dist/application/context/relations/get/RelationStatusFilter.js +2 -0
- package/dist/application/context/relations/get/RelationStatusFilter.js.map +1 -0
- package/dist/application/context/relations/traverse/ITraverseRelationsGateway.d.ts +6 -0
- package/dist/application/context/relations/traverse/ITraverseRelationsGateway.d.ts.map +1 -0
- package/dist/application/context/relations/traverse/ITraverseRelationsGateway.js +2 -0
- package/dist/application/context/relations/traverse/ITraverseRelationsGateway.js.map +1 -0
- package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.d.ts +17 -0
- package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.d.ts.map +1 -0
- package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.js +138 -0
- package/dist/application/context/relations/traverse/LocalTraverseRelationsGateway.js.map +1 -0
- package/dist/application/context/relations/traverse/RelationTraversalNode.d.ts +5 -0
- package/dist/application/context/relations/traverse/RelationTraversalNode.d.ts.map +1 -0
- package/dist/application/context/relations/traverse/RelationTraversalNode.js +2 -0
- package/dist/application/context/relations/traverse/RelationTraversalNode.js.map +1 -0
- package/dist/application/context/relations/traverse/RelationTraversalResult.d.ts +13 -0
- package/dist/application/context/relations/traverse/RelationTraversalResult.d.ts.map +1 -0
- package/dist/application/context/relations/traverse/RelationTraversalResult.js +2 -0
- package/dist/application/context/relations/traverse/RelationTraversalResult.js.map +1 -0
- package/dist/application/context/relations/traverse/TraverseRelationsController.d.ts +9 -0
- package/dist/application/context/relations/traverse/TraverseRelationsController.d.ts.map +1 -0
- package/dist/application/context/relations/traverse/TraverseRelationsController.js +9 -0
- package/dist/application/context/relations/traverse/TraverseRelationsController.js.map +1 -0
- package/dist/application/context/relations/traverse/TraverseRelationsRequest.d.ts +15 -0
- package/dist/application/context/relations/traverse/TraverseRelationsRequest.d.ts.map +1 -0
- package/dist/application/context/relations/traverse/TraverseRelationsRequest.js +2 -0
- package/dist/application/context/relations/traverse/TraverseRelationsRequest.js.map +1 -0
- package/dist/application/host/IApplicationContainer.d.ts +2 -0
- package/dist/application/host/IApplicationContainer.d.ts.map +1 -1
- package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.d.ts +7 -1
- package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.d.ts.map +1 -1
- package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.js +75 -12
- package/dist/infrastructure/context/relations/get/SqliteRelationViewReader.js.map +1 -1
- package/dist/infrastructure/host/HostBuilder.d.ts.map +1 -1
- package/dist/infrastructure/host/HostBuilder.js +5 -0
- package/dist/infrastructure/host/HostBuilder.js.map +1 -1
- package/dist/presentation/cli/commands/registry/generated-commands.d.ts.map +1 -1
- package/dist/presentation/cli/commands/registry/generated-commands.js +6 -0
- package/dist/presentation/cli/commands/registry/generated-commands.js.map +1 -1
- package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.d.ts +2 -5
- package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.d.ts.map +1 -1
- package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.js +15 -1
- package/dist/presentation/cli/commands/relations/list/RelationListOutputBuilder.js.map +1 -1
- package/dist/presentation/cli/commands/relations/list/relations.list.d.ts +4 -0
- package/dist/presentation/cli/commands/relations/list/relations.list.d.ts.map +1 -1
- package/dist/presentation/cli/commands/relations/list/relations.list.js +35 -12
- package/dist/presentation/cli/commands/relations/list/relations.list.js.map +1 -1
- package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.d.ts +13 -0
- package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.d.ts.map +1 -0
- package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.js +95 -0
- package/dist/presentation/cli/commands/relations/traverse/RelationTraverseOutputBuilder.js.map +1 -0
- package/dist/presentation/cli/commands/relations/traverse/relations.traverse.d.ts +15 -0
- package/dist/presentation/cli/commands/relations/traverse/relations.traverse.d.ts.map +1 -0
- package/dist/presentation/cli/commands/relations/traverse/relations.traverse.js +66 -0
- package/dist/presentation/cli/commands/relations/traverse/relations.traverse.js.map +1 -0
- 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
|
|
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;
|
|
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
|
-
|
|
8
|
-
|
|
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,
|
|
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;
|
|
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":"
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"RelationListFilter.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationListFilter.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"RelationNodeReference.js","sourceRoot":"","sources":["../../../../../src/application/context/relations/get/RelationNodeReference.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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;
|