{"_id":"@allemandi/gacha-engine","_rev":"16-9d291c7c8faa66715ef2da7b578822f8","name":"@allemandi/gacha-engine","dist-tags":{"latest":"1.0.8"},"versions":{"0.1.0":{"name":"@allemandi/gacha-engine","version":"0.1.0","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.1.0","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"dc71b118c00a62479435901648358577b7137ed6","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.1.0.tgz","fileCount":19,"integrity":"sha512-PK3AJHu07LYhoymNjkPVblepFbYCyxWqNi0cBPdF3zWj/uDdGavpHfkZFfKxbzUWkkXgM4+xGQbdwUbstKUtXg==","signatures":[{"sig":"MEQCIGjHiT1fLGKowGUmD8NoAQCkwOSPudyJbovxFEU9Qz19AiA2ojFkuDSP4bP/r7iFuAn1Sz2xGGY9BAX7N38hg0NOPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18266},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.1.0_1750795017885_0.8775780631169621","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@allemandi/gacha-engine","version":"0.1.1","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.1.1","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"2a3e1daad792773efbf42ef19e043bfe6af3cf57","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.1.1.tgz","fileCount":14,"integrity":"sha512-NdTspJ5wV7YtVhg1+SZuGVPgBrqjAedernY/WpKSWcR1Ke57W/XDiYqUhTU4baViHoihDsCNlHAULtTaduKgSQ==","signatures":[{"sig":"MEUCIDAnQipGqnu2N+XLy5tfMyL+bbCDfK0yXxn9r40MEn/0AiEA0PcoZBOMVkFSIdDXHxloMhll961ZxPE8YVqoUfDTElk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28278},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.1.1_1750796126191_0.25903550931646","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@allemandi/gacha-engine","version":"0.2.1","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.2.1","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"9e43e16cfd13f47796e0fad70687824508b95775","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.2.1.tgz","fileCount":14,"integrity":"sha512-KsZRLPTsVrS9DhovjEBZVDEzizTfeVbDTBz3SqYLIChUL0AXJHAffotSIsiJtQrPhIg1+hjG+IqfV0ltAjITdQ==","signatures":[{"sig":"MEYCIQCu58+POf+Z4AHveIIzvBbvBuPjlCfQS82+JL5iBVn/jgIhALw9Gk/+CT8F9FVCfQgeQxs5Hb5GmYGtvSOPkhCeCFE2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44377},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.2.1_1750799192814_0.38009748611262983","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@allemandi/gacha-engine","version":"0.2.2","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.2.2","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"0e907c78d3ca06a0c0f9430279b3cef50168a5f8","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.2.2.tgz","fileCount":14,"integrity":"sha512-0+zwwqMHlqoF8X5pYUz3pBswG9C/1R7uIKJsotezU3V7+lZP60ddZ3ppWjfsJCOPtdyN5ZUwgWa8dITiDKhpjA==","signatures":[{"sig":"MEUCIFxplkpxYpfp+B8TIrSroA0xmuTXQiYDzBPVAJd2AaYbAiEAjm6t7P1zJNUD1Kazm5h6IpKEtM8lX4SDrXOy3AgcXDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44960},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.2.2_1750800576512_0.7141297335084473","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@allemandi/gacha-engine","version":"0.2.3","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.2.3","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"29d5c818ea25b6957f6ebca29d400cd371c6bf7a","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.2.3.tgz","fileCount":14,"integrity":"sha512-tUbM43JD7a4N8Xf2HmNVooXGab745QWilYfaoC3N2FzvjvmZdIVGDBYbWSJqzkqlvHtwyopyMJq3bQLsDHQS1g==","signatures":[{"sig":"MEYCIQChr4/plOHxx+yvMQLzpBvw5dMD7MAJszvDeD+/SuFKzAIhAP4wG7PJfTF0y43OeJOuQUQGANVNizfFnVqn2dn17NuM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82043},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.2.3_1750802128258_0.7909189470890219","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@allemandi/gacha-engine","version":"0.3.3","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.3.3","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"d9fd897582aedc7a52dc8e6327ae8150259cfb7d","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.3.3.tgz","fileCount":14,"integrity":"sha512-bPADwhrjgk81ckM56HOM/5UZe4/hQykhJya+VdTbfV9YA1zytbQqWK4YpyeWFao0/jlrpBDfkpSrQvECUQs2tA==","signatures":[{"sig":"MEUCIQC9t58CpbfvkOOjbQuakTWhqcQzSaZLBMHKmdZAeobSJwIgEgUs5A+Jx8r9IR5IhRtiORwioX3UXnm4wESn34IUHQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79293},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.3.3_1750805343501_0.7597393641145735","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@allemandi/gacha-engine","version":"0.3.4","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.3.4","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"c10c00435d0f64e150f692f9a1a03bbc5b3d82af","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.3.4.tgz","fileCount":14,"integrity":"sha512-huOsqIrfGd5YfCz/i0j5ycyGBzZ4o7FmLWBddgzNxq11nTYu2CN+2FU28pl6tig3Pck81MOzyUaNhMAa8fPPlQ==","signatures":[{"sig":"MEUCIF0oukzrcYIhw2UW6WZBTFcsFQO+VhPsxvRXAG5FL8Z/AiEAmq2cJfF0SO7JRZ/Jmp8zsC8DygcgsqUAOFiOpfbDQ0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79983},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.3.4_1750807157673_0.048634483639550696","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@allemandi/gacha-engine","version":"0.3.6","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@0.3.6","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"3fa001d6f0f606843fe239a3c117685528e91330","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-0.3.6.tgz","fileCount":14,"integrity":"sha512-VmFJv/gUWwCu/D8KTLKM9NtQ6CGT5HP0wTTuAKp1iZi0CS8R2BwUA6LTLG4DFGuHHtnDXv1OeeeRbHFMwVSWsw==","signatures":[{"sig":"MEYCIQCktQDe8AaoF078jcL5N1GxBVTkkDULC28Fq7+Oryh3bgIhAMXUvKzXRu26Z3TQnAbAPBxLuWCUcPMpFub/7Pm9KL0A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81009},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_0.3.6_1750808702669_0.8082770842555518","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@allemandi/gacha-engine","version":"1.0.0","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@1.0.0","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"e013e9772130d8ac8b5555b44420767a4a849acc","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.0.tgz","fileCount":14,"integrity":"sha512-NQSkpoqqtLmpQcX+3WK38KKWzf43Sy5lQkNSf0vT0G84dkeRWteYm27rN9u2vhOIR5iQW2d402jrt27a9EVT2Q==","signatures":[{"sig":"MEQCIDJLnii3kaUQm2R9TReR+GdfkdWK96T+K6+xaK8zxvlRAiBxe+JWgrtZBgGJGu7tzlV1unFF3zBRom+s/81rqg8yUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80880},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","actor":{"name":"allemandi","type":"user","email":"myallemandi@outlook.com"},"email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_1.0.0_1750809192933_0.40003827035713546","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@allemandi/gacha-engine","version":"1.0.2","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@1.0.2","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"dist":{"shasum":"7d577ebb0a211157bcc866ca7ba2650951c3d36c","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.2.tgz","fileCount":14,"integrity":"sha512-AFYJNNYkPPtJYeV7vkjC3p0enDmR6tZm41WJa9/St+qbPX+xAV6EVl/4uljbp7I5C+AttZGANrn9BFfl5jEx5g==","signatures":[{"sig":"MEYCIQDfZ5RbkSPbcc4XT5/KNCQvQ7fKjElljCjHbS0KnitouQIhAIcYHWgCueIByhwiMRCVGxQr88Fau5mYso15HunOtHt/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80878},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"allemandi","email":"myallemandi@outlook.com"},"repository":{"url":"https://github.com/allemandi/gacha-engine.git","type":"git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2025 Daniel Lam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.1","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_1.0.2_1764885707312_0.20068748111402024","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@allemandi/gacha-engine","version":"1.0.3","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@1.0.3","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"homepage":"https://github.com/allemandi/gacha-engine#readme","bugs":{"url":"https://github.com/allemandi/gacha-engine/issues"},"dist":{"shasum":"be2a59cb309ca42c29980dd4838ea96eaff2ec13","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.3.tgz","fileCount":12,"integrity":"sha512-h9tXtOLxJppBE4YrbI2ZU3eGL+41/vcoP7Ai87p0SRRHl6dNOwPys7eaCUaRhHU/6PDmUS9TnYd7rlCdGg1mMg==","signatures":[{"sig":"MEQCIF8d5K9zfIbx2tvrW4ArvMQFfCSZ3ulAfnMzHBPBKcvoAiARYYBkW9ytbp1MSerKlpTW/zBDZO6IOl73tKvpzVFMyA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allemandi%2fgacha-engine@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":80878},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"gitHead":"10886ae5aa0e980d12d585bfd9cc1e1e4c3740c5","scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"microbundle --name AllemandiGachaEngine","dev:test":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:822990c6-5447-4134-a7a8-3b242e79cb11"}},"repository":{"url":"git+https://github.com/allemandi/gacha-engine.git","type":"git"},"_npmVersion":"11.7.0","description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.1","vitest":"^3.2.4","typescript":"^5.8.3","microbundle":"^0.15.1","@typescript-eslint/parser":"^8.35.0","@typescript-eslint/eslint-plugin":"^8.35.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_1.0.3_1765503719613_0.3483475056015066","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@allemandi/gacha-engine","version":"1.0.4","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@1.0.4","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"homepage":"https://github.com/allemandi/gacha-engine#readme","bugs":{"url":"https://github.com/allemandi/gacha-engine/issues"},"dist":{"shasum":"346c400758c22163f0ef37bff0ac7f6199ec4fe9","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.4.tgz","fileCount":12,"integrity":"sha512-/nopYlXUmC8eHjJ4dJCjI4moRmcc64AyfdHH4ZaQ4WsaKpDAFXZdYcACPWmeeXMrReriTwXldUcreLXxPtVw2Q==","signatures":[{"sig":"MEUCIQDsI0H54gXv731XkDpbbDLDw04EhuIWSQsOGgboWFTjowIgJyY1Wz/PolCtfhoUfDgyiUUcFRomXWYDHjF8BsJhFEo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allemandi%2fgacha-engine@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85256},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"gitHead":"a48036b3d7b70ecafc579238ee3615d5b722732d","scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"rollup -c","dev:test":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:822990c6-5447-4134-a7a8-3b242e79cb11"}},"repository":{"url":"git+https://github.com/allemandi/gacha-engine.git","type":"git"},"_npmVersion":"11.11.1","description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"_nodeVersion":"20.20.1","_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","eslint":"^10.0.3","rollup":"^4.59.0","vitest":"^4.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.8.3","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.57.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_1.0.4_1773591013738_0.2942045588663518","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@allemandi/gacha-engine","version":"1.0.5","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@1.0.5","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"homepage":"https://github.com/allemandi/gacha-engine#readme","bugs":{"url":"https://github.com/allemandi/gacha-engine/issues"},"dist":{"shasum":"7297c15540300402a2746b689303bf1d71416f07","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.5.tgz","fileCount":10,"integrity":"sha512-R4KR1As2RC+FHkdsRWkkIfdphBJ+Kd2uajWrxuJwMUB1scWVvTAbfYVmw14SuBRWtCZzwyn0FQVEdM3mp+kEjQ==","signatures":[{"sig":"MEYCIQDjhWkyfbmBm9gTYP119QHdjK6LQcv7N1cXr1KUGyBeSgIhAKrLE73q6MNyenLGIHoa/+qd4pyWM8ck7tHRn6FP3FwM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allemandi%2fgacha-engine@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85278},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"gitHead":"1c64d0e25bbd0a0b720034d12b65711ee61f9fa6","scripts":{"lint":"eslint .","test":"vitest run","build":"rollup -c","dev:test":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:822990c6-5447-4134-a7a8-3b242e79cb11"}},"repository":{"url":"git+https://github.com/allemandi/gacha-engine.git","type":"git"},"_npmVersion":"11.11.1","description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","eslint":"^10.0.3","rollup":"^4.59.0","vitest":"^4.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.8.3","rollup-plugin-dts":"^6.4.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.57.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_1.0.5_1773595634124_0.1106335937816676","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@allemandi/gacha-engine","version":"1.0.6","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@1.0.6","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"homepage":"https://github.com/allemandi/gacha-engine#readme","bugs":{"url":"https://github.com/allemandi/gacha-engine/issues"},"dist":{"shasum":"795cab2c964de02564db36c0b43386c0353fcba2","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.6.tgz","fileCount":10,"integrity":"sha512-QcqtOUH7LGTCh3B+TOdPAJNIBCkXt2zCmyIWdXuzmrsTK6jyIcDbHKg7YT2lnsXVGX5PnqZcjlCQcjqC3HxvKQ==","signatures":[{"sig":"MEQCIHgrH9dyIWJrLZfy/ZKmMIFyMWgvFbAJM6+/h8L6U/WwAiAnytHFxSCNlAGxi57FFMIGKkwd7YG5zA63MCWVe/Pgqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allemandi%2fgacha-engine@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85380},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"gitHead":"0edd8b78924a4bd3808717036398b02e28242260","scripts":{"lint":"eslint .","test":"vitest run","build":"rollup -c","dev:test":"vitest","test:dist":"node test/smoke-cjs.cjs && node test/smoke-esm.mjs && node test/smoke-umd.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:822990c6-5447-4134-a7a8-3b242e79cb11"}},"repository":{"url":"git+https://github.com/allemandi/gacha-engine.git","type":"git"},"_npmVersion":"11.11.1","description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"_nodeVersion":"20.20.1","_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","eslint":"^10.0.3","rollup":"^4.59.0","vitest":"^4.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.8.3","rollup-plugin-dts":"^6.4.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.57.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_1.0.6_1773712167940_0.003062743962503278","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@allemandi/gacha-engine","version":"1.0.7","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","_id":"@allemandi/gacha-engine@1.0.7","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"homepage":"https://github.com/allemandi/gacha-engine#readme","bugs":{"url":"https://github.com/allemandi/gacha-engine/issues"},"dist":{"shasum":"7061918e2a7c598bc59ed6ffc4a67dd2fc1efa76","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.7.tgz","fileCount":10,"integrity":"sha512-OtEXbbatYu4ghdg/nmrEAG5Gc8llzAkz67O8cvgxdLrJX/goQ6kG/RY6XIh+4vf7azg18Vo8Pra+LH6nike9Kg==","signatures":[{"sig":"MEUCIGqQTFr6Cm+NkwAYoZ5janrBBNp/78CiuRk5w/hpnWQIAiEAyLH7n8bqhFqJJRjz0+pf9GPOYnvJnZHI1Y3sHImp12s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allemandi%2fgacha-engine@1.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85471},"main":"dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","module":"dist/index.module.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"gitHead":"aca364efaa83a0646b25c4bbaeb067a767e6ae2d","scripts":{"lint":"eslint .","test":"vitest run","build":"rollup -c","dev:test":"vitest","test:dist":"node test/smoke-cjs.cjs && node test/smoke-esm.mjs && node test/smoke-umd.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:822990c6-5447-4134-a7a8-3b242e79cb11"}},"repository":{"url":"git+https://github.com/allemandi/gacha-engine.git","type":"git"},"_npmVersion":"11.12.1","description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","eslint":"^10.0.3","rollup":"^4.59.0","vitest":"^4.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","rollup-plugin-dts":"^6.4.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.57.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/gacha-engine_1.0.7_1775562093829_0.37031699931980144","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@allemandi/gacha-engine","version":"1.0.8","description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","main":"dist/index.cjs","module":"dist/index.module.js","types":"./dist/index.d.ts","unpkg":"dist/index.umd.js","source":"src/index.ts","exports":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.module.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"repository":{"type":"git","url":"git+https://github.com/allemandi/gacha-engine.git"},"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","type":"module","scripts":{"build":"rollup -c","test":"vitest run","test:dist":"node test/smoke-cjs.cjs && node test/smoke-esm.mjs && node test/smoke-umd.cjs","dev:test":"vitest","lint":"eslint ."},"keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"devDependencies":{"@eslint/js":"^10.0.1","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^16.0.3","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/eslint-plugin":"^8.57.0","@typescript-eslint/parser":"^8.57.0","eslint":"^10.0.3","globals":"^17.4.0","rollup":"^4.59.0","rollup-plugin-dts":"^6.4.0","tslib":"^2.8.1","typescript":"npm:@typescript/typescript6@^6.0.2","typescript-native":"npm:typescript@^7.0.2","vitest":"^4.1.0"},"gitHead":"ad8c8d9f66352e7ad8a5a8becbb81805beaa2bda","_id":"@allemandi/gacha-engine@1.0.8","bugs":{"url":"https://github.com/allemandi/gacha-engine/issues"},"homepage":"https://github.com/allemandi/gacha-engine#readme","_nodeVersion":"22.23.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-DXq43b8e7ZBaa57QoYV7WCv8q2Mk4vA+L85Kbbea2LdmiOrTHLYib1dPaZg75QZqv64LXK7TiT7++3syphSN2g==","shasum":"66fa9becc2ea8cb69ed723c45f1aed1d6e754e1f","tarball":"https://registry.npmjs.org/@allemandi/gacha-engine/-/gacha-engine-1.0.8.tgz","fileCount":10,"unpackedSize":85553,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@allemandi%2fgacha-engine@1.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD3fv8ofiFjRe13c06AUjZO+00FPxAtayU9HYf8q82TqgIhAJexPBfxo3RCeNUJrLP0QrbJ6nNh3n5+PzTiuL/c+kDc"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:822990c6-5447-4134-a7a8-3b242e79cb11"}},"directories":{},"maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gacha-engine_1.0.8_1786480425065_0.02291969819278772"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-24T19:56:57.791Z","modified":"2026-08-11T20:33:45.561Z","0.1.0":"2025-06-24T19:56:58.066Z","0.1.1":"2025-06-24T20:15:26.384Z","0.2.1":"2025-06-24T21:06:32.976Z","0.2.2":"2025-06-24T21:29:37.001Z","0.2.3":"2025-06-24T21:55:28.443Z","0.3.3":"2025-06-24T22:49:03.699Z","0.3.4":"2025-06-24T23:19:17.887Z","0.3.6":"2025-06-24T23:45:02.854Z","1.0.0":"2025-06-24T23:53:13.121Z","1.0.2":"2025-12-04T22:01:47.458Z","1.0.3":"2025-12-12T01:41:59.765Z","1.0.4":"2026-03-15T16:10:13.889Z","1.0.5":"2026-03-15T17:27:14.350Z","1.0.6":"2026-03-17T01:49:28.083Z","1.0.7":"2026-04-07T11:41:33.961Z","1.0.8":"2026-08-11T20:33:45.222Z"},"bugs":{"url":"https://github.com/allemandi/gacha-engine/issues"},"author":{"name":"allemandi","email":"69766017+allemandi@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/allemandi/gacha-engine#readme","keywords":["gacha","gacha-engine","rate-up","probability","simulation","gacha-simulator","lootbox","random-drop","gaming","game-probability","rolls","typescript","type-safe","drop-rate"],"repository":{"type":"git","url":"git+https://github.com/allemandi/gacha-engine.git"},"description":"Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.","maintainers":[{"name":"allemandi","email":"myallemandi@outlook.com"}],"readme":"# 📖 @allemandi/gacha-engine\n\n[![NPM Version](https://img.shields.io/npm/v/@allemandi/gacha-engine)](https://www.npmjs.com/package/@allemandi/gacha-engine)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/allemandi/gacha-engine/blob/main/LICENSE)\n\n> **Practical, type-safe toolkit for simulating and understanding gacha rates and rate-ups.**  \n> Supports `\"weighted\"` and `\"flatRate\"` modes for different gacha strategies.  \n> Works in Node.js and browsers – supports ESM, CommonJS, and UMD.\n\n---\n\n<!-- omit from toc -->\n## 🔖 Table of Contents\n\n- [✨ Features](#-features)\n- [🛠️ Installation](#️-installation)\n- [🚀 Quick Usage Examples](#-quick-usage-examples)\n- [📘 API](#-api)\n  - [Constructor](#constructor)\n  - [Methods](#methods)\n- [🧪 Tests](#-tests)\n- [🔗 Related Projects](#-related-projects)\n- [🤝 Contributing](#-contributing)\n\n---\n\n## ✨ Features\n\n- 🎲 **Roll simulation** – Perform gacha rolls with weighted or flat-rate logic  \n- 🔍 **Probability analysis** – Drop rates, cumulative probabilities, target probabilities  \n- 📐 **Multi-rarity support** – Flexible rarity-based or item-based probability distributions  \n- ⚡ **Performance optimized** – Efficient with cached calculations  \n- 🛡️ **Type-safe** – Written in TypeScript with strict configuration validation\n\n---\n\n## 🛠️ Installation\n```bash\n# Yarn\nyarn add @allemandi/gacha-engine\n\n# NPM\nnpm install @allemandi/gacha-engine\n```\n\n\n## 🚀 Quick Usage Examples\n\n**ESM (Weighted Mode)**\n```js\nimport { GachaEngine } from '@allemandi/gacha-engine';\n\nconst pools = [\n  {\n    rarity: 'SSR',\n    items: [\n      { name: 'Super Hobo', weight: 1.0, rateUp: true },\n      { name: 'Broke King', weight: 0.5 },\n      { name: 'Cardboard Hero', weight: 0.5 }\n    ]\n  },\n  {\n    rarity: 'SR',\n    items: [\n      { name: 'Cold Salaryman', weight: 2.5, rateUp: true },\n      { name: 'Numb Artist', weight: 1.25 },\n      { name: 'Crying Cook', weight: 1.25 }\n    ]\n  },\n  {\n    rarity: 'R',\n    items: [\n      { name: 'Regular Joe', weight: 5.0 },\n      { name: 'Normal Person', weight: 5.0 }\n    ]\n  }\n];\n\nconst rarityRates = {\n  SSR: 0.01,\n  SR: 0.05,\n  R: 0.94\n};\n\nconst engine = new GachaEngine({ mode: 'weighted', pools, rarityRates });\n\nconsole.log('10 rolls:', engine.roll(10).join(', '));\n\nconst rate = engine.getItemDropRate('Super Hobo');\nconsole.log('Drop rate for Super Hobo:', (rate * 100) + '%');\n// (1.0 / 2.0) * 0.01 = 0.005 → 0.5%\n\nconst cumulative = engine.getCumulativeProbabilityForItem('Super Hobo', 300);\nconsole.log('Probability in 300 rolls:', (cumulative * 100).toFixed(1) + '%');\n// ~77.8%\n\nconsole.log('Rolls for 50% chance:', engine.getRollsForTargetProbability('Super Hobo', 0.5));\n// 139\n\nconsole.log('Rate-up items:', engine.getRateUpItems().join(', '));\n// Super Hobo, Cold Salaryman\n```\n\n**CommonJS (Flat Rate Mode)**\n```js\nconst { GachaEngine } = require('@allemandi/gacha-engine');\n\nconst pools = [\n  {\n    rarity: 'SSR',\n    items: [\n      { name: 'Superior Rat', weight: 0.008, rateUp: true },\n      { name: 'Dumpster King', weight: 0.002 }\n    ]\n  },\n  {\n    rarity: 'SR',\n    items: [\n      { name: 'Sleepy Chef', weight: 0.04 }\n    ]\n  },\n  {\n    rarity: 'R',\n    items: [\n      { name: 'Unknown Student', weight: 0.95 }\n    ]\n  }\n];\n\nconst engine = new GachaEngine({ mode: 'flatRate', pools });\n\nconsole.log('Roll x5:', engine.roll(5).join(', '));\n\nconst dropRate = engine.getItemDropRate('Superior Rat');\nconsole.log('Drop rate for Superior Rat:', (dropRate * 100) + '%');\n// 0.8%\n\nconst cumulative = engine.getCumulativeProbabilityForItem('Superior Rat', 200);\nconsole.log('Chance after 200 rolls:', (cumulative * 100).toFixed(1) + '%');\n// 79.9%\n\nconst rollsFor50 = engine.getRollsForTargetProbability('Superior Rat', 0.5);\nconsole.log('Rolls for 50% chance:', rollsFor50);\n// 87\n\nconsole.log('Rate-up items:', engine.getRateUpItems().join(', '));\n// Superior Rat\n```\n\n**UMD (Browser, Weighted Mode)**\n```html\n<script src=\"https://unpkg.com/@allemandi/gacha-engine\"></script>\n<script>\n  const { GachaEngine } = AllemandiGachaEngine;\n\n  const engine = new GachaEngine({\n    mode: 'weighted',\n    rarityRates: {\n      SSR: 0.02,\n      SR: 0.08,\n      R: 0.90\n    },\n    pools: [\n      {\n        rarity: 'SSR',\n        items: [\n          { name: 'Trash Wizard', weight: 0.5 },\n          { name: 'Park Master', weight: 1.5, rateUp: true }\n        ]\n      },\n      {\n        rarity: 'SR',\n        items: [\n          { name: 'Street Sweeper', weight: 1.0 },\n          { name: 'Bench Philosopher', weight: 3.0, rateUp: true }\n        ]\n      },\n      {\n        rarity: 'R',\n        items: [\n          { name: 'Bus Stop Ghost', weight: 5.0 }\n        ]\n      }\n    ]\n  });\n\n  const rate = engine.getItemDropRate('Park Master');\n  const rolls = engine.getRollsForTargetProbability('Park Master', 0.75);\n  const cumulative = engine.getCumulativeProbabilityForItem('Park Master', 200);\n\n  console.log('1x Roll:', engine.roll());\n  console.log('Drop rate for Park Master:', (rate * 100).toFixed(2) + '%');\n  // 1.5 / 2.0 * 0.02 = 0.015 → 1.50%\n\n  console.log('Cumulative 200 rolls:', (cumulative * 100).toFixed(1) + '%');\n  // \"95.1%\"\n\n  console.log('Rolls for 75% chance:', rolls);\n  // 92\n\n  console.log('Rate-up items:', engine.getRateUpItems().join(', '));\n  // \"Park Master, Bench Philosopher\"\n\n  console.log('All items:', engine.getAllItemDropRates().map(i => i.name));\n  // [\"Trash Wizard\", \"Park Master\", \"Street Sweeper\", \"Bench Philosopher\", \"Bus Stop Ghost\"]\n</script>\n```\n\n## 📘 API\n\n### Constructor\n`new GachaEngine(config: GachaEngineConfig)`\n\nCreates a new GachaEngine instance with validation.\n\n**Config Options:**\n\n- Weighted Mode \n```ts\n{\n  mode: 'weighted'; // (default)\n  rarityRates: Record<string, number>; // Required: must sum to 1.0\n  pools: Array<{\n    rarity: string; // Must match a key in `rarityRates`\n    items: Array<{\n      name: string;\n      weight: number;\n      rateUp?: boolean;\n    }>\n  }>\n}\n```\n- Flat Rate Mode\n\n```ts\n{\n  mode: 'flatRate';\n  pools: Array<{\n    rarity: string; // Used only for categorization\n    items: Array<{\n      name: string;\n      weight: number; // Interpreted as direct probability (must sum to 1.0 across all items)\n      rateUp?: boolean;\n    }>\n  }>\n}\n```\n\n### Methods\n\n#### Rolling\n`roll(count?: number): string[]`\n- Simulate gacha rolls and returns item names\n- `count`: Number of rolls to perform (default: 1)\n- Returns array of item names\n\n#### Analysis\n`getItemDropRate(name: string): number`\n- Returns the effective drop rate for a specific item\n  - In weighted mode:\n    - Computed as `dropRate = (item.weight / totalPoolWeight) × rarityBaseRate`\n  - In flat rate mode:\n    - `Returns the item's defined probability.\n  - Throws if the item does not exist.\n\n`getRarityProbability(rarity: string): number`\n- Returns the base probability for a given rarity tier\n  - Only in \"weighted\" mode.\n  - Throws in flatRate mode.\n\n`getCumulativeProbabilityForItem(name: string, rolls: number): number`\n- Calculates probability of getting the item at least once in N rolls\n- Uses formula: `1 - (1 - dropRate)^rolls`\n\n`getRollsForTargetProbability(name: string, targetProbability: number): number`\n- Calculates the minimum number of rolls needed to reach a specific probability of pulling a given item.\n- Returns `Infinity` if item has zero drop rate\n- Returns 1 if target probability ≥ 1.0\n\n#### Utility\n`getRateUpItems(): string[]`\n- Returns names of all items marked with `rateUp: true`\n\n`getAllItemDropRates(): Array<{name: string, dropRate: number, rarity: string}>`\n- Returns a list of all items with:\n  - name: Item name\n  - dropRate: Calculated drop probability\n  - rarity: Associated rarity (or \"flatRate\" in flat mode)\n\n## 🧪 Tests\n\n> Available in the GitHub repo only.\n\n```bash\n# Run the test suite with Vitest\nyarn test\n# or\nnpm test\n```\n\n## 🔗 Related Projects\nCheck out these related projects that might interest you:\n\n**[@allemandi/embed-utils](https://github.com/allemandi/embed-utils)**\n- Fast, type-safe utilities for vector embedding comparison and search.\n\n**[Embed Classify CLI](https://github.com/allemandi/embed-classify-cli)**\n- Node.js CLI tool for local text classification using word embeddings.\n\n## 🤝 Contributing\nIf you have ideas, improvements, or new features:\n\n1. Fork the project\n2. Create your feature branch (git checkout -b feature/amazing-feature)\n3. Commit your changes (git commit -m 'Add some amazing feature')\n4. Push to the branch (git push origin feature/amazing-feature)\n5. Open a Pull Request","readmeFilename":"README.md"}