0.1.1 • Published 4 years ago

lessware v0.1.1

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

Lessware

A framework and extensions for serverless middleware.

Background

Middleware can be asynchronous. Javascript natively defines a chaining mechanism for async operations. Promise chains are a natural way to implement middleware.

This framework does nothing more than chain, in series, an array of functions that each return a promise. Each function is expected to pass the sole argument onto the next function in the chain, with the exception of the final function, which should return the desired output shape.

Install

npm i -S lessware

Example Usage - API Route Controller

const { framework } = require('lessware')

module.exports = framework([
  // simply adds a new field to the payload
  async context => ({...context, message: 'hello world'}),
  // use field added in chain's previous method
  async context => ({
    statusCode: 200,
    body: JSON.stringify({message: context.message}),
  })
])

Example Usage - Entry Point Integration

// module from previous example
const hello = require('./hello')
const router = {hello}

exports.handler = async (event, ctx) => {
  // initialize and pass the context parameter for the chain
  return route[event.fieldName]({event, ctx})
}

Example Usage - Decorate all routes

const hello = require('./hello')
const { framework } = require('lessware')

// define a common configuration middleware
const configMiddleware = async context => ({...context, config: {
  aws: {
    region: process.env.AWS_DEFAULT_REGION,
  },
  mongo: {
    secretConnection: process.env.NAME_SECRET_MONGO_CONNECTION,
  },
}})

// define router
const routes = {hello}
const router = Object.keys(routes).reduce((accum, path) => ({
  ...accum,
  // decorate routes with common middleware
  [path]: framework([configMiddleware, routes[path]]),
}))

exports.handler = async (event, ctx) => {
  // initialize and pass the context parameter for the chain
  return route[event.fieldName]({event, ctx})
}

Maintainers

When buidling releases, 1. npm test 2. git commit -m "your message" 3. bump version 1. npm version patch 2. npm version minor 4. npm publish