import type { Five } from "../application/five";
/**
 * Five 插件
 * @template Parameters - 插件参数, 没有参数则为 void
 * @template Returns - 如果有参数则插件暴露的 api，没有参数则不传
 */
type FivePlugin<Parameters = void, Returns = void> = Parameters extends void ? ((five: Five) => Returns) : ((five: Five, parameters: Parameters) => Returns);
/**
 * 获取插件暴露的 api
 * @template T - Five 插件
 */
type FivePluginInstance<T extends FivePlugin<any, any>> = ReturnType<T>;
/**
 * 获取插件在Five中的初始化结构
 * @template T - Five 插件
 */
type FivePluginInit<T extends FivePlugin<any, any>> = Parameters<T>[1] extends undefined ? [
    Plugin: T,
    instanceName: null | string
] : [
    Plugin: T,
    instanceName: null | string,
    parameters: Parameters<T>[1]
];
export { FivePlugin, FivePluginInstance, FivePluginInit, };
