@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.
76 lines (65 loc) • 2.07 kB
JavaScript
// ATTRIBUTION: https://github.com/dougmoscrop/serverless-http
const express = require('./express')
const koa = require('./koa')
const hapi = require('./hapi')
function getFramework ({ app, log }) {
if (typeof app.callback === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:KOA')
return koa
}
if (typeof app.handle === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:EXPRESS')
return express
}
// Framework: ??
if (typeof app.handler === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:APP_HANDLER_FUNCTION')
return {
sendRequest: ({ request, response }) => {
app.handler(request, response)
}
}
}
// Framework: ??
if (typeof app._onRequest === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:APP_ON_REQUEST_FUNCTION')
return {
sendRequest: ({ request, response }) => {
app._onRequest(request, response)
}
}
}
if (typeof app === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:HAPI')
return hapi
}
if (app.router && typeof app.router.route === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:APP_ROUTER_ROUTE_FUNCTION')
return {
sendRequest: ({ request, response }) => {
const { url, method, headers, body } = request
app.router.route({ url, method, headers, body }, response)
}
}
}
if (app._core && typeof app._core._dispatch === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:APP_CORE_DISPATCH_FUNCTION')
return {
sendRequest: ({ request, response }) => {
return app._core._dispatch({
app
})(request, response)
}
}
}
if (typeof app.main === 'function') {
log.debug('SERVERLESS_EXPRESS:GET_FRAMEWORK:APP_MAIN_FUNCTION')
return {
sendRequest: ({ request, response }) => {
return app.main(request, response)
}
}
}
throw new Error('Invalid app supplied. Valid frameworks include: Express, Koa, Hapi')
}
module.exports.getFramework = getFramework