From JSON to Components β
System that interprets JSON schemas and transforms them into React/Vue elements β the "translator" between backend and frontend.

Schema Resolution is the process that transforms JSON configurations into functional interfaces:
π§ What It Does: β
| Input | Process | Output | Result |
|---|---|---|---|
| JSON Schema from backend | Resolution + Validation | React/Vue Element Tree | Rendered interface |
| Component specs | Registry lookup | Component instances | Working components |
| Props and context | Middleware pipeline | Enhanced props | Correct behavior |
π Resolution Flow: β
Automatic Steps:
- Schema Parsing: JSON β Internal structure
- Component Lookup:
x-componentβ React/Vue Component - Props Resolution: Schema properties β Component props
- Context Injection: Form/Menu context β Component context
- Middleware Application: Props transformation pipeline
- Element Creation: React.createElement() / Vue h() calls
Visual Example:
json
{ "name": "email", "x-component": "InputText", "required": true }β Resolution Process
jsx
<InputText name="email" required={true} onChange={...} />π‘ Result: Declarative schema β Imperative component.
π Resolution Types β
Different schema types require different resolution strategies:
π Form Schema Resolution: β
| Schema Property | Resolution Strategy | React/Vue Result | Example |
|---|---|---|---|
name | Field identification | name prop | <input name="email" /> |
x-component | Component registry lookup | Component type | <InputText /> |
required | Validation rule | required prop + validation | required={true} |
x-component-props | Props passthrough | Direct props | placeholder="Enter email" |
x-rules | Validation configuration | Validation props | pattern="email" |
π§ Menu Schema Resolution: β
| Schema Property | Resolution Strategy | React/Vue Result | Example |
|---|---|---|---|
label | Text content | children prop | <MenuItem>Dashboard</MenuItem> |
url | Navigation target | href or onClick | <Link to="/dashboard" /> |
icon | Icon component | Icon element | <DashboardIcon /> |
visible | Conditional rendering | Conditional wrapper | {visible && <MenuItem />} |
children | Nested menu items | Recursive resolution | <Submenu items={...} /> |
π¨ Component Schema Resolution: β
| Schema Property | Resolution Strategy | React/Vue Result | Example |
|---|---|---|---|
x-component | Component type lookup | Component class | <Button /> |
x-ui | Layout/styling props | CSS/styling props | className="col-md-6" |
x-component-props | Component-specific props | Props object | { variant: "primary" } |
x-reactions | Event handlers | Event props | onClick={handleClick} |
βοΈ Resolution Engine β
How the system resolves schemas internally:
π Resolution Pipeline: β
Raw JSON Schema
β
Validate Schema (Valid JSON?)
β
Resolve Component (Registry lookup)
β
Map Props (Schema β Component props)
β
Inject Context (Form/Menu/Global context)
β
Apply Middleware (Transformations pipeline)
β
Create Element (React.createElement / Vue h())
β
Final React/Vue Elementπ― Resolution Priorities: β
Component Resolution Order:
- Local components (factory props)
- Global components (scheptaProvider)
- Registry overrides (registerComponent calls)
- Default components (built-in registry)
Props Resolution Order:
- Schema-defined props (
x-component-props) - Derived props (from schema structure)
- Context props (form context, etc.)
- Default props (component defaults)
Middleware Resolution Order:
- Built-in middleware (validation, formatting)
- Global middleware (scheptaProvider)
- Local middleware (factory props)
- Component middleware (component-specific)
π Resolution Strategies β
Different strategies for different content types:
π― Expression Resolution: β
| Expression Type | Resolution Strategy | Example | Result |
|---|---|---|---|
| Static Values | Direct assignment | "required": true | required={true} |
| Segment Expressions | Context substitution | "\{\{ $segment.tenant \}\}" | "bank 1" |
| Association Expressions | Association lookup | "\{\{ $target.title \}\}" | "Portal Title" |
| JEXL Expressions | Expression evaluation | "\{\{ $segment.role === 'admin' \}\}" | true |
π§ Conditional Resolution: β
Visibility Resolution:
typescript
const visible = evaluateExpression(schema.visible, context);
if (!visible) return null; // Component doesn't renderDynamic Props Resolution:
typescript
const dynamicProps = schema['x-component-props'];
const resolvedProps = resolveDynamicValues(dynamicProps, context);Validation Resolution:
- Rules β Props:
x-rulestransformed into validation properties - Context Injection: Form context automatically injected for validation
- Error Handling: Fallbacks for invalid or malformed rules
π‘ Related Concepts β
Schema Resolution is the "processor" that connects schemas with React/Vue:
- 01. Factories: Factories use resolution to process schemas
- 02. Schema Language: Syntax interpreted by resolution
- 05. Renderer: Renderers chosen by resolution
- 06. Middleware: Pipeline executed during resolution
- 03. Provider: Context and configuration used in resolution
- 07. Debug System: Debug shows resolution steps