apollo-angular-link-http
Version:
An Apollo Link to allow sending a single http request per operation.
89 lines • 11.5 kB
JavaScript
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { ApolloLink, Observable as LinkObservable, } from 'apollo-link';
import { print } from 'graphql';
import { fetch, mergeHeaders, prioritize, } from 'apollo-angular-link-http-common';
import { extractFiles } from 'extract-files';
// XXX find a better name for it
var HttpLinkHandler = /** @class */ (function (_super) {
tslib_1.__extends(HttpLinkHandler, _super);
function HttpLinkHandler(httpClient, options) {
var _this = _super.call(this) || this;
_this.httpClient = httpClient;
_this.options = options;
_this.requester = function (operation) {
return new LinkObservable(function (observer) {
var context = operation.getContext();
// decides which value to pick, Context, Options or to just use the default
var pick = function (key, init) {
return prioritize(context[key], _this.options[key], init);
};
var includeQuery = pick('includeQuery', true);
var includeExtensions = pick('includeExtensions', false);
var method = pick('method', 'POST');
var url = pick('uri', 'graphql');
var withCredentials = pick('withCredentials');
var useMultipart = pick('useMultipart');
var req = {
method: method,
url: typeof url === 'function' ? url(operation) : url,
body: {
operationName: operation.operationName,
variables: operation.variables,
},
options: {
withCredentials: withCredentials,
useMultipart: useMultipart,
headers: _this.options.headers,
},
};
if (includeExtensions) {
req.body.extensions = operation.extensions;
}
if (includeQuery) {
req.body.query = print(operation.query);
}
if (context.headers) {
req.options.headers = mergeHeaders(req.options.headers, context.headers);
}
var sub = fetch(req, _this.httpClient, extractFiles).subscribe({
next: function (response) {
operation.setContext({ response: response });
observer.next(response.body);
},
error: function (err) { return observer.error(err); },
complete: function () { return observer.complete(); },
});
return function () {
if (!sub.closed) {
sub.unsubscribe();
}
};
});
};
return _this;
}
HttpLinkHandler.prototype.request = function (op) {
return this.requester(op);
};
return HttpLinkHandler;
}(ApolloLink));
export { HttpLinkHandler };
var HttpLink = /** @class */ (function () {
function HttpLink(httpClient) {
this.httpClient = httpClient;
}
HttpLink.prototype.create = function (options) {
return new HttpLinkHandler(this.httpClient, options);
};
HttpLink.ctorParameters = function () { return [
{ type: HttpClient }
]; };
HttpLink = tslib_1.__decorate([
Injectable()
], HttpLink);
return HttpLink;
}());
export { HttpLink };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cExpbmsuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hcG9sbG8tYW5ndWxhci1saW5rLWh0dHAvIiwic291cmNlcyI6WyJIdHRwTGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUNMLFVBQVUsRUFDVixVQUFVLElBQUksY0FBYyxHQUc3QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFDTCxLQUFLLEVBS0wsWUFBWSxFQUNaLFVBQVUsR0FDWCxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0MsZ0NBQWdDO0FBQ2hDO0lBQXFDLDJDQUFVO0lBSzdDLHlCQUFvQixVQUFzQixFQUFVLE9BQWdCO1FBQXBFLFlBQ0UsaUJBQU8sU0FpRVI7UUFsRW1CLGdCQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsYUFBTyxHQUFQLE9BQU8sQ0FBUztRQUdsRSxLQUFJLENBQUMsU0FBUyxHQUFHLFVBQUMsU0FBb0I7WUFDcEMsT0FBQSxJQUFJLGNBQWMsQ0FBQyxVQUFDLFFBQWE7Z0JBQy9CLElBQU0sT0FBTyxHQUFZLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFFaEQsMkVBQTJFO2dCQUMzRSxJQUFNLElBQUksR0FBRyxVQUNYLEdBQU0sRUFDTixJQUE4QjtvQkFFOUIsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELENBQUMsQ0FBQztnQkFFRixJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxD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TXBCO0lBQUQsZUFBQztDQUFBLEFBTkQsSUFNQztTQU5ZLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBBcG9sbG9MaW5rLFxuICBPYnNlcnZhYmxlIGFzIExpbmtPYnNlcnZhYmxlLFxuICBPcGVyYXRpb24sXG4gIEZldGNoUmVzdWx0LFxufSBmcm9tICdhcG9sbG8tbGluayc7XG5pbXBvcnQge3ByaW50fSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7XG4gIGZldGNoLFxuICBPcHRpb25zLFxuICBCb2R5LFxuICBSZXF1ZXN0LFxuICBDb250ZXh0LFxuICBtZXJnZUhlYWRlcnMsXG4gIHByaW9yaXRpemUsXG59IGZyb20gJ2Fwb2xsby1hbmd1bGFyLWxpbmstaHR0cC1jb21tb24nO1xuaW1wb3J0IHtleHRyYWN0RmlsZXN9IGZyb20gJ2V4dHJhY3QtZmlsZXMnO1xuXG4vLyBYWFggZmluZCBhIGJldHRlciBuYW1lIGZvciBpdFxuZXhwb3J0IGNsYXNzIEh0dHBMaW5rSGFuZGxlciBleHRlbmRzIEFwb2xsb0xpbmsge1xuICBwdWJsaWMgcmVxdWVzdGVyOiAoXG4gICAgb3BlcmF0aW9uOiBPcGVyYXRpb24sXG4gICkgPT4gTGlua09ic2VydmFibGU8RmV0Y2hSZXN1bHQ+IHwgbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIHByaXZhdGUgb3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJlcXVlc3RlciA9IChvcGVyYXRpb246IE9wZXJhdGlvbikgPT5cbiAgICAgIG5ldyBMaW5rT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZXh0OiBDb250ZXh0ID0gb3BlcmF0aW9uLmdldENvbnRleHQoKTtcblxuICAgICAgICAvLyBkZWNpZGVzIHdoaWNoIHZhbHVlIHRvIHBpY2ssIENvbnRleHQsIE9wdGlvbnMgb3IgdG8ganVzdCB1c2UgdGhlIGRlZmF1bHRcbiAgICAgICAgY29uc3QgcGljayA9IDxLIGV4dGVuZHMga2V5b2YgQ29udGV4dCB8IGtleW9mIE9wdGlvbnM+KFxuICAgICAgICAgIGtleTogSyxcbiAgICAgICAgICBpbml0PzogQ29udGV4dFtLXSB8IE9wdGlvbnNbS10sXG4gICAgICAgICk6IENvbnRleHRbS10gfCBPcHRpb25zW0tdID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJpb3JpdGl6ZShjb250ZXh0W2tleV0sIHRoaXMub3B0aW9uc1trZXldLCBpbml0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpbmNsdWRlUXVlcnkgPSBwaWNrKCdpbmNsdWRlUXVlcnknLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZUV4dGVuc2lvbnMgPSBwaWNrKCdpbmNsdWRlRXh0ZW5zaW9ucycsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gcGljaygnbWV0aG9kJywgJ1BPU1QnKTtcbiAgICAgICAgY29uc3QgdXJsID0gcGljaygndXJpJywgJ2dyYXBocWwnKTtcbiAgICAgICAgY29uc3Qgd2l0aENyZWRlbnRpYWxzID0gcGljaygnd2l0aENyZWRlbnRpYWxzJyk7XG4gICAgICAgIGNvbnN0IHVzZU11bHRpcGFydCA9IHBpY2soJ3VzZU11bHRpcGFydCcpO1xuXG4gICAgICAgIGNvbnN0IHJlcTogUmVxdWVzdCA9IHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgdXJsOiB0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nID8gdXJsKG9wZXJhdGlvbikgOiB1cmwsXG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogb3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG9wZXJhdGlvbi52YXJpYWJsZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICB1c2VNdWx0aXBhcnQsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmNsdWRlRXh0ZW5zaW9ucykge1xuICAgICAgICAgIChyZXEuYm9keSBhcyBCb2R5KS5leHRlbnNpb25zID0gb3BlcmF0aW9uLmV4dGVuc2lvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jbHVkZVF1ZXJ5KSB7XG4gICAgICAgICAgKHJlcS5ib2R5IGFzIEJvZHkpLnF1ZXJ5ID0gcHJpbnQob3BlcmF0aW9uLnF1ZXJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0LmhlYWRlcnMpIHtcbiAgICAgICAgICByZXEub3B0aW9ucy5oZWFkZXJzID0gbWVyZ2VIZWFkZXJzKFxuICAgICAgICAgICAgcmVxLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICAgIGNvbnRleHQuaGVhZGVycyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ViID0gZmV0Y2gocmVxLCB0aGlzLmh0dHBDbGllbnQsIGV4dHJhY3RGaWxlcykuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBvcGVyYXRpb24uc2V0Q29udGV4dCh7cmVzcG9uc2V9KTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFzdWIuY2xvc2VkKSB7XG4gICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0KG9wOiBPcGVyYXRpb24pOiBMaW5rT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdD4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0ZXIob3ApO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdHRwTGluayB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCkge31cblxuICBwdWJsaWMgY3JlYXRlKG9wdGlvbnM6IE9wdGlvbnMpOiBIdHRwTGlua0hhbmRsZXIge1xuICAgIHJldHVybiBuZXcgSHR0cExpbmtIYW5kbGVyKHRoaXMuaHR0cENsaWVudCwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==