@report-toolkit/inspector
Version:
See docs at [https://ibm.github.io/report-toolkit](https://ibm.github.io/report-toolkit)
67 lines (55 loc) • 1.51 kB
JavaScript
import {_, createDebugger} from '@report-toolkit/common';
const debug = createDebugger('inspector', 'rule-config');
const ruleMap = new WeakMap();
export class RuleConfig {
/**
*
* @param {import('./rule').Rule} rule
* @param {Object} [rawConfig]
*/
constructor(rule, rawConfig = {}) {
ruleMap.set(this, rule);
if (_.isArray(rawConfig)) {
rawConfig = rawConfig[1];
}
if (_.isBoolean(rawConfig)) {
rawConfig = {};
}
if (!_.isEmpty(rawConfig)) {
debug('found raw config %O', rawConfig);
}
this.config = this.validate(rawConfig);
}
get rule() {
return ruleMap.get(this);
}
get id() {
return this.rule.id;
}
/**
* validate the config against meta.schema using ajv
* @todo
* @param {Object} rawConfig
* @returns boolean
*/
validate(rawConfig) {
const config = this.rule.validate(rawConfig);
debug(`config for rule ${this.id} OK:`, this.config);
return config;
}
/**
*
* @param {import('rxjs').Observable<import('@report-toolkit/common/src/report').Report>} reports
* @returns {import('rxjs').Observable<import('./message').Message>}
*/
inspect(reports) {
return this.rule.inspect({config: this.config, reports});
}
static create(rule, rawConfig) {
return Object.freeze(new RuleConfig(rule, rawConfig));
}
}
/**
* @type {(rawConfig: object, rule: import('./rule').Rule) => RuleConfig}
*/
export const createRuleConfig = _.curryN(2, _.flip(RuleConfig.create));