UNPKG

react-relay-network-modern

Version:

Network Layer for React Relay and Express (Batch Queries, AuthToken, Logging, Retry)

48 lines (35 loc) 1.15 kB
/* @flow */ import { extractFiles } from 'extract-files'; import type { Middleware } from '../definition'; import RelayRequestBatch from '../RelayRequestBatch'; export default function uploadMiddleware(): Middleware { return (next) => async (req) => { if (req instanceof RelayRequestBatch) { throw new Error('RelayRequestBatch is not supported'); } const operations = { query: req.operation.text, variables: req.variables, }; const { clone: extractedOperations, files } = extractFiles(operations); if (files.size) { const formData = new FormData(); formData.append('operations', JSON.stringify(extractedOperations)); const pathMap = {}; let i = 0; files.forEach((paths) => { pathMap[++i] = paths; }); formData.append('map', JSON.stringify(pathMap)); i = 0; files.forEach((paths, file) => { formData.append(++i, file, file.name); }); req.fetchOpts.method = 'POST'; req.fetchOpts.body = formData; delete req.fetchOpts.headers['Content-Type']; } const res = await next(req); return res; }; }