UNPKG

piecemeal

Version:

Effortless incrementally deliver your data

43 lines (40 loc) 1.3 kB
'use strict'; 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`); }; exports.generate = generate; exports.message = message;