UNPKG

@virtualstate/examples

Version:
35 lines 1.17 kB
import { h, Fragment } from "@virtualstate/fringe"; import { isTrue } from "./truth.js"; import { True, False } from "./truth.js"; export async function* And({ size, self }, state) { // We have no child state, no input is true if (!state) return; // We have a non fragment child, all input is true if (state.reference !== Fragment) return yield true; const children = state.children; // We have no fragment children, no input is true if (!children) return; let everYielded = false; for await (const values of children) { // We have exactly the size we are after const has = values.every(isTrue) && (!size || values.length === size); if (!has && !everYielded) continue; yield has ? ((self && size) ? result(values) : h(True, null)) : h(False, null); everYielded = true; } function result(values) { return { reference: Symbol("TruthfulAND"), children: { async *[Symbol.asyncIterator]() { yield values; } } }; } } //# sourceMappingURL=and.js.map