UNPKG

ravel

Version:

Ravel Rapid Application Development Framework

74 lines (70 loc) 1.92 kB
const Metadata = require('../../util/meta'); /** * Method-level decorator for `Module` methods, so that * they are registered as middleware which can be injected * automatically by `@before`. * Made available through the Module class. * See [`Module`](#module) for more information. * * @param {string} name - The injection name this middleware will be made available under. * @param {object} config - Configuration for this middleware definition. * @param {boolean} config.factory - Whether or not this is a middleware factory (a function that returns middleware). * @example * const Module = require('ravel').Module; * const middleware = Module.middleware; * // @Module('mymodule') * class MyModule { * // @middleware('my-middleware') * async doSomething (ctx, next) { * //... * } * } * //... * const Resource = require('ravel').Resource; * const before = Resource.before; * // @Resource('/') * class MyResource { * // @before('my-middleware') * async getAll () { * //... * } * } * * @example * const Module = require('ravel').Module; * const middleware = Module.middleware; * // @Module('mymodule') * class MyModule { * // @middleware('my-middleware', {factory: true}) * doSomethingFactory (word, number) { * return async function (ctx, next) { * //... * }; * } * } * //... * const Resource = require('ravel').Resource; * const before = Resource.before; * // @Resource('/') * class MyResource { * // @before('my-middleware', 'hello', 12) * async getAll () { * //... * } * } * @private */ function middleware(name, config = { factory: false }) { return function (target, key, descriptor) { Metadata.putClassMeta(target, '@middleware', name, { fn: descriptor.value, isFactory: config.factory }); }; } /** * @private */ module.exports = middleware;