UNPKG

@codegenie/serverless-express

Version:

This library enables you to utilize AWS Lambda and Amazon API Gateway to respond to web and API requests using your existing Node.js application framework.

73 lines (65 loc) 2.1 kB
const url = require('url') const { getRequestValuesFromEvent, getMultiValueHeaders } = require('../utils') function getPathWithQueryStringUseUnescapeParams ({ event, // NOTE: Use `event.pathParameters.proxy` if available ({proxy+}); fall back to `event.path` path = (event.pathParameters && event.pathParameters.proxy && `/${event.pathParameters.proxy}`) || event.path, // NOTE: Strip base path for custom domains stripBasePath = '', replaceRegex = new RegExp(`^${stripBasePath}`) }) { const query = {} // decode everything back into utf-8 text. if (event.multiValueQueryStringParameters) { for (const key in event.multiValueQueryStringParameters) { const formattedKey = decodeUrlencoded(key) query[formattedKey] = event.multiValueQueryStringParameters[key].map(value => decodeUrlencoded(value)) } } else { for (const key in event.queryStringParameters) { const formattedKey = decodeUrlencoded(key) query[formattedKey] = decodeUrlencoded(event.queryStringParameters[key]) } } return url.format({ pathname: path.replace(replaceRegex, ''), query }) } // Decode an "application/x-www-form-urlencoded" encoded string. function decodeUrlencoded (val) { return decodeURIComponent(val.replace(/\+/g, '%20')) } const getRequestValuesFromAlbEvent = ({ event }) => { const values = getRequestValuesFromEvent({ event, path: getPathWithQueryStringUseUnescapeParams({ event }) }) return values } const getResponseToAlb = ({ event, statusCode, body, headers: responseHeaders, isBase64Encoded }) => { const multiValueHeaders = !event.headers ? getMultiValueHeaders({ headers: responseHeaders }) : undefined const headers = event.headers ? Object.entries(responseHeaders).reduce((acc, [k, v]) => { acc[k] = Array.isArray(v) ? String(v[0]) : String(v) return acc }, {}) : undefined return { statusCode, body, headers, multiValueHeaders, isBase64Encoded } } module.exports = { getRequest: getRequestValuesFromAlbEvent, getResponse: getResponseToAlb }