UNPKG

reiso

Version:
163 lines 11.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const apollo_link_1 = require("apollo-link"); const apollo_link_http_common_1 = require("apollo-link-http-common"); function collectFiles(formData, object) { let hasFile = false; for (let [name, node] of Object.entries(object)) { if (node instanceof File) { hasFile = true; const id = Math.random().toString(36); formData.append(id, node, node.name); object[name] = id; } else if (node instanceof Object) { hasFile = collectFiles(formData, node) ? true : hasFile; } } return hasFile; } class UploadLink extends apollo_link_1.ApolloLink { constructor() { super(); } request(operation, forward) { const formData = new FormData(); let hasFiles = false; if (collectFiles(formData, operation.variables)) { hasFiles = true; } if (hasFiles) { if (typeof FormData === 'undefined') { throw new Error('Environment must support FormData to upload files.'); } let body = formData; body.append('operations', JSON.stringify(operation)); // files.forEach(({ path, file }) => options.body.append(path, file)); // return options; operation.setContext(({ headers }) => ({ method: 'POST', body, headers: Object.assign({}, headers, { // Accept: '*/*' 'content-type': 'multipart/form-data' }) })); } // operation.setContext(({ headers }) => ({ // method: 'POST', // headers: { // 'content-type': 'application/graphql' // } // })); return forward(operation); } } exports.UploadLink = UploadLink; // export function createLinkNetwork(opts: FetchOptions = {}) { // return new BatchHttpLink({ // fetch: createApolloFetchUpload(opts) // }); // }; // function createApolloFetchUpload(params: FetchOptions = {}): ApolloFetch { // return createApolloFetch({ // ...params, // constructOptions: constructUploadOptions, // }); // } // function constructUploadOptions( // requestOrRequests: GraphQLRequest | GraphQLRequest[], // options: RequestInit, // ): RequestInit { // const formData = new FormData(); // let hasFiles = false; // if (Array.isArray(requestOrRequests)) { // for (let request of requestOrRequests) { // if (collectFiles(formData, request.variables)) { // hasFiles = true; // } // } // } else { // if (collectFiles(formData, requestOrRequests.variables)) { // hasFiles = true; // } // } // if (hasFiles) { // if (typeof FormData === 'undefined') { // throw new Error('Environment must support FormData to upload files.'); // } // options.method = 'POST'; // options.body = formData; // options.body.append('operations', JSON.stringify(requestOrRequests)); // // files.forEach(({ path, file }) => options.body.append(path, file)); // return options; // } // return constructDefaultOptions(requestOrRequests, options); // } exports.createUploadLink = ({ uri: fetchUri = '/graphql', fetch: linkFetch = fetch, } = {}) => { const linkConfig = { http: { includeExtensions: null }, options: null, credentials: null, headers: null }; return new apollo_link_1.ApolloLink(operation => { const uri = apollo_link_http_common_1.selectURI(operation, fetchUri); const context = operation.getContext(); const contextConfig = { http: context.http, options: context.fetchOptions, credentials: context.credentials, headers: context.headers }; const { options, body } = apollo_link_http_common_1.selectHttpOptionsAndBody(operation, apollo_link_http_common_1.fallbackHttpConfig, linkConfig, contextConfig); const formData = new FormData(); let hasFiles = false; if (collectFiles(formData, body.variables)) { hasFiles = true; } const payload = apollo_link_http_common_1.serializeFetchParameter(body, 'Payload'); if (hasFiles) { // Automatically set by fetch when the body is a FormData instance. delete options.headers['content-type']; // GraphQL multipart request spec: // https://github.com/jaydenseric/graphql-multipart-request-spec options.body = formData; options.body.append('operations', payload); } else options.body = payload; return new apollo_link_1.Observable(observer => { // Allow aborting fetch, if supported. const { controller, signal } = apollo_link_http_common_1.createSignalIfSupported(); if (controller) options.signal = signal; linkFetch(uri, options) .then(response => { // Forward the response on the context. operation.setContext({ response }); return response; }) .then(apollo_link_http_common_1.parseAndCheckHttpResponse(operation)) .then(result => { observer.next(result); observer.complete(); }) .catch(error => { if (error.name === 'AbortError') // Fetch was aborted. return; if (error.result && error.result.errors && error.result.data) // There is a GraphQL result to forward. observer.next(error.result); observer.error(error); }); // Cleanup function. return () => { // Abort fetch. if (controller) controller.abort(); }; }); }); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NsaWVudC9VcGxvYWQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsNkNBQXVGO0FBQ3ZGLHFFQU9nQztBQVVoQyxzQkFBc0IsUUFBa0IsRUFBRSxNQUFjO0lBQ3RELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVwQixLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQyxJQUFJLElBQUksWUFBWSxJQUFJLEVBQUU7WUFDeEIsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNmLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ25CO2FBQU0sSUFBSSxJQUFJLFlBQVksTUFBTSxFQUFFO1lBQ2pDLE9BQU8sR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUN6RDtLQUNGO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELGdCQUF3QixTQUFRLHdCQUFVO0lBQ3hDO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQW9CLEVBQUUsT0FBa0I7UUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMvQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ2pCO1FBRUQsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRTtnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO2FBQ3ZFO1lBRUQsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUVyRCxzRUFBc0U7WUFFdEUsa0JBQWtCO1lBRWxCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxJQUFJO2dCQUNKLE9BQU8sb0JBQ0YsT0FBTztvQkFDVixnQkFBZ0I7b0JBQ2hCLGNBQWMsRUFBRSxxQkFBcUIsR0FDdEM7YUFDRixDQUFDLENBQUMsQ0FBQztTQUNMO1FBRUQsMkNBQTJDO1FBQzNDLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YsNENBQTRDO1FBQzVDLE1BQU07UUFDTixPQUFPO1FBRVAsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBN0NELGdDQTZDQztBQUVELCtEQUErRDtBQUMvRCwrQkFBK0I7QUFDL0IsMkNBQTJDO0FBQzNDLFFBQVE7QUFDUixLQUFLO0FBRUwsNkVBQTZFO0FBQzdFLCtCQUErQjtBQUMvQixpQkFBaUI7QUFDakIsZ0RBQWdEO0FBQ2hELFFBQVE7QUFDUixJQUFJO0FBRUosbUNBQW1DO0FBQ25DLDBEQUEwRDtBQUMxRCwwQkFBMEI7QUFDMUIsbUJBQW1CO0FBRW5CLHFDQUFxQztBQUNyQywwQkFBMEI7QUFFMUIsNENBQTRDO0FBQzVDLCtDQUErQztBQUMvQyx5REFBeUQ7QUFDekQsMkJBQTJCO0FBQzNCLFVBQVU7QUFDVixRQUFRO0FBQ1IsYUFBYTtBQUNiLGlFQUFpRTtBQUNqRSx5QkFBeUI7QUFDekIsUUFBUTtBQUNSLE1BQU07QUFFTixvQkFBb0I7QUFDcEIsNkNBQTZDO0FBQzdDLCtFQUErRTtBQUMvRSxRQUFRO0FBRVIsK0JBQStCO0FBQy9CLCtCQUErQjtBQUMvQiw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBRTdFLHNCQUFzQjtBQUN0QixNQUFNO0FBRU4sZ0VBQWdFO0FBQ2hFLElBQUk7QUFHUyxRQUFBLGdCQUFnQixHQUFHLENBQUMsRUFDL0IsR0FBRyxFQUFFLFFBQVEsR0FBRyxVQUFVLEVBQzFCLEtBQUssRUFBRSxTQUFTLEdBQUcsS0FBSyxHQUt6QixHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQ1IsTUFBTSxVQUFVLEdBQUc7UUFDakIsSUFBSSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLElBQUk7S0FDZCxDQUFBO0lBRUQsT0FBTyxJQUFJLHdCQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDaEMsTUFBTSxHQUFHLEdBQUcsbUNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDMUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ3RDLE1BQU0sYUFBYSxHQUFHO1lBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixPQUFPLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDN0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztTQUN6QixDQUFBO1FBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxrREFBd0IsQ0FDaEQsU0FBUyxFQUNULDRDQUFrQixFQUNsQixVQUFVLEVBQ1YsYUFBYSxDQUNkLENBQUE7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUVyQixJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDakI7UUFFRCxNQUFNLE9BQU8sR0FBRyxpREFBdUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFeEQsSUFBSSxRQUFRLEVBQUU7WUFDWixtRUFBbUU7WUFDbkUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBRXRDLGtDQUFrQztZQUNsQyxnRUFBZ0U7WUFDaEUsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7WUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzNDOztZQUFNLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBRTdCLE9BQU8sSUFBSSx3QkFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9CLHNDQUFzQztZQUN0QyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLGlEQUF1QixFQUFFLENBQUE7WUFDeEQsSUFBSSxVQUFVO2dCQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1lBRXZDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO2lCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2YsdUNBQXVDO2dCQUN2QyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDbEMsT0FBTyxRQUFRLENBQUE7WUFDakIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxtREFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ3JCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUNyQixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNiLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZO29CQUM3QixxQkFBcUI7b0JBQ3JCLE9BQU07Z0JBRVIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSTtvQkFDMUQsd0NBQXdDO29CQUN4QyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFN0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN2QixDQUFDLENBQUMsQ0FBQTtZQUVKLG9CQUFvQjtZQUNwQixPQUFPLEdBQUcsRUFBRTtnQkFDVixlQUFlO2dCQUNmLElBQUksVUFBVTtvQkFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDcEMsQ0FBQyxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQSJ9