Skip to main content

Function: resolveFieldMapping()

resolveFieldMapping<TComponents>(fieldKey, componentName, componentConfig): object

Defined in: packages/codegen/src/generate.ts:194

Resolve the component name and override config for a single FormField key.

Walks the componentConfig.fields map (by exact key, then normalized key) to find a per-field override, then falls back to the componentConfig.components.overrides map keyed by component name. Returns { source: 'none' } when no config is present.

Type Parameters

TComponents

TComponents extends Record<string, unknown>

Parameters

fieldKey

string

Dot-path key from FormField.key (e.g. 'address.street').

componentName

string | undefined

Inferred component name from the schema walker.

componentConfig

ZodFormsConfig<TComponents> | undefined

Optional ZodFormsConfig with fields and components overrides.

Returns

object

Resolved component name, override config, and the resolution source.

componentName?

optional componentName?: string

componentOverride?

optional componentOverride?: ComponentOverride

override?

optional override?: FieldConfig

source

source: "fields" | "components" | "none"

Remarks

Resolution order: (1) componentConfig.fields[fieldKey] exact match, (2) componentConfig.fields[normalizedKey] for array-indexed paths (e.g. items[].name), (3) componentConfig.components.overrides[componentName] for component-level metadata. A field-level override wins over a component-level override on conflict.

Use When

  • Building a custom codegen backend that needs the same override resolution logic as the CLI
  • Writing tests that verify field-to-component mapping for a given config

Avoid When

  • You are using the CLI or Vite plugin — this is called internally and you don't need it

Example

const mapping = resolveFieldMapping('address.street', 'Input', componentConfig);
if (mapping.source !== 'none') {
console.log('Override component:', mapping.componentName);
}

Pitfalls

  • NEVER assume source: 'none' means the field has no component — the schema walker may have inferred one; resolveFieldMapping only resolves user-provided config overrides