You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.5 KiB
39 lines
1.5 KiB
4 months ago
|
import { isNonNullObject } from "./objects.js";
|
||
|
import { isNonEmptyArray } from "./arrays.js";
|
||
|
import { DeepMerger } from "./mergeDeep.js";
|
||
|
export function isExecutionPatchIncrementalResult(value) {
|
||
|
return "incremental" in value;
|
||
|
}
|
||
|
export function isExecutionPatchInitialResult(value) {
|
||
|
return "hasNext" in value && "data" in value;
|
||
|
}
|
||
|
export function isExecutionPatchResult(value) {
|
||
|
return (isExecutionPatchIncrementalResult(value) ||
|
||
|
isExecutionPatchInitialResult(value));
|
||
|
}
|
||
|
// This function detects an Apollo payload result before it is transformed
|
||
|
// into a FetchResult via HttpLink; it cannot detect an ApolloPayloadResult
|
||
|
// once it leaves the link chain.
|
||
|
export function isApolloPayloadResult(value) {
|
||
|
return isNonNullObject(value) && "payload" in value;
|
||
|
}
|
||
|
export function mergeIncrementalData(prevResult, result) {
|
||
|
var mergedData = prevResult;
|
||
|
var merger = new DeepMerger();
|
||
|
if (isExecutionPatchIncrementalResult(result) &&
|
||
|
isNonEmptyArray(result.incremental)) {
|
||
|
result.incremental.forEach(function (_a) {
|
||
|
var data = _a.data, path = _a.path;
|
||
|
for (var i = path.length - 1; i >= 0; --i) {
|
||
|
var key = path[i];
|
||
|
var isNumericKey = !isNaN(+key);
|
||
|
var parent_1 = isNumericKey ? [] : {};
|
||
|
parent_1[key] = data;
|
||
|
data = parent_1;
|
||
|
}
|
||
|
mergedData = merger.merge(mergedData, data);
|
||
|
});
|
||
|
}
|
||
|
return mergedData;
|
||
|
}
|
||
|
//# sourceMappingURL=incrementalResult.js.map
|