function * applyRuleFilters(bid, board, vulnerability, context) { return yield coArray(rules) .every(function * (rule) { return yield Promise.resolve(rule.filter(bid, board, vulnerability, context)); }) .result; }
function * generateBid(gameState) { let vulnerability = 0; let game = new GameQuery(gameState); let context = {}; let candidates = game.currentBoard.getLegalBids(); candidates = candidates.filter(bid => bid.type === BidType.Call); candidates = yield coArray(candidates) .filter(function * (bid) { return yield applyRuleFilters(bid, game.currentBoard, vulnerability, context); }) .result; candidates = yield * applyConventions(candidates, game.currentBoard, vulnerability, context); let bid = choose(candidates); return bid; }