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.
161 lines
7.1 KiB
161 lines
7.1 KiB
4 months ago
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||
|
|
||
|
var tslib = require('tslib');
|
||
|
var core = require('../core');
|
||
|
var utilities = require('../../utilities');
|
||
|
var utils = require('../utils');
|
||
|
var http = require('../http');
|
||
|
var batch = require('../batch');
|
||
|
var graphql = require('graphql');
|
||
|
|
||
|
function filterOperationVariables(variables, query) {
|
||
|
var result = tslib.__assign({}, variables);
|
||
|
var unusedNames = new Set(Object.keys(variables));
|
||
|
graphql.visit(query, {
|
||
|
Variable: function (node, _key, parent) {
|
||
|
if (parent &&
|
||
|
parent.kind !== "VariableDefinition") {
|
||
|
unusedNames.delete(node.name.value);
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
unusedNames.forEach(function (name) {
|
||
|
delete result[name];
|
||
|
});
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
var BatchHttpLink = (function (_super) {
|
||
|
tslib.__extends(BatchHttpLink, _super);
|
||
|
function BatchHttpLink(fetchParams) {
|
||
|
var _this = _super.call(this) || this;
|
||
|
var _a = fetchParams || {}, _b = _a.uri, uri = _b === void 0 ? "/graphql" : _b,
|
||
|
fetcher = _a.fetch, _c = _a.print, print = _c === void 0 ? http.defaultPrinter : _c, includeExtensions = _a.includeExtensions, preserveHeaderCase = _a.preserveHeaderCase, batchInterval = _a.batchInterval, batchDebounce = _a.batchDebounce, batchMax = _a.batchMax, batchKey = _a.batchKey, _d = _a.includeUnusedVariables, includeUnusedVariables = _d === void 0 ? false : _d, requestOptions = tslib.__rest(_a, ["uri", "fetch", "print", "includeExtensions", "preserveHeaderCase", "batchInterval", "batchDebounce", "batchMax", "batchKey", "includeUnusedVariables"]);
|
||
|
http.checkFetcher(fetcher);
|
||
|
if (!fetcher) {
|
||
|
fetcher = fetch;
|
||
|
}
|
||
|
var linkConfig = {
|
||
|
http: { includeExtensions: includeExtensions, preserveHeaderCase: preserveHeaderCase },
|
||
|
options: requestOptions.fetchOptions,
|
||
|
credentials: requestOptions.credentials,
|
||
|
headers: requestOptions.headers,
|
||
|
};
|
||
|
_this.batchDebounce = batchDebounce;
|
||
|
_this.batchInterval = batchInterval || 10;
|
||
|
_this.batchMax = batchMax || 10;
|
||
|
var batchHandler = function (operations) {
|
||
|
var chosenURI = http.selectURI(operations[0], uri);
|
||
|
var context = operations[0].getContext();
|
||
|
var clientAwarenessHeaders = {};
|
||
|
if (context.clientAwareness) {
|
||
|
var _a = context.clientAwareness, name_1 = _a.name, version = _a.version;
|
||
|
if (name_1) {
|
||
|
clientAwarenessHeaders["apollographql-client-name"] = name_1;
|
||
|
}
|
||
|
if (version) {
|
||
|
clientAwarenessHeaders["apollographql-client-version"] = version;
|
||
|
}
|
||
|
}
|
||
|
var contextConfig = {
|
||
|
http: context.http,
|
||
|
options: context.fetchOptions,
|
||
|
credentials: context.credentials,
|
||
|
headers: tslib.__assign(tslib.__assign({}, clientAwarenessHeaders), context.headers),
|
||
|
};
|
||
|
var queries = operations.map(function (_a) {
|
||
|
var query = _a.query;
|
||
|
if (utilities.hasDirectives(["client"], query)) {
|
||
|
return utilities.removeClientSetsFromDocument(query);
|
||
|
}
|
||
|
return query;
|
||
|
});
|
||
|
if (queries.some(function (query) { return !query; })) {
|
||
|
return utils.fromError(new Error("BatchHttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or enable the `transformOptions.removeClientFields` option."));
|
||
|
}
|
||
|
var optsAndBody = operations.map(function (operation, index) {
|
||
|
var result = http.selectHttpOptionsAndBodyInternal(tslib.__assign(tslib.__assign({}, operation), { query: queries[index] }), print, http.fallbackHttpConfig, linkConfig, contextConfig);
|
||
|
if (result.body.variables && !includeUnusedVariables) {
|
||
|
result.body.variables = filterOperationVariables(result.body.variables, operation.query);
|
||
|
}
|
||
|
return result;
|
||
|
});
|
||
|
var loadedBody = optsAndBody.map(function (_a) {
|
||
|
var body = _a.body;
|
||
|
return body;
|
||
|
});
|
||
|
var options = optsAndBody[0].options;
|
||
|
if (options.method === "GET") {
|
||
|
return utils.fromError(new Error("apollo-link-batch-http does not support GET requests"));
|
||
|
}
|
||
|
try {
|
||
|
options.body = http.serializeFetchParameter(loadedBody, "Payload");
|
||
|
}
|
||
|
catch (parseError) {
|
||
|
return utils.fromError(parseError);
|
||
|
}
|
||
|
var controller;
|
||
|
if (!options.signal && typeof AbortController !== "undefined") {
|
||
|
controller = new AbortController();
|
||
|
options.signal = controller.signal;
|
||
|
}
|
||
|
return new utilities.Observable(function (observer) {
|
||
|
fetcher(chosenURI, options)
|
||
|
.then(function (response) {
|
||
|
operations.forEach(function (operation) {
|
||
|
return operation.setContext({ response: response });
|
||
|
});
|
||
|
return response;
|
||
|
})
|
||
|
.then(http.parseAndCheckHttpResponse(operations))
|
||
|
.then(function (result) {
|
||
|
controller = undefined;
|
||
|
observer.next(result);
|
||
|
observer.complete();
|
||
|
return result;
|
||
|
})
|
||
|
.catch(function (err) {
|
||
|
controller = undefined;
|
||
|
if (err.result && err.result.errors && err.result.data) {
|
||
|
observer.next(err.result);
|
||
|
}
|
||
|
observer.error(err);
|
||
|
});
|
||
|
return function () {
|
||
|
if (controller)
|
||
|
controller.abort();
|
||
|
};
|
||
|
});
|
||
|
};
|
||
|
batchKey =
|
||
|
batchKey ||
|
||
|
(function (operation) {
|
||
|
var context = operation.getContext();
|
||
|
var contextConfig = {
|
||
|
http: context.http,
|
||
|
options: context.fetchOptions,
|
||
|
credentials: context.credentials,
|
||
|
headers: context.headers,
|
||
|
};
|
||
|
return http.selectURI(operation, uri) + JSON.stringify(contextConfig);
|
||
|
});
|
||
|
_this.batcher = new batch.BatchLink({
|
||
|
batchDebounce: _this.batchDebounce,
|
||
|
batchInterval: _this.batchInterval,
|
||
|
batchMax: _this.batchMax,
|
||
|
batchKey: batchKey,
|
||
|
batchHandler: batchHandler,
|
||
|
});
|
||
|
return _this;
|
||
|
}
|
||
|
BatchHttpLink.prototype.request = function (operation) {
|
||
|
return this.batcher.request(operation);
|
||
|
};
|
||
|
return BatchHttpLink;
|
||
|
}(core.ApolloLink));
|
||
|
|
||
|
exports.BatchHttpLink = BatchHttpLink;
|
||
|
//# sourceMappingURL=batch-http.cjs.map
|