UNPKG

@observertc/observer-js

Version:

Server Side NodeJS Library for processing ObserveRTC Samples

61 lines (60 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MiddlewareProcessor = void 0; class Executor { stack; finalCallback; done = false; index = 0; prevIndex = -1; constructor(stack, finalCallback) { this.stack = stack; this.finalCallback = finalCallback; } // Executes the middleware stack execute(input) { if (this.index <= this.prevIndex) { throw new Error('Middleware must call next() only once!'); } else if (this.done) { throw new Error('Middleware stack has already been executed!'); } this.prevIndex = this.index; const middleware = this.stack[this.index]; this.index++; if (middleware) { return middleware(input, (nextInput) => this.execute(nextInput)); } this.done = true; this.finalCallback?.(input); } } class MiddlewareProcessor { stack = []; finalCallback; addMiddleware(...middlewares) { if (middlewares && middlewares.length > 0) { this.stack.push(...middlewares); } return this; } removeMiddleware(...middlewares) { if (middlewares && middlewares.length > 0) { for (const middleware of middlewares) { const index = this.stack.indexOf(middleware); if (index >= 0) { this.stack.splice(index, 1); } } } return this; } process(value) { if (this.stack.length === 0) { return this.finalCallback?.(value); } const executor = new Executor(this.stack, this.finalCallback); executor.execute(value); } } exports.MiddlewareProcessor = MiddlewareProcessor;