@v4fire/core
Version:
V4Fire core library
78 lines (61 loc) • 1.96 kB
text/typescript
/*!
* V4Fire Core
* https://github.com/V4Fire/Core
*
* Released under the MIT license
* https://github.com/V4Fire/Core/blob/master/LICENSE
*/
import { DEFAULT_LEVEL } from 'core/log/base';
import { LogPipeline } from 'core/log/curator/pipeline';
import type { LogPipelineConfig } from 'core/log/config/interface';
import middlewareFactory, { LogMiddleware } from 'core/log/middlewares';
import engineFactory from 'core/log/engines';
/**
* Creates a pipeline by using the config
* (returns undefined if there are not enough data to create one)
*
* @param pipelineConfig
*/
export function createPipeline(pipelineConfig: LogPipelineConfig): CanUndef<LogPipeline> {
//#if runtime has core/log
const {
middlewares,
engine,
engineOptions,
minLevel
} = pipelineConfig;
const
middlewareInstances: LogMiddleware[] = [];
if (middlewares) {
for (let i = 0; i < middlewares.length; ++i) {
const
nameOrTuple = middlewares[i];
if (Object.isString(nameOrTuple)) {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (middlewareFactory[nameOrTuple] == null) {
console.error(`Can't find the middleware "${nameOrTuple}"`);
continue;
}
middlewareInstances.push(middlewareFactory[nameOrTuple]());
} else {
const
[name, params] = nameOrTuple;
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (middlewareFactory[name] == null) {
console.error(`Can't find the middleware "${name}"`);
continue;
}
middlewareInstances.push(middlewareFactory[name](...params));
}
}
}
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (engineFactory[engine] == null) {
console.error(`Can't find the engine "${engine}"`);
return;
}
const
engineInstance = engineFactory[engine](engineOptions);
return new LogPipeline(engineInstance, middlewareInstances, minLevel ?? DEFAULT_LEVEL);
//#endif
}