UNPKG

apollo-angular

Version:

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

111 lines 16.4 kB
import { HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs'; export const fetch = (req, httpClient, extractFiles) => { const shouldUseBody = ['POST', 'PUT', 'PATCH'].indexOf(req.method.toUpperCase()) !== -1; const shouldStringify = (param) => ['variables', 'extensions'].indexOf(param.toLowerCase()) !== -1; const isBatching = req.body.length; let shouldUseMultipart = req.options && req.options.useMultipart; let multipartInfo; if (shouldUseMultipart) { if (isBatching) { return new Observable((observer) => observer.error(new Error('File upload is not available when combined with Batching'))); } if (!shouldUseBody) { return new Observable((observer) => observer.error(new Error('File upload is not available when GET is used'))); } if (!extractFiles) { return new Observable((observer) => observer.error(new Error(`To use File upload you need to pass "extractFiles" function from "extract-files" library to HttpLink's options`))); } multipartInfo = extractFiles(req.body); shouldUseMultipart = !!multipartInfo.files.size; } // `body` for some, `params` for others let bodyOrParams = {}; if (isBatching) { if (!shouldUseBody) { return new Observable((observer) => observer.error(new Error('Batching is not available for GET requests'))); } bodyOrParams = { body: req.body, }; } else { const body = shouldUseMultipart ? multipartInfo.clone : req.body; if (shouldUseBody) { bodyOrParams = { body, }; } else { const params = Object.keys(req.body).reduce((obj, param) => { const value = req.body[param]; obj[param] = shouldStringify(param) ? JSON.stringify(value) : value; return obj; }, {}); bodyOrParams = { params: params }; } } if (shouldUseMultipart && shouldUseBody) { const form = new FormData(); form.append('operations', JSON.stringify(bodyOrParams.body)); const map = {}; const files = multipartInfo.files; let i = 0; files.forEach((paths) => { map[++i] = paths; }); form.append('map', JSON.stringify(map)); i = 0; files.forEach((_, file) => { form.append(++i + '', file, file.name); }); bodyOrParams.body = form; } // create a request return httpClient.request(req.method, req.url, { observe: 'response', responseType: 'json', reportProgress: false, ...bodyOrParams, ...req.options, }); }; export const mergeHeaders = (source, destination) => { if (source && destination) { const merged = destination .keys() .reduce((headers, name) => headers.set(name, destination.getAll(name)), source); return merged; } return destination || source; }; export function prioritize(...values) { const picked = values.find((val) => typeof val !== 'undefined'); if (typeof picked === 'undefined') { return values[values.length - 1]; } return picked; } export function createHeadersWithClientAwareness(context) { // `apollographql-client-*` headers are automatically set if a // `clientAwareness` object is found in the context. These headers are // set first, followed by the rest of the headers pulled from // `context.headers`. let headers = context.headers && context.headers instanceof HttpHeaders ? context.headers : new HttpHeaders(context.headers); if (context.clientAwareness) { const { name, version } = context.clientAwareness; // If desired, `apollographql-client-*` headers set by // the `clientAwareness` object can be overridden by // `apollographql-client-*` headers set in `context.headers`. if (name && !headers.has('apollographql-client-name')) { headers = headers.set('apollographql-client-name', name); } if (version && !headers.has('apollographql-client-version')) { headers = headers.set('apollographql-client-version', version); } } return headers; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9odHRwL3NyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUEyQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJaEMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQ25CLEdBQVksRUFDWixVQUFzQixFQUN0QixZQUEyQixFQUNPLEVBQUU7SUFDcEMsTUFBTSxhQUFhLEdBQ2pCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDeEMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sVUFBVSxHQUFJLEdBQUcsQ0FBQyxJQUFlLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksa0JBQWtCLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUNqRSxJQUFJLGFBR0gsQ0FBQztJQUVGLElBQUksa0JBQWtCLEVBQUU7UUFDdEIsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDakMsUUFBUSxDQUFDLEtBQUssQ0FDWixJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUN0RSxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFB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SUFDM0UsOERBQThEO0lBQzlELHNFQUFzRTtJQUN0RSw2REFBNkQ7SUFDN0QscUJBQXFCO0lBQ3JCLElBQUksT0FBTyxHQUNULE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sWUFBWSxXQUFXO1FBQ3ZELENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTztRQUNqQixDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXZDLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRTtRQUMzQixNQUFNLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFFaEQsc0RBQXNEO1FBQ3RELG9EQUFvRDtRQUNwRCw2REFBNkQ7UUFFN0QsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLEVBQUU7WUFDckQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsRUFBRTtZQUMzRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRTtLQUNGO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSwgSHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtSZXF1ZXN0LCBCb2R5LCBFeHRyYWN0RmlsZXN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZmV0Y2ggPSAoXG4gIHJlcTogUmVxdWVzdCxcbiAgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgZXh0cmFjdEZpbGVzPzogRXh0cmFjdEZpbGVzLFxuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T2JqZWN0Pj4gPT4ge1xuICBjb25zdCBzaG91bGRVc2VCb2R5ID1cbiAgICBbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJ10uaW5kZXhPZihyZXEubWV0aG9kLnRvVXBwZXJDYXNlKCkpICE9PSAtMTtcbiAgY29uc3Qgc2hvdWxkU3RyaW5naWZ5ID0gKHBhcmFtOiBzdHJpbmcpID0+XG4gICAgWyd2YXJpYWJsZXMnLCAnZXh0ZW5zaW9ucyddLmluZGV4T2YocGFyYW0udG9Mb3dlckNhc2UoKSkgIT09IC0xO1xuICBjb25zdCBpc0JhdGNoaW5nID0gKHJlcS5ib2R5IGFzIEJvZHlbXSkubGVuZ3RoO1xuICBsZXQgc2hvdWxkVXNlTXVsdGlwYXJ0ID0gcmVxLm9wdGlvbnMgJiYgcmVxLm9wdGlvbnMudXNlTXVsdGlwYXJ0O1xuICBsZXQgbXVsdGlwYXJ0SW5mbzoge1xuICAgIGNsb25lOiBCb2R5O1xuICAgIGZpbGVzOiBNYXA8YW55LCBhbnk+O1xuICB9O1xuXG4gIGlmIChzaG91bGRVc2VNdWx0aXBhcnQpIHtcbiAgICBpZiAoaXNCYXRjaGluZykge1xuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT5cbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoXG4gICAgICAgICAgbmV3IEVycm9yKCdGaWxlIHVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIHdoZW4gY29tYmluZWQgd2l0aCBCYXRjaGluZycpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZFVzZUJvZHkpIHtcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+XG4gICAgICAgIG9ic2VydmVyLmVycm9yKFxuICAgICAgICAgIG5ldyBFcnJvcignRmlsZSB1cGxvYWQgaXMgbm90IGF2YWlsYWJsZSB3aGVuIEdFVCBpcyB1c2VkJyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghZXh0cmFjdEZpbGVzKSB7XG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PlxuICAgICAgICBvYnNlcnZlci5lcnJvcihcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVG8gdXNlIEZpbGUgdXBsb2FkIHlvdSBuZWVkIHRvIHBhc3MgXCJleHRyYWN0RmlsZXNcIiBmdW5jdGlvbiBmcm9tIFwiZXh0cmFjdC1maWxlc1wiIGxpYnJhcnkgdG8gSHR0cExpbmsncyBvcHRpb25zYCxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtdWx0aXBhcnRJbmZvID0gZXh0cmFjdEZpbGVzKHJlcS5ib2R5KTtcblxuICAgIHNob3VsZFVzZU11bHRpcGFydCA9ICEhbXVsdGlwYXJ0SW5mby5maWxlcy5zaXplO1xuICB9XG5cbiAgLy8gYGJvZHlgIGZvciBzb21lLCBgcGFyYW1zYCBmb3Igb3RoZXJzXG4gIGxldCBib2R5T3JQYXJhbXMgPSB7fTtcblxuICBpZiAoaXNCYXRjaGluZykge1xuICAgIGlmICghc2hvdWxkVXNlQm9keSkge1xuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT5cbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEVycm9yKCdCYXRjaGluZyBpcyBub3QgYXZhaWxhYmxlIGZvciBHRVQgcmVxdWVzdHMnKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGJvZHlPclBhcmFtcyA9IHtcbiAgICAgIGJvZHk6IHJlcS5ib2R5LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYm9keSA9IHNob3VsZFVzZU11bHRpcGFydCA/IG11bHRpcGFydEluZm8hLmNsb25lIDogcmVxLmJvZHk7XG5cbiAgICBpZiAoc2hvdWxkVXNlQm9keSkge1xuICAgICAgYm9keU9yUGFyYW1zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmtleXMocmVxLmJvZHkpLnJlZHVjZSgob2JqOiBhbnksIHBhcmFtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHJlcS5ib2R5IGFzIGFueSlbcGFyYW1dO1xuICAgICAgICBvYmpbcGFyYW1dID0gc2hvdWxkU3RyaW5naWZ5KHBhcmFtKSA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfSwge30pO1xuXG4gICAgICBib2R5T3JQYXJhbXMgPSB7cGFyYW1zOiBwYXJhbXN9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaG91bGRVc2VNdWx0aXBhcnQgJiYgc2hvdWxkVXNlQm9keSkge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm0uYXBwZW5kKCdvcGVyYXRpb25zJywgSlNPTi5zdHJpbmdpZnkoKGJvZHlPclBhcmFtcyBhcyBhbnkpLmJvZHkpKTtcblxuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGZpbGVzID0gbXVsdGlwYXJ0SW5mbyEuZmlsZXM7XG5cbiAgICBsZXQgaSA9IDA7XG4gICAgZmlsZXMuZm9yRWFjaCgocGF0aHMpID0+IHtcbiAgICAgIG1hcFsrK2ldID0gcGF0aHM7XG4gICAgfSk7XG5cbiAgICBmb3JtLmFwcGVuZCgnbWFwJywgSlNPTi5zdHJpbmdpZnkobWFwKSk7XG5cbiAgICBpID0gMDtcbiAgICBmaWxlcy5mb3JFYWNoKChfLCBmaWxlKSA9PiB7XG4gICAgICBmb3JtLmFwcGVuZCgrK2kgKyAnJywgZmlsZSwgZmlsZS5uYW1lKTtcbiAgICB9KTtcblxuICAgIChib2R5T3JQYXJhbXMgYXMgYW55KS5ib2R5ID0gZm9ybTtcbiAgfVxuXG4gIC8vIGNyZWF0ZSBhIHJlcXVlc3RcbiAgcmV0dXJuIGh0dHBDbGllbnQucmVxdWVzdDxPYmplY3Q+KHJlcS5tZXRob2QsIHJlcS51cmwsIHtcbiAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgIHJlcG9ydFByb2dyZXNzOiBmYWxzZSxcbiAgICAuLi5ib2R5T3JQYXJhbXMsXG4gICAgLi4ucmVxLm9wdGlvbnMsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1lcmdlSGVhZGVycyA9IChcbiAgc291cmNlOiBIdHRwSGVhZGVycyxcbiAgZGVzdGluYXRpb246IEh0dHBIZWFkZXJzLFxuKTogSHR0cEhlYWRlcnMgPT4ge1xuICBpZiAoc291cmNlICYmIGRlc3RpbmF0aW9uKSB7XG4gICAgY29uc3QgbWVyZ2VkID0gZGVzdGluYXRpb25cbiAgICAgIC5rZXlzKClcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChoZWFkZXJzLCBuYW1lKSA9PiBoZWFkZXJzLnNldChuYW1lLCBkZXN0aW5hdGlvbi5nZXRBbGwobmFtZSkpLFxuICAgICAgICBzb3VyY2UsXG4gICAgICApO1xuXG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIHJldHVybiBkZXN0aW5hdGlvbiB8fCBzb3VyY2U7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpb3JpdGl6ZTxUPiguLi52YWx1ZXM6IFRbXSk6IFQge1xuICBjb25zdCBwaWNrZWQgPSB2YWx1ZXMuZmluZCgodmFsKSA9PiB0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJyk7XG5cbiAgaWYgKHR5cGVvZiBwaWNrZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV07XG4gIH1cblxuICByZXR1cm4gcGlja2VkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGVhZGVyc1dpdGhDbGllbnRBd2FyZW5lc3MoY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAvLyBgYXBvbGxvZ3JhcGhxbC1jbGllbnQtKmAgaGVhZGVycyBhcmUgYXV0b21hdGljYWxseSBzZXQgaWYgYVxuICAvLyBgY2xpZW50QXdhcmVuZXNzYCBvYmplY3QgaXMgZm91bmQgaW4gdGhlIGNvbnRleHQuIFRoZXNlIGhlYWRlcnMgYXJlXG4gIC8vIHNldCBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlcnMgcHVsbGVkIGZyb21cbiAgLy8gYGNvbnRleHQuaGVhZGVyc2AuXG4gIGxldCBoZWFkZXJzID1cbiAgICBjb250ZXh0LmhlYWRlcnMgJiYgY29udGV4dC5oZWFkZXJzIGluc3RhbmNlb2YgSHR0cEhlYWRlcnNcbiAgICAgID8gY29udGV4dC5oZWFkZXJzXG4gICAgICA6IG5ldyBIdHRwSGVhZGVycyhjb250ZXh0LmhlYWRlcnMpO1xuXG4gIGlmIChjb250ZXh0LmNsaWVudEF3YXJlbmVzcykge1xuICAgIGNvbnN0IHtuYW1lLCB2ZXJzaW9ufSA9IGNvbnRleHQuY2xpZW50QXdhcmVuZXNzO1xuXG4gICAgLy8gSWYgZGVzaXJlZCwgYGFwb2xsb2dyYXBocWwtY2xpZW50LSpgIGhlYWRlcnMgc2V0IGJ5XG4gICAgLy8gdGhlIGBjbGllbnRBd2FyZW5lc3NgIG9iamVjdCBjYW4gYmUgb3ZlcnJpZGRlbiBieVxuICAgIC8vIGBhcG9sbG9ncmFwaHFsLWNsaWVudC0qYCBoZWFkZXJzIHNldCBpbiBgY29udGV4dC5oZWFkZXJzYC5cblxuICAgIGlmIChuYW1lICYmICFoZWFkZXJzLmhhcygnYXBvbGxvZ3JhcGhxbC1jbGllbnQtbmFtZScpKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ2Fwb2xsb2dyYXBocWwtY2xpZW50LW5hbWUnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhaGVhZGVycy5oYXMoJ2Fwb2xsb2dyYXBocWwtY2xpZW50LXZlcnNpb24nKSkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdhcG9sbG9ncmFwaHFsLWNsaWVudC12ZXJzaW9uJywgdmVyc2lvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnM7XG59XG4iXX0=