EventBuzz_Chatbot/node_modules/@hapi/shot/lib/payload.js

54 lines
1.2 KiB
JavaScript

'use strict';
const Events = require('events');
const Stream = require('stream');
const internals = {};
exports.encode = function (payload) {
if (payload instanceof Stream) {
return internals.encodeStreamPayload(payload);
}
const headers = Object.create(null);
if (payload) {
if (typeof payload !== 'string' &&
!Buffer.isBuffer(payload)) {
payload = JSON.stringify(payload);
headers['content-type'] = 'application/json';
}
// Compute the content-length for the corresponding payload in case none set
headers['content-length'] = (Buffer.isBuffer(payload) ? payload.length : Buffer.byteLength(payload)).toString();
}
return { payload, headers };
};
internals.encodeStreamPayload = function (stream) {
const headers = Object.create(null);
const deferredPayload = (async () => {
const chunks = [];
stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
await Events.once(stream, 'end');
const payload = Buffer.concat(chunks);
headers['content-length'] = headers['content-length'] || payload.length;
return payload;
})();
return { payload: deferredPayload, headers };
};