Files
nodejs.esm-library/source/rule-processing/resolvers.mjs

45 lines
947 B
JavaScript

import { Item_Unresolvable } from '@efforting.tech/errors';
export class Abstract_Resolver {
resolve(item) {
const handler = this.resolve_handler(item);
if (!handler) {
throw new Item_Unresolvable({ resolver: this, item });
}
return handler({ resolver: this, item });
}
}
export class Chained_Resolver extends Abstract_Resolver {
constructor(chain_links) {
super();
Object.assign(this, { chain_links });
}
resolve_handler(item) {
const { chain_links } = this;
for (const link of chain_links) {
const handler = link.resolve_handler(item);
if (handler) {
return handler;
}
}
}
}
export class Mapping_Resolver extends Abstract_Resolver {
constructor(rules=new Map(), key_function=null) {
super();
Object.assign(this, { rules, key_function });
}
resolve_handler(item) {
const { key_function, rules } = this;
const key = key_function ? key_function(item) : item;
return rules.get(key);
}
}