Added resolvers, unified package versioning and author section to fit with mono repo style
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
"name": "experiments",
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@efforting.tech/errors": "link:../build/packages/errors"
|
||||
"@efforting.tech/errors": "link:../build/packages/errors",
|
||||
"@efforting.tech/rule-processing": "link:../build/packages/rule-processing"
|
||||
}
|
||||
}
|
||||
@@ -1,47 +1,6 @@
|
||||
import { Item_Unresolvable } from '@efforting.tech/errors';
|
||||
import { Mapping_Resolver, Chained_Resolver } from '@efforting.tech/rule-processing/resolvers';
|
||||
|
||||
|
||||
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 });
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Mapping_Resolver {
|
||||
constructor(rules=new Map(), key_function=null) {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
const vr = new Mapping_Resolver();
|
||||
|
||||
Reference in New Issue
Block a user