You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.2 KiB
47 lines
1.2 KiB
'use strict'
|
|
|
|
/**
|
|
* Feature interface.
|
|
*/
|
|
class Feature {
|
|
/**
|
|
* localWebServer instance passed to constructor in case feature needs access to http server instance.
|
|
*/
|
|
constructor (localWebServer) {}
|
|
|
|
/**
|
|
* Return one or more options definitions to collect command-line input
|
|
* @returns {OptionDefinition|OptionDefinition[]}
|
|
*/
|
|
optionDefinitions () {}
|
|
|
|
/**
|
|
* Return one of more middleware functions with three args (req, res and next). Can be created by express, Koa or hand-rolled.
|
|
*/
|
|
middleware (options) {}
|
|
|
|
expandStack () {
|
|
const flatten = require('reduce-flatten')
|
|
|
|
if (this.stack) {
|
|
const featureStack = this.stack()
|
|
.map(Feature => new Feature())
|
|
|
|
this.optionDefinitions = function () {
|
|
return featureStack
|
|
.map(feature => feature.optionDefinitions && feature.optionDefinitions())
|
|
.filter(definitions => definitions)
|
|
.reduce(flatten, [])
|
|
}
|
|
this.middleware = function (options, view) {
|
|
return featureStack
|
|
.map(feature => feature.middleware(options, view))
|
|
.reduce(flatten, [])
|
|
.filter(mw => mw)
|
|
}
|
|
}
|
|
return this
|
|
}
|
|
}
|
|
|
|
module.exports = Feature
|