UNPKG

react-relay-network-modern

Version:

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

47 lines 1.13 kB
/* eslint-disable no-await-in-loop */ function createProgressHandler(opts) { const { onProgress, sizeHeader = 'Content-Length' } = opts || {}; return async res => { const { body, headers } = res; if (!body) { return; } const totalResponseSize = headers.get(sizeHeader); let totalSize = null; if (totalResponseSize !== null) { totalSize = parseInt(totalResponseSize, 10); } const reader = body.getReader(); let completed = false; let runningTotal = 0; do { const step = await reader.read(); const { done, value } = step; const length = value && value.length || 0; completed = done; if (!completed) { runningTotal += length; onProgress(runningTotal, totalSize); } } while (!completed); }; } export default function progressMiddleware(opts) { const progressHandler = createProgressHandler(opts); const mw = next => async req => { const res = await next(req); progressHandler(res.clone()); return res; }; mw.isRawMiddleware = true; return mw; }