Skip to content

Instantly share code, notes, and snippets.

@soareschen
Last active August 29, 2015 14:02
Show Gist options
  • Save soareschen/f1e36d432f68faefac3e to your computer and use it in GitHub Desktop.
Save soareschen/f1e36d432f68faefac3e to your computer and use it in GitHub Desktop.
Quiver DSL Draft Specs
/*
* Begin Define
*/
require('quiver-define')
.namespace('my-namespace') // compulsory
// Using Directive
.using('other-namespace::component-name')
.using(require('other-module'))
.using([
'foo::foo-handler',
'bar::bar-middleware'
])
// Default return mode
.returnMode('async')
// Export
.exportTo(module.exports)
// Begin
.begin(function(define) {
// Definitions inside closure
})
/*
* Handler Define
* define.handler(...)
*/
define.streamHandler('handler-name')
.handlerImpl(function(args, inputStreamable, callback) {
})
// or
.builderImpl(function(config, callback) {
callback(null, function(args, inputStreamable, callback) {
})
})
define.simpleHandler('handler-name')
.ofType('text/json')
.handlerImpl(function(args, text, callback) {
})
define.handleable('handler-name')
.handlerImpl({
toStreamHandler: function() { ... }
})
define.extendedHandler('handler-name')
.extendFrom('original-handler')
define.pipelineHandler('pipeline-name')
.pipeTo('handler-name')
.pipeInline(define.handler(...))
/*
* Middleware Define
* define.middleware(...)
*/
define.streamFilter('filter-name')
.filterImpl(function(config, handler, callback) {
})
define.httpMiddleware('middleware-name')
.middlewareImpl(function(config, handlerBuilder, callback) {
})
define.argsFilter('filter-name')
.handlerImpl(function(args, callback) {
})
// or
.builderImpl(function(config, callback) {
callback(null, function(args, callback) {
})
})
define.errFilter('filter-name')
.handlerImpl(function(err, callback) {
})
define.transformFilter('filter-name')
.mode('inout')
.fromHandler('handler-name')
// or
.inlineHandler(define.handler(...))
define.handlerLoaderMiddleware('middleware-name')
.loadSimpleHandler('handler-name')
.ofType('void/json')
// optional
.toConfig('config-key')
// optional
.rebuild('force')
define.extendedMiddleware('middleware-name')
.extendFrom('original-middleware')
/*
* Common Options
*/
define.handler(...)
.returnMode('promise')
// sync, async, promise, generator
/*
* Middleware Extensions
*/
define.handler(...)
.loadMiddleware('middleware-name')
define.handler(...)
.loadMiddlewares([
'middleware-1',
'middleware-2'
])
define.handler(...)
.inlineMiddleware(define.middleware(...))
define.handler(...)
.loadStreamHandler('handler-name')
define.handler(...)
.loadSimpleHandler('handler-name', 'text/text')
define.handler(...)
.configOverride('key', 'new-value')
// or
.configOverride({
key1: 'value-1',
key2: 'value-2'
})
define.handler(...)
.configAlias('key', 'new-key')
define.handler(...)
.configValidator(define.validator(...))
define.handler(...)
.argsValidator(define.validator(...))
/*
* Route
* define.route(...)
*/
define.staticRoute('route-name')
.path('/path')
.usingHandler('handler-name')
// or
.inlineHandler(define.handler(...))
define.paramRoute('route-name')
.path('/path/:param/:subpath')
.usingHandler('handler-name')
define.regexRoute('route-name')
.regex(/^\/path(\/.*)$/)
.matchFields(['matches'])
.usingHandler('handler-name')
define.dynamicRoute()
.matcher(function(path) {
})
.usingHandler('handler-name')
/*
* Route List
* define.routeList(...)
*/
define.routeList('route-list-name')
.route(define.route(...))
// or
.routes([
define.route(...),
define.route(...)
])
// Can be extended with middlewares
.middleware(...)
/*
* Router
* define.router(...)
*
* Also can be used as handler
*/
define.router('router-name')
.loadRouteList('route-list-name')
// or
.loadRouteLists([
'route-list-1',
'route-list-2'
])
// or
.inlineRoute(define.route(...))
// or
.inlineRoutes([
define.route(...),
define.route(...)
])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment