UNPKG

@serverless-stack/nextjs-lambda

Version:

Provides handlers that can be used in CloudFront Lambda@Edge to deploy next.js applications to the edge

137 lines (103 loc) 3.06 kB
'use strict'; var buffer$1 = require('buffer'); var Stream = require('stream'); var util = require('util'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var buffer__default = /*#__PURE__*/_interopDefaultLegacy(buffer$1); var Stream__default = /*#__PURE__*/_interopDefaultLegacy(Stream); var util__default = /*#__PURE__*/_interopDefaultLegacy(util); const {PassThrough: PassThroughStream} = Stream__default['default']; var bufferStream = options => { options = {...options}; const {array} = options; let {encoding} = options; const isBuffer = encoding === 'buffer'; let objectMode = false; if (array) { objectMode = !(encoding || isBuffer); } else { encoding = encoding || 'utf8'; } if (isBuffer) { encoding = null; } const stream = new PassThroughStream({objectMode}); if (encoding) { stream.setEncoding(encoding); } let length = 0; const chunks = []; stream.on('data', chunk => { chunks.push(chunk); if (objectMode) { length = chunks.length; } else { length += chunk.length; } }); stream.getBufferedValue = () => { if (array) { return chunks; } return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); }; stream.getBufferedLength = () => length; return stream; }; const {constants: BufferConstants} = buffer__default['default']; const {promisify} = util__default['default']; const streamPipelinePromisified = promisify(Stream__default['default'].pipeline); class MaxBufferError extends Error { constructor() { super('maxBuffer exceeded'); this.name = 'MaxBufferError'; } } async function getStream(inputStream, options) { if (!inputStream) { throw new Error('Expected a stream'); } options = { maxBuffer: Infinity, ...options }; const {maxBuffer} = options; const stream = bufferStream(options); await new Promise((resolve, reject) => { const rejectPromise = error => { // Don't retrieve an oversized buffer. if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) { error.bufferedData = stream.getBufferedValue(); } reject(error); }; (async () => { try { await streamPipelinePromisified(inputStream, stream); resolve(); } catch (error) { rejectPromise(error); } })(); stream.on('data', () => { if (stream.getBufferedLength() > maxBuffer) { rejectPromise(new MaxBufferError()); } }); }); return stream.getBufferedValue(); } var getStream_1 = getStream; var buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'}); var array = (stream, options) => getStream(stream, {...options, array: true}); var MaxBufferError_1 = MaxBufferError; getStream_1.buffer = buffer; getStream_1.array = array; getStream_1.MaxBufferError = MaxBufferError_1; var index = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), getStream_1, { 'default': getStream_1, buffer: buffer, array: array, MaxBufferError: MaxBufferError_1 })); exports.index = index;