@virtualstate/examples
Version:
35 lines • 1.17 kB
JavaScript
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