UNPKG

apollo-angular-link-http

Version:

An Apollo Link to allow sending a single http request per operation.

89 lines 11.5 kB
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==