UNPKG

typescript-libraries

Version:
147 lines (146 loc) 6.65 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TSBetSlip = void 0; var TSObject_1 = require("../utils/TSObject"); var TSString_1 = require("../utils/TSString"); var TSValidator_1 = require("../utils/TSValidator"); var TSBetSlip = /** @class */ (function () { function TSBetSlip() { } Object.defineProperty(TSBetSlip, "modes", { get: function () { return ['single', 'multiple', 'multiple+', 'system']; }, enumerable: false, configurable: true }); TSBetSlip.initModes = function (_a) { var modes = _a.modes, multiplePlus = _a.multiplePlus; if (!modes) { modes = TSBetSlip.modes; } else { modes = TSBetSlip.filterMode(modes); } // multiplePlus = tab | multiple if (multiplePlus !== 'tab') { var mpIndex = modes.indexOf('multiple+'); if (mpIndex !== -1) { modes.splice(mpIndex, 1); } } return modes; }; TSBetSlip.filterMode = function (modes) { if (Array.isArray(modes)) { return modes.filter(function (m) { return TSBetSlip.modes.indexOf(m) > -1; }); } return TSBetSlip.modes.find(function (m) { return m === modes; }); }; TSBetSlip.accumulator = function (selections, data, cb) { if (cb === void 0) { cb = TSBetSlip.cb; } var result = { numberOfBets: 0, totalStake: 0, totalOdds: 0, minPayOut: Infinity, maxPayOut: 0 }; selections.forEach(function (s) { var stakeSelection = Number(data[s.sk]) || 0, odd = Number(s.o) || 0; if (stakeSelection) { result.numberOfBets++; var _a = cb(stakeSelection, odd, [s.sk], s.sk), payout = _a.payout, stake = _a.stake; if (payout < result.minPayOut) { result.minPayOut = payout; } result.totalStake += stake; result.maxPayOut += payout; result.totalOdds += odd; } }); return result; }; TSBetSlip.multiplicator = function (selections, data, cb) { if (cb === void 0) { cb = TSBetSlip.cb; } var result = { numberOfBets: 0, totalStake: 0, totalOdds: 1, maxPayOut: 0 }, keys = []; selections.forEach(function (s) { return (keys.push(s.sk), result.totalOdds *= Number(s.o) || 1); }); if (data) { result.numberOfBets = 1; } var _a = cb(data, result.totalOdds, keys), payout = _a.payout, stake = _a.stake; result.maxPayOut = payout; result.totalStake = stake; return result; }; TSBetSlip.aggregator = function (selections, data, cb) { if (cb === void 0) { cb = TSBetSlip.cb; } var result = { numberOfBets: 0, totalStake: 0, totalOdds: 0, minPayOut: Infinity, maxPayOut: 0 }; var selectionIndexs, selectionOdds; for (var k in data) { if (k === '_') { continue; } selectionIndexs = data._[parseInt(k, 10)]; if (data[k] && selectionIndexs) { result.numberOfBets += selectionIndexs.length; for (var i in selectionIndexs) { selectionOdds = 1; var keys = []; if (!selectionIndexs || typeof selectionIndexs[Symbol.iterator] !== 'function') { return; } for (var _i = 0, _a = selectionIndexs[i]; _i < _a.length; _i++) { var j = _a[_i]; if (selections[j]) { selectionOdds *= Number(selections[j].o); keys.push(j); } } var _b = cb(data[k], selectionOdds, keys, "".concat(k, "_").concat(i)), payout = _b.payout, stake = _b.stake; if (payout < result.minPayOut) { result.minPayOut = payout; } result.totalOdds += selectionOdds; result.maxPayOut += payout; result.totalStake += stake; } } } return result; }; TSBetSlip.cb = function (stake, odd, keys, group) { return { payout: stake * odd, stake: stake }; }; TSBetSlip.rules = function (_a, overrides) { var _b = _a === void 0 ? {} : _a, _c = _b.minBet, minBet = _c === void 0 ? 0.3 : _c, _d = _b.maxBet, maxBet = _d === void 0 ? 999999999 : _d, _e = _b.maxPayout, maxPayout = _e === void 0 ? 999999999 : _e, _f = _b.minSelection, minSelection = _f === void 0 ? 1 : _f, _g = _b.maxSelection, maxSelection = _g === void 0 ? 99 : _g; if (overrides === void 0) { overrides = {}; } var rules = { stake: { min: minBet, max: maxBet }, payout: { max: maxPayout }, selection: { min: minSelection, max: maxSelection } }; TSObject_1.TSObject.forOwn(rules, function (r, k) { return overrides[k] && Object.assign(r, overrides[k]); }); return rules; }; TSBetSlip.isValid = function (_a) { var _b = _a.rules, rules = _b === void 0 ? TSBetSlip.rules() : _b, selection = _a.selection, stake = _a.stake, balance = _a.balance, payout = _a.payout; return TSBetSlip.validate(rules, { selection: { amount: selection }, stake: { amount: stake, balance: balance }, payout: { amount: payout } }, function (prefix) { return 'BSE' + TSString_1.TSString.cfChar(prefix); }); }; TSBetSlip.validate = function (rules, data, prefix) { var validations = []; TSObject_1.TSObject.forOwn(rules, function (r, k) { return validations = validations.concat(new TSValidator_1.TSValidator(__assign(__assign({}, r), data[k])).compare(prefix(k))); }); return validations; }; TSBetSlip.areDuplicate = function (selections, separator) { if (separator === void 0) { separator = '@'; } return new Set(selections.map(function (s) { return s.sk.toString().split(separator)[0]; })).size != selections.length; }; return TSBetSlip; }()); exports.TSBetSlip = TSBetSlip;