diff --git a/__tests__/integration.js b/__tests__/integration.js index 48d18494..be640cfd 100644 --- a/__tests__/integration.js +++ b/__tests__/integration.js @@ -16,6 +16,7 @@ function makeEvent (eventOverrides) { const multiValueHeaders = Object.assign({}, baseEvent.multiValueHeaders, eventOverrides.multiValueHeaders) const root = Object.assign({}, baseEvent, eventOverrides) root.multiValueHeaders = multiValueHeaders + root.pathParameters.proxy = eventOverrides.path && eventOverrides.path.replace(/^\//, '') return root } diff --git a/src/index.js b/src/index.js index 2f054133..c062837e 100644 --- a/src/index.js +++ b/src/index.js @@ -116,49 +116,44 @@ function configure ({ app: configureApp, binaryMimeTypes: configureBinaryMimeTypes = [], resolutionMode: configureResolutionMode = 'CONTEXT_SUCCEED', - _eventSource -} = {}) { - function _createServer ({ + eventSource: configureEventSource, + eventFns: configureEventFns, + createServer: configureCreateServer = ({ app = configureApp, binaryMimeTypes = configureBinaryMimeTypes - } = {}) { - return createServer({ - app, - binaryMimeTypes - }) - } - - const _server = _createServer() - - function _proxy ({ - server = _server, + } = {}) => (createServer({ + app, + binaryMimeTypes + })), + server: configureServer = configureCreateServer(), + proxy: configureProxy = ({ + server = configureServer, resolutionMode = configureResolutionMode, event, context, callback, - eventSource = _eventSource - } = {}) { - return proxy({ - server, - event, - context, - resolutionMode, - callback, - eventSource - }) - } - - const _handler = (event, context, callback) => _proxy({ + eventSource = configureEventSource, + eventFns = configureEventFns + } = {}) => (proxy({ + server, + event, + context, + resolutionMode, + callback, + eventSource, + eventFns + })), + handler: configureHhandler = (event, context, callback) => configureProxy({ event, context, callback }) - +} = {}) { return { - server: _server, - createServer: _createServer, - proxy: _proxy, - handler: _handler + server: configureServer, + createServer: configureCreateServer, + proxy: configureProxy, + handler: configureHhandler } } diff --git a/src/utils.js b/src/utils.js index 56b82109..3ea1cdff 100644 --- a/src/utils.js +++ b/src/utils.js @@ -21,11 +21,15 @@ function isContentTypeBinaryMimeType ({ contentType, binaryMimeTypes }) { function getPathWithQueryStringParams ({ event, - pathname = event.path, - query = event.multiValueQueryStringParameters + query = event.multiValueQueryStringParameters, + // 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}`) }) { return url.format({ - pathname, + pathname: path.replace(replaceRegex, ''), query }) }