mirror of https://github.com/ghostfolio/ghostfolio
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.
63 lines
2.0 KiB
63 lines
2.0 KiB
class Processor {
|
|
constructor(options) {
|
|
this.selfOptions = options || {};
|
|
this.pipes = {};
|
|
}
|
|
options(options) {
|
|
if (options) {
|
|
this.selfOptions = options;
|
|
}
|
|
return this.selfOptions;
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
pipe(name, pipeArg) {
|
|
let pipe = pipeArg;
|
|
if (typeof name === 'string') {
|
|
if (typeof pipe === 'undefined') {
|
|
return this.pipes[name];
|
|
}
|
|
else {
|
|
this.pipes[name] = pipe;
|
|
}
|
|
}
|
|
if (name && name.name) {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
pipe = name;
|
|
if (pipe.processor === this) {
|
|
return pipe;
|
|
}
|
|
this.pipes[pipe.name] = pipe;
|
|
}
|
|
pipe.processor = this;
|
|
return pipe;
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
process(input, pipe) {
|
|
let context = input;
|
|
context.options = this.options();
|
|
let nextPipe = pipe || input.pipe || 'default';
|
|
let lastPipe;
|
|
while (nextPipe) {
|
|
if (typeof context.nextAfterChildren !== 'undefined') {
|
|
// children processed and coming back to parent
|
|
context.next = context.nextAfterChildren;
|
|
context.nextAfterChildren = null;
|
|
}
|
|
if (typeof nextPipe === 'string') {
|
|
nextPipe = this.pipe(nextPipe);
|
|
}
|
|
nextPipe.process(context);
|
|
lastPipe = nextPipe;
|
|
nextPipe = null;
|
|
if (context) {
|
|
if (context.next) {
|
|
context = context.next;
|
|
nextPipe = context.pipe || lastPipe;
|
|
}
|
|
}
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
return context.hasResult ? context.result : undefined;
|
|
}
|
|
}
|
|
export default Processor;
|
|
|