>);
defaultParams?: Partial | ((ctx: FlowRuntimeContext) => Partial | Promise>);
}
/**
* Steps parameters structure for flow models
*
* @example
* ```typescript
* const stepParams: StepParams = {
* 'flow1': {
* 'step1': {
* 'param1': 'value1',
* 'param2': 'value2'
* },
* 'step2': {
* 'param3': 'value3'
* }
* },
* 'flow2': {
* 'step1': {
* 'param1': 'value1'
* }
* }
* }
* ```
*/
type StepParam = {
[stepKey: string]: {
[paramKey: string]: any;
};
};
export type StepParams = {
[flowKey: string]: StepParam;
};
export type ParamObject = {
[key: string]: unknown;
[key: number]: never;
};
/**
* 已注册模型的类名
*/
export type RegisteredModelClassName = string;
/**
* resolveUse 返回类型:可返回目标 use,或 { use, stop } 包含中断标志。
*/
export type ResolveUseResult = RegisteredModelClassName | ModelConstructor | {
use: RegisteredModelClassName | ModelConstructor;
/** 标记是否终止后续 resolveUse 链;默认 false(继续解析) */
stop?: boolean;
};
/**
* Options for creating a model instance
*/
export interface CreateModelOptions {
uid?: string;
use: RegisteredModelClassName | ModelConstructor;
props?: IModelComponentProps;
flowRegistry?: Record>;
stepParams?: StepParams;
subModels?: Record;
parentId?: string;
subKey?: string;
subType?: 'object' | 'array';
sortIndex?: number;
delegateToParent?: boolean;
[key: string]: any;
}
/**
* FlowModel loader result.
* Supports returning the model constructor directly, a default export, or a module object containing the named export.
*/
export type FlowModelLoaderResult = ModelConstructor | {
default?: ModelConstructor;
[key: string]: unknown;
} | Record;
/**
* FlowModel loader function.
*/
export type FlowModelLoader = () => Promise;
/**
* FlowModel loader entry (normalized internal form).
*/
export interface FlowModelLoaderEntry {
loader: FlowModelLoader;
extends?: string[];
}
/**
* FlowModel loader input (user-facing form for registerModelLoaders).
* The `extends` field accepts flexible formats that will be normalized to `string[]` at registration time.
*/
export interface FlowModelLoaderInput {
loader: FlowModelLoader;
extends?: string | ModelConstructor | (string | ModelConstructor)[];
}
/**
* FlowModel loader entry map (normalized internal form).
*/
export type FlowModelLoaderMap = Record;
/**
* FlowModel loader input map (user-facing form for registerModelLoaders).
*/
export type FlowModelLoaderInputMap = Record;
/**
* Batch ensure result.
*/
export interface EnsureBatchResult {
requested: string[];
loaded: string[];
failed: Array<{
name: string;
error?: unknown;
}>;
}
export interface IFlowModelRepository {
findOne(query: Record): Promise | null>;
save(model: T, options?: {
onlyStepParams?: boolean;
}): Promise>;
destroy(uid: string): Promise;
move(sourceId: string, targetId: string, position: 'before' | 'after'): Promise;
duplicate(uid: string): Promise | null>;
}
/**
* 步骤设置对话框的属性接口
*/
export interface StepSettingsDialogProps {
model: FlowModel;
flowKey: string;
stepKey: string;
dialogWidth?: number | string;
dialogTitle?: string;
mode?: 'dialog' | 'drawer';
ctx?: FlowRuntimeContext;
uiModeProps?: Record;
cleanup?: () => void;
}
/**
* 步骤设置抽屉的属性接口
*/
export interface StepSettingsDrawerProps {
model: FlowModel;
flowKey: string;
stepKey: string;
drawerWidth?: number | string;
drawerTitle?: string;
ctx?: FlowRuntimeContext;
uiModeProps?: Record;
cleanup?: () => void;
}
/**
* 统一的步骤设置属性接口
*/
export interface StepSettingsProps {
model: FlowModel;
flowKey: string;
stepKey: string;
width?: number | string;
title?: string;
}
/**
* 分步表单对话框的属性接口
*/
export interface RequiredConfigStepFormDialogProps {
model: FlowModel;
dialogWidth?: number | string;
dialogTitle?: string;
}
export type SubModelValue = TModel | TModel[];
export interface DefaultStructure {
parent?: FlowModel;
subModels?: Record;
}
/**
* 提取Structure中parent的类型,如果没有定义则使用FlowModel | null
*/
export type ParentFlowModel = Structure extends {
parent: infer P;
} ? P : FlowModel | null;
/**
* Options for FlowModel constructor
*/
export interface FlowModelOptions {
uid?: string;
use?: string;
async?: boolean;
props?: IModelComponentProps;
stepParams?: StepParams;
subModels?: Structure['subModels'];
flowRegistry?: Record>;
flowEngine?: FlowEngine;
parentId?: string;
delegateToParent?: boolean;
subKey?: string;
subType?: 'object' | 'array';
sortIndex?: number;
/**
* 是否启用“始终干净”的运行模式:
* - false:与传统模式一致(直接在 master 或当前 fork 上执行)。
*/
cleanRun?: boolean;
}
export type FlowModelMeta = Pick & {
group?: string;
/**
* 菜单展示形态:
* - 'group':作为分组标题,子项平铺显示(默认)
* - 'submenu':作为可点击的一级项,展开二级子菜单
*/
menuType?: 'group' | 'submenu';
/**
* 排序权重,数字越小排序越靠前,用于控制显示顺序和默认选择
* 排序最靠前的将作为默认选择
* @default 0
*/
sort?: number;
/**
* 是否在菜单中隐藏该模型类
* @default false
*/
hide?: boolean | ((context: FlowModelContext) => boolean);
eventList?: {
label: string;
value: string;
}[];
};
/**
* 字段 FlowModel 的专用元数据接口
* 继承自 FlowModelMeta,添加了字段接口相关的属性
*/
export interface FieldFlowModelMeta extends FlowModelMeta {
/**
* 支持的字段接口组列表,基于 CollectionFieldInterface 的 group 属性
* 如:['basic', 'choices', 'relation'] 等
* 如果不指定,则支持所有接口(向后兼容)
*/
supportedInterfaceGroups?: string[];
/**
* 支持的具体接口列表(可选,用于更精确的控制)
* 如:['input', 'textarea', 'select'] 等
*/
supportedInterfaces?: string[];
}
export type { ForkFlowModel } from './models';
/**
* 工具栏项目配置接口
*/
export interface ToolbarItemConfig {
/** 项目的唯一标识 */
key: string;
/** 项目组件,接收 model 作为 props,内部处理所有逻辑 */
component: React.ComponentType<{
model: FlowModel;
[key: string]: any;
}>;
/** 是否显示项目的条件函数 */
visible?: (model: FlowModel) => boolean;
/** 排序权重,数字越小越靠右(先添加的在右边) */
sort?: number;
}
export interface DynamicFlowSource {
key: string;
label: React.ReactNode;
model: FlowModel;
sort?: number;
}
export interface DynamicFlowSourceProvider {
key: string;
sort?: number;
visible?: (model: FlowModel) => boolean;
getSources: (model: FlowModel) => DynamicFlowSource[] | Promise;
}
export interface ApplyFlowCacheEntry {
status: 'pending' | 'resolved' | 'rejected';
promise: Promise;
data?: any;
error?: any;
}
export interface PersistOptions {
/**
* 是否持久化(保存到数据库),默认为 true
*/
persist?: boolean;
}
export type ResourceType = string | {
new (...args: any[]): T;
};