Implements tryEval.

This commit is contained in:
Henning Dieterichs
2020-02-12 19:04:59 +01:00
parent 17e362aaa9
commit fbcc852fc2
5 changed files with 62 additions and 4 deletions

View File

@@ -17,10 +17,12 @@ export interface DataExtractorApi {
registerExtractors(extractors: DataExtractor<ExtractedData>[]): void;
/**
* Extracts data from `value`.
* Extracts data from the result of `valueFn`.
* @valueFn a function returning the value to extract the data from.
* Is a function so that it's evaluation can depend on `evalFn`.
*/
getData(
value: unknown,
valueFn: () => unknown,
evalFn: <T>(expression: string) => T,
preferredDataExtractorId: string | undefined
): JSONString<DataResult>;

View File

@@ -10,6 +10,8 @@ import { ExtractedData, DataExtractorInfo } from "../../DataExtractionResult";
import { registerDefaultDataExtractors } from "./default-extractors";
export class DataExtractorApiImpl implements DataExtractorApi {
public static lastEvalFn: (<T>(expression: string) => T) | undefined;
private readonly extractors = new Map<
string,
DataExtractor<ExtractedData>
@@ -34,7 +36,7 @@ export class DataExtractorApiImpl implements DataExtractorApi {
}
public getData(
value: unknown,
valueFn: () => unknown,
evalFn: <T>(expression: string) => T,
preferredDataExtractorId: string | undefined
): JSONString<DataResult> {
@@ -45,6 +47,10 @@ export class DataExtractorApiImpl implements DataExtractorApi {
},
};
DataExtractorApiImpl.lastEvalFn = evalFn;
const value = valueFn();
DataExtractorApiImpl.lastEvalFn = undefined;
for (const e of this.extractors.values()) {
e.getExtractions(value, extractionCollector, { evalFn });
}
@@ -85,6 +91,7 @@ export class DataExtractorApiImpl implements DataExtractorApi {
}
public registerDefaultExtractors(preferExisting: boolean = false): void {
// TODO consider preferExisting
registerDefaultDataExtractors(this);
}
}