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.
„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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ein Data-Node mit zwei Eingängen beliebigen Typs (
a,b) und einem Ausgang. Er gibtaweiter, wennanicht leer ist, sonstb.Was zählt als leer
(Entscheidung im Chat, 2026-09-22: Leerwert jeder Art)
0""false(0, 0)ab, denn die Behavior-Graphen kennen keinen eigenen Vektortyp.Sind beide leer, kommt
bheraus.Hinweis
Eine echte
0oder ein echtesfalseanawird damit übersprungen. Das ist so gewollt.Der Ausgang ist
any. Die Graphen haben keine generischen Ports, die den Typ vom Eingang übernehmen.Umgesetzt in
d98c289.„First not empty“ (
FirstNotEmpty), Kategorie data, zweiany-Eingängeaundb, einany-Ausgangvalue.aweiter, solangeanicht leer ist, sonstb. Sind beide leer, kommtbheraus — der zweite Eingang ist also zugleich der Standardwert.0,"",false, leere Liste, und ein Struct, dessen Felder alle leer sind.(0, 0)kommt dort als Struct an.{x: 0, y: 2}gilt damit als gesetzt,{x: 0, y: 0}als leer.0oderfalseanawird übersprungen. Das folgt aus „0 zählt als leer“.any. Generische Ports, die ihren Typ vom Eingang erben, gibt es im Graph nicht;Item athat dieselbe Form.Die Regel liegt als reine Funktion
isEmptyValueinsrc/core/graph/values.ts, der Node insrc/core/graph/nodes/data/FirstNotEmpty.ts.Tests
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.cmpzurück, danach neu gebaut.Join,Equalsauch nicht), die Palette füllt sich von selbst ausBUILT_IN_NODES.Wiki: Behaviors, Zeile der Node-Liste.