a2ui-project / a2ui-project/a2ui

refactor(web_core): extract shared Zod schema introspection and metadata utilities

Offen
#2,443 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
P3 type: feature/enhancement
Vorherrschende Sprache
TypeScript
Sterne
16.4k
Forks
1.3k
Ø Merge
3 T. 15 Std.
Gemergte PRs (30 T.)
134

Beschreibung

## Overview

`GenericBinder` (`renderers/web_core/src/v0_9/rendering/generic-binder.ts`) and `NodeResolver` (`renderers/web_core/src/v0_9/nodes/ref-fields.ts`) both independently inspect Zod schemas:
1. Accessing private `_def` internals (`typeName`, `innerType`, `description`, `options`, `shape()`).
2. Duplicating unwrapping loops for `ZodOptional`, `ZodNullable`, `ZodDefault`, and `ZodEffects`.
3. Defining duplicate schema reference strings (`REF:common_types.json#/$defs/...`).

## Goals

- **Centralize Schema Constants**: Export canonical reference constants (`CHILD_LIST_REF`, `COMPONENT_ID_REF`, `ACTION_REF`, `DATA_BINDING_REF`) from a central location (`renderers/web_core/src/v0_9/schema/constants.ts` or `common-types.ts`).
- **Shared Schema Introspection Utility**: Consolidate unwrapping logic into a dedicated helper module (`renderers/web_core/src/v0_9/schema/schema-reflection.ts`) so callers avoid accessing `_def` directly.
- **Extend Schema Metadata**: Broaden the `a2uiChildRef` metadata pattern introduced in PR #2393 (`markChildRef` / `childRefKindOf`) to `Action` and `Dynamic*` schemas (`a2uiKind: 'action' | 'dynamic' | 'child-list' | 'component-id'`).

## References

- PR #2359: https://github.com/a2ui-project/a2ui/pull/2359
- PR #2393: Node layer schema metadata implementation (commit `3a2f5f24`)

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit dem Lesen der beiden genannten Dateien: `renderers/web_core/src/v0_9/rendering/generic-binder.ts` und `renderers/web_core/src/v0_9/nodes/ref-fields.ts`. Untersuche, wie sie Zod-Schemas über `_def` inspizieren. Sieh dir PR #2393 an, um das bestehende `a2uiChildRef`-Metadatenmuster zu verstehen. Ziel ist es, die gemeinsame Logik in neue Utility-Module auszulagern, wahrscheinlich unter `renderers/web_core/src/v0_9/schema/`. Die Aufgabe ist erledigt, wenn der duplizierte Introspektionscode aus den ursprünglichen Dateien entfernt und durch Aufrufe der neuen gemeinsamen Utilities ersetzt wurde.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
backend-api-design, tooling
Issue-Typ
Refactoring
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.