@graphql-tools/links
Version:
A set of utils for faster development of GraphQL tools
51 lines (50 loc) • 1.97 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwaitVariablesLink = void 0;
const tslib_1 = require("tslib");
const apolloImport = tslib_1.__importStar(require("@apollo/client"));
const utils_1 = require("@graphql-tools/utils");
const apollo = apolloImport?.default ?? apolloImport;
function getFinalPromise(object) {
return (0, utils_1.mapMaybePromise)(object, resolvedObject => {
if (resolvedObject == null) {
return resolvedObject;
}
if (Array.isArray(resolvedObject)) {
return Promise.all(resolvedObject.map(o => getFinalPromise(o)));
}
else if (typeof resolvedObject === 'object') {
const keys = Object.keys(resolvedObject);
return Promise.all(keys.map(key => getFinalPromise(resolvedObject[key]))).then(awaitedValues => {
for (let i = 0; i < keys.length; i++) {
resolvedObject[keys[i]] = awaitedValues[i];
}
return resolvedObject;
});
}
return resolvedObject;
});
}
class AwaitVariablesLink extends apollo.ApolloLink {
request(operation, forward) {
return new apollo.Observable(observer => {
let subscription;
getFinalPromise(operation.variables)
.then(resolvedVariables => {
operation.variables = resolvedVariables;
subscription = forward(operation).subscribe({
next: observer.next.bind(observer),
error: observer.error.bind(observer),
complete: observer.complete.bind(observer),
});
})
.catch(observer.error.bind(observer));
return () => {
if (subscription != null) {
subscription.unsubscribe();
}
};
});
}
}
exports.AwaitVariablesLink = AwaitVariablesLink;
;