@loopback/express
Version:
Integrate with Express and expose middleware infrastructure for sequence and interceptors
67 lines • 2.51 kB
JavaScript
// Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved.
// Node module: @loopback/express
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
Object.defineProperty(exports, "__esModule", { value: true });
exports.MiddlewareMixin = void 0;
const core_1 = require("@loopback/core");
const middleware_1 = require("../middleware");
function extendsFrom(subClass, baseClass) {
let cls = subClass;
while (cls) {
if (cls === baseClass)
return true;
cls = Object.getPrototypeOf(cls);
}
return false;
}
function MiddlewareMixin(superClass) {
if (!extendsFrom(superClass, core_1.Context)) {
throw new TypeError('The super class does not extend from Context');
}
return class extends superClass {
/**
* @internal
* Implementation of `expressMiddleware`
*/
expressMiddleware(factoryOrKey, configOrHandlers, options = {}) {
const key = factoryOrKey;
if ((0, core_1.isBindingAddress)(key)) {
const handlers = Array.isArray(configOrHandlers)
? configOrHandlers
: [configOrHandlers];
// Create middleware that wraps all Express handlers
if (handlers.length === 0) {
throw new Error('No Express middleware handler function is provided.');
}
return (0, middleware_1.registerMiddleware)(this, (0, middleware_1.toMiddleware)(handlers[0], ...handlers.slice(1)), {
...options,
key,
});
}
else {
return (0, middleware_1.registerExpressMiddleware)(this, factoryOrKey, configOrHandlers, options);
}
}
/**
* Register a middleware function or provider class
*
* @example
* ```ts
* const log: Middleware = async (requestCtx, next) {
* // ...
* }
* server.middleware(log);
* ```
*
* @param middleware - Middleware function or provider class
* @param options - Middleware binding options
*/
middleware(middleware, options = {}) {
return (0, middleware_1.registerMiddleware)(this, middleware, options);
}
};
}
exports.MiddlewareMixin = MiddlewareMixin;
//# sourceMappingURL=middleware.mixin.js.map
;