typescript-libraries
Version:
To install this library, run:
147 lines (146 loc) • 6.65 kB
JavaScript
;
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;