/**
 * 统一插件执行器
 *
 * 所有视图（NormalTableView / Detail View）通过此函数执行插件，
 * 保证：1) context 在执行前已重置  2) 插件按 priority 排序执行  3) 错误可观测
 */
import { getRegisteredPlugins } from './register';
import { ensurePluginsRegistered } from '../plugins';
const IS_DEV = process.env.NODE_ENV !== 'production';
/**
 * 按 priority 顺序执行所有已注册插件。
 *
 * 调用方应在 runPlugins 之前先调用 pipeline.inputAndReset() 重置上下文，
 * 再通过 pipeline.setContext() 注入预设值（如 visibleData / disabledRowKeys）。
 */
export function runPlugins({ props, pipeline, context }) {
    ensurePluginsRegistered();
    const plugins = getRegisteredPlugins();
    for (const plugin of plugins) {
        try {
            plugin.render(props, pipeline, context);
        }
        catch (error) {
            if (IS_DEV) {
                console.error(`[Pipeline] Plugin "${plugin.name}" threw during execution:`, error);
            }
            // TODO: production 可接入 ARMS 采样上报
        }
    }
}
