UNPKG

piecemeal

Version:

Effortless incrementally deliver your data

40 lines (38 loc) 1.26 kB
const CONTENT_TYPE = 'content-type'; const message = (payload, headers) => { const returns = ['']; for (let key in headers) returns.push(`${key}: ${headers[key]}`); returns.push('', String(payload), ''); return returns.join('\r\n'); }; /*#__INLINE__*/ const is_raw = (data) => 'headers' in data && 'data' in data; const generate = async (iterator, boundary, write, abort) => { await write(`--${boundary}`); for await (let data of iterator) { if (abort && abort.aborted) break; let payload = data, headers; let dtype = typeof data; if (data === null) payload = ''; else if (dtype === 'object') { if (is_raw(data)) { headers = data.headers; payload = data.data; } else { headers = { [CONTENT_TYPE]: 'application/json;charset=utf-8' }; payload = JSON.stringify(data); } } else if (dtype !== 'string') { payload = String(data); } headers = headers || { [CONTENT_TYPE]: 'text/plain' }; await write(message(payload, headers) + `--${boundary}`); } write(`--\r\n`); }; export { generate, message };