RMT Event Routing Runtime
Deklarative Event-Routen verbinden UI-Events, RMT-Source-Events und Route-Lifecycle-Signale mit Actions. Sie sind die Brücke zwischen Native-First Component Records und der Action/Effect Runtime.
Öffentliche Bausteine
eventsbenennen Source, Event Type und Action Target.- Payload Contracts definieren, welche Werte die Action aus dem Event lesen darf.
- Event Governance hält
preventDefault, Propagation, Capture, Passive, Once und Retargeting deklarativ. sourceMapEinträge verbinden Event- und Action-Records mit Diagnostics.- Scheduler Lanes halten Feedback-, Resource- und sichtbare Arbeit nachvollziehbar.
Dasselbe Event-Modell verarbeitet Browser-Component-Events, Route-Enter-Events, Collection Selection und Command/Search Selection.
Compatibility Anchors für ältere Runtime-Checks:
runtime contract: xtend.epic18.rmt-event-routing-runtime.v2
next workpackage: WP-E18-10
Payload Contracts
Jedes Action-Event braucht einen Payload Contract, wenn es Host-Daten an eine Action weitergibt. Der Contract beschreibt Pflichtfelder, einfache Typen und die Quelle des Payloads, zum Beispiel event.target.value, detail, dataset, $event.key, $event.sort, $event.value, $event.index oder $event.commandId.
Payloads bleiben klein. Actions sollten Key, Query, Sort Descriptor oder Command ID erhalten, nicht das vollständige Browser Event Object.
Collection Events
Collection Events kommen aus collectionViews. Sie routen Selection und Sorting in State-Update-Actions.
{
"events": [
{
"id": "event.collection.select",
"source": "collection.orders",
"type": "select",
"action": "action.orders.select"
},
{
"id": "event.collection.sort",
"source": "collection.orders",
"type": "sort",
"action": "action.orders.sort"
}
],
"actions": [
{
"id": "action.orders.select",
"kind": "state-update",
"target": "state.orders.selection",
"payload": "$event.key"
}
]
}
So bleibt Data Display deklarativ: Der Component Host kann Cards oder Rows rendern, aber Selection State und Sorting State bleiben in RMT sichtbar.
Command/Search Events
Command/Search Events kommen aus einer Trigger Component, einer Popover Surface oder einem searchSources Record. Query, Active Index und Selection sind getrennte Routen.
{
"events": [
{
"id": "event.command.query",
"source": "component.command.search",
"type": "input",
"action": "action.command.query"
},
{
"id": "event.command.execute",
"source": "search.commands",
"type": "select",
"action": "action.command.execute"
}
],
"actions": [
{
"id": "action.command.execute",
"kind": "effect",
"effect": "effect.command.route",
"payload": "$event.commandId",
"policy": "registered-command-required"
}
]
}
Die Execute Route darf nicht direkt zu einem Host Callback springen. Sie erreicht einen policy-gebundenen Effect, und der Effect wendet die Registered-Command-Allow-List an.
Event Governance
Event Governance hält Browser Events deklarativ. Nutze Record Policies für:
preventDefaultstopPropagationstopImmediatePropagationcapturepassiveonceretarget
Ein Host kann diese Policies anwenden, ohne ein Produkt-Event-Framework oder einen globalen Event Bus einzuführen.
Authoring-Ablauf
- Benenne die Event Source: Component, Route, Collection, Surface oder Search Source.
- Benenne den Event Type mit dem kleinsten sinnvollen Payload.
- Route zu einer Action, nicht zu Host Code.
- Lege Host-Arbeit hinter einen Effect mit Policy und Adapter Refs.
- Ergänze Source-Map-Einträge für Event- und Action-Records, die in Diagnostics genutzt werden.
Öffentlicher Vertrag
RMT Event Routing Runtime ist der öffentliche Runtime-Vertrag für docs/de/rmt-event-routing-runtime.md. Ein Host soll Event-Routen, Payloads und Governance ohne internes Projektwissen prüfen können.
Quellen:
tests/fixtures/rmt-owned-data-display-primitives.rmttests/fixtures/rmt-owned-command-search-primitives.rmttests/fixtures/rmt-owned-recipe-extension.rmtxtendrmt/rmt-event-routing-runtime.js
Nachweise:
node scripts/run_xtend_tests.js rmt-event-routing-runtime --json
node scripts/run_xtend_tests.js rmt-owned-data-display-primitives rmt-owned-command-search-primitives rmt-owned-recipe-extension --json
node scripts/run_xtend_tests.js rmt-linter-cli rmt-language-server references --json
Erwartetes Signal: Event Routes bleiben deklarativ, payload-begrenzt, source-map-fähig und policy-gebunden, bevor sie Host Effects erreichen.
Weiterlesen: