UNPKG

apollo-angular

Version:

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

102 lines 15.6 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'))); } 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, Object.assign(Object.assign({ 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 createHeadersWithClientAwereness(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiL3dvcmtzcGFjZXMvYXBvbGxvLWFuZ3VsYXIvcGFja2FnZXMvYXBvbGxvLWFuZ3VsYXIvaHR0cC9zcmMvIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUEyQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJaEMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQ25CLEdBQVksRUFDWixVQUFzQixFQUN0QixZQUEwQixFQUNRLEVBQUU7SUFDcEMsTUFBTSxhQUFhLEdBQ2pCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDeEMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sVUFBVSxHQUFJLEdBQUcsQ0FBQyxJQUFlLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksa0JBQWtCLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUNqRSxJQUFJLGFBR0gsQ0FBQztJQUVGLElBQUksa0JBQWtCLEVBQUU7UUFDdEIsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDakMsUUFBUSxDQUFDLEtBQUssQ0FDWixJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUN0RSxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxhQUFhLEVB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RCxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDakIsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV2QyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUU7UUFDM0IsTUFBTSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBRWhELHNEQUFzRDtRQUN0RCxvREFBb0Q7UUFDcEQsNkRBQTZEO1FBRTdELElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO1lBQ3JELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzFEO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUU7WUFDM0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEU7S0FDRjtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UsIEh0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7UmVxdWVzdCwgQm9keSwgRXh0cmFjdEZpbGVzfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGZldGNoID0gKFxuICByZXE6IFJlcXVlc3QsXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gIGV4dHJhY3RGaWxlczogRXh0cmFjdEZpbGVzLFxuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T2JqZWN0Pj4gPT4ge1xuICBjb25zdCBzaG91bGRVc2VCb2R5ID1cbiAgICBbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJ10uaW5kZXhPZihyZXEubWV0aG9kLnRvVXBwZXJDYXNlKCkpICE9PSAtMTtcbiAgY29uc3Qgc2hvdWxkU3RyaW5naWZ5ID0gKHBhcmFtOiBzdHJpbmcpID0+XG4gICAgWyd2YXJpYWJsZXMnLCAnZXh0ZW5zaW9ucyddLmluZGV4T2YocGFyYW0udG9Mb3dlckNhc2UoKSkgIT09IC0xO1xuICBjb25zdCBpc0JhdGNoaW5nID0gKHJlcS5ib2R5IGFzIEJvZHlbXSkubGVuZ3RoO1xuICBsZXQgc2hvdWxkVXNlTXVsdGlwYXJ0ID0gcmVxLm9wdGlvbnMgJiYgcmVxLm9wdGlvbnMudXNlTXVsdGlwYXJ0O1xuICBsZXQgbXVsdGlwYXJ0SW5mbzoge1xuICAgIGNsb25lOiBCb2R5O1xuICAgIGZpbGVzOiBNYXA8YW55LCBhbnk+O1xuICB9O1xuXG4gIGlmIChzaG91bGRVc2VNdWx0aXBhcnQpIHtcbiAgICBpZiAoaXNCYXRjaGluZykge1xuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT5cbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoXG4gICAgICAgICAgbmV3IEVycm9yKCdGaWxlIHVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIHdoZW4gY29tYmluZWQgd2l0aCBCYXRjaGluZycpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZFVzZUJvZHkpIHtcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+XG4gICAgICAgIG9ic2VydmVyLmVycm9yKFxuICAgICAgICAgIG5ldyBFcnJvcignRmlsZSB1cGxvYWQgaXMgbm90IGF2YWlsYWJsZSB3aGVuIEdFVCBpcyB1c2VkJyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIG11bHRpcGFydEluZm8gPSBleHRyYWN0RmlsZXMocmVxLmJvZHkpO1xuXG4gICAgc2hvdWxkVXNlTXVsdGlwYXJ0ID0gISFtdWx0aXBhcnRJbmZvLmZpbGVzLnNpemU7XG4gIH1cblxuICAvLyBgYm9keWAgZm9yIHNvbWUsIGBwYXJhbXNgIGZvciBvdGhlcnNcbiAgbGV0IGJvZHlPclBhcmFtcyA9IHt9O1xuXG4gIGlmIChpc0JhdGNoaW5nKSB7XG4gICAgaWYgKCFzaG91bGRVc2VCb2R5KSB7XG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PlxuICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ0JhdGNoaW5nIGlzIG5vdCBhdmFpbGFibGUgZm9yIEdFVCByZXF1ZXN0cycpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYm9keU9yUGFyYW1zID0ge1xuICAgICAgYm9keTogcmVxLmJvZHksXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBib2R5ID0gc2hvdWxkVXNlTXVsdGlwYXJ0ID8gbXVsdGlwYXJ0SW5mbyEuY2xvbmUgOiByZXEuYm9keTtcblxuICAgIGlmIChzaG91bGRVc2VCb2R5KSB7XG4gICAgICBib2R5T3JQYXJhbXMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhyZXEuYm9keSkucmVkdWNlKChvYmo6IGFueSwgcGFyYW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAocmVxLmJvZHkgYXMgYW55KVtwYXJhbV07XG4gICAgICAgIG9ialtwYXJhbV0gPSBzaG91bGRTdHJpbmdpZnkocGFyYW0pID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogdmFsdWU7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIGJvZHlPclBhcmFtcyA9IHtwYXJhbXM6IHBhcmFtc307XG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZFVzZU11bHRpcGFydCAmJiBzaG91bGRVc2VCb2R5KSB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybS5hcHBlbmQoJ29wZXJhdGlvbnMnLCBKU09OLnN0cmluZ2lmeSgoYm9keU9yUGFyYW1zIGFzIGFueSkuYm9keSkpO1xuXG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgY29uc3QgZmlsZXMgPSBtdWx0aXBhcnRJbmZvIS5maWxlcztcblxuICAgIGxldCBpID0gMDtcbiAgICBmaWxlcy5mb3JFYWNoKChwYXRocykgPT4ge1xuICAgICAgbWFwWysraV0gPSBwYXRocztcbiAgICB9KTtcblxuICAgIGZvcm0uYXBwZW5kKCdtYXAnLCBKU09OLnN0cmluZ2lmeShtYXApKTtcblxuICAgIGkgPSAwO1xuICAgIGZpbGVzLmZvckVhY2goKF8sIGZpbGUpID0+IHtcbiAgICAgIGZvcm0uYXBwZW5kKCsraSArICcnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgIH0pO1xuXG4gICAgKGJvZHlPclBhcmFtcyBhcyBhbnkpLmJvZHkgPSBmb3JtO1xuICB9XG5cbiAgLy8gY3JlYXRlIGEgcmVxdWVzdFxuICByZXR1cm4gaHR0cENsaWVudC5yZXF1ZXN0PE9iamVjdD4ocmVxLm1ldGhvZCwgcmVxLnVybCwge1xuICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGZhbHNlLFxuICAgIC4uLmJvZHlPclBhcmFtcyxcbiAgICAuLi5yZXEub3B0aW9ucyxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWVyZ2VIZWFkZXJzID0gKFxuICBzb3VyY2U6IEh0dHBIZWFkZXJzLFxuICBkZXN0aW5hdGlvbjogSHR0cEhlYWRlcnMsXG4pOiBIdHRwSGVhZGVycyA9PiB7XG4gIGlmIChzb3VyY2UgJiYgZGVzdGluYXRpb24pIHtcbiAgICBjb25zdCBtZXJnZWQgPSBkZXN0aW5hdGlvblxuICAgICAgLmtleXMoKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGhlYWRlcnMsIG5hbWUpID0+IGhlYWRlcnMuc2V0KG5hbWUsIGRlc3RpbmF0aW9uLmdldEFsbChuYW1lKSksXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgcmV0dXJuIGRlc3RpbmF0aW9uIHx8IHNvdXJjZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmlvcml0aXplPFQ+KC4uLnZhbHVlczogVFtdKTogVCB7XG4gIGNvbnN0IHBpY2tlZCA9IHZhbHVlcy5maW5kKCh2YWwpID0+IHR5cGVvZiB2YWwgIT09ICd1bmRlZmluZWQnKTtcblxuICBpZiAodHlwZW9mIHBpY2tlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHJldHVybiBwaWNrZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIZWFkZXJzV2l0aENsaWVudEF3ZXJlbmVzcyhjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIC8vIGBhcG9sbG9ncmFwaHFsLWNsaWVudC0qYCBoZWFkZXJzIGFyZSBhdXRvbWF0aWNhbGx5IHNldCBpZiBhXG4gIC8vIGBjbGllbnRBd2FyZW5lc3NgIG9iamVjdCBpcyBmb3VuZCBpbiB0aGUgY29udGV4dC4gVGhlc2UgaGVhZGVycyBhcmVcbiAgLy8gc2V0IGZpcnN0LCBmb2xsb3dlZCBieSB0aGUgcmVzdCBvZiB0aGUgaGVhZGVycyBwdWxsZWQgZnJvbVxuICAvLyBgY29udGV4dC5oZWFkZXJzYC5cbiAgbGV0IGhlYWRlcnMgPVxuICAgIGNvbnRleHQuaGVhZGVycyAmJiBjb250ZXh0LmhlYWRlcnMgaW5zdGFuY2VvZiBIdHRwSGVhZGVyc1xuICAgICAgPyBjb250ZXh0LmhlYWRlcnNcbiAgICAgIDogbmV3IEh0dHBIZWFkZXJzKGNvbnRleHQuaGVhZGVycyk7XG5cbiAgaWYgKGNvbnRleHQuY2xpZW50QXdhcmVuZXNzKSB7XG4gICAgY29uc3Qge25hbWUsIHZlcnNpb259ID0gY29udGV4dC5jbGllbnRBd2FyZW5lc3M7XG5cbiAgICAvLyBJZiBkZXNpcmVkLCBgYXBvbGxvZ3JhcGhxbC1jbGllbnQtKmAgaGVhZGVycyBzZXQgYnlcbiAgICAvLyB0aGUgYGNsaWVudEF3YXJlbmVzc2Agb2JqZWN0IGNhbiBiZSBvdmVycmlkZGVuIGJ5XG4gICAgLy8gYGFwb2xsb2dyYXBocWwtY2xpZW50LSpgIGhlYWRlcnMgc2V0IGluIGBjb250ZXh0LmhlYWRlcnNgLlxuXG4gICAgaWYgKG5hbWUgJiYgIWhlYWRlcnMuaGFzKCdhcG9sbG9ncmFwaHFsLWNsaWVudC1uYW1lJykpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnYXBvbGxvZ3JhcGhxbC1jbGllbnQtbmFtZScsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFoZWFkZXJzLmhhcygnYXBvbGxvZ3JhcGhxbC1jbGllbnQtdmVyc2lvbicpKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ2Fwb2xsb2dyYXBocWwtY2xpZW50LXZlcnNpb24nLCB2ZXJzaW9uKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaGVhZGVycztcbn1cbiJdfQ==