Lambda-Stream
This library adds types and local support for AWS Lambda Response Streaming. Locally, it'll buffer and return the entire response.
In AWS Lambda, it'll simply use the global awslambda.streamifyResponse.
This library exposes a ResponseStream class, the streamifyResponse method, and isInAWS method. Types are also included.
Works like this:
import { APIGatewayProxyEvent } from "aws-lambda";
import { streamifyResponse, ResponseStream } from 'lambda-stream'
export const handler = streamifyResponse(myHandler)
async function myHandler (event: APIGatewayProxyEvent, responseStream: ResponseStream): Promise<void> {
console.log('Handler got event:', event)
responseStream.setContentType("text/plain");
responseStream.write("Hello, world!");
responseStream.end();
}
Or in commonjs:
'use strict';
const { streamifyResponse } = require('lambda-stream')
module.exports.hello = streamifyResponse(
async (event, responseStream, context) => {
responseStream.setContentType("text/plain");
responseStream.write("Hello, world!");
responseStream.end();
}
);
Pipelining is also supported:
const pipeline = require("util").promisify(require("stream").pipeline);
const { Readable } = require('stream');
const { streamifyResponse } = require('lambda-stream')
const handler = async (event, responseStream, _context) => {
requestStream = Readable.from(Buffer.from(JSON.stringify({hello: 'world'})));
await pipeline(requestStream, zlib.createGzip(), responseStream);
}
module.exports.gzip = streamifyResponse(handler)