@betorigami/game-calculations 0.0.0-sha-3ed5bba-20251102230644 → 0.0.0-sha-ed0fc2e-20251102231249

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ var B;((a)=>{a.DICE="DICE";a.MINES="MINES";a.KENO="KENO";a.LIMBO="LIMBO";a.ADVANCED_DICE="ADVANCED_DICE";a.BACCARAT="BACCARAT";a.DIAMONDS="DIAMONDS";a.PLINKO="PLINKO";a.ROULETTE="ROULETTE";a.WHEEL="WHEEL"})(B||={});class u{gameId;constructor(t){this.gameId=t}getGameResult(t){return this.determineGameResult(t)}}import{Big as h}from"big.js";var Z=(t,e)=>e>=t.lower&&e<=t.upper,ee=(t)=>t.upper-t.lower+1,k=(t,e)=>e>t.lower&&e<t.upper,O=(t)=>t.upper-t.lower-1,w={min:0,max:1e4,effectiveRange:10001};class te extends u{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:t,edge:e,gameInputs:r}){let i=t.getRandomInt(w),o=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(r.mode){case"roll-between":return this.calculateRollBetweenPayoutMultiplier(r.bounds,o,e);case"roll-outside":return this.calculateRollOutsidePayoutMultiplier(r.bounds,o,e);case"roll-between-two":return this.calculateRollBetweenTwoPayoutMultiplier(r.firstBounds,r.secondBounds,o,e)}})(),outputs:{result:i.values},randomValues:i}}calculateRollBetweenPayoutMultiplier(t,e,r){if(!k(t,e))return h(0);let i=O(t),o=h(i).div(w.effectiveRange).mul(100);return h(100-r).div(o)}calculateRollOutsidePayoutMultiplier(t,e,r){if(Z(t,e))return h(0);let i=w.effectiveRange-ee(t),o=h(i).div(w.effectiveRange).mul(100);return h(100-r).div(o)}calculateRollBetweenTwoPayoutMultiplier(t,e,r,i){if(!k(t,r)&&!k(e,r))return h(0);let o=O(t)+O(e),n=h(o).div(w.effectiveRange).mul(100);return h(100-i).div(n)}}import v from"big.js";var re=["Clubs","Diamonds","Hearts","Spades"],ie=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],oe;((i)=>{i.PLAYER_WIN="PLAYER_WIN";i.TIE="TIE";i.BANKER_WIN="BANKER_WIN"})(oe||={});class ne extends u{constructor(){super("BACCARAT")}determineGameResult({generator:t,gameInputs:e,edge:r}){if(r!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let i=t.getRandomIntsWithReplacement({min:0,max:51,count:6}),o=i.values,n=o.slice(0,3),s=o.slice(3,6),d=[],m=0;for(let c of n.slice(0,2)){let p=this.mapRandomValueToCard(c),L=this.mapRandomValueToCardValue(c);d.push(p),m=(m+L)%10}let R=[],a=0;for(let c of s.slice(0,2)){let p=this.mapRandomValueToCard(c),L=this.mapRandomValueToCardValue(c);R.push(p),a=(a+L)%10}if(!this.isNaturalWin(m,a)){let c=this.shouldDrawThirdPlayerCard(m),p=null;if(c)p=this.mapRandomValueToCardValue(n[2]),d.push(this.mapRandomValueToCard(n[2])),m=(m+p)%10;if(this.shouldDrawThirdBankerCard(a,p))R.push(this.mapRandomValueToCard(s[2])),a=(a+this.mapRandomValueToCardValue(s[2]))%10}let f;if(m===a)f="TIE";else f=m>a?"PLAYER_WIN":"BANKER_WIN";let S=new v(0).add(e.playerBets.reduce((c,p)=>c.add(p.amount),new v(0))).add(e.tieBets.reduce((c,p)=>c.add(p.amount),new v(0))).add(e.bankerBets.reduce((c,p)=>c.add(p.amount),new v(0))),y=new v(0).add(e.playerBets.filter((c)=>f==="PLAYER_WIN").reduce((c,p)=>c.add(p.amount.mul(2)),new v(0))).add(e.tieBets.filter((c)=>f==="TIE").reduce((c,p)=>c.add(p.amount.mul(8)),new v(0))).add(e.bankerBets.filter((c)=>f==="BANKER_WIN").reduce((c,p)=>c.add(p.amount.mul(1.95)),new v(0)));return{isFinished:!0,payoutMultiplier:S.gt(0)?y.div(S):new v(0),outputs:{playerCards:d,playerHandValue:m,bankerCards:R,bankerHandValue:a,gameOutcome:f,result:i.values},randomValues:i}}validateGameInputs(t){if(t.playerBets.length===0&&t.tieBets.length===0&&t.bankerBets.length===0)throw new Error("Must place at least a single bet.");if(!t.playerBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid player bet.");if(!t.tieBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid tie bet.");if(!t.bankerBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid banker bet.")}mapRandomValueToCard(t){let e=re[Math.floor(t/13)],r=ie[t%13];return{suit:e,rank:r}}isNaturalWin(t,e){let r=[8,9];return r.includes(t)||r.includes(e)}mapRandomValueToCardValue(t){let e=t%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(t){return t<=5}shouldDrawThirdBankerCard(t,e){if(e===null)return t<=5;if(t<=2)return!0;if(t===3)return e!==8;if(t===4)return[2,3,4,5,6,7].includes(e);if(t===5)return[4,5,6,7].includes(e);if(t===6)return[6,7].includes(e);return!1}}import le from"big.js";var se;((s)=>{s.PAIR="PAIR";s.TWO_PAIR="TWO_PAIR";s.THREE_OF_A_KIND="THREE_OF_A_KIND";s.FULL_HOUSE="FULL_HOUSE";s.FOUR_OF_A_KIND="FOUR_OF_A_KIND";s.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(se||={});var ae={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},ue={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class ce extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??ae}constructor(t){super("DIAMONDS");this.multiplierOverrides=t}determineGameResult({generator:t,edge:e}){let r=t.getRandomIntsWithReplacement({min:0,max:6,count:5});if(e!==1&&!this.multiplierOverrides)throw new Error("Use multiplier overrides if an edge of 1% is not desirable");let i=r.values,o=this.calculatePayoutMultiplier(i);return{isFinished:!0,payoutMultiplier:le(o),outputs:{result:r.values},randomValues:r}}calculatePayoutMultiplier(t){let e=new Map;for(let o of t){let n=e.get(o)||0;e.set(o,n+1)}let r=[...e.values()].filter((o)=>o>1),i=this.classifyResult(r);return i===null?0:this.multipliers[i]}classifyResult(t){if(t.length>2)throw new Error(`Unexpected number of repeats ${t.length}`);let[e,r]=t;if(e===void 0)return null;if(r===void 0){let i=ue[e];if(i===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return i}return e===3||r===3?"FULL_HOUSE":"TWO_PAIR"}}import K from"big.js";var de;((r)=>{r.ABOVE="ABOVE";r.BELOW="BELOW"})(de||={});class pe extends u{constructor(){super("DICE")}determineGameResult({generator:t,edge:e,gameInputs:r}){let i=t.getRandomInt({min:0,max:1e4}),o=i.min,d=i.max-o+1-1,m=r.direction==="ABOVE"?d-r.selectedValue:r.selectedValue,R=new K(m).div(d).mul(100);return{isFinished:!0,payoutMultiplier:(r.direction==="ABOVE"?i.value>r.selectedValue:i.value<r.selectedValue)?new K(100-e).div(R):new K(0),outputs:{result:i.values},randomValues:i}}}import P from"big.js";var me;((o)=>{o.CLASSIC="CLASSIC";o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(me||={});var Be={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class fe extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??Be}constructor(t){super("KENO");this.multiplierOverrides=t;if(t)this.validateMultiplierOverrides(t)}determineGameResult({generator:t,edge:e,gameInputs:r}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(r.selectedNumbers.length===0)throw new Error("No numbers selected");if(r.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let s of r.selectedNumbers){if(s%1!==0)throw new Error("Only integers can be selected");if(s<0||s>39)throw new Error("Invalid number selected")}let i=t.getUniqueRandomInts({min:0,max:39,count:10}),o=r.selectedNumbers.filter((s)=>i.values.includes(s));return{isFinished:!0,payoutMultiplier:o.length>0?new P(this.multipliers[r.selectedNumbers.length][r.riskLevel][o.length]??0):new P(0),outputs:{result:i.values},randomValues:i}}validateMultiplierOverrides(t){for(let[e,r]of Object.entries(t)){let i=Number(e);for(let[o,n]of Object.entries(r))if(n.length!==i+1)throw new Error(`Invalid count of multipliers for tiles ${i} and risk level ${o}. Expected ${i+1}, but got ${n.length}`)}}}import E from"big.js";var H=(t,e)=>{return t.gt(e)?t:e};var N=(t,e)=>{return t.lt(e)?t:e};class Re extends u{constructor(){super("LIMBO")}determineGameResult({generator:t,edge:e,gameInputs:r}){let i=t.getRandomInt({min:1,max:4294967295}),o=i.max,n=new E(16777216),s=new E(1),d=new E(1e6),m=i.value,R=new E(m-1).div(o),a=(100-e)/100,f=n.div(R.mul(n).plus(1)).mul(a),S=H(s,N(f,d));return{isFinished:!0,payoutMultiplier:S.gte(r.targetMultiplier)?new E(r.targetMultiplier):new E(0),outputs:{randomMultiplier:S,result:i.values},randomValues:i}}}import b from"big.js";var x=(t,e)=>{if(e<0||t<0||e>t)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>t-e)e=t-e;let r=1;for(let i=1;i<=e;i++)r=r*(t-i+1)/i;return r};class he extends u{constructor(){super("MINES")}determineGameResult({generator:t,edge:e,gameInputs:r}){if(r.minesCount<=0||r.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(r.selectedTiles.length>25-r.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let s=t.getUniqueRandomInts({min:1,max:25,count:r.minesCount}),d=s.values.some((y)=>r.selectedTiles.includes(y)),m=r.hasCashedOut||d,R=(100-e)/100,a=new b(x(25-r.minesCount,r.selectedTiles.length)).div(new b(x(25,r.selectedTiles.length))),S=r.hasCashedOut&&!d?new b(R).div(a):new b(0);return{isFinished:m,payoutMultiplier:S,outputs:{result:s.values},randomValues:s}}}import{Big as ve}from"big.js";var V;((i)=>{i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})(V||={});var Se=[{rows:8,payout:{["LOW_RISK"]:[5.6,2.1,1.1,1,0.5,1,1.1,2.1,5.6],["MEDIUM_RISK"]:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],["HIGH_RISK"]:[29,4,1.5,0.3,0.2,0.3,1.5,4,29]}},{rows:9,payout:{["LOW_RISK"]:[5.6,2,1.6,1,0.7,0.7,1,1.6,2,5.6],["MEDIUM_RISK"]:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],["HIGH_RISK"]:[43,7,2,0.6,0.2,0.2,0.6,2,7,43]}},{rows:10,payout:{["LOW_RISK"]:[8.9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,8.9],["MEDIUM_RISK"]:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],["HIGH_RISK"]:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76]}},{rows:11,payout:{["LOW_RISK"]:[8.4,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8.4],["MEDIUM_RISK"]:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],["HIGH_RISK"]:[120,14,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,14,120]}},{rows:12,payout:{["LOW_RISK"]:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],["MEDIUM_RISK"]:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],["HIGH_RISK"]:[170,24,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,24,170]}},{rows:13,payout:{["LOW_RISK"]:[8.1,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8.1],["MEDIUM_RISK"]:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],["HIGH_RISK"]:[260,37,11,4,1,0.2,0.2,0.2,0.2,1,4,11,37,260]}},{rows:14,payout:{["LOW_RISK"]:[7.1,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7.1],["MEDIUM_RISK"]:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],["HIGH_RISK"]:[420,56,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56,420]}},{rows:15,payout:{["LOW_RISK"]:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],["MEDIUM_RISK"]:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],["HIGH_RISK"]:[620,83,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,83,620]}},{rows:16,payout:{["LOW_RISK"]:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16],["MEDIUM_RISK"]:[110,41,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41,110],["HIGH_RISK"]:[1000,130,26,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26,130,1000]}}];class Ee extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??Se}constructor(t){super("PLINKO");this.multiplierOverrides=t;if(t)this.validateMultiplierOverrides(t)}determineGameResult({generator:t,gameInputs:e,edge:r}){if(r!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let i=t.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),n=i.values.reduce((d,m)=>d+m,0);return{isFinished:!0,payoutMultiplier:new ve(this.multipliers.find((d)=>d.rows===e.numberOfRows)?.payout[e.riskLevel][n]??0),outputs:{result:i.values},randomValues:i}}validateMultiplierOverrides(t){for(let e of Array.from({length:9},(r,i)=>i+8)){if(!t.some((i)=>i.rows===e))throw new Error(`Multiplier overrides for ${e} rows is missing.`);let r=Object.values(V);for(let i of r){let o=t.find((n)=>n.rows===e&&n.payout[i]);if(!o)throw new Error(`Multiplier overrides for ${e} rows and ${i} risk level is missing.`);if(o.payout[i].length!==e+1)throw new Error(`Multiplier overrides for ${e} rows and ${i} risk level has an invalid length.`)}}}}import{Big as l}from"big.js";var C=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],g=[37,...C],U=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],z=[[0,1],[0,3],[0,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],F=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],$=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],q=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],j=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],D=[0,1,2,3,37],Y=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],J=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],A;((r)=>{r.EVEN="EVEN";r.ODD="ODD"})(A||={});var I;((r)=>{r.RED="RED";r.BLACK="BLACK"})(I||={});var _;((r)=>{r.LOW="LOW";r.HIGH="HIGH"})(_||={});var G;((i)=>{i.TOP="TOP";i.MIDDLE="MIDDLE";i.BOTTOM="BOTTOM"})(G||={});var M;((i)=>{i.FIRST="FIRST";i.SECOND="SECOND";i.THIRD="THIRD"})(M||={});class Q extends u{constructor(){super("ROULETTE")}determineGameResult({generator:t,gameInputs:e}){this.validateGameInputs(e);let r=t.getRandomInt({min:0,max:36}),i=r.value,o=this.determineBetOutcomes(e,i),n=this.calculateTotalBetAmount(e),s=this.calculateTotalPayoutAmount(o),d=n.gt(0)?s.div(n):new l(0);return{outputs:{betOutcomes:o,result:r.values},payoutMultiplier:d,isFinished:!0,randomValues:r}}validateGameInputs(t){if(t.straightBets.length===0&&t.splitBets.length===0&&t.streetBets.length===0&&t.cornerBets.length===0&&t.doubleStreetBets.length===0&&t.parityBets.length===0&&t.colorBets.length===0&&t.halfBets.length===0&&t.columnBets.length===0&&t.dozenBets.length===0)throw new Error("Must place at least a single bet.");if(!t.straightBets.every((e)=>e.amount.gte(0)&&this.isValidStraight(e.value)))throw new Error("Invalid straight bet.");if(!t.splitBets.every((e)=>e.amount.gte(0)&&this.isValidSplit(e.values)))throw new Error("Invalid split bet.");if(!t.streetBets.every((e)=>e.amount.gte(0)&&this.isValidStreet(e.values)))throw new Error("Invalid street bet.");if(!t.cornerBets.every((e)=>e.amount.gte(0)&&this.isValidCorner(e.values)))throw new Error("Invalid corner bet.");if(!t.doubleStreetBets.every((e)=>e.amount.gte(0)&&this.isValidDoubleStreet(e.values)))throw new Error("Invalid double street bet.");if(!t.parityBets.every((e)=>e.amount.gte(0)&&Object.values(A).includes(e.parity)))throw new Error("Invalid parity bet.");if(!t.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw new Error("Invalid color bet.");if(!t.halfBets.every((e)=>e.amount.gte(0)&&Object.values(_).includes(e.half)))throw new Error("Invalid half bet.");if(!t.columnBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.column)))throw new Error("Invalid column bet.");if(!t.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(M).includes(e.dozen)))throw new Error("Invalid dozen bet.")}isValidStraight(t){return C.includes(t)}isValidSplit(t){if(t.length!==2)return!1;if(!t.every(this.isValidStraight))return!1;return U.some(([e,r])=>e===t[0]&&r===t[1])}isValidStreet(t){if(t.length!==3)return!1;if(!t.every(this.isValidStraight))return!1;return F.some(([e,r,i])=>e===t[0]&&r===t[1]&&i===t[2])}isValidCorner(t){if(t.length!==4)return!1;if(!t.every(this.isValidStraight))return!1;return q.some(([e,r,i,o])=>e===t[0]&&r===t[1]&&i===t[2]&&o===t[3])}isValidDoubleStreet(t){if(t.length!==6)return!1;if(!t.every(this.isValidStraight))return!1;return Y.some(([e,r,i,o,n,s])=>e===t[0]&&r===t[1]&&i===t[2]&&o===t[3]&&n===t[4]&&s===t[5])}determineBetOutcomes(t,e){return{winningBets:{straightBets:t.straightBets.filter((r)=>r.value===e),splitBets:t.splitBets.filter((r)=>r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>r.values.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>this.isWinningDozenBet(r,e))},losingBets:{straightBets:t.straightBets.filter((r)=>r.value!==e),splitBets:t.splitBets.filter((r)=>!r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>!r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>!r.values.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>!r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>!this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>!this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>!this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>!this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>!this.isWinningDozenBet(r,e))}}}isWinningParityBet(t,e){if(e===0)return!1;let r=e%2===0?"EVEN":"ODD";return t.parity===r}isWinningColorBet(t,e){let r=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],i=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(r.includes(e)&&t.color==="RED")return!0;if(i.includes(e)&&t.color==="BLACK")return!0;return!1}isWinningHalfBet(t,e){if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(t,e){let r=[3,6,9,12,15,18,21,24,27,30,33,36],i=[2,5,8,11,14,17,20,23,26,29,32,35],o=[1,4,7,10,13,16,19,22,25,28,31,34];if(r.includes(e)&&t.column==="TOP")return!0;if(i.includes(e)&&t.column==="MIDDLE")return!0;if(o.includes(e)&&t.column==="BOTTOM")return!0;return!1}isWinningDozenBet(t,e){if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}calculateTotalBetAmount(t){return new l(0).add(t.straightBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.splitBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.streetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.cornerBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.doubleStreetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.parityBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.colorBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.halfBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.columnBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.dozenBets.reduce((e,r)=>e.plus(r.amount),new l(0)))}calculateTotalPayoutAmount(t){return new l(0).add(t.winningBets.straightBets.reduce((e,r)=>e.plus(r.amount.mul(36)),new l(0))).add(t.winningBets.splitBets.reduce((e,r)=>e.plus(r.amount.mul(18)),new l(0))).add(t.winningBets.streetBets.reduce((e,r)=>e.plus(r.amount.mul(12)),new l(0))).add(t.winningBets.cornerBets.reduce((e,r)=>e.plus(r.amount.mul(9)),new l(0))).add(t.winningBets.doubleStreetBets.reduce((e,r)=>e.plus(r.amount.mul(6)),new l(0))).add(t.winningBets.parityBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.colorBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.halfBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.columnBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0))).add(t.winningBets.dozenBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0)))}}class X extends u{constructor(){super("ROULETTE")}determineGameResult({generator:t,gameInputs:e}){this.validateGameInputs(e);let r=t.getRandomInt({min:0,max:37}),i=r.value,o=this.determineBetOutcomes(e,i),n=this.calculateTotalBetAmount(e),s=this.calculateTotalPayoutAmount(o),d=n.gt(0)?s.div(n):new l(0);return{outputs:{betOutcomes:o,result:r.values},payoutMultiplier:d,isFinished:!0,randomValues:r}}validateGameInputs(t){if(t.straightBets.length===0&&t.splitBets.length===0&&t.streetBets.length===0&&t.cornerBets.length===0&&t.basketBets.length===0&&t.doubleStreetBets.length===0&&t.parityBets.length===0&&t.colorBets.length===0&&t.halfBets.length===0&&t.columnBets.length===0&&t.dozenBets.length===0)throw new Error("Must place at least a single bet.");if(!t.straightBets.every((e)=>e.amount.gte(0)&&this.isValidStraight(e.value)))throw new Error("Invalid straight bet.");if(!t.splitBets.every((e)=>e.amount.gte(0)&&this.isValidSplit(e.values)))throw new Error("Invalid split bet.");if(!t.streetBets.every((e)=>e.amount.gte(0)&&this.isValidStreet(e.values)))throw new Error("Invalid street bet.");if(!t.cornerBets.every((e)=>e.amount.gte(0)&&this.isValidCorner(e.values)))throw new Error("Invalid corner bet.");if(!t.basketBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid basket bet.");if(!t.doubleStreetBets.every((e)=>e.amount.gte(0)&&this.isValidDoubleStreet(e.values)))throw new Error("Invalid double street bet.");if(!t.parityBets.every((e)=>e.amount.gte(0)&&Object.values(A).includes(e.parity)))throw new Error("Invalid parity bet.");if(!t.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw new Error("Invalid color bet.");if(!t.halfBets.every((e)=>e.amount.gte(0)&&Object.values(_).includes(e.half)))throw new Error("Invalid half bet.");if(!t.columnBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.column)))throw new Error("Invalid column bet.");if(!t.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(M).includes(e.dozen)))throw new Error("Invalid dozen bet.")}isValidStraight(t){return g.includes(t)}isValidSplit(t){if(t.length!==2)return!1;if(!t.every(this.isValidStraight))return!1;return z.some(([e,r])=>e===t[0]&&r===t[1])}isValidStreet(t){if(t.length!==3)return!1;if(!t.every(this.isValidStraight))return!1;return $.some(([e,r,i])=>e===t[0]&&r===t[1]&&i===t[2])}isValidCorner(t){if(t.length!==4)return!1;if(!t.every(this.isValidStraight))return!1;return j.some(([e,r,i,o])=>e===t[0]&&r===t[1]&&i===t[2]&&o===t[3])}isValidDoubleStreet(t){if(t.length!==6)return!1;if(!t.every(this.isValidStraight))return!1;return J.some(([e,r,i,o,n,s])=>e===t[0]&&r===t[1]&&i===t[2]&&o===t[3]&&n===t[4]&&s===t[5])}determineBetOutcomes(t,e){return{winningBets:{straightBets:t.straightBets.filter((r)=>r.value===e),splitBets:t.splitBets.filter((r)=>r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>r.values.some((i)=>i===e)),basketBets:t.basketBets.filter((r)=>D.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>this.isWinningDozenBet(r,e))},losingBets:{straightBets:t.straightBets.filter((r)=>r.value!==e),splitBets:t.splitBets.filter((r)=>!r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>!r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>!r.values.some((i)=>i===e)),basketBets:t.basketBets.filter((r)=>!D.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>!r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>!this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>!this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>!this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>!this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>!this.isWinningDozenBet(r,e))}}}isWinningParityBet(t,e){if(e===0||e===37)return!1;let r=e%2===0?"EVEN":"ODD";return t.parity===r}isWinningColorBet(t,e){let r=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],i=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(r.includes(e)&&t.color==="RED")return!0;if(i.includes(e)&&t.color==="BLACK")return!0;return!1}isWinningHalfBet(t,e){if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(t,e){let r=[3,6,9,12,15,18,21,24,27,30,33,36],i=[2,5,8,11,14,17,20,23,26,29,32,35],o=[1,4,7,10,13,16,19,22,25,28,31,34];if(r.includes(e)&&t.column==="TOP")return!0;if(i.includes(e)&&t.column==="MIDDLE")return!0;if(o.includes(e)&&t.column==="BOTTOM")return!0;return!1}isWinningDozenBet(t,e){if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}calculateTotalBetAmount(t){return new l(0).add(t.straightBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.splitBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.streetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.cornerBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.basketBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.doubleStreetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.parityBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.colorBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.halfBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.columnBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.dozenBets.reduce((e,r)=>e.plus(r.amount),new l(0)))}calculateTotalPayoutAmount(t){return new l(0).add(t.winningBets.straightBets.reduce((e,r)=>e.plus(r.amount.mul(36)),new l(0))).add(t.winningBets.splitBets.reduce((e,r)=>e.plus(r.amount.mul(18)),new l(0))).add(t.winningBets.streetBets.reduce((e,r)=>e.plus(r.amount.mul(12)),new l(0))).add(t.winningBets.cornerBets.reduce((e,r)=>e.plus(r.amount.mul(9)),new l(0))).add(t.winningBets.basketBets.reduce((e,r)=>e.plus(r.amount.mul(7)),new l(0))).add(t.winningBets.doubleStreetBets.reduce((e,r)=>e.plus(r.amount.mul(6)),new l(0))).add(t.winningBets.parityBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.colorBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.halfBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.columnBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0))).add(t.winningBets.dozenBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0)))}}class we extends u{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Q,this.americanGame=new X}determineGameResult(t){let{gameInputs:e,...r}=t;if(t.edge===2.7&&e.type==="european"){let i=this.europeanGame.determineGameResult({...r,gameInputs:e.inputs}),{betOutcomes:o}=i.outputs;return{...i,outputs:{type:"european",betOutcomes:o,result:i.outputs.result}}}if(t.edge===5.3&&e.type==="american"){let i=this.americanGame.determineGameResult({...r,gameInputs:e.inputs}),{betOutcomes:o}=i.outputs;return{...i,outputs:{type:"american",betOutcomes:o,result:i.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}import{Big as ye}from"big.js";var T;((i)=>{i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})(T||={});var W;((n)=>{n[n.TEN=10]="TEN";n[n.TWENTY=20]="TWENTY";n[n.THIRTY=30]="THIRTY";n[n.FORTY=40]="FORTY";n[n.FIFTY=50]="FIFTY"})(W||={});var Le=[{segments:10,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[0,1.9,0,1.5,0,2,0,1.5,0,3],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,9.9]}},{segments:20,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[1.5,0,2,0,1.8,0,2,0,2,0,1.5,0,2,0,2,0,3,0,2,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19.8]}},{segments:30,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[1.5,0,2,0,1.5,0,2,0,3,0,1.7,0,1.5,0,2,0,1.5,0,2,0,1.5,0,2,0,4,0,1.5,0,2,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29.7]}},{segments:40,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[2,0,1.5,0,3,0,2,0,1.5,0,2,0,1.5,0,3,0,2,0,1.5,0,1.6,0,1.5,0,3,0,2,0,1.5,0,2,0,1.5,0,3,0,2,0,1.5,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.6]}},{segments:50,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[1.5,0,2,0,1.5,0,3,0,1.5,0,2,0,1.5,0,2,0,1.5,0,3,0,1.5,0,2,0,1.5,0,2,0,1.5,0,3,0,1.5,0,2,0,1.5,0,2,0,1.5,0,5,0,1.5,0,2,0,1.5,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49.5]}}];class be extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??Le}constructor(t){super("WHEEL");this.multiplierOverrides=t;if(t)this.validateMultiplierOverrides(t)}determineGameResult({generator:t,gameInputs:e,edge:r}){if(r!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(!Object.values(W).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(T).includes(e.riskLevel))throw new Error("Invalid risk level");let i=t.getRandomInt({min:0,max:e.segments-1}),o=this.multipliers.find((d)=>d.segments===e.segments);if(o===void 0)throw new Error(`Multiplier not found for segment ${e.segments}`);let n=o.payout[e.riskLevel][i.value];if(n===void 0)throw new Error(`Payout not found for risk ${e.riskLevel} and value ${i.value}`);return{isFinished:!0,payoutMultiplier:new ye(n),outputs:{result:i.values},randomValues:i}}validateMultiplierOverrides(t){let e=Object.values(W).filter((r)=>typeof r==="number");for(let r of e){if(!t.some((o)=>o.segments===r))throw new Error(`Multiplier overrides for ${r} segments is missing.`);let i=Object.values(T);for(let o of i){let n=t.find((s)=>s.segments===r&&s.payout[o]);if(!n)throw new Error(`Multiplier overrides for ${r} segments and ${o} risk level is missing.`);if(n.payout[o].length!==r)throw new Error(`Multiplier overrides for ${r} segments and ${o} risk level has an invalid length.`)}}}}export{W as WheelSegments,T as WheelRiskLevel,be as Wheel,re as VALID_SUITS,ie as VALID_RANKS,we as Roulette,V as PlinkoRiskLevel,Ee as Plinko,B as OrigamiGame,he as Mines,Re as Limbo,me as KenoRiskLevel,fe as Keno,u as Game,de as DiceDirection,pe as Dice,se as DiamondsResultType,ce as Diamonds,oe as BaccaratOutcome,ne as Baccarat,te as AdvancedDice};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@betorigami/game-calculations",
3
- "version": "0.0.0-sha-3ed5bba-20251102230644",
3
+ "version": "0.0.0-sha-ed0fc2e-20251102231249",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",