Added extra_info as resolve-call site addendum

This commit is contained in:
2026-04-12 19:45:47 +02:00
parent cf1abadfc9
commit 1fdaee0b57
3 changed files with 17 additions and 12 deletions

View File

@@ -20,6 +20,11 @@ export function string_has_contents(str) {
return /\S/.test(str);
}
export function parse_csv(str) {
// NOTE: This is for simple comma separated values, a future RFC-4180 compatible version would have to be in a different module in this library (or be a third party thing)
return str.split(',').map(element => element.trim());
}
export function *indented_line_iterator(settings, text) {
let line_no = settings.first_line;

View File

@@ -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])
});
}