UNPKG

recogn-parse

Version:

recogn-parse 提供了 识别--解析 的机制,使用者只需要添加识别器 和 解析器,然后就可以对事件进行识别和解析,适合用所有具备 识别--解析 流程的场景中,如:加载并显示各种模型、预览文件等

148 lines 4.87 kB
import { JudgeInfo } from "./Recognizer"; /** * 解析函数 * @remarks * 对 target 进行解析 * * @param target - 目标 * @param targetOptions - 目标相关的选项 * @param preResult - 之前的解析结果 * @param recognResult - 识别结果 * @returns 解析的结果 */ export type Parse<Options = any> = (target: any, targetOptions: Options, preResult: any, recognResult: JudgeInfo) => any; /** * 串行解析器 * * @remarks * 串行解析器就是一组解析函数,这些解析函数会依次执行,并会以最后一个解析函数返回的结果为最终的解析结果。这组解析函数中如果有解析函数抛出错误,则会终止解决流程。 */ export type SerialParser<Options = any> = Parse<Options>[]; /** * 解析器 * @remarks * 解析器可以是一个解析函数,也可以是一组解析函数。 * 当是一组解析函数时,所有的解析函数都会依次执行。并会以最后一个解析函数返回的结果为最终的解析结果。 */ export type Parser<Options = any> = SerialParser<Options> | Parse<Options>; /** * 类型与解析器的映射 */ export interface TypeParsers<Options = any> { /** * key 是类型,value 是串行解析器 */ [type: string]: SerialParser; } /** * 解析器集合 * @remarks * 类型 与 解析器的 映射 */ export interface TypeParsersOption<Options = any> { /** * key 是类型,value 是解析器 */ [type: string]: Parser<Options>; } /** * 解决者 * * @remarks * 负责解析操作,所有的解析逻辑都是由该类来完成的。 * * 每次执行解决操作时,会按照如下顺序调用解析器: * * 1. 如果找不到对应类型 type 的 解析器,则会终止解决流程。 * * 2. 依次执行前置解析器 `preParses` 中的所有解析函数,即使有抛出错误,也会继续执行,并会以最后一个解析函数返回的结果为最终前置解析器的解析结果,然后将 前置解析的结果 传给后续的解析器。 * * 3. 依次执行根据 类型 type 查找到的解析器序列。如果序列中任意解析器抛出错误,则会终止解决流程。否则,以最后一个解析函数返回的结果为最终的解析结果 并 传递给后续的解析器。 * * 4. 依次执行后置解析器 `postParses` 中的所有解析函数,即使有抛出错误,也会继续执行,并会以最后一个解析函数返回的结果为最终的解析结果。 */ export declare class Resolver<Options = any> { /** * 前置解析器 * @remarks * 详情请看 {@link Resolver} */ get preParses(): Parse<Options>[]; set preParses(value: Parse<Options>[]); /** * @internal */ protected _preParses?: Parse<Options>[] | null; /** * 后置解析器 * @remarks * 详情请看 {@link Resolver} */ get postParses(): Parse<Options>[]; set postParses(value: Parse<Options>[]); /** * @internal */ protected _postParses: Parse<Options>[]; /** * 类型与解析器的映射 */ get typeParsers(): TypeParsers<any>; set typeParsers(value: TypeParsers<any>); /** * @internal */ protected _typeParsers?: TypeParsers | null; /** * 添加解析器 * @param type - 类型 * @param parser - 解析器 */ add(type: string, parser: Parser<Options>): void; /** * 添加多个解析器 * @param parsers - 类型 与 解析器的映射集合 */ addParsers(parsers: TypeParsersOption<Options>): void; /** * 删除 解析器 * @param type - 类型 * @param parser - 被删除的解析器 * @returns 是否成功删除 */ remove(type: string, parser?: Parser<Options> | null): boolean; /** * 移除指定类型的解析器 * @param type - 类型 或 类型列表 * @returns */ removeType(type: string[] | string): boolean; /** * 解决 * * @remarks * 解决的过程请看 {@link Resolver} * * @param type - 类型 * @param target - 目标 * @param targetOptions - 目标相关的选项 * @param recognResult - 识别结果 * @returns */ resolve(type: string, target: any, targetOptions?: any, recognResult?: any): any | Promise<any>; /** * 异步解决 * * @remarks * 只有当最终有识别结果时,才会 resolve,否则,则会 reject。 * 解决的过程请看 {@link Resolver} * * @param type - 类型 * @param target - 目标 * @param targetOptions - 目标相关的选项 * @param recognResult - 识别结果 * @returns */ resolveAsync(type: string, target: any, targetOptions?: any, recognResult?: any): Promise<NonNullable<any>>; } //# sourceMappingURL=Resolver.d.ts.map