1.0.0-beta.4 • Published 7 years ago
serverless-helper v1.0.0-beta.4
serverless-helper
Deploy flow using GIT and SemVer
Dependencies
- Serverless
- AWS
How to Use
/**
* package.json
* @type {object}
*/
var pkg = require('./package.json');
/**
* Serverless Helper
* @type {object}
*/
var lib = require('serverless-helper')(pkg, [opts]);
/**
* Serverless Helper Schema
* @type {object}
*/
var schema = lib.schema;
// Standard
// Prepare packs most of the startup logic
// Any thrown/uncaught exception will be automatically logged
module.exports = lib.prepare({
// Event Schema Validation
eventSchema: schema.object().keys({
// Query String Validation
queryStringParameters: schema.object()
.keys({
foo: schema.string().required(true),
})
.requiredKeys('foo')
.unknown(true)
})
.requiredKeys('queryStringParameters')
.unknown(true)
},
// Your logic goes inside this function
function(event, context, callback) {
// Get parameter from event after being parsed
const foo = event.queryStringParameters.foo
// Context will be raw since no contextSchema has been passed
// ...
// Respond with 200
lib.respond({
message: 'Hello ' + foo
}, callback);
});
// Promisified
// Prepare packs most of the startup logic
// Any thrown/uncaught exception will be automatically logged
module.exports = lib.prepare({
// Promisify
expectPromise: true
// Event Schema Validation
eventSchema: schema.object().keys({
// Query String Validation
queryStringParameters: schema.object()
.keys({
foo: schema.string().required(true),
})
.requiredKeys('foo')
.unknown(true)
})
.requiredKeys('queryStringParameters')
.unknown(true)
})
// Your logic goes inside this function
.then(function(data) {
const event = data.event
const context = data.context
const callback = data.callback
// Get parameter from event after being parsed
const foo = event.queryStringParameters.foo
// Context will be raw since no contextSchema has been passed
// ...
// Respond with 200
lib.respond({
message: 'Hello ' + foo
}, callback);
});Opts
| lib. | via opts Object | via process.env | type | default |
|---|---|---|---|---|
| env | NODE_ENV | string | 'unknown' | |
| schema | schema | object | Joi | |
| schema.validate | schema.validate | function | Joi.validate | |
| error | error | object | Boom | |
| logger | logger | object | new (winston.Logger)(options) | |
| logger.log | logger.log | function | (new (winston.Logger)(options)).log | |
| config | config | object | {} |
You can also extend to your own properties
Config
| lib.config. | via opts.config Object | via process.env | type | default |
|---|---|---|---|---|
| onLocal | onLocal | ON_LOCAL | boolean | false |
| logLevel | logLevel | LOG_LEVEL | string | 'verbose' |
| loggly | loggly | LOGGLY | boolean | false |
| airbrake | airbrake | AIRBRAKE | boolean | false |
| airbrakeProjectId | airbrakeProjectId | AIRBRAKE_PROJECT_ID | string | '' |
| airbrakeProjectKey | airbrakeProjectKey | AIRBRAKE_PROJECT_KEY | string | '' |
Hook to package.json
lib.name // pkg.name
lib.version // pkg.versionHook to process.env
lib.getEnv // require('env-var').get
lib.env // process.env.NODE_ENV
lib.isEnv(env) // (process.env.NODE_ENV === env)
lib.isTest() // (process.env.NODE_ENV === 'test')
lib.isDevelopment() // (process.env.NODE_ENV === 'development')
lib.isStage() // (process.env.NODE_ENV === 'stage')
lib.isProduction() // (process.env.NODE_ENV === 'production')Hook to Logger (default Winston + Loggly Bulk)
- Console
- Loggly Bulk
lib.logger // new (winston.Logger)(options)
lib.logger.log // (new (winston.Logger)(options)).log
lib.logJson // obj ? JSON.parse(JSON.stringify(obj)) : objHook to Airbrake
lib.airbrake // new AirbrakeClientHTTP Response
lib.respond(output, callback)- output:
statusCode || 200
headers || {}
body || '{}'Fail (with Error)
lib.fail(err, [boomFnArgs], callback)- err as
Errorinstance - opts:
statusCode || 400
message
decorate
overrideFail (with Error message)
lib.fail(message, [boomFnArgs], callback)- message as
string - opts:
statusCode || 400
data
message
decorate
override
ctorFail (with Boom function)
lib.failWith(boomFn, boomFnArgs, callback)- boomFn as
string(one of supported Boom.*) - boomFnArgs as
array(arguments to apply to Boom.*)
More info
Schema Validation (default JOI)
lib.schema // JOI
lib.schemaValidate(data, schema) // Promise.reject(Boom.badRequest) || Promise.resolve(joiResult.value)Middlewares
lib.prepare(opts[, cb]) // function(event, context, callback){}- cb as
function(handler function) - opts as
object - opts.expectPromise as
boolean(defaultfalse, cb won't be called and instead.thenwill need to be used) - opts.respondAfter as
boolean(defaultfalse, cb must be a promise) - opts.eventSchema as
lib.schema.*(schema to validateeventornull) - opts.contextSchema as
lib.schema(schema to validatecontextornull) - opts.bodyParser as
string('json' ornull) - opts.forcedResponse as
boolean(to set context.callbackWaitsForEmptyEventLoop)
TODO
Please Contribute!
I'm happy to receive contributions of any kind!
Did you like my work?
Help me out with a little donation, press on the button below.
1.0.0-beta.4
7 years ago
1.0.0-beta.3
8 years ago
1.0.0-beta.2
8 years ago
1.0.0-beta.1
8 years ago
1.0.0-beta.0
8 years ago
1.0.0-alpha.0
8 years ago