UNPKG

@pokerland/utils

Version:

General Poker Utils

1 lines 7.71 kB
{"version":3,"sources":["../src/pokerUtils.ts","../src/typeEnumerations.ts","../src/handIterator.ts"],"names":["isNewStreet","__name","actionList","actionIdx","street","actionRequiresAmount","actionType","includes","positionsByNumPlayers","positions","numberPlayersSeated","formatCurrency","amount","currency","Intl","NumberFormat","style","maximumFractionDigits","format","streetList","cardList","a"],"mappings":"iFAkCO,IAAMA,CAAAA,CAAcC,EAAA,CACzBC,CAAAA,CACAC,IACYA,CAAAA,GAAc,CAAA,EACdD,EAAWC,CAAAA,CAAAA,CAAWC,SAAWF,CAAAA,CAAWC,CAAAA,CAAY,CAAA,CAAA,CAAGC,MAAAA,CAJ9C,eAMdC,CAAAA,CAAuBJ,CAAAA,CAACK,CAAAA,EAC5B,CAAC,MAAA,CAAQ,OAAA,CAAS,OAAOC,QAAAA,CAASD,CAAAA,EADP,sBAAA,CAAA,CAI9BE,CAAAA,CAAoD,CACxD,EAAA,CAAI,CAAC,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,QAAS,OAAA,CAAS,OAAA,CAAS,KAAM,IAAA,CAAM,IAAA,CAAA,CACrE,EAAG,CAAC,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,QAAS,IAAA,CAAM,IAAA,CAAM,MAC3D,CAAA,CAAG,CAAC,KAAM,IAAA,CAAM,IAAA,CAAM,MAAO,OAAA,CAAS,IAAA,CAAM,KAAM,IAAA,CAAA,CAClD,CAAA,CAAG,CAAC,IAAA,CAAM,IAAA,CAAM,KAAM,KAAA,CAAO,IAAA,CAAM,IAAA,CAAM,IAAA,CAAA,CACzC,CAAA,CAAG,CAAC,KAAM,IAAA,CAAM,IAAA,CAAM,MAAO,IAAA,CAAM,IAAA,CAAA,CACnC,EAAG,CAAC,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,IAAA,CAAA,CAC7B,EAAG,CAAC,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAA,CACtB,EAAG,CAAC,IAAA,CAAM,IAAA,CAAM,IAAA,CAAA,CAChB,CAAA,CAAG,CAAC,QAAS,IAAA,CACf,CAAA,CAEaC,EAAYR,CAAAA,CAACS,CAAAA,EACxBF,EAAsBE,CAAAA,CAAAA,EAAwB,EAAA,CADvB,WAAA,EAsElB,SAASC,CAAAA,CAAeC,CAAAA,CAAgBC,EAAmB,KAAA,CAAK,CACrE,OAAO,IAAIC,IAAAA,CAAKC,YAAAA,CAAa,OAAA,CAAS,CACpCC,KAAAA,CAAO,WACPH,QAAAA,CAAAA,CAAAA,CACAI,sBAAuB,CACzB,CAAA,EAAGC,MAAAA,CAAON,CAAAA,CACZ,CANgBD,CAAAA,CAAAA,CAAAA,CAAAA,kBC5HT,IAAMQ,CAAAA,CAAuB,CAAC,SAAA,CAAW,MAAA,CAAQ,OAAQ,OAAA,CAAA,CAEnDC,CAAAA,CAAoB,CAC/B,IAAA,CAAK,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CACvE,IAAA,CAAK,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CACvE,IAAA,CAAK,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CACvE,IAAA,CAAK,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,ECMlE,IAAMC,CAAAA,CAAI","file":"index.mjs","sourcesContent":["import type {\n HandActionList, ActionType, Position,\n} from '@pokerland/types'\n\n\n// export const handActionsToSpotActions = (\n// handActions: HandActionList,\n// actionIsOnIndex: number,\n// ): HandActionList => {\n// throwIf(\n// actionIsOnIndex < 0 || actionIsOnIndex >= handActions.length,\n// `Invalid action index: ${actionIsOnIndex}`\n// )\n// const actionToAAppend: PlayerAction = pipe(\n// pick(['street', 'position']),\n// assoc('actionType', 'toAct' as ActionType)\n// )(handActions[actionIsOnIndex])\n\n// const spotActionList: HandActionList = pipe(\n// take(actionIsOnIndex),\n// append(actionToAAppend as any)\n// )(handActions)\n\n// return spotActionList\n// }\n\n// // export const createPlayerStatus = (currentStack: number): PlayerStatus => ({\n// export const createPlayerStatus = (options: Partial<PlayerStatus>): PlayerStatus => ({\n// amountAddedToPotThisStreet: 0,\n// currentStack: 0,\n// hasFolded: false,\n// ...options\n// })\n\nexport const isNewStreet = (\n actionList: HandActionList,\n actionIdx: number\n): boolean => actionIdx === 0 ||\n actionList[actionIdx].street !== actionList[actionIdx - 1].street\n\nexport const actionRequiresAmount = (actionType: ActionType): boolean => {\n return ['call', 'raise', 'bet'].includes(actionType)\n}\n\nconst positionsByNumPlayers: Record<number, Position[]> = {\n 10: ['BU', 'SB', 'BB', 'UTG', 'UTG+1', 'UTG+2', 'UTG+3', 'LJ', 'HJ', 'CO'],\n 9: ['BU', 'SB', 'BB', 'UTG', 'UTG+1', 'UTG+2', 'LJ', 'HJ', 'CO'],\n 8: ['BU', 'SB', 'BB', 'UTG', 'UTG+1', 'LJ', 'HJ', 'CO'],\n 7: ['BU', 'SB', 'BB', 'UTG', 'LJ', 'HJ', 'CO'],\n 6: ['BU', 'SB', 'BB', 'UTG', 'HJ', 'CO'],\n 5: ['BU', 'SB', 'BB', 'UTG', 'CO'],\n 4: ['BU', 'SB', 'BB', 'CO'],\n 3: ['BU', 'SB', 'BB'],\n 2: ['SB/BU', 'BB'],\n}\n\nexport const positions = (numberPlayersSeated: number): Position[] =>\n positionsByNumPlayers[numberPlayersSeated] || []\n\n// export const updatePlayerStatus = (\n// playerCurStatus: PlayerStatus,\n// action: PlayerAction,\n// ): PlayerStatus => {\n\n// const { actionType, amountAddedToPot } = action\n// throwIf(\n// actionRequiresAmount(actionType) && isNil(amountAddedToPot),\n// `Action type ${actionType} requires an amount`\n// )\n\n// const statusAfterAction = clone(playerCurStatus)\n// switch(actionType) {\n// // no change to status\n// case 'check':\n// case 'toAct':\n// break\n// case 'fold':\n// statusAfterAction.hasFolded = true\n// break\n// // money going into the pot\n// case 'call':\n// case 'raise':\n// case 'bet':\n// throwIf((amountAddedToPot || 0) > statusAfterAction.currentStack,\n// 'Cannot bet more than available stack')\n// statusAfterAction.amountAddedToPotThisStreet += amountAddedToPot || 0\n// statusAfterAction.currentStack -= amountAddedToPot || 0\n// throwIf(statusAfterAction.currentStack < 0, 'Player stack went negative!')\n// break\n// }\n\n// return statusAfterAction\n// }\n\n\n// export const clearCurrentBets = (playersSpotStatus: PlayersSpotStatus): PlayersSpotStatus => {\n// const positions: Position[] = keys(playersSpotStatus) as Position[]\n// const newPlayersStatus = positions.reduce((acc, position) => {\n// acc[position] = { ...playersSpotStatus[position]!, amountAddedToPotThisStreet: 0 }\n// return acc\n// }, {} as PlayersSpotStatus)\n// return newPlayersStatus\n// }\n\n// TODO: !!!! SPS !!!! NOTE\n// need to set players initial stack sizes prior to running thorough action list\n// TODO: !!!! SPS !!!! NOTE\n\n// export const actionsToPlayersSpotStatus = (\n// actionList: SpotActionList\n// ): PlayersSpotStatus => {\n// let playersSpotStatus: PlayersSpotStatus = {}\n// actionList.forEach((curAction, actionIdx) => {\n// const { position: curActionPosition } = curAction\n// if (!playersSpotStatus[curActionPosition]) {\n// playersSpotStatus[curActionPosition] = createPlayerStatus({ currentStack: 0 })\n// }\n// if (isNewStreet(actionList, actionIdx)) {\n// playersSpotStatus = clearCurrentBets(playersSpotStatus)\n// }\n// playersSpotStatus[curActionPosition] =\n// updatePlayerStatus(playersSpotStatus[curActionPosition]!, curAction)\n// })\n// return playersSpotStatus\n// }\n\nexport function formatCurrency(amount: number, currency: string = 'USD') {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n }).format(amount)\n}","import type { Street, Card } from '@pokerland/types'\n\nexport const streetList: Street[] = ['preFlop', 'flop', 'turn', 'river']\n\nexport const cardList: Card[] = [\n 'Ad','2d', '3d', '4d', '5d', '6d', '7d', '8d', '9d', 'Td', 'Jd', 'Qd', 'Kd',\n 'Ac','2c', '3c', '4c', '5c', '6c', '7c', '8c', '9c', 'Tc', 'Jc', 'Qc', 'Kc',\n 'Ah','2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', 'Th', 'Jh', 'Qh', 'Kh',\n 'As','2s', '3s', '4s', '5s', '6s', '7s', '8s', '9s', 'Ts', 'Js', 'Qs', 'Ks',\n]\n","// import { clone, omit } from 'ramda'\n// import { PokerHand, Street, HandActionsByStreet } from '@pokerland/types'\n\n// import { getStreetsAfter, } from './pokerUtils'\n\n\n// const makeHandIter = (hand: PokerHand) => {\n\n// // state kept in closuer variables\n// const _hand = hand\n// let _curStreet: Street = 'PreFlop'\n// let _curActionIndex = 0\n// }\n\nexport const a = 'a'\n"]}