@wundergraph/composition 0.27.2 → 0.28.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/ast/utils.d.ts +0 -2
- package/dist/ast/utils.js +0 -34
- package/dist/ast/utils.js.map +1 -1
- package/dist/errors/errors.d.ts +3 -0
- package/dist/errors/errors.js +13 -0
- package/dist/errors/errors.js.map +1 -1
- package/dist/federation/federation-factory.d.ts +9 -12
- package/dist/federation/federation-factory.js +134 -347
- package/dist/federation/federation-factory.js.map +1 -1
- package/dist/federation/utils.d.ts +27 -6
- package/dist/federation/utils.js +123 -0
- package/dist/federation/utils.js.map +1 -1
- package/dist/federation/walkers.d.ts +1 -1
- package/dist/federation/walkers.js +7 -28
- package/dist/federation/walkers.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/normalization/normalization-factory.d.ts +12 -10
- package/dist/normalization/normalization-factory.js +52 -29
- package/dist/normalization/normalization-factory.js.map +1 -1
- package/dist/normalization/utils.d.ts +1 -1
- package/dist/normalization/utils.js +54 -25
- package/dist/normalization/utils.js.map +1 -1
- package/dist/normalization/walkers.js +78 -73
- package/dist/normalization/walkers.js.map +1 -1
- package/dist/resolvability-graph/graph-nodes.d.ts +48 -0
- package/dist/resolvability-graph/graph-nodes.js +104 -0
- package/dist/resolvability-graph/graph-nodes.js.map +1 -0
- package/dist/resolvability-graph/graph.d.ts +33 -0
- package/dist/resolvability-graph/graph.js +406 -0
- package/dist/resolvability-graph/graph.js.map +1 -0
- package/dist/resolvability-graph/utils.d.ts +65 -0
- package/dist/resolvability-graph/utils.js +143 -0
- package/dist/resolvability-graph/utils.js.map +1 -0
- package/dist/schema-building/utils.js +1 -1
- package/dist/schema-building/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/string-constants.d.ts +5 -2
- package/dist/utils/string-constants.js +6 -4
- package/dist/utils/string-constants.js.map +1 -1
- package/dist/utils/utils.d.ts +16 -2
- package/dist/utils/utils.js +35 -33
- package/dist/utils/utils.js.map +1 -1
- package/package.json +2 -4
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Graph = void 0;
|
|
4
|
+
const utils_1 = require("../utils/utils");
|
|
5
|
+
const string_constants_1 = require("../utils/string-constants");
|
|
6
|
+
const graph_nodes_1 = require("./graph-nodes");
|
|
7
|
+
const utils_2 = require("./utils");
|
|
8
|
+
class Graph {
|
|
9
|
+
edgeId = -1;
|
|
10
|
+
entityDataNodes = new Map();
|
|
11
|
+
entityNodeNamesBySharedFieldPath = new Map();
|
|
12
|
+
nodeByNodeName = new Map();
|
|
13
|
+
nodesByTypeName = new Map();
|
|
14
|
+
rootNodeByRootTypeName = new Map();
|
|
15
|
+
subgraphName = string_constants_1.N_A;
|
|
16
|
+
resolvableFieldNamesByRelativeFieldPathByEntityNodeName = new Map();
|
|
17
|
+
nodeResolutionDataByFieldPath = new Map();
|
|
18
|
+
unresolvableFieldPaths = new Set();
|
|
19
|
+
failureResultByEntityNodeName = new Map();
|
|
20
|
+
walkerIndex = -1;
|
|
21
|
+
constructor() { }
|
|
22
|
+
getRootNode(typeName) {
|
|
23
|
+
return (0, utils_1.getValueOrDefault)(this.rootNodeByRootTypeName, typeName, () => new graph_nodes_1.RootNode(typeName));
|
|
24
|
+
}
|
|
25
|
+
addOrUpdateNode(typeName, options) {
|
|
26
|
+
const nodeName = `${this.subgraphName}.${typeName}`;
|
|
27
|
+
const node = this.nodeByNodeName.get(nodeName);
|
|
28
|
+
if (node) {
|
|
29
|
+
node.isAbstract ||= !!options?.isAbstract;
|
|
30
|
+
if (!node.isLeaf && options?.isLeaf) {
|
|
31
|
+
node.isLeaf = true;
|
|
32
|
+
}
|
|
33
|
+
return node;
|
|
34
|
+
}
|
|
35
|
+
const newNode = new graph_nodes_1.GraphNode(this.subgraphName, typeName, options);
|
|
36
|
+
this.nodeByNodeName.set(nodeName, newNode);
|
|
37
|
+
(0, utils_1.getValueOrDefault)(this.nodesByTypeName, typeName, () => []).push(newNode);
|
|
38
|
+
return newNode;
|
|
39
|
+
}
|
|
40
|
+
addEdge(headNode, tailNode, fieldName, isAbstractEdge = false) {
|
|
41
|
+
if (headNode.isRootNode) {
|
|
42
|
+
const edge = new graph_nodes_1.Edge(this.getNextEdgeId(), tailNode, fieldName);
|
|
43
|
+
(0, utils_1.getValueOrDefault)(headNode.headToShareableTailEdges, fieldName, () => []).push(edge);
|
|
44
|
+
return edge;
|
|
45
|
+
}
|
|
46
|
+
const headGraphNode = headNode;
|
|
47
|
+
const headToTailEdge = new graph_nodes_1.Edge(this.getNextEdgeId(), tailNode, isAbstractEdge ? tailNode.typeName : fieldName, isAbstractEdge);
|
|
48
|
+
headGraphNode.headToTailEdges.set(fieldName, headToTailEdge);
|
|
49
|
+
return headToTailEdge;
|
|
50
|
+
}
|
|
51
|
+
addEntityDataNode(typeName) {
|
|
52
|
+
const node = this.entityDataNodes.get(typeName);
|
|
53
|
+
if (node) {
|
|
54
|
+
return node;
|
|
55
|
+
}
|
|
56
|
+
const newNode = new graph_nodes_1.EntityDataNode(typeName);
|
|
57
|
+
this.entityDataNodes.set(typeName, newNode);
|
|
58
|
+
return newNode;
|
|
59
|
+
}
|
|
60
|
+
getNextEdgeId() {
|
|
61
|
+
return (this.edgeId += 1);
|
|
62
|
+
}
|
|
63
|
+
setNodeInaccessible(typeName) {
|
|
64
|
+
const nodes = this.nodesByTypeName.get(typeName);
|
|
65
|
+
if (!nodes) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
for (const node of nodes) {
|
|
69
|
+
node.isInaccessible = true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
initializeNode(typeName, fieldDataByFieldName) {
|
|
73
|
+
const entityDataNode = this.entityDataNodes.get(typeName);
|
|
74
|
+
if (string_constants_1.ROOT_TYPE_NAMES.has(typeName)) {
|
|
75
|
+
const rootNode = this.getRootNode(typeName);
|
|
76
|
+
rootNode.removeInaccessibleEdges(fieldDataByFieldName);
|
|
77
|
+
rootNode.fieldDataByFieldName = fieldDataByFieldName;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const nodes = this.nodesByTypeName.get(typeName);
|
|
81
|
+
if (!nodes) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
for (const node of nodes) {
|
|
85
|
+
node.fieldDataByFieldName = fieldDataByFieldName;
|
|
86
|
+
node.handleInaccessibleEdges();
|
|
87
|
+
node.isLeaf = false;
|
|
88
|
+
if (!entityDataNode) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
node.hasEntitySiblings = true;
|
|
92
|
+
for (const fieldSet of node.satisfiedFieldSets) {
|
|
93
|
+
const subgraphNames = entityDataNode.targetSubgraphNamesByFieldSet.get(fieldSet);
|
|
94
|
+
for (const subgraphName of subgraphNames || []) {
|
|
95
|
+
// A subgraph should not jump to itself
|
|
96
|
+
if (subgraphName === node.subgraphName) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const siblingNode = this.nodeByNodeName.get(`${subgraphName}.${node.typeName}`);
|
|
100
|
+
if (siblingNode) {
|
|
101
|
+
node.entityEdges.push(new graph_nodes_1.Edge(this.getNextEdgeId(), siblingNode, ''));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
setSubgraphName(subgraphName) {
|
|
108
|
+
this.subgraphName = subgraphName;
|
|
109
|
+
}
|
|
110
|
+
validateEntities(entityNodeNamesBySharedFieldPath, rootFieldData) {
|
|
111
|
+
const nestedEntityNodeNamesBySharedFieldPathByParentNodeName = new Map();
|
|
112
|
+
for (const [sharedFieldPath, entityNodeNames] of entityNodeNamesBySharedFieldPath) {
|
|
113
|
+
const isFieldShared = entityNodeNames.size > 1;
|
|
114
|
+
let failureResult;
|
|
115
|
+
/* In the event of a shared entity field, the validation changes slightly.
|
|
116
|
+
* The fields are linked through a mutual entity ancestor, and may/may not have additional routing through a key.
|
|
117
|
+
* In this case, the following must occur:
|
|
118
|
+
* 1. sharedResolvableFieldNamesByRelativeFieldPath will be created and passed to ensure the resolvability of
|
|
119
|
+
* paths are assessed collectively, rather than by a single instance of the shared fields
|
|
120
|
+
* */
|
|
121
|
+
const sharedResolvableFieldNamesByRelativeFieldPath = isFieldShared
|
|
122
|
+
? new Map()
|
|
123
|
+
: undefined;
|
|
124
|
+
/*
|
|
125
|
+
* 2. unresolvableSharedFieldPaths is used to determine whether there are still unresolvable paths even after
|
|
126
|
+
* all shared fields have been analysed.
|
|
127
|
+
* */
|
|
128
|
+
const unresolvableSharedFieldPaths = new Set();
|
|
129
|
+
/*
|
|
130
|
+
* 3. nestedEntityNodeNamesBySharedFieldPath should be a reference to the same set, to ensure nested shared fields
|
|
131
|
+
* are analysed as shared fields when moving deeper.
|
|
132
|
+
* */
|
|
133
|
+
const sharedNestedEntityNodeNamesBySharedFieldPath = new Map();
|
|
134
|
+
for (const entityNodeName of entityNodeNames) {
|
|
135
|
+
const entityNode = this.nodeByNodeName.get(entityNodeName);
|
|
136
|
+
if (!entityNode) {
|
|
137
|
+
throw new Error(`Fatal: Could not find entity node for "${entityNodeName}".`);
|
|
138
|
+
}
|
|
139
|
+
const resolvableFieldNamesByRelativeFieldPath = this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.get(entityNodeName);
|
|
140
|
+
if (resolvableFieldNamesByRelativeFieldPath) {
|
|
141
|
+
// If at least one of the referenced entities is always fully resolvable, the path is resolvable.
|
|
142
|
+
const entityFailureResult = this.failureResultByEntityNodeName.get(entityNodeName);
|
|
143
|
+
if (!entityFailureResult) {
|
|
144
|
+
failureResult = undefined;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
// If the path is shared, it must be assessed collectively
|
|
148
|
+
if (!isFieldShared) {
|
|
149
|
+
return entityFailureResult;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const interSubgraphNodes = this.nodesByTypeName.get(entityNode.typeName) || [];
|
|
153
|
+
const nestedEntityNodeNamesBySharedFieldPath = (0, utils_1.getValueOrDefault)(nestedEntityNodeNamesBySharedFieldPathByParentNodeName, entityNodeName, () => (isFieldShared ? sharedNestedEntityNodeNamesBySharedFieldPath : new Map()));
|
|
154
|
+
const walker = new Walker({
|
|
155
|
+
interSubgraphNodes,
|
|
156
|
+
entityNodeNamesBySharedFieldPath: nestedEntityNodeNamesBySharedFieldPath,
|
|
157
|
+
originNode: entityNode,
|
|
158
|
+
resolvableFieldNamesByRelativeFieldPathByEntityNodeName: this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName,
|
|
159
|
+
walkerIndex: (this.walkerIndex += 1),
|
|
160
|
+
sharedResolvableFieldNamesByRelativeFieldPath,
|
|
161
|
+
unresolvableSharedFieldPaths,
|
|
162
|
+
});
|
|
163
|
+
walker.visitEntityNode(entityNode);
|
|
164
|
+
if (walker.unresolvableFieldPaths.size > 0) {
|
|
165
|
+
if (isFieldShared && unresolvableSharedFieldPaths.size < 1) {
|
|
166
|
+
failureResult = undefined;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
failureResult = {
|
|
170
|
+
entityAncestorData: {
|
|
171
|
+
fieldSetsByTargetSubgraphName: (0, utils_1.getOrThrowError)(this.entityDataNodes, entityNode.typeName, 'entityDataNodes').fieldSetsByTargetSubgraphName,
|
|
172
|
+
subgraphName: entityNode.subgraphName,
|
|
173
|
+
typeName: entityNode.typeName,
|
|
174
|
+
},
|
|
175
|
+
nodeName: entityNodeName,
|
|
176
|
+
parentFieldPathForEntityReference: [sharedFieldPath],
|
|
177
|
+
success: false,
|
|
178
|
+
typeName: entityNode.typeName,
|
|
179
|
+
unresolvableFieldPaths: isFieldShared ? unresolvableSharedFieldPaths : walker.unresolvableFieldPaths,
|
|
180
|
+
};
|
|
181
|
+
this.failureResultByEntityNodeName.set(entityNodeName, failureResult);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
// In a shared path, only a single instance need succeed
|
|
185
|
+
failureResult = undefined;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
if (failureResult) {
|
|
189
|
+
if (isFieldShared && sharedResolvableFieldNamesByRelativeFieldPath) {
|
|
190
|
+
this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName.set(failureResult.nodeName, sharedResolvableFieldNamesByRelativeFieldPath);
|
|
191
|
+
}
|
|
192
|
+
return failureResult;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (nestedEntityNodeNamesBySharedFieldPathByParentNodeName.size > 0) {
|
|
196
|
+
for (const [parentNodeName, fieldPathsByNestedNodeName,] of nestedEntityNodeNamesBySharedFieldPathByParentNodeName) {
|
|
197
|
+
const result = this.validateEntities(fieldPathsByNestedNodeName, rootFieldData);
|
|
198
|
+
if (result.success) {
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
for (const [sharedFieldPath, entityNodeNames] of entityNodeNamesBySharedFieldPath) {
|
|
202
|
+
if (!entityNodeNames.has(parentNodeName)) {
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
result.parentFieldPathForEntityReference.push(sharedFieldPath);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return { success: true };
|
|
212
|
+
}
|
|
213
|
+
validate() {
|
|
214
|
+
const errors = [];
|
|
215
|
+
for (const rootNode of this.rootNodeByRootTypeName.values()) {
|
|
216
|
+
shareableRootFieldLoop: for (const [rootFieldName, shareableRootFieldEdges,] of rootNode.headToShareableTailEdges) {
|
|
217
|
+
for (const rootFieldEdge of shareableRootFieldEdges) {
|
|
218
|
+
if (rootFieldEdge.isInaccessible) {
|
|
219
|
+
continue shareableRootFieldLoop;
|
|
220
|
+
}
|
|
221
|
+
this.walkerIndex += 1;
|
|
222
|
+
this.visitEdge(rootFieldEdge, `${rootNode.typeName.toLowerCase()}`);
|
|
223
|
+
}
|
|
224
|
+
const fieldData = (0, utils_1.getOrThrowError)(rootNode.fieldDataByFieldName, rootFieldName, 'fieldDataByFieldName');
|
|
225
|
+
const rootFieldData = (0, utils_2.newRootFieldData)(rootNode.typeName, rootFieldName, fieldData.subgraphNames);
|
|
226
|
+
if (this.unresolvableFieldPaths.size > 0) {
|
|
227
|
+
(0, utils_2.generateResolvabilityErrors)({
|
|
228
|
+
unresolvableFieldPaths: this.unresolvableFieldPaths,
|
|
229
|
+
nodeResolutionDataByFieldPath: this.nodeResolutionDataByFieldPath,
|
|
230
|
+
rootFieldData,
|
|
231
|
+
errors,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
if (this.entityNodeNamesBySharedFieldPath.size > 0) {
|
|
235
|
+
const result = this.validateEntities(this.entityNodeNamesBySharedFieldPath, rootFieldData);
|
|
236
|
+
if (!result.success) {
|
|
237
|
+
this.generateEntityResolvabilityErrors(result, rootFieldData, errors);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (errors.length > 0) {
|
|
241
|
+
return errors;
|
|
242
|
+
}
|
|
243
|
+
this.entityNodeNamesBySharedFieldPath = new Map();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return [];
|
|
247
|
+
}
|
|
248
|
+
// Returns true if the edge is visited and false otherwise (e.g., inaccessible)
|
|
249
|
+
visitEdge(edge, fieldPath) {
|
|
250
|
+
if (edge.isInaccessible || edge.node.isInaccessible) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
if (!(0, utils_1.add)(edge.visitedIndices, this.walkerIndex) || edge.node.isLeaf) {
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
if (edge.node.isAbstract) {
|
|
257
|
+
this.validateAbstractNode(edge.node, `${fieldPath}.${edge.edgeName}`);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.validateConcreteNode(edge.node, `${fieldPath}.${edge.edgeName}`);
|
|
261
|
+
}
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
validateConcreteNode(node, fieldPath) {
|
|
265
|
+
if (node.headToTailEdges.size < 1) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (node.hasEntitySiblings) {
|
|
269
|
+
(0, utils_1.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath, fieldPath, () => new Set()).add(node.nodeName);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const resolvedFieldNames = (0, utils_1.getValueOrDefault)(this.nodeResolutionDataByFieldPath, fieldPath, () => new utils_2.NodeResolutionData(node.typeName, node.fieldDataByFieldName));
|
|
273
|
+
for (const [fieldName, edge] of node.headToTailEdges) {
|
|
274
|
+
// Returns true if the edge was visited
|
|
275
|
+
if (this.visitEdge(edge, fieldPath)) {
|
|
276
|
+
resolvedFieldNames.add(fieldName);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (resolvedFieldNames.isResolved) {
|
|
280
|
+
this.unresolvableFieldPaths.delete(fieldPath);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
this.unresolvableFieldPaths.add(fieldPath);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
validateAbstractNode(node, fieldPath) {
|
|
287
|
+
if (node.headToTailEdges.size < 1) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
for (const edge of node.headToTailEdges.values()) {
|
|
291
|
+
this.visitEdge(edge, fieldPath);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
generateEntityResolvabilityErrors(result, rootFieldData, errors) {
|
|
295
|
+
const nodeResolutionDataByFieldPath = (0, utils_1.getOrThrowError)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName, result.nodeName, 'resolvableFieldNamesByRelativeFieldPathByEntityNodeName');
|
|
296
|
+
let pathFromRoot = '';
|
|
297
|
+
// Reconstruct the path
|
|
298
|
+
for (const fieldPath of result.parentFieldPathForEntityReference) {
|
|
299
|
+
pathFromRoot = fieldPath + pathFromRoot;
|
|
300
|
+
}
|
|
301
|
+
(0, utils_2.generateResolvabilityErrors)({
|
|
302
|
+
unresolvableFieldPaths: result.unresolvableFieldPaths,
|
|
303
|
+
nodeResolutionDataByFieldPath,
|
|
304
|
+
rootFieldData: rootFieldData,
|
|
305
|
+
errors,
|
|
306
|
+
pathFromRoot,
|
|
307
|
+
entityAncestorData: result.entityAncestorData,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
exports.Graph = Graph;
|
|
312
|
+
class Walker {
|
|
313
|
+
entityNodeNamesBySharedFieldPath;
|
|
314
|
+
interSubgraphNodes;
|
|
315
|
+
originNode;
|
|
316
|
+
resolvableFieldNamesByRelativeFieldPath;
|
|
317
|
+
resolvableFieldNamesByRelativeFieldPathByEntityNodeName;
|
|
318
|
+
unresolvableFieldPaths = new Set();
|
|
319
|
+
unresolvableSharedFieldPaths;
|
|
320
|
+
walkerIndex;
|
|
321
|
+
sharedResolvableFieldNamesByRelativeFieldPath;
|
|
322
|
+
constructor({ entityNodeNamesBySharedFieldPath, interSubgraphNodes, originNode, resolvableFieldNamesByRelativeFieldPathByEntityNodeName, unresolvableSharedFieldPaths, walkerIndex, sharedResolvableFieldNamesByRelativeFieldPath, }) {
|
|
323
|
+
this.entityNodeNamesBySharedFieldPath = entityNodeNamesBySharedFieldPath;
|
|
324
|
+
this.interSubgraphNodes = interSubgraphNodes;
|
|
325
|
+
this.originNode = originNode;
|
|
326
|
+
this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName =
|
|
327
|
+
resolvableFieldNamesByRelativeFieldPathByEntityNodeName;
|
|
328
|
+
this.resolvableFieldNamesByRelativeFieldPath = (0, utils_1.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPathByEntityNodeName, originNode.nodeName, () => new Map());
|
|
329
|
+
this.unresolvableSharedFieldPaths = unresolvableSharedFieldPaths;
|
|
330
|
+
this.walkerIndex = walkerIndex;
|
|
331
|
+
this.sharedResolvableFieldNamesByRelativeFieldPath = sharedResolvableFieldNamesByRelativeFieldPath;
|
|
332
|
+
}
|
|
333
|
+
visitEntityNode(node) {
|
|
334
|
+
this.validateEntityRelatedConcreteNode(node, '');
|
|
335
|
+
const accessibleEntityNodeNames = node.getAllAccessibleEntityNodeNames();
|
|
336
|
+
for (const sibling of this.interSubgraphNodes) {
|
|
337
|
+
if (this.unresolvableFieldPaths.size < 0) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (!accessibleEntityNodeNames.has(sibling.nodeName)) {
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
this.validateEntityRelatedConcreteNode(sibling, '');
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// Returns true if the edge is visited and false if it's inaccessible
|
|
347
|
+
visitEntityRelatedEdge(edge, fieldPath) {
|
|
348
|
+
if (edge.isInaccessible || edge.node.isInaccessible) {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
if (!(0, utils_1.add)(edge.visitedIndices, this.walkerIndex) || edge.node.isLeaf) {
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
if (edge.node.hasEntitySiblings) {
|
|
355
|
+
(0, utils_1.getValueOrDefault)(this.entityNodeNamesBySharedFieldPath, `${fieldPath}.${edge.edgeName}`, () => new Set()).add(edge.node.nodeName);
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
if (edge.node.isAbstract) {
|
|
359
|
+
this.validateEntityRelatedAbstractNode(edge.node, `${fieldPath}.${edge.edgeName}`);
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
this.validateEntityRelatedConcreteNode(edge.node, `${fieldPath}.${edge.edgeName}`);
|
|
363
|
+
}
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
validateEntityRelatedConcreteNode(node, fieldPath) {
|
|
367
|
+
if (node.headToTailEdges.size < 1) {
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const originResolvedFieldNames = (0, utils_1.getValueOrDefault)(this.resolvableFieldNamesByRelativeFieldPath, fieldPath, () => new utils_2.NodeResolutionData(node.typeName, node.fieldDataByFieldName));
|
|
371
|
+
const sharedResolvedFieldNames = this.sharedResolvableFieldNamesByRelativeFieldPath
|
|
372
|
+
? (0, utils_1.getValueOrDefault)(this.sharedResolvableFieldNamesByRelativeFieldPath, fieldPath, () => new utils_2.NodeResolutionData(node.typeName, node.fieldDataByFieldName))
|
|
373
|
+
: undefined;
|
|
374
|
+
for (const [fieldName, edge] of node.headToTailEdges) {
|
|
375
|
+
// Returns true if the edge is visited
|
|
376
|
+
if (this.visitEntityRelatedEdge(edge, fieldPath)) {
|
|
377
|
+
originResolvedFieldNames.add(fieldName);
|
|
378
|
+
sharedResolvedFieldNames?.add(fieldName);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
if (originResolvedFieldNames.isResolved) {
|
|
382
|
+
this.unresolvableFieldPaths.delete(fieldPath);
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
this.unresolvableFieldPaths.add(fieldPath);
|
|
386
|
+
}
|
|
387
|
+
if (!sharedResolvedFieldNames) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
if (sharedResolvedFieldNames.isResolved) {
|
|
391
|
+
this.unresolvableSharedFieldPaths.delete(fieldPath);
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
this.unresolvableSharedFieldPaths.add(fieldPath);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
validateEntityRelatedAbstractNode(node, fieldPath) {
|
|
398
|
+
if (node.headToTailEdges.size < 1) {
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
for (const edge of node.headToTailEdges.values()) {
|
|
402
|
+
this.visitEntityRelatedEdge(edge, fieldPath);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/resolvability-graph/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { GraphFieldData } from '../utils/utils';
|
|
2
|
+
export declare class NodeResolutionData {
|
|
3
|
+
fieldDataByFieldName: Map<string, GraphFieldData>;
|
|
4
|
+
isResolved: boolean;
|
|
5
|
+
resolvedFieldNames: Set<string>;
|
|
6
|
+
typeName: string;
|
|
7
|
+
constructor(typeName: string, fieldDataByFieldName: Map<string, GraphFieldData>);
|
|
8
|
+
add(fieldName: string): boolean;
|
|
9
|
+
}
|
|
10
|
+
export type EntityResolvabilitySuccess = {
|
|
11
|
+
success: true;
|
|
12
|
+
};
|
|
13
|
+
export type EntityResolvabilityFailure = {
|
|
14
|
+
entityAncestorData: EntityAncestorData;
|
|
15
|
+
nodeName: string;
|
|
16
|
+
parentFieldPathForEntityReference: Array<string>;
|
|
17
|
+
success: false;
|
|
18
|
+
typeName: string;
|
|
19
|
+
unresolvableFieldPaths: Set<string>;
|
|
20
|
+
};
|
|
21
|
+
export type EntityResolvabilityResult = EntityResolvabilitySuccess | EntityResolvabilityFailure;
|
|
22
|
+
export type UnresolvableFieldData = {
|
|
23
|
+
fieldName: string;
|
|
24
|
+
selectionSet: string;
|
|
25
|
+
subgraphNames: Set<string>;
|
|
26
|
+
typeName: string;
|
|
27
|
+
};
|
|
28
|
+
export type RootFieldData = {
|
|
29
|
+
coordinate: string;
|
|
30
|
+
message: string;
|
|
31
|
+
subgraphNames: Set<string>;
|
|
32
|
+
};
|
|
33
|
+
export declare function newRootFieldData(typeName: string, fieldName: string, subgraphNames: Set<string>): {
|
|
34
|
+
coordinate: string;
|
|
35
|
+
message: string;
|
|
36
|
+
subgraphNames: Set<string>;
|
|
37
|
+
};
|
|
38
|
+
type ResolvabilityErrorsOptions = {
|
|
39
|
+
errors: Array<Error>;
|
|
40
|
+
nodeResolutionDataByFieldPath: Map<string, NodeResolutionData>;
|
|
41
|
+
rootFieldData: RootFieldData;
|
|
42
|
+
unresolvableFieldPaths: Array<string> | Set<string>;
|
|
43
|
+
entityAncestorData?: EntityAncestorData;
|
|
44
|
+
pathFromRoot?: string;
|
|
45
|
+
};
|
|
46
|
+
export type EntityAncestorData = {
|
|
47
|
+
fieldSetsByTargetSubgraphName: Map<string, Set<string>>;
|
|
48
|
+
subgraphName: string;
|
|
49
|
+
typeName: string;
|
|
50
|
+
};
|
|
51
|
+
export type GenerateResolvabilityErrorReasonsOptions = {
|
|
52
|
+
rootFieldData: RootFieldData;
|
|
53
|
+
unresolvableFieldData: UnresolvableFieldData;
|
|
54
|
+
entityAncestorData?: EntityAncestorData;
|
|
55
|
+
};
|
|
56
|
+
export declare function generateResolvabilityErrorReasons({ entityAncestorData, rootFieldData, unresolvableFieldData, }: GenerateResolvabilityErrorReasonsOptions): Array<string>;
|
|
57
|
+
type SelectionSetSegments = {
|
|
58
|
+
outputEnd: string;
|
|
59
|
+
outputStart: string;
|
|
60
|
+
pathNodes: Array<string>;
|
|
61
|
+
};
|
|
62
|
+
export declare function generateSelectionSetSegments(fieldPath: string): SelectionSetSegments;
|
|
63
|
+
export declare function renderSelectionSet({ outputEnd, outputStart, pathNodes }: SelectionSetSegments, fieldData: GraphFieldData): string;
|
|
64
|
+
export declare function generateResolvabilityErrors({ entityAncestorData, errors, nodeResolutionDataByFieldPath, pathFromRoot, rootFieldData, unresolvableFieldPaths, }: ResolvabilityErrorsOptions): void;
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NodeResolutionData = void 0;
|
|
4
|
+
exports.newRootFieldData = newRootFieldData;
|
|
5
|
+
exports.generateResolvabilityErrorReasons = generateResolvabilityErrorReasons;
|
|
6
|
+
exports.generateSelectionSetSegments = generateSelectionSetSegments;
|
|
7
|
+
exports.renderSelectionSet = renderSelectionSet;
|
|
8
|
+
exports.generateResolvabilityErrors = generateResolvabilityErrors;
|
|
9
|
+
const utils_1 = require("../utils/utils");
|
|
10
|
+
const string_constants_1 = require("../utils/string-constants");
|
|
11
|
+
const errors_1 = require("../errors/errors");
|
|
12
|
+
class NodeResolutionData {
|
|
13
|
+
fieldDataByFieldName;
|
|
14
|
+
isResolved = false;
|
|
15
|
+
resolvedFieldNames = new Set();
|
|
16
|
+
typeName;
|
|
17
|
+
constructor(typeName, fieldDataByFieldName) {
|
|
18
|
+
this.fieldDataByFieldName = fieldDataByFieldName;
|
|
19
|
+
this.typeName = typeName;
|
|
20
|
+
}
|
|
21
|
+
add(fieldName) {
|
|
22
|
+
this.resolvedFieldNames.add(fieldName);
|
|
23
|
+
if (this.resolvedFieldNames.size > this.fieldDataByFieldName.size) {
|
|
24
|
+
const unexpectedEntries = (0, utils_1.getEntriesNotInHashSet)(this.resolvedFieldNames, this.fieldDataByFieldName);
|
|
25
|
+
throw (0, errors_1.unexpectedEdgeFatalError)(this.typeName, unexpectedEntries);
|
|
26
|
+
}
|
|
27
|
+
this.isResolved = this.resolvedFieldNames.size === this.fieldDataByFieldName.size;
|
|
28
|
+
return this.isResolved;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.NodeResolutionData = NodeResolutionData;
|
|
32
|
+
function newRootFieldData(typeName, fieldName, subgraphNames) {
|
|
33
|
+
return {
|
|
34
|
+
coordinate: `${typeName}.${fieldName}`,
|
|
35
|
+
message: `The root type field "${typeName}.${fieldName}" is defined in the following subgraph` +
|
|
36
|
+
(subgraphNames.size > 1 ? `s` : ``) +
|
|
37
|
+
`: "${[...subgraphNames].join(string_constants_1.QUOTATION_JOIN)}".`,
|
|
38
|
+
subgraphNames,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function formatFieldNameSelection(fieldData, pathLength) {
|
|
42
|
+
if (fieldData.isLeaf) {
|
|
43
|
+
return fieldData.name + ` <--\n`;
|
|
44
|
+
}
|
|
45
|
+
return (fieldData.name +
|
|
46
|
+
` { <--\n` +
|
|
47
|
+
string_constants_1.LITERAL_SPACE.repeat(pathLength + 3) +
|
|
48
|
+
`...\n` +
|
|
49
|
+
string_constants_1.LITERAL_SPACE.repeat(pathLength + 2) +
|
|
50
|
+
`}\n`);
|
|
51
|
+
}
|
|
52
|
+
function generateResolvabilityErrorReasons({ entityAncestorData, rootFieldData, unresolvableFieldData, }) {
|
|
53
|
+
const { fieldName, typeName, subgraphNames } = unresolvableFieldData;
|
|
54
|
+
const reasons = [
|
|
55
|
+
rootFieldData.message,
|
|
56
|
+
`The field "${typeName}.${fieldName}" is defined in the following subgraph` +
|
|
57
|
+
(subgraphNames.size > 1 ? `s` : ``) +
|
|
58
|
+
`: "${[...subgraphNames].join(string_constants_1.QUOTATION_JOIN)}".`,
|
|
59
|
+
];
|
|
60
|
+
if (entityAncestorData) {
|
|
61
|
+
let hasIntersectingTargetSubgraph = false;
|
|
62
|
+
for (const [targetSubgraphName, fieldSets] of entityAncestorData.fieldSetsByTargetSubgraphName) {
|
|
63
|
+
if (!subgraphNames.has(targetSubgraphName)) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
hasIntersectingTargetSubgraph = true;
|
|
67
|
+
for (const fieldSet of fieldSets) {
|
|
68
|
+
reasons.push(`The entity ancestor "${entityAncestorData.typeName}" in subgraph "${entityAncestorData.subgraphName}" does not satisfy the key field set "${fieldSet}" to access subgraph "${targetSubgraphName}".`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (!hasIntersectingTargetSubgraph) {
|
|
72
|
+
reasons.push(`The entity ancestor "${entityAncestorData.typeName}" in subgraph "${entityAncestorData.subgraphName}" has no accessible target entities (resolvable @key directives) in the subgraphs where "${typeName}.${fieldName}" is defined.`);
|
|
73
|
+
}
|
|
74
|
+
reasons.push(`The type "${typeName}" is not a descendent of any other entity ancestors that can provide a shared route to access "${fieldName}".`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
if (rootFieldData.subgraphNames.size > 1) {
|
|
78
|
+
reasons.push(`None of the subgraphs that share the same root type field "${rootFieldData.coordinate}" can provide a route to access "${fieldName}".`);
|
|
79
|
+
}
|
|
80
|
+
reasons.push(`The type "${typeName}" is not a descendent of an entity ancestor that can provide a shared route to access "${fieldName}".`);
|
|
81
|
+
}
|
|
82
|
+
if (typeName !== entityAncestorData?.typeName) {
|
|
83
|
+
reasons.push(`The type "${typeName}" has no accessible target entities (resolvable @key directives) in any other subgraph, so accessing other subgraphs is not possible.`);
|
|
84
|
+
}
|
|
85
|
+
return reasons;
|
|
86
|
+
}
|
|
87
|
+
function generateSelectionSetSegments(fieldPath) {
|
|
88
|
+
// Regex is to split on singular periods and not fragments (... on TypeName)
|
|
89
|
+
const pathNodes = fieldPath.split(/(?<=\w)\./);
|
|
90
|
+
let outputStart = '';
|
|
91
|
+
let outputEnd = '';
|
|
92
|
+
for (let i = 0; i < pathNodes.length; i++) {
|
|
93
|
+
outputStart += string_constants_1.LITERAL_SPACE.repeat(i + 1) + pathNodes[i] + ` {\n`;
|
|
94
|
+
outputEnd = string_constants_1.LITERAL_SPACE.repeat(i + 1) + `}\n` + outputEnd;
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
outputEnd,
|
|
98
|
+
outputStart,
|
|
99
|
+
pathNodes,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function renderSelectionSet({ outputEnd, outputStart, pathNodes }, fieldData) {
|
|
103
|
+
return (outputStart +
|
|
104
|
+
string_constants_1.LITERAL_SPACE.repeat(pathNodes.length + 1) +
|
|
105
|
+
formatFieldNameSelection(fieldData, pathNodes.length) +
|
|
106
|
+
outputEnd);
|
|
107
|
+
}
|
|
108
|
+
function getUnresolvablePath(fieldPath, pathFromRoot) {
|
|
109
|
+
if (pathFromRoot) {
|
|
110
|
+
if (fieldPath) {
|
|
111
|
+
return `${pathFromRoot}${fieldPath}`;
|
|
112
|
+
}
|
|
113
|
+
return pathFromRoot;
|
|
114
|
+
}
|
|
115
|
+
return fieldPath;
|
|
116
|
+
}
|
|
117
|
+
function generateResolvabilityErrors({ entityAncestorData, errors, nodeResolutionDataByFieldPath, pathFromRoot, rootFieldData, unresolvableFieldPaths, }) {
|
|
118
|
+
const unresolvableFieldDatas = [];
|
|
119
|
+
for (const fieldPath of unresolvableFieldPaths) {
|
|
120
|
+
const nodeResolutionData = (0, utils_1.getOrThrowError)(nodeResolutionDataByFieldPath, fieldPath, 'nodeResolutionDataByFieldPath');
|
|
121
|
+
const fieldDataByFieldName = new Map();
|
|
122
|
+
for (const [fieldName, fieldData] of nodeResolutionData.fieldDataByFieldName) {
|
|
123
|
+
if (nodeResolutionData.resolvedFieldNames.has(fieldName)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
fieldDataByFieldName.set(fieldName, fieldData);
|
|
127
|
+
}
|
|
128
|
+
const fullPath = getUnresolvablePath(fieldPath, pathFromRoot);
|
|
129
|
+
const selectionSetSegments = generateSelectionSetSegments(fullPath);
|
|
130
|
+
for (const [fieldName, fieldData] of fieldDataByFieldName) {
|
|
131
|
+
unresolvableFieldDatas.push({
|
|
132
|
+
fieldName,
|
|
133
|
+
selectionSet: renderSelectionSet(selectionSetSegments, fieldData),
|
|
134
|
+
subgraphNames: fieldData.subgraphNames,
|
|
135
|
+
typeName: nodeResolutionData.typeName,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (const unresolvableFieldData of unresolvableFieldDatas) {
|
|
140
|
+
errors.push((0, errors_1.unresolvablePathError)(unresolvableFieldData, generateResolvabilityErrorReasons({ rootFieldData, unresolvableFieldData, entityAncestorData })));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/resolvability-graph/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -541,7 +541,7 @@ function addUnionExtensionDataByNode(parentExtensionDataByTypeName, node, errors
|
|
|
541
541
|
});
|
|
542
542
|
}
|
|
543
543
|
function isTypeNameRootType(typeName, operationByTypeName) {
|
|
544
|
-
return string_constants_1.
|
|
544
|
+
return string_constants_1.ROOT_TYPE_NAMES.has(typeName) || operationByTypeName.has(typeName);
|
|
545
545
|
}
|
|
546
546
|
function getRenamedRootTypeName(typeName, operationByTypeName) {
|
|
547
547
|
const operationTypeNode = operationByTypeName.get(typeName);
|