Node: first value that is not empty #205

Closed
opened 2026-09-22 19:48:03 +02:00 by meleki · 1 comment
Owner

Ein Data-Node mit zwei Eingängen beliebigen Typs (a, b) und einem Ausgang. Er gibt a weiter, wenn a nicht leer ist, sonst b.

Was zählt als leer

(Entscheidung im Chat, 2026-09-22: Leerwert jeder Art)

  • nichts verbunden bzw. kein Objekt
  • 0
  • ""
  • false
  • leere Liste
  • Struct ohne Felder oder mit nur leeren Feldern. Das deckt auch einen Vektor wie (0, 0) ab, denn die Behavior-Graphen kennen keinen eigenen Vektortyp.

Sind beide leer, kommt b heraus.

Hinweis

Eine echte 0 oder ein echtes false an a wird damit übersprungen. Das ist so gewollt.

Der Ausgang ist any. Die Graphen haben keine generischen Ports, die den Typ vom Eingang übernehmen.

Ein Data-Node mit zwei Eingängen beliebigen Typs (`a`, `b`) und einem Ausgang. Er gibt `a` weiter, wenn `a` nicht leer ist, sonst `b`. ## Was zählt als leer (Entscheidung im Chat, 2026-09-22: Leerwert jeder Art) - nichts verbunden bzw. kein Objekt - `0` - `""` - `false` - leere Liste - Struct ohne Felder oder mit nur leeren Feldern. Das deckt auch einen Vektor wie `(0, 0)` ab, denn die Behavior-Graphen kennen keinen eigenen Vektortyp. Sind beide leer, kommt `b` heraus. ## Hinweis Eine echte `0` oder ein echtes `false` an `a` wird damit übersprungen. Das ist so gewollt. Der Ausgang ist `any`. Die Graphen haben keine generischen Ports, die den Typ vom Eingang übernehmen.
Author
Owner

Umgesetzt in d98c289.

„First not empty“ (FirstNotEmpty), Kategorie data, zwei any-Eingänge a und b, ein any-Ausgang value.

  • Er gibt a weiter, solange a nicht leer ist, sonst b. Sind beide leer, kommt b heraus — der zweite Eingang ist also zugleich der Standardwert.
  • Leer ist: nichts verbunden bzw. kein Objekt, 0, "", false, leere Liste, und ein Struct, dessen Felder alle leer sind.
  • Der Struct-Fall deckt Positionen ab: Die Behavior-Graphen haben keinen eigenen Vektortyp, ein (0, 0) kommt dort als Struct an. {x: 0, y: 2} gilt damit als gesetzt, {x: 0, y: 0} als leer.
  • Ein echtes 0 oder false an a wird übersprungen. Das folgt aus „0 zählt als leer“.
  • Ein Objekt ist nie leer, auch wenn sein Name leer wäre.
  • Der Ausgang bleibt any. Generische Ports, die ihren Typ vom Eingang erben, gibt es im Graph nicht; Item at hat dieselbe Form.

Die Regel liegt als reine Funktion isEmptyValue in src/core/graph/values.ts, der Node in src/core/graph/nodes/data/FirstNotEmpty.ts.

Tests

./check.sh      → 142 Files, 2104 Tests, CHECK EXIT 0   (vorher 2094)
npm run build   → BUILD EXIT 0, „First not empty“ ist im Bundle
  • 10 neue Fälle in der Katalog-Tabelle (tests/core/node-catalog.test.ts): a gesetzt, a unverbunden, 0, "", false, leere Liste, Position (0,0), Struct mit einem gesetzten Feld, Objekt, beide leer.
  • Gegenprobe greift: Mit „Struct nie leer“ und „0 ist ein echter Wert“ fallen genau die beiden zugehörigen Fälle, der Rest bleibt grün. Original per cmp zurück, danach neu gebaut.
  • Kein e2e-Check: Einzelne Data-Nodes haben hier keine e2e-Abdeckung (Join, Equals auch nicht), die Palette füllt sich von selbst aus BUILT_IN_NODES.

Wiki: Behaviors, Zeile der Node-Liste.

Umgesetzt in `d98c289`. **„First not empty“** (`FirstNotEmpty`), Kategorie *data*, zwei `any`-Eingänge `a` und `b`, ein `any`-Ausgang `value`. - Er gibt `a` weiter, solange `a` nicht leer ist, sonst `b`. Sind beide leer, kommt `b` heraus — der zweite Eingang ist also zugleich der Standardwert. - **Leer ist:** nichts verbunden bzw. kein Objekt, `0`, `""`, `false`, leere Liste, und ein Struct, dessen Felder alle leer sind. - Der Struct-Fall deckt Positionen ab: Die Behavior-Graphen haben keinen eigenen Vektortyp, ein `(0, 0)` kommt dort als Struct an. `{x: 0, y: 2}` gilt damit als gesetzt, `{x: 0, y: 0}` als leer. - **Ein echtes `0` oder `false` an `a` wird übersprungen.** Das folgt aus „0 zählt als leer“. - Ein Objekt ist nie leer, auch wenn sein Name leer wäre. - **Der Ausgang bleibt `any`.** Generische Ports, die ihren Typ vom Eingang erben, gibt es im Graph nicht; `Item at` hat dieselbe Form. Die Regel liegt als reine Funktion `isEmptyValue` in `src/core/graph/values.ts`, der Node in `src/core/graph/nodes/data/FirstNotEmpty.ts`. ### Tests ``` ./check.sh → 142 Files, 2104 Tests, CHECK EXIT 0 (vorher 2094) npm run build → BUILD EXIT 0, „First not empty“ ist im Bundle ``` - 10 neue Fälle in der Katalog-Tabelle (`tests/core/node-catalog.test.ts`): a gesetzt, a unverbunden, `0`, `""`, `false`, leere Liste, Position (0,0), Struct mit einem gesetzten Feld, Objekt, beide leer. - Gegenprobe greift: Mit „Struct nie leer“ und „0 ist ein echter Wert“ fallen genau die beiden zugehörigen Fälle, der Rest bleibt grün. Original per `cmp` zurück, danach neu gebaut. - Kein e2e-Check: Einzelne Data-Nodes haben hier keine e2e-Abdeckung (`Join`, `Equals` auch nicht), die Palette füllt sich von selbst aus `BUILT_IN_NODES`. Wiki: *Behaviors*, Zeile der Node-Liste.
admin added this to the Development project 2026-09-23 07:16:30 +02:00
admin moved this to Done in Development on 2026-09-23 07:16:32 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#205