@observertc/observer-js
Version:
Server Side NodeJS Library for processing ObserveRTC Samples
61 lines (60 loc) • 1.8 kB
JavaScript
"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;