serverless-plugin-sandwich
v0.0.6
Published
Wrap, pipe or inline your lambdas with other defined functions
Downloads
16
Maintainers
Readme
Installation
npm install -D serverless-plugin-sandwich
or
yarn add -D serverless-plugin-sandwich
Usage
Plugin Dependency
In your projects serverless file, add serverless-plugin-sandwich
to the list of your plugins:
plugins:
- serverless-plugin-sandwich
Custom Declaration
inline
The function will be called inline, and not be tied to the original handler code. However, proper error handling needs to be taken into consideratioin.
functions:
handler: src/original.default
sandwich:
before:
handler: src/runFirst.default
inline: true
Shorthand notation defaults to inline, and is declared the following way.
functions:
handler: src/original.default
sandwich:
before: src/runFirst.default
after: src/runAfter.default
pipe
The previous function pipes its output to the next function. Note, only one argument can be piped from function to function.
functions:
handler: src/original.default
sandwich:
before:
handler: src/extractData.default
pipe: true
wrap
Higher-order-functions, that curry another function, can be useful for validating and extracting Authorization tokens. It could also be used for logging, or other boilerplate code that needs to be done before a lambda is called.
functions:
handler: src/original.default
sandwich:
before:
handler: src/extractData.default
wrap: true
Code Generation
Sandwich dynamically changes the handler src path, and generates code for you. This definition:
functions:
protected:
handler: lambdas/wrapped/handler.default
timeout: 30
sandwich:
before:
handler: lambdas/wrapped/authenticate.default
wrap: true
after:
handler: lambdas/wrapped/apiResponse.default
pipe: true
Generates this code:
const before = require('../lambdas/wrapped/authenticate').default;
const handler = require('../lambdas/wrapped/handler').default;
const after = require('../lambdas/wrapped/apiResponse').default;
module.exports.default = async (event, context) => {
const response = await after(await before(handler)(event, context));
return response;
};
Commands
sandwich order
Running the order command will fulfill your serverless lambda generation and output it to a sandwich
directory:
$ npx serverless sandwich order
Plugin Interoperability
As a result of code being generated dynamically, the serverless-plugin-sandwich
needs to be declared before transpiler or build plugins.
Get Involved
Looking to add support for Python or other runtimes, if you would like to get involved open an issues.
Serverless V1.35.+