0.0.6 • Published 4 years ago

serverless-plugin-sandwich v0.0.6

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

npm downloads total npm version npm license

header

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.+