UNPKG

apollo-angular

Version:

Use your GraphQL data in your Angular app, with the Apollo Client

88 lines 11.6 kB
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { ApolloLink, Observable as LinkObservable, } from '@apollo/client/core'; import { print } from 'graphql'; import { extractFiles } from 'extract-files'; import { createHeadersWithClientAwereness, fetch, mergeHeaders, prioritize, } from './utils'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; // XXX find a better name for it export class HttpLinkHandler extends ApolloLink { constructor(httpClient, options) { super(); this.httpClient = httpClient; this.options = options; this.print = print; if (this.options.operationPrinter) { this.print = this.options.operationPrinter; } this.requester = (operation) => new LinkObservable((observer) => { const context = operation.getContext(); // decides which value to pick, Context, Options or to just use the default const pick = (key, init) => { return prioritize(context[key], this.options[key], init); }; const includeQuery = pick('includeQuery', true); const includeExtensions = pick('includeExtensions', false); const method = pick('method', 'POST'); const url = pick('uri', 'graphql'); const withCredentials = pick('withCredentials'); const useMultipart = pick('useMultipart'); const req = { method, url: typeof url === 'function' ? url(operation) : url, body: { operationName: operation.operationName, variables: operation.variables, }, options: { withCredentials, useMultipart, headers: this.options.headers, }, }; if (includeExtensions) { req.body.extensions = operation.extensions; } if (includeQuery) { req.body.query = this.print(operation.query); } const headers = createHeadersWithClientAwereness(context); req.options.headers = mergeHeaders(req.options.headers, headers); const sub = fetch(req, this.httpClient, extractFiles).subscribe({ next: (response) => { operation.setContext({ response }); observer.next(response.body); }, error: (err) => observer.error(err), complete: () => observer.complete(), }); return () => { if (!sub.closed) { sub.unsubscribe(); } }; }); } request(op) { return this.requester(op); } } export class HttpLink { constructor(httpClient) { this.httpClient = httpClient; } create(options) { return new HttpLinkHandler(this.httpClient, options); } } HttpLink.ɵprov = i0.ɵɵdefineInjectable({ factory: function HttpLink_Factory() { return new HttpLink(i0.ɵɵinject(i1.HttpClient)); }, token: HttpLink, providedIn: "root" }); HttpLink.decorators = [ { type: Injectable, args: [{ providedIn: 'root', },] } ]; HttpLink.ctorParameters = () => [ { type: HttpClient } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1saW5rLmpzIiwic291cmNlUm9vdCI6Ii93b3Jrc3BhY2VzL2Fwb2xsby1hbmd1bGFyL3BhY2thZ2VzL2Fwb2xsby1hbmd1bGFyL2h0dHAvc3JjLyIsInNvdXJjZXMiOlsiaHR0cC1saW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxJQUFJLGNBQWMsR0FHN0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyxLQUFLLEVBQ0wsWUFBWSxFQUNaLFVBQVUsR0FDWCxNQUFNLFNBQVMsQ0FBQzs7O0FBRWpCLGdDQUFnQztBQUNoQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxVQUFVO0lBTTdDLFlBQW9CLFVBQXNCLEVBQVUsT0FBZ0I7UUFDbEUsS0FBSyxFQUFFLENBQUM7UUFEVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUY1RCxVQUFLLEdBQXFCLEtBQUssQ0FBQztRQUt0QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLFNBQW9CLEVBQUUsRUFBRSxDQUN4QyxJQUFJLGNBQWMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ25DLE1BQU0sT0FBTyxHQUFZLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVoRCwyRUFBMkU7WUFDM0UsTUFB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QUMsT0FBZ0I7UUFDNUIsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Ozs7WUFSRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXBHTyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgQXBvbGxvTGluayxcbiAgT2JzZXJ2YWJsZSBhcyBMaW5rT2JzZXJ2YWJsZSxcbiAgT3BlcmF0aW9uLFxuICBGZXRjaFJlc3VsdCxcbn0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge3ByaW50fSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7ZXh0cmFjdEZpbGVzfSBmcm9tICdleHRyYWN0LWZpbGVzJztcbmltcG9ydCB7T3B0aW9ucywgQm9keSwgUmVxdWVzdCwgQ29udGV4dCwgT3BlcmF0aW9uUHJpbnRlcn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBjcmVhdGVIZWFkZXJzV2l0aENsaWVudEF3ZXJlbmVzcyxcbiAgZmV0Y2gsXG4gIG1lcmdlSGVhZGVycyxcbiAgcHJpb3JpdGl6ZSxcbn0gZnJvbSAnLi91dGlscyc7XG5cbi8vIFhYWCBmaW5kIGEgYmV0dGVyIG5hbWUgZm9yIGl0XG5leHBvcnQgY2xhc3MgSHR0cExpbmtIYW5kbGVyIGV4dGVuZHMgQXBvbGxvTGluayB7XG4gIHB1YmxpYyByZXF1ZXN0ZXI6IChcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbixcbiAgKSA9PiBMaW5rT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdD4gfCBudWxsO1xuICBwcml2YXRlIHByaW50OiBPcGVyYXRpb25QcmludGVyID0gcHJpbnQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vcGVyYXRpb25QcmludGVyKSB7XG4gICAgICB0aGlzLnByaW50ID0gdGhpcy5vcHRpb25zLm9wZXJhdGlvblByaW50ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0ZXIgPSAob3BlcmF0aW9uOiBPcGVyYXRpb24pID0+XG4gICAgICBuZXcgTGlua09ic2VydmFibGUoKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IG9wZXJhdGlvbi5nZXRDb250ZXh0KCk7XG5cbiAgICAgICAgLy8gZGVjaWRlcyB3aGljaCB2YWx1ZSB0byBwaWNrLCBDb250ZXh0LCBPcHRpb25zIG9yIHRvIGp1c3QgdXNlIHRoZSBkZWZhdWx0XG4gICAgICAgIGNvbnN0IHBpY2sgPSA8SyBleHRlbmRzIGtleW9mIENvbnRleHQ+KFxuICAgICAgICAgIGtleTogSyxcbiAgICAgICAgICBpbml0PzogQ29udGV4dFtLXSB8IE9wdGlvbnNbS10sXG4gICAgICAgICk6IENvbnRleHRbS10gfCBPcHRpb25zW0tdID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJpb3JpdGl6ZShjb250ZXh0W2tleV0sIHRoaXMub3B0aW9uc1trZXldLCBpbml0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpbmNsdWRlUXVlcnkgPSBwaWNrKCdpbmNsdWRlUXVlcnknLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZUV4dGVuc2lvbnMgPSBwaWNrKCdpbmNsdWRlRXh0ZW5zaW9ucycsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gcGljaygnbWV0aG9kJywgJ1BPU1QnKTtcbiAgICAgICAgY29uc3QgdXJsID0gcGljaygndXJpJywgJ2dyYXBocWwnKTtcbiAgICAgICAgY29uc3Qgd2l0aENyZWRlbnRpYWxzID0gcGljaygnd2l0aENyZWRlbnRpYWxzJyk7XG4gICAgICAgIGNvbnN0IHVzZU11bHRpcGFydCA9IHBpY2soJ3VzZU11bHRpcGFydCcpO1xuXG4gICAgICAgIGNvbnN0IHJlcTogUmVxdWVzdCA9IHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgdXJsOiB0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nID8gdXJsKG9wZXJhdGlvbikgOiB1cmwsXG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogb3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG9wZXJhdGlvbi52YXJpYWJsZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICB1c2VNdWx0aXBhcnQsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmNsdWRlRXh0ZW5zaW9ucykge1xuICAgICAgICAgIChyZXEuYm9keSBhcyBCb2R5KS5leHRlbnNpb25zID0gb3BlcmF0aW9uLmV4dGVuc2lvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jbHVkZVF1ZXJ5KSB7XG4gICAgICAgICAgKHJlcS5ib2R5IGFzIEJvZHkpLnF1ZXJ5ID0gdGhpcy5wcmludChvcGVyYXRpb24ucXVlcnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNXaXRoQ2xpZW50QXdlcmVuZXNzKGNvbnRleHQpO1xuXG4gICAgICAgIHJlcS5vcHRpb25zLmhlYWRlcnMgPSBtZXJnZUhlYWRlcnMocmVxLm9wdGlvbnMuaGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3Qgc3ViID0gZmV0Y2gocmVxLCB0aGlzLmh0dHBDbGllbnQsIGV4dHJhY3RGaWxlcykuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbi5zZXRDb250ZXh0KHtyZXNwb25zZX0pO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwb25zZS5ib2R5KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIGlmICghc3ViLmNsb3NlZCkge1xuICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdChvcDogT3BlcmF0aW9uKTogTGlua09ic2VydmFibGU8RmV0Y2hSZXN1bHQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdGVyKG9wKTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cExpbmsge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHt9XG5cbiAgcHVibGljIGNyZWF0ZShvcHRpb25zOiBPcHRpb25zKTogSHR0cExpbmtIYW5kbGVyIHtcbiAgICByZXR1cm4gbmV3IEh0dHBMaW5rSGFuZGxlcih0aGlzLmh0dHBDbGllbnQsIG9wdGlvbnMpO1xuICB9XG59XG4iXX0=