@pisell/pisellos
Version:
一个可扩展的前端模块化SDK框架,支持插件系统
107 lines (106 loc) • 2.89 kB
TypeScript
import { StrategyConfig, RuntimeContext, EvaluationResult, EngineOptions, OperatorHandler } from './type';
/**
* 策略模型 - 核心实现
*
* 完全业务无关的通用策略引擎
* 支持条件评估、动作匹配、结果返回
*/
/**
* 策略引擎
*
* 核心职责:
* 1. 递归评估条件组
* 2. 收集满足条件的 actionIds
* 3. 根据 actionIds 获取 ActionEffect 对象
* 4. 按 priority 排序返回
*/
export declare class StrategyEngine {
private options;
private operatorHandlers;
constructor(options?: EngineOptions);
/**
* 评估策略
*/
evaluate(config: StrategyConfig, context: RuntimeContext): EvaluationResult;
/**
* 递归评估条件组
*
* @param group 条件组
* @param context 运行时上下文
* @returns 评估结果对象,包含条件是否满足和收集到的 actionIds
*/
private evaluateConditionGroup;
/**
* 评估条件组的逻辑运算
*/
private evaluateGroupLogic;
/**
* 评估单个规则
*/
private evaluateRule;
/**
* 评估代码模式条件
*/
private evaluateCodeCondition;
/**
* 评估运算符模式条件
*/
private evaluateOperatorCondition;
/**
* 获取字段值
*/
private getFieldValue;
/**
* 评估内置运算符
*/
private evaluateBuiltInOperator;
/**
* 根据 actionIds 获取 ActionEffect 对象
*/
private getActionsByIds;
/**
* 按 priority 排序(降序)
*/
private sortActionsByPriority;
/**
* 判断是否为条件组
*/
private isConditionGroup;
/**
* 验证配置
*/
private validateConfig;
/**
* 初始化内置运算符处理器
*/
private initializeBuiltInOperators;
/**
* 评估商品匹配运算符
*
* 匹配规则:
* - 首先匹配 product_id
* - 如果配置的 product_variant_id = 0,只需要 product_id 匹配(表示任意变体)
* - 如果配置的 product_variant_id != 0,还需要 product_variant_id 精确匹配
*
* @param fieldValue 实际商品 { product_id: number, product_variant_id: number }
* @param configValue 配置的商品列表 Array<{ product_id: number, product_variant_id: number }>
* @returns 是否匹配
*/
private evaluateProductMatch;
/**
* 注册自定义运算符
*/
registerOperator(operator: string, handler: OperatorHandler): void;
/**
* 获取调试信息
*/
getDebugInfo(): Record<string, any>;
}
/**
* 创建策略引擎实例
*/
export declare function createStrategyEngine(options?: EngineOptions): StrategyEngine;
/**
* 快速评估(使用默认引擎配置)
*/
export declare function evaluate(config: StrategyConfig, context: RuntimeContext): EvaluationResult;