@azuro-org/toolkit
Advanced tools
@@ -9,6 +9,6 @@ import { type Dictionaries } from '@azuro-org/dictionaries'; | ||
| }; | ||
| type Markets<T> = { | ||
| type FinalMarket<T> = { | ||
| marketName: string; | ||
| outcomes: Outcome<T>[][]; | ||
| }[]; | ||
| }; | ||
| type Props = { | ||
@@ -19,2 +19,3 @@ lpAddress: string; | ||
| conditionId: string; | ||
| coreAddress: string; | ||
| outcomes: { | ||
@@ -24,10 +25,6 @@ [key: string]: any; | ||
| }[]; | ||
| core: { | ||
| [key: string]: any; | ||
| address: string; | ||
| }; | ||
| }[]; | ||
| dictionaries: Dictionaries; | ||
| }; | ||
| export default function aggregateOutcomesByMarkets<T extends {}>(props: Props): Markets<T>; | ||
| export default function aggregateOutcomesByMarkets<T extends {}>(props: Props): FinalMarket<T>[]; | ||
| export {}; |
+30
-29
@@ -39,19 +39,15 @@ import {getMarketKey,getMarketName,assembleSelectionName}from'@azuro-org/dictionaries';/****************************************************************************** | ||
| var lpAddress = props.lpAddress, conditions = props.conditions, dictionaries = props.dictionaries; | ||
| // group conditions by marketId | ||
| var outcomesByMarketKey = {}; | ||
| var result = {}; | ||
| var marketsMap = {}; | ||
| conditions.forEach(function (_a) { | ||
| var conditionId = _a.conditionId, outcomes = _a.outcomes, core = _a.core; | ||
| var conditionId = _a.conditionId, outcomes = _a.outcomes, coreAddress = _a.coreAddress; | ||
| outcomes.forEach(function (_a) { | ||
| var outcomeId = _a.outcomeId, rest = __rest(_a, ["outcomeId"]); | ||
| // we are using the same key format that was discussed earlier | ||
| var marketKey = getMarketKey(outcomeId, dictionaries); | ||
| // we are obtaining the human-readable names of each market and the corresponding outcome selections | ||
| var marketName = getMarketName(outcomeId, dictionaries); | ||
| var selectionName = assembleSelectionName(outcomeId, dictionaries); | ||
| var outcome = __assign({ conditionId: conditionId, outcomeId: outcomeId, selectionName: selectionName, lpAddress: lpAddress, coreAddress: core.address }, rest); | ||
| // it's important to use "marketKey" because it's unique | ||
| // on other hand "marketId" can be same for different groups of conditions | ||
| // "marketKey" is a string template "marketId-gamePeriodId-gameTypeId[-teamPlayerId]" | ||
| if (!outcomesByMarketKey[marketKey]) { | ||
| outcomesByMarketKey[marketKey] = []; | ||
| result[marketKey] = { | ||
| var outcome = __assign({ conditionId: conditionId, outcomeId: outcomeId, lpAddress: lpAddress, coreAddress: coreAddress, selectionName: selectionName }, rest); | ||
| if (!marketsMap[marketKey]) { | ||
| marketsMap[marketKey] = { | ||
| marketName: marketName, | ||
@@ -61,11 +57,14 @@ outcomes: [], | ||
| } | ||
| outcomesByMarketKey[marketKey].push(outcome); | ||
| marketsMap[marketKey].outcomes.push(outcome); | ||
| }); | ||
| }); | ||
| var finalMarketsMap = {}; | ||
| // sort by outcomeId and group by conditionId | ||
| Object.keys(outcomesByMarketKey).forEach(function (marketKey) { | ||
| var marketId = +marketKey.split('-')[0]; | ||
| // get outcomes related to the market | ||
| var outcomes = outcomesByMarketKey[marketKey]; | ||
| // sort the conditions by selectionId (outcome) | ||
| Object.keys(marketsMap).forEach(function (marketKey) { | ||
| var _a = marketsMap[marketKey], marketName = _a.marketName, outcomes = _a.outcomes; | ||
| finalMarketsMap[marketKey] = { | ||
| marketName: marketName, | ||
| outcomes: null, | ||
| }; | ||
| // sort the outcomes by `selectionId` (outcome's selection reference) | ||
| outcomes.sort(function (a, b) { | ||
@@ -76,13 +75,15 @@ var left = dictionaries.outcomes[a.outcomeId].selectionId; | ||
| }); | ||
| // markets with different conditionIds and not require additional grouping or sorting | ||
| var marketsWithDifferentConditionIds = [1, 2]; | ||
| if (marketsWithDifferentConditionIds.includes(marketId)) { | ||
| result[marketKey].outcomes = [outcomes]; | ||
| // "Full Time Result" and "Double Chance" are the markets whose outcomes don't require sorting | ||
| var MARKETS_THAT_DONT_NEED_GROUPING = [1, 2]; | ||
| var marketId = marketKey.split('-')[0]; | ||
| if (MARKETS_THAT_DONT_NEED_GROUPING.includes(+marketId)) { | ||
| // it's worth noting that the outcomes are wrapped within an array here due to the "rows" that are presented below | ||
| finalMarketsMap[marketKey].outcomes = [outcomes]; | ||
| } | ||
| // group by conditionId to allow draw outcomes by rows in UI, e.g. | ||
| // | ||
| // Team 1 - Total Goals: | ||
| // Over (1.5) Under (1.5) | ||
| // Over (0.5) Under (0.5) | ||
| else { | ||
| // group the outcomes by condition ID, which will allow us to display the draw outcomes in separate rows | ||
| // | ||
| // Handicap: | ||
| // H1 (-0.5) H2 (0.5) | ||
| // H1 (0.5) H2 (-0.5) | ||
| var outcomesByConditionId_1 = {}; | ||
@@ -96,4 +97,4 @@ outcomes.forEach(function (outcome) { | ||
| }); | ||
| var outcomesArr = Object.values(outcomesByConditionId_1); | ||
| result[marketKey].outcomes = outcomesArr.sort(function (a, b) { | ||
| var rows = Object.values(outcomesByConditionId_1); | ||
| finalMarketsMap[marketKey].outcomes = rows.sort(function (a, b) { | ||
| var aSum = a.reduce(function (acc, _a) { | ||
@@ -111,3 +112,3 @@ var outcomeId = _a.outcomeId; | ||
| }); | ||
| return Object.values(result); | ||
| return Object.values(finalMarketsMap); | ||
| }export{aggregateOutcomesByMarkets}; |
@@ -9,6 +9,6 @@ import { type Dictionaries } from '@azuro-org/dictionaries'; | ||
| }; | ||
| type Markets<T> = { | ||
| type FinalMarket<T> = { | ||
| marketName: string; | ||
| outcomes: Outcome<T>[][]; | ||
| }[]; | ||
| }; | ||
| type Props = { | ||
@@ -19,2 +19,3 @@ lpAddress: string; | ||
| conditionId: string; | ||
| coreAddress: string; | ||
| outcomes: { | ||
@@ -24,10 +25,6 @@ [key: string]: any; | ||
| }[]; | ||
| core: { | ||
| [key: string]: any; | ||
| address: string; | ||
| }; | ||
| }[]; | ||
| dictionaries: Dictionaries; | ||
| }; | ||
| export default function aggregateOutcomesByMarkets<T extends {}>(props: Props): Markets<T>; | ||
| export default function aggregateOutcomesByMarkets<T extends {}>(props: Props): FinalMarket<T>[]; | ||
| export {}; |
+30
-29
@@ -39,19 +39,15 @@ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var dictionaries=require('@azuro-org/dictionaries');/****************************************************************************** | ||
| var lpAddress = props.lpAddress, conditions = props.conditions, dictionaries$1 = props.dictionaries; | ||
| // group conditions by marketId | ||
| var outcomesByMarketKey = {}; | ||
| var result = {}; | ||
| var marketsMap = {}; | ||
| conditions.forEach(function (_a) { | ||
| var conditionId = _a.conditionId, outcomes = _a.outcomes, core = _a.core; | ||
| var conditionId = _a.conditionId, outcomes = _a.outcomes, coreAddress = _a.coreAddress; | ||
| outcomes.forEach(function (_a) { | ||
| var outcomeId = _a.outcomeId, rest = __rest(_a, ["outcomeId"]); | ||
| // we are using the same key format that was discussed earlier | ||
| var marketKey = dictionaries.getMarketKey(outcomeId, dictionaries$1); | ||
| // we are obtaining the human-readable names of each market and the corresponding outcome selections | ||
| var marketName = dictionaries.getMarketName(outcomeId, dictionaries$1); | ||
| var selectionName = dictionaries.assembleSelectionName(outcomeId, dictionaries$1); | ||
| var outcome = __assign({ conditionId: conditionId, outcomeId: outcomeId, selectionName: selectionName, lpAddress: lpAddress, coreAddress: core.address }, rest); | ||
| // it's important to use "marketKey" because it's unique | ||
| // on other hand "marketId" can be same for different groups of conditions | ||
| // "marketKey" is a string template "marketId-gamePeriodId-gameTypeId[-teamPlayerId]" | ||
| if (!outcomesByMarketKey[marketKey]) { | ||
| outcomesByMarketKey[marketKey] = []; | ||
| result[marketKey] = { | ||
| var outcome = __assign({ conditionId: conditionId, outcomeId: outcomeId, lpAddress: lpAddress, coreAddress: coreAddress, selectionName: selectionName }, rest); | ||
| if (!marketsMap[marketKey]) { | ||
| marketsMap[marketKey] = { | ||
| marketName: marketName, | ||
@@ -61,11 +57,14 @@ outcomes: [], | ||
| } | ||
| outcomesByMarketKey[marketKey].push(outcome); | ||
| marketsMap[marketKey].outcomes.push(outcome); | ||
| }); | ||
| }); | ||
| var finalMarketsMap = {}; | ||
| // sort by outcomeId and group by conditionId | ||
| Object.keys(outcomesByMarketKey).forEach(function (marketKey) { | ||
| var marketId = +marketKey.split('-')[0]; | ||
| // get outcomes related to the market | ||
| var outcomes = outcomesByMarketKey[marketKey]; | ||
| // sort the conditions by selectionId (outcome) | ||
| Object.keys(marketsMap).forEach(function (marketKey) { | ||
| var _a = marketsMap[marketKey], marketName = _a.marketName, outcomes = _a.outcomes; | ||
| finalMarketsMap[marketKey] = { | ||
| marketName: marketName, | ||
| outcomes: null, | ||
| }; | ||
| // sort the outcomes by `selectionId` (outcome's selection reference) | ||
| outcomes.sort(function (a, b) { | ||
@@ -76,13 +75,15 @@ var left = dictionaries$1.outcomes[a.outcomeId].selectionId; | ||
| }); | ||
| // markets with different conditionIds and not require additional grouping or sorting | ||
| var marketsWithDifferentConditionIds = [1, 2]; | ||
| if (marketsWithDifferentConditionIds.includes(marketId)) { | ||
| result[marketKey].outcomes = [outcomes]; | ||
| // "Full Time Result" and "Double Chance" are the markets whose outcomes don't require sorting | ||
| var MARKETS_THAT_DONT_NEED_GROUPING = [1, 2]; | ||
| var marketId = marketKey.split('-')[0]; | ||
| if (MARKETS_THAT_DONT_NEED_GROUPING.includes(+marketId)) { | ||
| // it's worth noting that the outcomes are wrapped within an array here due to the "rows" that are presented below | ||
| finalMarketsMap[marketKey].outcomes = [outcomes]; | ||
| } | ||
| // group by conditionId to allow draw outcomes by rows in UI, e.g. | ||
| // | ||
| // Team 1 - Total Goals: | ||
| // Over (1.5) Under (1.5) | ||
| // Over (0.5) Under (0.5) | ||
| else { | ||
| // group the outcomes by condition ID, which will allow us to display the draw outcomes in separate rows | ||
| // | ||
| // Handicap: | ||
| // H1 (-0.5) H2 (0.5) | ||
| // H1 (0.5) H2 (-0.5) | ||
| var outcomesByConditionId_1 = {}; | ||
@@ -96,4 +97,4 @@ outcomes.forEach(function (outcome) { | ||
| }); | ||
| var outcomesArr = Object.values(outcomesByConditionId_1); | ||
| result[marketKey].outcomes = outcomesArr.sort(function (a, b) { | ||
| var rows = Object.values(outcomesByConditionId_1); | ||
| finalMarketsMap[marketKey].outcomes = rows.sort(function (a, b) { | ||
| var aSum = a.reduce(function (acc, _a) { | ||
@@ -111,3 +112,3 @@ var outcomeId = _a.outcomeId; | ||
| }); | ||
| return Object.values(result); | ||
| return Object.values(finalMarketsMap); | ||
| }exports.aggregateOutcomesByMarkets=aggregateOutcomesByMarkets; |
+1
-1
| { | ||
| "name": "@azuro-org/toolkit", | ||
| "version": "0.1.4", | ||
| "version": "0.1.5", | ||
| "description": "Set of helpers to work with Azuro protocol", | ||
@@ -5,0 +5,0 @@ "module": "dist/index.es.js", |
17888
1.15%283
-1.39%