UNPKG

apollo-angular

Version:

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

94 lines 12.9 kB
import { print } from 'graphql'; import { Injectable } from '@angular/core'; import { ApolloLink, Observable as LinkObservable, } from '@apollo/client/core'; import { createHeadersWithClientAwareness, 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 { httpClient; options; requester; print = print; constructor(httpClient, options) { super(); this.httpClient = httpClient; this.options = options; 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); }; let method = pick('method', 'POST'); const includeQuery = pick('includeQuery', true); const includeExtensions = pick('includeExtensions', false); const url = pick('uri', 'graphql'); const withCredentials = pick('withCredentials'); const useMultipart = pick('useMultipart'); const useGETForQueries = this.options.useGETForQueries === true; const isQuery = operation.query.definitions.some(def => def.kind === 'OperationDefinition' && def.operation === 'query'); if (useGETForQueries && isQuery) { method = 'GET'; } 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 = createHeadersWithClientAwareness(context); req.options.headers = mergeHeaders(req.options.headers, headers); const sub = fetch(req, this.httpClient, this.options.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 { httpClient; constructor(httpClient) { this.httpClient = httpClient; } create(options) { return new HttpLinkHandler(this.httpClient, options); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: HttpLink, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: HttpLink, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: HttpLink, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1saW5rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vaHR0cC9zcmMvaHR0cC1saW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsVUFBVSxFQUVWLFVBQVUsSUFBSSxjQUFjLEdBRTdCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFFNUYsZ0NBQWdDO0FBQ2hDLE1BQU0sT0FBTyxlQUFnQixTQUFRLFVBQVU7SUFLbkM7SUFDQTtJQUxILFNBQVMsQ0FBK0Q7SUFDdkUsS0FBSyxHQUFxQixLQUFLLENBQUM7SUFFeEMsWUFDVSxVQUFzQixFQUN0QixPQUFnQjtRQUV4QixLQUFLLEVBQUUsQ0FBQztRQUhBLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUl4QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLFNBQW9CLEVBQUUsRUFBRSxDQUN4QyxJQUFJLGNBQWMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ25DLE1BQU0sT0FBTyxHQUFZLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVoRCwyRUFBMkU7WUFDM0UsTUFBTSxJQUFJLEdBQUcsQ0FDWCxHQUFNLEVBQ04sSUFBOEIsRUFDTCxFQUFFO2dCQUMzQixPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFD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Q0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE9BQU8sQ0FBQyxFQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFLRCxNQUFNLE9BQU8sUUFBUTtJQUNDO0lBQXBCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBRXZDLE1BQU0sQ0FBQyxPQUFnQjtRQUM1QixPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQzt1R0FMVSxRQUFROzJHQUFSLFFBQVEsY0FGUCxNQUFNOzsyRkFFUCxRQUFRO2tCQUhwQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByaW50IH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXBvbGxvTGluayxcbiAgRmV0Y2hSZXN1bHQsXG4gIE9ic2VydmFibGUgYXMgTGlua09ic2VydmFibGUsXG4gIE9wZXJhdGlvbixcbn0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBCb2R5LCBDb250ZXh0LCBPcGVyYXRpb25QcmludGVyLCBPcHRpb25zLCBSZXF1ZXN0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVIZWFkZXJzV2l0aENsaWVudEF3YXJlbmVzcywgZmV0Y2gsIG1lcmdlSGVhZGVycywgcHJpb3JpdGl6ZSB9IGZyb20gJy4vdXRpbHMnO1xuXG4vLyBYWFggZmluZCBhIGJldHRlciBuYW1lIGZvciBpdFxuZXhwb3J0IGNsYXNzIEh0dHBMaW5rSGFuZGxlciBleHRlbmRzIEFwb2xsb0xpbmsge1xuICBwdWJsaWMgcmVxdWVzdGVyOiAob3BlcmF0aW9uOiBPcGVyYXRpb24pID0+IExpbmtPYnNlcnZhYmxlPEZldGNoUmVzdWx0PiB8IG51bGw7XG4gIHByaXZhdGUgcHJpbnQ6IE9wZXJhdGlvblByaW50ZXIgPSBwcmludDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vcGVyYXRpb25QcmludGVyKSB7XG4gICAgICB0aGlzLnByaW50ID0gdGhpcy5vcHRpb25zLm9wZXJhdGlvblByaW50ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0ZXIgPSAob3BlcmF0aW9uOiBPcGVyYXRpb24pID0+XG4gICAgICBuZXcgTGlua09ic2VydmFibGUoKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IG9wZXJhdGlvbi5nZXRDb250ZXh0KCk7XG5cbiAgICAgICAgLy8gZGVjaWRlcyB3aGljaCB2YWx1ZSB0byBwaWNrLCBDb250ZXh0LCBPcHRpb25zIG9yIHRvIGp1c3QgdXNlIHRoZSBkZWZhdWx0XG4gICAgICAgIGNvbnN0IHBpY2sgPSA8SyBleHRlbmRzIGtleW9mIENvbnRleHQ+KFxuICAgICAgICAgIGtleTogSyxcbiAgICAgICAgICBpbml0PzogQ29udGV4dFtLXSB8IE9wdGlvbnNbS10sXG4gICAgICAgICk6IENvbnRleHRbS10gfCBPcHRpb25zW0tdID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJpb3JpdGl6ZShjb250ZXh0W2tleV0sIHRoaXMub3B0aW9uc1trZXldLCBpbml0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgbWV0aG9kID0gcGljaygnbWV0aG9kJywgJ1BPU1QnKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZVF1ZXJ5ID0gcGljaygnaW5jbHVkZVF1ZXJ5JywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVFeHRlbnNpb25zID0gcGljaygnaW5jbHVkZUV4dGVuc2lvbnMnLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHVybCA9IHBpY2soJ3VyaScsICdncmFwaHFsJyk7XG4gICAgICAgIGNvbnN0IHdpdGhDcmVkZW50aWFscyA9IHBpY2soJ3dpdGhDcmVkZW50aWFscycpO1xuICAgICAgICBjb25zdCB1c2VNdWx0aXBhcnQgPSBwaWNrKCd1c2VNdWx0aXBhcnQnKTtcbiAgICAgICAgY29uc3QgdXNlR0VURm9yUXVlcmllcyA9IHRoaXMub3B0aW9ucy51c2VHRVRGb3JRdWVyaWVzID09PSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGlzUXVlcnkgPSBvcGVyYXRpb24ucXVlcnkuZGVmaW5pdGlvbnMuc29tZShcbiAgICAgICAgICBkZWYgPT4gZGVmLmtpbmQgPT09ICdPcGVyYXRpb25EZWZpbml0aW9uJyAmJiBkZWYub3BlcmF0aW9uID09PSAncXVlcnknLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1c2VHRVRGb3JRdWVyaWVzICYmIGlzUXVlcnkpIHtcbiAgICAgICAgICBtZXRob2QgPSAnR0VUJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcTogUmVxdWVzdCA9IHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgdXJsOiB0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nID8gdXJsKG9wZXJhdGlvbikgOiB1cmwsXG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogb3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG9wZXJhdGlvbi52YXJpYWJsZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICB1c2VNdWx0aXBhcnQsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmNsdWRlRXh0ZW5zaW9ucykge1xuICAgICAgICAgIChyZXEuYm9keSBhcyBCb2R5KS5leHRlbnNpb25zID0gb3BlcmF0aW9uLmV4dGVuc2lvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jbHVkZVF1ZXJ5KSB7XG4gICAgICAgICAgKHJlcS5ib2R5IGFzIEJvZHkpLnF1ZXJ5ID0gdGhpcy5wcmludChvcGVyYXRpb24ucXVlcnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNXaXRoQ2xpZW50QXdhcmVuZXNzKGNvbnRleHQpO1xuXG4gICAgICAgIHJlcS5vcHRpb25zLmhlYWRlcnMgPSBtZXJnZUhlYWRlcnMocmVxLm9wdGlvbnMuaGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3Qgc3ViID0gZmV0Y2gocmVxLCB0aGlzLmh0dHBDbGllbnQsIHRoaXMub3B0aW9ucy5leHRyYWN0RmlsZXMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgb3BlcmF0aW9uLnNldENvbnRleHQoeyByZXNwb25zZSB9KTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFzdWIuY2xvc2VkKSB7XG4gICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0KG9wOiBPcGVyYXRpb24pOiBMaW5rT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdD4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0ZXIob3ApO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTGluayB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCkge31cblxuICBwdWJsaWMgY3JlYXRlKG9wdGlvbnM6IE9wdGlvbnMpOiBIdHRwTGlua0hhbmRsZXIge1xuICAgIHJldHVybiBuZXcgSHR0cExpbmtIYW5kbGVyKHRoaXMuaHR0cENsaWVudCwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==