in packages/sqrl/src/helpers/AstBuilder.ts [94:121]
static or(asts: Ast[]): Ast {
invariant(
asts.length > 0,
"SQRL AstBuilder requires at-least one value for an `or`"
);
let result: Ast = AstBuilder.constant(false);
for (let idx = asts.length - 1; idx >= 0; idx--) {
const ast: Ast = asts[idx];
if (ast.type === "constant") {
if (!ast.value) {
continue;
} else {
return AstBuilder.constant(true);
}
} else {
result =
result.type === "constant" && result.value === false
? ast
: {
type: "boolean_expr",
operator: "or",
left: ast,
right: result,
};
}
}
return result;
}