bracket-data
Version:
Get some helpful data for a tournament bracket.
61 lines (51 loc) • 1.45 kB
JavaScript
var consts = require("./constants");
var getBestOfRange = require("./bestOfRange");
var longestStr = function (arr) {
var l = 0;
for (var i = 0, m = arr.length; i < m; i++) {
l = Math.max(l, arr[i].length);
}
return l;
};
module.exports = function (data) {
var CONSTS = consts(data);
var regionAlphas = CONSTS.REGION_IDS.join("");
var biggestAlphaLength = longestStr(CONSTS.REGION_IDS);
var biggestSeedLength = CONSTS.TEAMS_PER_REGION.toString().length;
var bestOfLength =
data.bestOf === 1
? 0
: Array.isArray(data.bestOf)
? 1
: data.bestOf.toString().length;
var bestOfRange = getBestOfRange(data.bestOf);
var maxRegionPickLength = biggestSeedLength + bestOfLength;
var maxFinalPickLength = biggestAlphaLength + bestOfLength;
var possiblePickLength = function (i, max) {
var index = i - 1;
return index + "," + index * max;
};
var regionRegEx =
"([" +
regionAlphas +
"]{1," +
biggestAlphaLength +
"})([\\d" +
CONSTS.UNPICKED_MATCH +
"]{" +
possiblePickLength(CONSTS.TEAMS_PER_REGION, maxRegionPickLength) +
"})";
var finalRegEx =
"(" +
CONSTS.FINAL_ID +
")([" +
regionAlphas +
CONSTS.UNPICKED_MATCH +
bestOfRange.join("") +
"]{" +
possiblePickLength(CONSTS.REGION_COUNT, maxFinalPickLength) +
"})";
return new RegExp(
new Array(CONSTS.REGION_COUNT + 1).join(regionRegEx) + finalRegEx
);
};