Added extra_info as resolve-call site addendum
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
import { Item_Unresolvable } from '@efforting.tech/errors';
|
||||
|
||||
export class Abstract_Resolver {
|
||||
resolve(item) {
|
||||
resolve(item, extra_info={}) {
|
||||
const result = this.resolve_handler(item);
|
||||
if (!result?.handler) {
|
||||
throw new Item_Unresolvable({ resolver: this, item });
|
||||
}
|
||||
// TO DOC: Spreading result into the resulting context means there are some reserved keys we need to be mindful of to avoid clobbering them
|
||||
return result.handler({ resolver: this, item, ...result });
|
||||
return result.handler({ resolver: this, item, ...extra_info, ...result });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,8 @@ export class Predicate_Resolver extends Abstract_Resolver {
|
||||
const { rules } = this;
|
||||
for (const [predicate, handler] of rules) {
|
||||
const predicate_result = predicate(item);
|
||||
if (predicate_result !== undefined) {
|
||||
// NOTE: to return a falsy predicate_result as a positive hit you must wrap it in something
|
||||
if (predicate_result) {
|
||||
return { handler, predicate_result };
|
||||
}
|
||||
}
|
||||
@@ -50,13 +51,9 @@ export class RegExp_Resolver extends Predicate_Resolver {
|
||||
constructor(rules=[]) {
|
||||
// NOTE: Rules should be iterable as [predicate, handler] pairs
|
||||
super();
|
||||
Object.assign(this, { rules: rules.map(([pattern, handler]) => {
|
||||
|
||||
const wrapped_handler = handler; //TODO
|
||||
const predicate = ((str) => str.match(pattern));
|
||||
|
||||
return [predicate, wrapped_handler];
|
||||
})});
|
||||
Object.assign(this, {
|
||||
rules: rules.map(([pattern, handler]) => [(str) => str.match(pattern), handler])
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user