import { CreateDpKitOptions, CreateDpKitResult } from '../../types/dp-kit'; import { ReadonlyDpSchemaList } from '../../types/SdmModel'; /** * 创建 DP 协议套件,提供功能点的结构化解析、下发拦截、节流/防抖等增强能力 * @public * @since @ray-js/panel-sdk 1.7.0 * @param option - dp-kit 配置选项 * @typeOverride option CreateDpKitOptions * @returns dp-kit 实例,包含 init、interceptors、destroy 等方法 * @typeOverride returns CreateDpKitResult * @remarks * createDpKit 返回的 interceptors 需传入 SmartDeviceModel 构造选项, * 搭配 useStructuredProps / useStructuredActions 使用时还需在设备初始化后调用 init。 * @example 基础用法 * ```ts * import { SmartDeviceModel, createDpKit } from '@ray-js/panel-sdk'; * * const schema = [ * { code: 'switch_1', type: 'bool' }, * { code: 'colour_data', type: 'raw' }, * ] as const; * * const dpKit = createDpKit({ * protocols: { * colour_data: { * parser: raw => JSON.parse(raw), * formatter: structured => JSON.stringify(structured), * }, * }, * }); * * const sdm = new SmartDeviceModel({ * interceptors: dpKit.interceptors, * }); * * await sdm.init(); * dpKit.init(sdm); * ``` * @example 带协议解析和节流 * ```ts * const dpKit = createDpKit({ * protocols: { * colour_data: { * parser: raw => JSON.parse(raw), * formatter: value => JSON.stringify(value), * }, * }, * sendDpOption: { * throttle: 300, * }, * }); * * const device = new SmartDeviceModel({ * interceptors: dpKit.interceptors, * }); * * await device.init(); * dpKit.init(device); * * // 后续所有下发都会继承 300ms 节流 * await device.publishDps({ * colour_data: { hue: 240, saturation: 1000, value: 1000 }, * }); * ``` * @example 忽略设备上报响应 * ```ts * const dpKit = createDpKit({ * sendDpOption: { * immediate: true, * ignoreDpDataResponse: { * timeout: 5000, * whiteDpCodes: ['switch_1'], * }, * }, * }); * * const device = new SmartDeviceModel({ * interceptors: dpKit.interceptors, * }); * ``` * @example 搭配 hooks 使用 * ```tsx * import { useStructuredActions, useStructuredProps } from '@ray-js/panel-sdk'; * * const colour = useStructuredProps(props => props.colour_data); * const actions = useStructuredActions(); * * actions.colour_data.set({ * hue: colour.hue, * saturation: colour.saturation, * value: 800, * }); * ``` */ export declare const createDpKit: (option?: CreateDpKitOptions) => CreateDpKitResult;