Adapter Foundation
Adapter Foundation 位于 Compiler Foundation 之前,用于把外部或类模块输入归一化为结构化 ModuleFormConfig。
External / Module-like Input
-> Adapter Registry
-> Adapter Pipeline
-> ModuleFormConfig
-> compileFormConfig
-> FormConfig
-> processFormConfig
-> DynamicForm
Adapter 只负责输入转换。规则合并、依赖推导、组件注册和 FormConfig 生成仍由现有 compiler 负责。
Adapter
import type { ModuleConfigAdapter } from '@whynotsnow/dynamic-form';
const adapter: ModuleConfigAdapter<{ fields: Array<{ name: string; type: string }> }> = {
type: 'custom-metadata',
supports: (input): input is { fields: Array<{ name: string; type: string }> } =>
!!input && typeof input === 'object' && Array.isArray((input as any).fields),
adapt: (input) => ({
fields: input.fields.map((field) => ({
type: field.type,
id: field.name
}))
})
};
Registry
import { AdapterRegistryManager } from '@whynotsnow/dynamic-form';
const registry = new AdapterRegistryManager();
registry.register(adapter);
registry.has('custom-metadata');
registry.get('custom-metadata');
registry.list();
registry.unregister('custom-metadata');
重复 adapter type 默认会报错。只有显式传入 { override: true } 时才允许覆盖。
Pipeline
import { adaptModuleConfigs, compileAdaptedFormConfig } from '@whynotsnow/dynamic-form';
const moduleFormConfig = adaptModuleConfigs(input, {
registry,
adapterType: 'custom-metadata'
});
const compiled = compileAdaptedFormConfig(input, {
adapterRegistry: registry,
moduleRegistry
});
未指定 adapterType 时,pipeline 会按注册顺序选择第一个 supports() 成功的 adapter。
默认顺序是 passthrough、JsonSchema、OpenAPI、Metadata。因此单个 object schema 会优先由 JsonSchema adapter 处理;需要强制 OpenAPI 的单 schema 兼容路径时,应显式传入 adapterType: 'openapi'。
Boundaries
- Adapter Foundation 本身不负责 JsonSchema、OpenAPI 或 Metadata 的具体映射。
- Adapter Foundation 不修改
compileFormConfig()、processFormConfig()、runtime 或 renderer 的职责。 - 当前版本不引入异步规则、validation rule engine 或 monorepo 拆包。
- Adapter 输出统一为
{ fields, groups? },字段通过groupId加入 group,可表达 flat、grouped 和 mixed 配置。
当前 3.0 发布同时包含 JsonSchemaAdapter、OpenApiAdapter 和 MetadataAdapter,详见 Schema Adapters。以上边界仅描述 Adapter Foundation 本身的职责范围。