{"_id":"dicerollerts","_rev":"62-a706a887aa65a4af0403a00375332242","name":"dicerollerts","dist-tags":{"latest":"0.59.1"},"versions":{"0.1.0":{"name":"dicerollerts","version":"0.1.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.1.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"b512a85e00da12118a1aa70f8c8f2edfd441c390","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.1.0.tgz","fileCount":15,"integrity":"sha512-OAQl6rt5qEpZyCeB+Eup1zi4xhLp7V1Sv2n8GOpQAXma/Do7BqmR8/v1OEI0ralMByuCh+6qRfTiJZ56r67XYg==","signatures":[{"sig":"MEYCIQDw4JACZQP+4iVU/eexU7ijXnnhq2aroycR3+TOBocshwIhAO4aKyl5t04emNBplMGSyPAJmfe+WNOgmn/9N0eLtd6V","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNK/wACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqXiw//fg0UF4D9s0HHv4xHkS6jmMV6Hevma7a2TvzI6lPaUroAhlHw\r\nDRSg8wQmLSg5TAx/n9QRKmFZhQFZqPNDfhAU8dDy9mwf8BCgNF9Yi6+5ZsAe\r\nueIvapEG705X8ocLRvaswPctjmhVUDE6eIhc3Eor6fHqt5XaeJzybSJTmGDc\r\nH6EOrLzW2O1KHD8YlEl54GggyQZp6gyBwt0SLFwoilMqer0r17mAGZkDH68X\r\nWcUpYwe6v8N0OQUtdOV9fgOXyHPjaDgUoezZ7/GZuz1gaDC4KiZy2nFn9rZy\r\nb4Tr2zVUJXwJfHGv/efgx33QVCpTQ/4AsWM+33zusETDx4HLhMckIQoav1yt\r\nys12LhjnZHVbdPefHpyX5pH2xHm3lDgUgcHsJ+4nwS4S/2bc/JGzA1RATRqt\r\nHdmf7+5nXlHzLu1l+4En5cQhr7by6uUHWLRmbo5HeovvRMdoADDPnfYdn31T\r\nYjSVjEYCgLflLkv45AubfMVUMoOHbhw5fivq3VHbMbPr97ZK/Vukx6OEfqC9\r\n5F18+jPAbqysy/ZnUb/k9h+4E0W8Pd/vPF8OyjKL8JiaGg4IMlrSCiU0zbL1\r\nbaQcYZhyAhzcTuIzXbgdZ9quTQyZtnSNLpC31g7XL8ufWVcrPEM+hxV4LXdS\r\nbKCZxIi7zFi09tNlecUK7+BEnsRhTk5iCrY=\r\n=0Inc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.1.0_1681174512013_0.5947436294244486","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"dicerollerts","version":"0.2.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.2.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"211cf1340c3effe6482c645c4820bb6ac6c0a246","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.2.0.tgz","fileCount":17,"integrity":"sha512-vAdX/cnJw9liWvV/Zp8Gblj87rM2VWAXE45S+U5jJaBUWvou+6H/eGc4ci5T2kJeBsGGxW2RvKc+gpZUm/Kpzg==","signatures":[{"sig":"MEYCIQD3ilH/sm2J5NYomtZzma8gPZ4tlqRbkxJQWEgz3xMc0gIhAK5DNeEp0BJWS5HXJ8DuFblyxR5/Ir3yhpERXWXOmAvC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49614,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNMVdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpbURAAnzfcJCm+LFwbZikZR+v4EVBHjY9vHMc633WBWkMHd9Pr/DhU\r\nr2KdlwEDLi6JHCFm5xreY7Px/W4zPABMeOib6EAcXf/VjUjts+gLm38VswB6\r\nJNZx5vQZ6Qrzrhkb5x6/qkO0HsmdGt015M/RDut+bVqwJCaFKU6SEfyb3hL4\r\n+QqDLk6zd4yFnFNGCVxFewkD/H36i9CWnUtUl9ihbpACdsDcJ31hVjRYIC/6\r\nv9TVvis2nz21AUtS4piZ0Ol3okQLOcbikOakrqwZBOjBu0p2iM/YCbU6Kwh6\r\nyEsPcoOsQRr2Io3dXmLLmadJ5HJJWnNOgi1D+it8JT59G4P9PUwAP6CQTax6\r\n8Mnl3xJBvkPk7i9OqmwLdZSXL6aP5lxil8FK3KwunlPVmAAWLu8C9x63iqrv\r\n0ACBfUphS+0h1+Da9AKiRI6A3g70dAfKBMpJnfDh409nYeYqxRLoGh0tKuh3\r\ngW6A/MAlxWpe7lF0RyRh43nSIxh9tDaT9Jl4+TA4fpTYUF75aJtI7y+kL4vT\r\nQxTxCCnV2xZvwgPFa2xqZxnUzezDW5bwDBbAnINCS4ojlZjWKSdMgbIW+iVZ\r\naaDJHD9uNGohn2sPJY2d1CH4Z+UVLfA0AxH7c/tkC2bStGyel62D2oehCGlY\r\n74ZHAnG/X8yc/utTJQXTvEOQCo1tyNEN4so=\r\n=m1Dq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.2.0_1681179997360_0.21630619710106003","host":"s3://npm-registry-packages"}},"0.3.0":{"name":"dicerollerts","version":"0.3.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.3.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"c318649ba3525905f469886479197d9e35d2d31d","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.3.0.tgz","fileCount":17,"integrity":"sha512-ET9EO4uLfmRY1U2bOi8jpW62ONbSGWR6FS7qrukGy9XfOqwTWfYDgGDZk+tIvRyrSTaZbxhlDpjD8EZ40yVAgw==","signatures":[{"sig":"MEUCIQDr+czeIHhW5weFoxFmqh2MeORep0srnchGQDn+GJ7ehgIgeAFtWofEfKzna8UDER5FGSfrbHBA+IXFZoo9hAEdhOU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNMuhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoZHA/9EdqKzbcqgwxXggn0nLTTqobUObW20PU3gi3oolublN8d4hNR\r\nlnmu5EwAo0RzgsuBaS1dR3zbasqWV5e4CgQBBtrAfW2VC8KIcAgaOzL+B0mK\r\n2UxBNFZ1ZSyLVUP/+cPTgi9sFwM9GIcw1rw/Wd8Uznbfoax+9Ep+lfW34E55\r\nK7radbxi+XXnAq9U7Ldrq6XmO5uT+iUgYldJA5+u+jNlKOb/+fV+w9mWoPqH\r\nnYbtQdawj6ZFx/zZa4psdnf36RQ01jx+EnitTw3+D9BplJofIzqhSfolKtLE\r\n5qwQhQLSU++QnvIigmXdIv/qcZtxVqjft/IQZ80OpRD0LAXp7aUkv0iWRUsT\r\nAkhAIon04xUIjbc04MVgDDoH0wYDnKa9YVDB4kmsi5SkOp86HmyuVi+Z9aN5\r\nQoAUeenwf+xvhtLrf0zRQGL1+nkwieqlwBPZkkBLCJYuOk7Tc+3HONuIovQj\r\nOQTui1PCMzowdLgdqZmkh8/FWdS+o2Pc2K6jyLlBXHV+YyYJ74d4zl/xZHRX\r\nkvTPjtkHD1wtEDUuVdrma83tzMw6AKST8H/p7NhzTpjD9hj14koHm3OB0E18\r\nH8yJTWN24r/rcU8TpCE4D8WhIItaPJBi8hD4je7VHsEZVKy2Xi85qzR450WV\r\n1IecQBCJgrt1ikPoAkzOCLWXF+2DBMVjQso=\r\n=6eXP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.3.0_1681181601577_0.08289770880097369","host":"s3://npm-registry-packages"}},"0.4.0":{"name":"dicerollerts","version":"0.4.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.4.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"02a8091ae363fe77cdf0d4a4b20f8f0ae8e19197","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.4.0.tgz","fileCount":17,"integrity":"sha512-qtNGEkzfz/TPXnVm4gC/yJL9Lnh4um47mFT/1tUrnL4qFx85Enubegbdwb/ue8li/rC9rutLQSWzN4DOHw96Ig==","signatures":[{"sig":"MEUCIFQK712oPAgWo9/5Qr2Xss8vSWQjUQ6tSjMTLSV7dOjSAiEAwNJAqtzTag6vYUHS/HenrKsU2KcFCTRPhMozcyI1j7g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47988,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkOKg+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoj5xAAl/a76/FJVw38yznkCS0mVWFxdJjg+ucgPbZAc1xgD6UTRJaQ\r\nARfzE2kvuIjmN9U757fekz8qCe1r+odzFUKSyE5iuiyJxItkduFtV6m5GSLV\r\nikZnarjO0ERD6lXFNnbZBzGxkY7nEeOaFK9ri7HO5UTLbdKrOE4BKyCUaqZ2\r\n7VyyxxT7vHMQ4bs+B+/ChDHEybXHNQYWAvp2Ff/q0L58kR8g4BSxUtkdKy/D\r\nTt9c5aTgaZ/7r3upTctoiNhd45VbhDEN88nryJECeWQA6dJ5IfSlOep+q7VS\r\nJ1/flDcEhwwVfERYL4E4vTfYnG/RUwgUBhw3GvfFPYcMIZ76W2xUkYyXeh93\r\nxsexO5cCI5PzEzJSBFVmxzrzc7j1dJ0D8ByYVrJ6EgnnWl4wEDmHtORkXte5\r\n93yc8I2HskNE352BbRbef8gbfxLiPgKkrIyuWLJ9K2WdU1aenGi37OqgmnZi\r\nRDgTRTxNL+6UvYMiUcN9LKiHcBdk5SaCkH51gQqKGGWChZVY2/zwLrQvtkdw\r\nEk9gQjZI3s+to8Z0m0MuKOIroFTiyXNLzZqqcd1lh5SEuOXO/Es7XcoEvZZY\r\nNXC2AbnOmfwZcXNTlrUSmyG525pspKZE7mYOOglvPGF/NoBFo5rCuUkUQlNu\r\nLr5TdeFPOB2nogtrGvGSHeY00KnetUITGH0=\r\n=/7Mh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.4.0_1681434686657_0.07159770950572275","host":"s3://npm-registry-packages"}},"0.5.0":{"name":"dicerollerts","version":"0.5.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.5.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"05f569648184e4971e41815ffaa758020ebe2c34","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.5.0.tgz","fileCount":17,"integrity":"sha512-CuVgw6uCtVP+oIy85puew4mCFhVnDHjZFqloPxy7PQ+0jIidKA/4HaGleeYrxHmTapOIdrLpvkNtNceJzZhhdQ==","signatures":[{"sig":"MEQCIHBjasS7VzhpWdOdYs4XebqgSfz3c1vaMnN4nie4GkF1AiAfA/oFcsKX882dp8O/una5jjyEe6lL9b6Ej0uX0rq+EA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkPJH7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoZURAAlZr+VI98dFEczVQhUUW4LHaQ/w7rn6I5GBbmZrGh0vuHcZX4\r\n0sQ5mmkw5LFtyhLzd8uEV1PSEGMJV33hLYDGCPq+HfDeMIjGRUUPFPBuvUhY\r\nkR18E7I+FQppSwVtexdndhtEz1psEw8XA4B74NylqY4c8r34UhljAI2w2G46\r\n1oK6IK2W26KD5JdorHzFsUSp4Az9WsW7jciy5O1KawA0h9F6GF8mH1JfIu3R\r\njb0fAqhcLGIL5TkSh/I9lDiE4p83y7JYNS/6mLperfDnUheWPYgqlBtmEsOr\r\nzvDULjUNatqQ1qgXjsniiQMQD7ymi7ytOwa9w4wGsU5yqHYM0Wp9hULJ3a57\r\nzhLTpHBKuvr4HpotwxfChn4wsozq+VH5VHJKNCqL2hc94A2XCmgvCIaGAkmK\r\npu6AyR99iS3Wkalm3zSzToXLlggGuHXEo4+sEAuVjOqHsIQ1dXPrPofD8W6S\r\n6B/u56BwfdE6Bi+pUySPHhDjuelOd6htFKavkRHYnVMIpUAD8b4NZV2W/1BH\r\nEAaaFzVIRd/VWlmR/wNqJyIJQUEqeiWaK8ePcWlZNy7GGXjgmQb9UDeeefmg\r\nSp6JX4RSIzcD0nUG0aFyQsTXUCuu7AEbe9qj0msGB0YSNYZSW2ErnGP2J+aF\r\nC/gKJIBEiQ+5EGPwe9WN+m3Nguy42tyPMuA=\r\n=th9D\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.5.0_1681691131059_0.4109122991210614","host":"s3://npm-registry-packages"}},"0.6.0":{"name":"dicerollerts","version":"0.6.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.6.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"4e798a023d550d1f3bb7b8866bc8efdb46357cb2","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.6.0.tgz","fileCount":17,"integrity":"sha512-f7fItXPRmlh6vh4ipgMX5FFMfdBtnHEFDDMvT+A1vrbUnWFcL52jpZqIvNTI9L/rSOrmP3QzSAnqvSVJLCvn+A==","signatures":[{"sig":"MEUCIQDVa/WW20+3xi8oElU0Xe7jl1+HTgyjZy/WR0VJDNEAeAIgRsS6XAx/0A96fdHFlc9Ru/ZxVByT79EUEjB7vn4wYhk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkTWUIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQbQ//XskqjuQGw1QjR+VSLkVOXMD7yTfbDx9twLyvi8Pq0M+hi3T0\r\nnTc8IHqxJnzsqToqMgJd1ibAhpMsEvNCTqjO1WOJx9nDRGjktdydNmUV5io2\r\nwb36CnKP4cZJmE+U8xEoPULeMpvFE5zkZUQdk+uje0sMVAYTiKGcDaTfgmLR\r\nBeWIlydUpWQBpv1/nB079rx6MDzblqHG0Y4hrPQYRYyvmZaDNloUjT5hhtCZ\r\nHAl/4wxZcOdxC65/08gHUy0se7I7WiVpe2Y+lBPYG89kpNWmlIb4aTSsUZlL\r\n+vTBAVIad+Ftik6jPkXu6D8YUAdTeQtXiTcdQW2LrtXf9QMCYOJ33i1o/7IS\r\naCgB2xOuBKlMTbUZHfShO6hoP+IXHAFQGqEfpGqECZGQJE7ECAqFaUwK7550\r\nhk1w3jEPudhMmRwrPLP32bEIBX06yNw1Mq7/haTig5Kq8+wjJQnX31twhF2F\r\nrQfXayIs/yjUTWd/95q8dHjC1gSniB3OzGtG+xDlY3FqAFrZgiypVZigYugz\r\naNFls+qKvprobKWFhYzWxvE5HkWGhEbqwjFi9QvVQZmsOWemgoWmZaAluHgM\r\nDw2zAidtwEufHev72feW5qPTTtkz7tN2NhvfQY7B24+vGhzTWKSTPPiClkl3\r\nbQ/2gq639SaP4/qtWM/ayxIbdoVZHvAExB0=\r\n=B5Dn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.6.0_1682793736016_0.2688250179278384","host":"s3://npm-registry-packages"}},"0.6.1":{"name":"dicerollerts","version":"0.6.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.6.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"7c86350c9b8851c8d2a24264d43155dfa17a5f10","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.6.1.tgz","fileCount":17,"integrity":"sha512-z6wvlMMPYSXI6ZLtHSR00yPt9TeX4dLh5+Gh1K5jAXN8OCSPLEsjb1HMOkIoAbmWCfXqVNAfFb7fG+CclaUA2A==","signatures":[{"sig":"MEQCIA0FE1U3H3P3RsYHTMm6SQdNa7WIW55ixvn9qGCirP+lAiA0zNGhCxU3xnGKCwUn3KMh/yHZ6RIP+4qcHqCvvXdAYQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkTXduACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo2Og//SxI3gugcOjIOY8ntZ3rgHo+iORa77Fiv6G22ceedzFaPzFcx\r\nUPKg0BEltp9gv1XC7rEr+HVnkd9eHZVeY8y0NR2lkQrBSQisIm0+uNZD4Kmy\r\nre8vYF/VE/IFSt+7IR+3A6zRoNndE1lb1OxaDMSrOqeInQNchGZG7uEu54Nj\r\nEM0lvJI/ucRYmek7+gAp3e82pm/5gZoe7Ff/pggLvevvWmFdAO29GPxcfzuB\r\nGnyd3QTijvMP5OLjCXhGrla17ABSFK4xqsLqqMrZQqRPcFa++knpbZboDeti\r\neQFsYGqVO9X/lRHbnf1uKaXrboYqexmwOaEWWX7XEtVFetP0mq0X1CD8RXrI\r\npZLsNOVml1n1NHRo0A3bIrDyAyRsGcG405oQu9bm5b3/SiBw1Cs1SzoyK3L8\r\nTHgOFkLjC4F6huBe08ARpFWHyqUS/hmLh/nhM0zJJxu06ygFKL8aHqbrVVva\r\nf4abjOjXB1IjE0Bv8n/3i/kVxK7WjfmFgdXWOAcdQhSsa2yf2OulthZv5irW\r\nDEaXQTxzaa4wxs1md2JH8M7headTWClnUgreEgaLyma8cKZ9TegB2i6Ifd4P\r\niC6is/wbyZqL4WE8DVyY7BRNvk+LDzuDW6Mw096kc/l0WNO1+DsHlpkdygv+\r\n7tF0Nm7y7IgFtokvVW7F2+eMwU4Tm8LfjAI=\r\n=GfGp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.6.1_1682798446493_0.7889046384816873","host":"s3://npm-registry-packages"}},"0.6.2":{"name":"dicerollerts","version":"0.6.2","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.6.2","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"20770886b49a24588601713ed64868c06d84f032","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.6.2.tgz","fileCount":17,"integrity":"sha512-y7v7RKUPnBsB0BucBMf+NJ6WmbgeBJWoqa7+itZiZJbB/IUKTlzeHFg66C+rho2xS3ZfQZzuje1YzxLEdf4/yw==","signatures":[{"sig":"MEQCIE3hzbjKr0NP788HRykpljZ8U3iP2z9kI+ImBb5n659AAiAnWXYPVesEknKo/ojx+xc5zELluVfF+quM7FmGdxod9w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkTXjhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr7qhAAjDCZVV7PiX8dW0Cb5W2P99YcbiFzX3OlfJt0xED7fMWKSCen\r\nvzUOa0mkNx0DnDNKCiepnLNk51VBprzxSt3RAtZf/tOo7eO3kRpNdjen4mcC\r\nAlmsh9i4jCTE2ZLDP+QXGseUS1LuzFz3vYP0BjsqhaGQ6lj2Islb2BOoXzE+\r\nfyK+TC3AFLhvk6R7Lq4ROlS+B/K70619/yXnfXa5y492zrD0291ggG1rdDGm\r\n2PGeo1Z4ptFsOaPKvFJYPvN2gH+gaTca8IDIU5TSMeYB/9r0YmbjeQRJ/cx4\r\nvvwkXtmb7W8dor5Xr8h//xnHD3v9g586ist1BfMroQls/YNM9hOKvTFdt0hy\r\nLwTMT/Cdl/r5rHP+N4ELeMwSpkvzmqc30q1+y+ayGrgZOezqycBdZ2O8lkrh\r\nQ7hHpdQ9jq60t1giXJk1jn3GeLK6YXqr/UP5X7pFXx0WalV0ipe7SXTnA4uE\r\nGfxyPcBo3mWh3w0pQSJCvFA49loiCTl3nI9csFk9yLddCUSGsqLFlRbac5H1\r\n7SeXPF1p6h9bg74NfDRjhMwYRacTKuOyzvAu9KGrW5tApB0u1QdXFDLCLbzV\r\n/UmJyTle0OI6Ip8sbQeKEf2E3cpDu+cOP5Ek/g4Sy8GHo/8UQcRXkECp6gaa\r\nsIvoULIvtEyB/4FYRj+awuzsO13i3C/bwco=\r\n=0MZ2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"test":"jest","build":"tsc","watch":"tsc --watch","coverage":"jest --coverage","npm:prep":"yarn build && cp README.md package.json dist","test:watch":"jest --watch","npm:publish":"yarn npm:prep && (cd dist && yarn publish --access public)"},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"directories":{},"dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.1","ts-jest":"^29.1.0","happy-dom":"^9.1.0","typescript":"^5.0.3","@types/jest":"^29.5.0","@types/node":"^18.15.11","eslint-plugin-n":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-plugin-promise":"^6.0.0","@happy-dom/jest-environment":"^9.1.7","@typescript-eslint/eslint-plugin":"^5.43.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.6.2_1682798817134_0.87695121068568","host":"s3://npm-registry-packages"}},"0.7.0":{"name":"dicerollerts","version":"0.7.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.7.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"857d585b2c6a312d2c5bb8b3fd72f37b836c8f9c","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.7.0.tgz","fileCount":58,"integrity":"sha512-bGcUxNphFCbfHLx3xyq6TtuMnOyhOih8sy1oLscFjXOBpIZo1grJNgj/uEIvWVrCeNd4ZaSM4bNC+SGUiC3RFA==","signatures":[{"sig":"MEUCIFA+LpVYybCffH/ltRgCO8EdInxA+jqfTS93YDYCidIOAiEAictzKI1dieRH/HCO0qEahkV4cChtVXFnVOMXqOCM5Ao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":916136},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"a33914b51987a2073ed1e751e8c6807e703d7659","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.7.0_1775665836429_0.7292797192948823","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"dicerollerts","version":"0.8.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.8.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"1498b79ca23225cac2c74e960bdbddececd558fd","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.8.0.tgz","fileCount":12,"integrity":"sha512-/9aQjKzmrLvmCi+XCE1zpK5OlrwuZj19Bo6KJWCPZcSH0lp3REfa8dGqdOvIJybCBwDVDh4fH0FMjpubAg5h7Q==","signatures":[{"sig":"MEUCIQC+RGXoB296fiSelgE8mvAuytcC60C3n7rWnMwGI8zyZgIgcl9VphfR/JH3G3XD8zJa86hXGhDyEBN75CJPB6nj7vI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88954},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"d2174d80e41be1716d6a28f5e23ec88eea61f76b","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.8.0_1775670250561_0.13802007813082984","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"dicerollerts","version":"0.8.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.8.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"f68a9ad21ee7497939a2cd590bf86be784e28c47","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.8.1.tgz","fileCount":12,"integrity":"sha512-suyzr1dV+H9BuDa2a/rmhfPXaQ34eFFRRlQLTrdG+kC+RkqnGKqsW3WPiW18fy3WPgxjv074hurZdW/rCuAEdQ==","signatures":[{"sig":"MEUCIQCYx5Oto1G9/xcSCxmHXbNwW9yEkbnXwiXYWeFzDnBYTQIgPFXL1jFXKZ6Dgv0b+P6pmnklb1idgdWoeWU2FHETYdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89085},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"1b42248362385bc791dc08f2defee679e338024a","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.8.1_1775671833077_0.9538970913572455","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"dicerollerts","version":"0.9.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.9.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"8ccd0027a81ce69b0e2da3817a3b576c6b397ebf","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.9.0.tgz","fileCount":16,"integrity":"sha512-tWswRwRwdu0uANvqmLEEJEd2I27Jg9lDFi6/AFKjZWN1sR8ls+KYeJ9/5RB2X9kMjasGyLs9Vyi4hQEvKG25Mg==","signatures":[{"sig":"MEQCIHbZD1Za7zeDac8kP1SRTHaMe2Pofag5ir0z/TiSZqXfAiBSBCHWNjReiJxx7g83Fp4TOnmnpapQvqCn8/4Fvj2ZWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115240},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"761fc63122f819ef35e3bd5ecaef643fa7c6ac1c","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.9.0_1776353792773_0.12786388935804882","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"dicerollerts","version":"0.10.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.10.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"93b672768063d566d784517b3b53ac5b238b2a04","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.10.0.tgz","fileCount":16,"integrity":"sha512-2WSSRaEKqPBuQnDWLMoa8aBUnshoJYWDfjS//X+RrSZd26l9C1OGI2w3OsF/B8cHu1Ibw+nwIWnNvno3xBk6eA==","signatures":[{"sig":"MEQCIG20NJFsxbrlXKJa79KFIiuhoYzjjzmAV/lTFrtkUYuiAiARLWj98Ssp+3ZsyYjpYh9YmQ4D3b24OsWufRzSm2O/TQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124405},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"ab9e8fcbbd69899174bc15a471dbabb631be39a2","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.10.0_1776367418546_0.2075511608506333","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"dicerollerts","version":"0.11.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.11.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"60efff1a239aa58f65cdb9db1c9fb36ba5ab69f8","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.11.0.tgz","fileCount":16,"integrity":"sha512-XWiJuQSSZCX8wosRrQ90t6D0yuxNO35K9NoRAgcTe+56KqwnT8RmoaJuv83qh8ZTY53HHimhpdtce2PqSTTE3Q==","signatures":[{"sig":"MEUCIBPJCCBtzAYfAxeeiPY0DeEtLaWR2ORPRtvxEKz/JAxrAiEA4mrj9QoMw35UlgjbKLImDLZ1WiYcYEG3emY3UJzUb9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145124},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"d300404bb22b78d83d58db3c74e27844cb1d3d7a","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.11.0_1776374577526_0.6663850196776211","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"dicerollerts","version":"0.12.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.12.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"e9111cfd6787185df678c0662b0f083afecb0cc6","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.12.0.tgz","fileCount":18,"integrity":"sha512-dk8GEXS+PZQlBjLMd/Af74P7EvELi1XafyasGv0JUttS4c+3X6YmFGBeiR7LGlbVarDgEsNcnUfivaXwUD6SwQ==","signatures":[{"sig":"MEUCIDnwfrdxL3qEa+ltWGdYePx+V0690N/xDKvDUgUvs+IVAiEA4cFE2hLaa5vaFWjz6CTa6FoNZT1Aacf6yy2dPZFlHOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166899},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"496349533ce746dc0645f69a0a89101aa0876525","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.12.0_1776375641339_0.7867544233622628","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"dicerollerts","version":"0.13.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.13.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"59146c178bbc9a6c6f9587400c605bf221070e22","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.13.0.tgz","fileCount":19,"integrity":"sha512-ZKMcTD3hQaWnypPo9RnhsfCAJhMFAGiVd5AGR/oWZeAsRkx3KWrzuO6JLFHvbjNjHr0AXDLncz6zCElEG53d1Q==","signatures":[{"sig":"MEQCID0FNs8/3vfhVsMVuwRWxC+lUkfMPurYbSf15WODJKSSAiBmcW8MKByyZbzT4xfBrq3EufExg58T0j+ZUBzHn5tFKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181874},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"ee9099fae22a04c06495ae5f37da3983fd5112cb","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.13.0_1776392200256_0.9168395423380378","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"dicerollerts","version":"0.15.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.15.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"d0b346342ded2fb41fd6d48da8530bf3d6bb6385","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.15.0.tgz","fileCount":19,"integrity":"sha512-RFNDDF1A0JVLI1MU0GogM4cPuw0ba9tTjfpNMcMAhfe4um6tzWVGGbBfmMkoOLrz9/7ZJ077KO1ilQet7KtoaQ==","signatures":[{"sig":"MEUCIGS9CCZBeYjephnpn8acXN8Gl0nV6E94PUZU7vj8Fv+UAiEAmy36sJgGqX2m1t3DyLpWnv+7bZCYycRi46dp8GKHPqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216907},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"5e9937e3755c7c526010679093e05b48e12a40ce","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.15.0_1776446053875_0.20829602486832233","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"dicerollerts","version":"0.16.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.16.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"3188cfe6777cc1020e5c8a92af4bf5764c0b454e","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.16.0.tgz","fileCount":19,"integrity":"sha512-JuHORB5XGl50GupxwLF1Tb+ZEFY3ywL60HWS77g+mREY+twId7eEnKV0sxselB4+I2USkZ2P7KlXpbKsp1EZGw==","signatures":[{"sig":"MEYCIQD5divzG1qHj15ZfvY0nO5+Exk+aJ6NYoP9Zuyqb9fZAQIhAIhHdIFFNUhHnLA/kpRQN7XTymzUxz5ENP9qc+ERdKvx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225107},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"6bc72b5cf59466db1e4effdfcf9d19574be49a19","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.16.0_1776451808927_0.8832180981059119","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"dicerollerts","version":"0.16.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.16.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"5032f58a03dffb20f4cd7784c51ab0ac8e1b2a27","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.16.1.tgz","fileCount":19,"integrity":"sha512-m3wmLrAP1c//vXeSGsFcKYS4M7SBwQfA+CO0+r5lvJiMf3hpSc6UctFryT+Y0oIKJ5kHOzSaVTy684C8LGiRoQ==","signatures":[{"sig":"MEYCIQDtJw8TQ+fyEbsWAd2qGVPPztPUjec4YDnU+OvzODDH5QIhAKqZds2ODpumdeijhYrVi1/jix0F1xrQTOMj+XHbPCms","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225245},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"3a0e703171b26496080826329179025485164bac","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.16.1_1776477060211_0.21388301224330197","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"dicerollerts","version":"0.17.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.17.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"7605101602f8da3034cd25a3910ace3f37d05e27","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.17.0.tgz","fileCount":20,"integrity":"sha512-v/IopDGAMWtOWxni2O5mSNqiJ6oUDqdMZnAIBLG63Ho+sMC0LoJM39U+JqG+xcA+sAamCoocudbdGrWbh41jDg==","signatures":[{"sig":"MEYCIQDlbTcEIy6zXdcycT90uUgjw8J3VI4Q2XBEMsu/eX+tgAIhAOJMf90WDPGaCyNam4wFX+cWJMoYuK7tXXoB0evI+LML","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252062},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"c9b06845f015ef1435d7c5eaaa00247416888f33","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.17.0_1777864538306_0.18721598956548857","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"dicerollerts","version":"0.20.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.20.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"2b63116531c74d56f01022c75a43e34742d35162","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.20.0.tgz","fileCount":20,"integrity":"sha512-5x2K9XkPR8XPRH58nRXduIPpPYulQiwVauryh4wxzxQacGrTi5FZsXTcwCsI4jmKgvdoVJW1g5s7ugkJpb3a4w==","signatures":[{"sig":"MEYCIQCVG1KuwTary8XWGiNeHPQ6tlad4ab+GBj/QOl1IT7XWgIhAIm2pFVj7vbowydaegC61zsIL2w/mQTISQkhIgb9K4JU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":276256},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"fdfa984d970e3e293273462660cce2325eeb6983","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions. Supports standard notation, custom dice, dice pools, exploding/rerolling/compound mechanics, and probability analysis.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.20.0_1777921135437_0.8165544756857599","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"dicerollerts","version":"0.21.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.21.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"8a44a0215cc6f119e4d7f15d4eef838ab60da4ae","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.21.0.tgz","fileCount":20,"integrity":"sha512-bLniNgOpI/AHBKeG97f0MDx6L6SKd/zt2gBjjeSDMptltNQLqaeortx4pa8Ma/kYfB9e2A7rzIfPbvjQhgFo7g==","signatures":[{"sig":"MEQCIGoiOSzc/OC731AClvZma7fdDv0phKzZLNlsYHAuU4psAiAe6F4fBoP3+y7z7l1oebpQE5iuYncyQx+ampcq1OBSKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292729},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"be25456f1b263e1420ea4252a7d6621665578136","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.21.0_1778113666418_0.7352847615757312","host":"s3://npm-registry-packages-npm-production"}},"0.21.1":{"name":"dicerollerts","version":"0.21.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.21.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"a881205bac7ccd140197318850d62817a3bbaff1","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.21.1.tgz","fileCount":22,"integrity":"sha512-h2MsxTa9GuYRYys/3MRxdoQkYQLc0HuQhcYm7ZgjXnFyQuPKf8LKndzcZOgmyPRymfuWMIzDoudor+NYTs5WWQ==","signatures":[{"sig":"MEQCIG3DHYsrp9BwlCCHdXjaJqrE6dgSRLoHxgsY1YOMOH0xAiB0onMvFyATWPBA4R8Mc9tClI3FHkHz8gD7MCssWbOoLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338428},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"9b90c77729c1f9da99fb115467a0dd7c728b73fa","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","dependencies":{"partsing":"^0.7.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.21.1_1778276467874_0.15019325405239248","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"dicerollerts","version":"0.22.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.22.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"32514601b97c570efb3e4fef0a41ae10dabeba29","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.22.0.tgz","fileCount":23,"integrity":"sha512-R0s19882w48Iyn2Tt6lr87JpPmQzvuUpz9ct6t1ZgXD94Yzv+6MJv4yqhEeLKdwJ2Xf2PGiApsRGKgfEkp2XPQ==","signatures":[{"sig":"MEUCIQCV+n0SfwOsh+ANQEOegxwaizOKDymD8ulmWrEi/C9mPgIgXql4TTmEYGJ4hKmx69JKYm98aBJ9oI/gVVTk7QX+irQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327678},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"201b0a5907319cb05961938e80efd22289890794","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.22.0_1778454582409_0.9665184051176918","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"dicerollerts","version":"0.23.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.23.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"0f99f25687c2e7eb8130f45d9ef39142c73539d5","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.23.0.tgz","fileCount":27,"integrity":"sha512-Mk79UkOK433ZtBNxMi7Q0NJwJU2GvHRs9a6i3CuCjl1UvqcftCIELsFaslxo4q4HKyAVTDBU3RobzP8Zmf6YBg==","signatures":[{"sig":"MEQCIC1A535/G+SfrvygsK9nC8XNO7r4r1mmjEELRCHZLXWOAiA8RD+OYhWC4H7mQXgtb3D0KvK6rd2jF9JnFLcV2bRYwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":374831},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"47c98b78268f9b074129ff138d2e9f86af46870c","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.23.0_1778468315681_0.02856678079649333","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"dicerollerts","version":"0.23.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.23.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"39d2cf533fe29001cf60725bf43ec5c4da66c6cb","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.23.1.tgz","fileCount":27,"integrity":"sha512-pwY0Ix/wFxAuToYPNCWFcv+70bsEWMXJhF8u5IgcbIrq02GdNT0coMX4rh05jc8sMBNWTbGuI5L65wHfPP2aSg==","signatures":[{"sig":"MEYCIQDIgCNRKv02NuYlmMQ5nVFezdt4xg5v6+GBz5FGLSsG7wIhAIQcX796sQ46aJu9tJMi7eQmIzdaaOzTgmeO0MMGbN0z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375520},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"e7d9e3a2bacf2f4f60c58edf77bbd9aabc930dc3","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.23.1_1778643198373_0.8253699335630074","host":"s3://npm-registry-packages-npm-production"}},"0.23.5":{"name":"dicerollerts","version":"0.23.5","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.23.5","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"8597a1bb414dbd963ab4f52757c7f6e62c34a0d6","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.23.5.tgz","fileCount":27,"integrity":"sha512-jHbcrpp6OuKAju6qHQm3E3Bs2xDrrPoiYmhYmZk1zb4XrhRVl/J4R4aqnA8HZJHENQ3xb6RW9blHqoa4l/n29g==","signatures":[{"sig":"MEUCIQCPd8FQYL5DUwbmS8ExvisJ2DYcNCIRZXhl4cNsIn/0iQIgZCUXda7KTDud+pioqIYcwkNQ2tmA8Ra9DoAVAaUz4Mo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379249},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"3d25da67e58d77df282a953025d2223a93d1f430","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.23.5_1778692446154_0.2556322587776665","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"dicerollerts","version":"0.24.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.24.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"7ed0d66b2668a28c29be7a9e50c1c2c1404189df","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.24.0.tgz","fileCount":27,"integrity":"sha512-EAMpFVoMhjhiQD9ULs5P1BAwpxTe9Sh6/GBDlm4X/wylhMAjLAlcodEh3KWLe48zqKD3W4Ca74JoqrgpF/kt8w==","signatures":[{"sig":"MEQCIA/oOfqdBvPSo+wCDuo56OKtZXgLnQaNYhHdQnTQqFnjAiAWY9PLo5UAYkfsMp8ImwyDSMf75yO56TBmzSYq1HZx1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379673},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"e2f8bf62d3bddbe98815c056e171c58b754fa250","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.24.0_1778796346449_0.8788567094488857","host":"s3://npm-registry-packages-npm-production"}},"0.24.1":{"name":"dicerollerts","version":"0.24.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.24.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"ea04dca06684de471a887e1b70138bb97a832e93","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.24.1.tgz","fileCount":27,"integrity":"sha512-/h5J9Ncea/ep05ACqleJ2YXNPM2VUlCtZAlLXMEudLQxbZQ6SmZ5ym+vVpLa9RXCoJ4O9l43JrzsNst22s7aCg==","signatures":[{"sig":"MEUCIQCQYS/477VsdHubYSFfG2D7/OMlMnz8qZByXwSBrWtBTQIgUsN52fhu5Rq6eqcos6YU7oiXJTBC2zg4O8Ex/fsixcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379847},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"90eaa4363b1a8e11ab68f5a5ab51bee330df4730","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.24.1_1778797923104_0.8206857631940083","host":"s3://npm-registry-packages-npm-production"}},"0.24.2":{"name":"dicerollerts","version":"0.24.2","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.24.2","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"8e4d8430f8227d93131847ccce56c2fda0c40bfb","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.24.2.tgz","fileCount":27,"integrity":"sha512-1YrstmwYhgSLWaKM79AWD0/9PhGomx6dv55H2GYZXEgHzsOr+8v215ARMgMcHptv8FqHbcD0v4T15CskiDaiBg==","signatures":[{"sig":"MEUCIC/h1xi9Qm7YiO+UFEslNCn7zLIBfdFTUYwSkXL//aVvAiEA7sMWUcXaMjZ6dDzt4/Z5UaFnYIo6fwAFVrpwrTTK56Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":396664},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"bae0cac6db1abef86c325d7ebe70bd90bb76303a","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.24.2_1778798294478_0.10723291659419454","host":"s3://npm-registry-packages-npm-production"}},"0.24.3":{"name":"dicerollerts","version":"0.24.3","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.24.3","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"fcfc93d19918a1eba03d61c8e7767dbb5715e058","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.24.3.tgz","fileCount":27,"integrity":"sha512-S0xyeDAiA5vF+QB2DHgor0OZVjb+gzZTaMDeVesleJRUXsD21jOjnqbRGC4UhuZcKCL8umPBnjokisvHCjXHig==","signatures":[{"sig":"MEQCIHqSyBMA+4hKmTZ4jr13CeVIWEgrAqFLN1zOCRFz05z2AiA+Gn85aQqr27x35aSFcbK4OKMC891JlE81WLiNhHpJWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":396724},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"51559f995ff806c8fe11a04bc775ca7440331f06","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.24.3_1778803088055_0.9991932218997337","host":"s3://npm-registry-packages-npm-production"}},"0.24.4":{"name":"dicerollerts","version":"0.24.4","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.24.4","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"4d7cef32250e3729268080a01c8285b08e55a1c7","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.24.4.tgz","fileCount":27,"integrity":"sha512-SKrqLNgSS3PXHOsSlwGMFIETz1FPtKAZgIMGkqKPFbP2d2jk2uaUJ9Blx3IKKOybkLqz0GBIGeJRWOy0yKSZJQ==","signatures":[{"sig":"MEUCIFx5DAn1b2DyAvgZ2RTrtjZSUQFdUHj79JmGtkLkGW4gAiEA3ENavPNsMRFkQsP7kLJyX/W8fJeTn+73FkkUUwO7UGA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":396818},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"dec9561462ea0110a27cd317dfda4f4bd186432c","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.24.4_1778808755018_0.6665114269542958","host":"s3://npm-registry-packages-npm-production"}},"0.24.5":{"name":"dicerollerts","version":"0.24.5","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.24.5","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"7916c8f12d38cfe385f4b5c7b27d9790c3c45b26","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.24.5.tgz","fileCount":27,"integrity":"sha512-Xk5GEfnlWJXCOUbgaKwmCZQ/pVDkCMhZRf0uVBg5K1Ta2i1OxmvYZY/O31+zn5H4u8y5rc9bhUFRHbXtHSKQhg==","signatures":[{"sig":"MEQCIEOJjv292smqA8PBRAT3Sq6AyVMMq4F5Sk1bi9HNP1TqAiBqhGDnlum/b1AckNHIJcgxgiTFXCjtex0aBSfYoJgyCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":397277},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7f24100ff116caf6636a4cae4011ec4b65589f20","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.24.5_1778809262023_0.29504551361245657","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"dicerollerts","version":"0.25.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.25.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"a0c4e610e52dae35fe3235be27d672614d435570","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.25.0.tgz","fileCount":28,"integrity":"sha512-mSSsv1xpyLTca6vkdovKiVYUz59Sq/6kE3+qI2Ts5FG7piL1oMdxDLQJjX7PUrq5CXyVMEOwol6zia01EVut4g==","signatures":[{"sig":"MEUCIHTLPJWkpgQ6eLr8uVmnSgXqMEU3dJ+gz9MYEYEdLCylAiEAitS5Ou9SymnkKYF8CEpADsHFJDLK9wDks+kZAwhIXLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":409767},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"b2584e617ce0e5132e107dcd215e6c499edccc37","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.25.0_1778815332815_0.3972729948862339","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"dicerollerts","version":"0.26.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.26.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"a682f126d6d9b8b82c07954f11ca159c2ee03334","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.26.0.tgz","fileCount":30,"integrity":"sha512-bDj3/BdV8MhHtEz68fZawGg5IetPv0J66uTLqZVOzBkQSpAZJBN95jRU/YLLsYvnzyngHnHzWvzad1rCGjlqFA==","signatures":[{"sig":"MEQCIBVcD1bqWqcfuDT/YbMtWbT/gB5MqSDEksRdqGDB1rODAiBwZriJzKrmsqMEy9qsHmj1T90T+cETfgInog3RVnmS2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431869},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"9eaa95f7bfe369b089a2e3a38059afca9e38a2b3","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.26.0_1778901644190_0.932120495432037","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"dicerollerts","version":"0.28.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.28.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"c72a9d4f1f57859cd857afc7fc3b9defac437d40","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.28.0.tgz","fileCount":30,"integrity":"sha512-MnOUbIBe7oj+HK4pbgV26xZHakm4FWy6GXO46CjVcbdxdZVE1pVCDtKj3zDtgyp+mMaT+MEoV08a741QyPuH5w==","signatures":[{"sig":"MEUCICfN6qB4JzusvgLuGoKdOqJFtgL52d+EQGieS0biinUMAiEAuaPgNJV7JSDqfGSY7oPp2zfa6zcd+DGLwdoUbMnLwQo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":433033},"main":"dist/index.js","type":"module","_from":"file:dicerollerts-0.28.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"_resolved":"/private/var/folders/l4/x_n_jk1j7p72ypdqgk97jlg40000gq/T/fde6ed1f3a4ce6d816ee21352fa9126d/dicerollerts-0.28.0.tgz","overrides":{"postcss":"^8.5.10"},"_integrity":"sha512-MnOUbIBe7oj+HK4pbgV26xZHakm4FWy6GXO46CjVcbdxdZVE1pVCDtKj3zDtgyp+mMaT+MEoV08a741QyPuH5w==","repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.28.0_1778949169971_0.4719217983527575","host":"s3://npm-registry-packages-npm-production"}},"0.28.1":{"name":"dicerollerts","version":"0.28.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.28.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"44c6f2ee3e2757f3c81fc0572602bfe0d2ad845f","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.28.1.tgz","fileCount":31,"integrity":"sha512-0LNVqTkIIcFHld27iBj7+2dwwhDpSwlWb7tzDUA+4MyAih7dCs1YE5fB3QSMVPEfV4JNIQ0pZutyUN5o28ffdQ==","signatures":[{"sig":"MEUCID2VclS0Lsla2efUQuDQRBv11FEi37BhZxjh6zpwlaybAiEA95FAfFrwbUvSuOmG2u9TdsJ+7c7viKjv2eDNB3rf/eY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":438201},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"75f1661658a9a010c4cb90c837d52dd82fe03e7c","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.28.1_1778950132908_0.698783128759584","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"dicerollerts","version":"0.29.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.29.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"948f787aa4625114113d02a882fa37159f368daa","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.29.0.tgz","fileCount":31,"integrity":"sha512-ft7Qpv86o7CBh/C1DqA+2G8I2BwXwrKh6YBxYLfuiBZmN8m3C6pwivbhxKCEbBg22IKqPaYKkvrB0cqOd9cYpw==","signatures":[{"sig":"MEUCID6sVLDf6wl3Wl1JTXh/hwXHtBJIp3Fhwrg+oE9gKG44AiEAlK9dRc537PLxsEFL0nGMgg2vcyJGEK5F1u7KX6Dldzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":445499},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7a85e27ae5b4ba99c33550f69ef229445d84e489","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.29.0_1778953964426_0.06508609679857336","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"dicerollerts","version":"0.30.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.30.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"4f6144a6491a89f5f2ea1931ea71453c0f5ecab1","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.30.0.tgz","fileCount":31,"integrity":"sha512-lEYCv8I6RacpDJ4vJrzi+cprO/HHTP3/+D1pG3klEGvoKlpacOLJStGfHScntadXGPlSzek3NM0ku+CiVkcMIw==","signatures":[{"sig":"MEUCIFvdswjSQPFQ4fEWpBuWOeUdBaZuMA/yFFhoqxro3c6LAiEAxgkY40z1+oi3reZr1u2tO9B+TLC9qnzg4F6ywqoTQn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448404},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"12b06b4b724782c458ba297e7aca57455452ade1","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.30.0_1778969972647_0.8245802565446678","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"dicerollerts","version":"0.31.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.31.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"65cbf958a6c818bb9d0e88d58d17c398aef984a7","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.31.0.tgz","fileCount":31,"integrity":"sha512-JhZ//3fBXM8JLuxSOY9fV7Huq+IDr/w8lqVQEYc4zUHMtxiNVSQF7t9VasRCGgZBCsPcKNceBKxIeuqH/o5KNQ==","signatures":[{"sig":"MEUCIQDGC5SaO9pQVnhWIvWzr6PCkqYDvIBX4g4hTPYOQH5h6AIgBB4LGiygFCVxFQdQhtlKGEmhOVx/FXlus+PoBQSCE3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":458327},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"26eb62a59092cf8b798f8ea46d933529fd6d62e3","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.31.0_1779219956048_0.49494485627326856","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"dicerollerts","version":"0.32.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.32.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"9405413ecff2ac8a707a095634185fd4e512c770","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.32.0.tgz","fileCount":31,"integrity":"sha512-31xnPLqKFW2Uutq7E2LG0P1AsWvrEEdk+PkepGumDygWbbyhxg/SJk9GnZ0l02rGyekuonhjQ7NvTE7rtedHdw==","signatures":[{"sig":"MEUCIQCtym3tJKMKx94J8Hvrv5DBURglDWyJmN9sylC6VBFfUgIgZfrtG7Y/UU8KVHRQEKOGJ019vjH0CzNmgp6y4evnBlM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":469743},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"b7bf4478d5e7d0813bc60398d1cb21cb22835e59","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.32.0_1779224053581_0.193416678062597","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"dicerollerts","version":"0.33.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.33.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"8c2901cfdc8c592aa16e6d1a6b199eee81160a3b","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.33.0.tgz","fileCount":31,"integrity":"sha512-ix7XNDyEOkJxTc9fT/FQbYoqalUOjrBqDDqe+Gb99ONOpG5OpZ1RtTHraBcktFzkcL0tPV2LXeud5GAO4Ufz4Q==","signatures":[{"sig":"MEUCIQDtd7sZSJbS/NjaU/J0/LtmEOswhBL88UM12YiPaXo2FQIgAnsRpPQr8Sh+uXRhoyo66cSz7ry1JU/J3OCIpciczX0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474338},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"8447fa7d55dc022fbb17c51a9ffd7c8de9de7b3b","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.33.0_1779247075064_0.19111780070132345","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"dicerollerts","version":"0.35.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.35.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"3550ca413edc9fca5a4ea744a02772a73e04599a","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.35.0.tgz","fileCount":31,"integrity":"sha512-4+KnY38emX5xYuP6Nx7ZMMsV8f5jhbF2KhvqAlGS09JjQ7zwXEpms+ByxLeQurBNAXpgh9N3KrLTnCP6ocU9aw==","signatures":[{"sig":"MEUCIQCxJBnNeCu/q5ETpaQy+Cq3nqmprk1WygP3w8CkSraqxQIgIQR54mFP9kn3Uh4SwLWVNKPK3I4hE2kehGuqywYdFdU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":503306},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"431f08ea871ac891abc1fa783e35018ee0b5cef5","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.35.0_1779312061982_0.6687968468623613","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"dicerollerts","version":"0.36.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.36.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"11ca57aef2690a72157677709b4284bce3dbfce5","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.36.0.tgz","fileCount":33,"integrity":"sha512-RqVImFDxNcRQpBMld2J9QIsYc0yl0N6/bX4zwEC4uVAEossSlSKPmxTZVfL7Ugph+32xrBSTf6k5u7bcEA8F0Q==","signatures":[{"sig":"MEUCIQDaudd7sFpI6fwfYxjOMo++383J3o62W35bzcW4ByhpTgIgSJ7kJwOzqUs3pVPD2xSUfhiJJQKwchCR/eDoSjOIZyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547426},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"51fcbbd616080e14c88573035424d2b5b5690b34","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.36.0_1779498423560_0.6878903422317435","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"name":"dicerollerts","version":"0.37.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.37.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"47e7bbe96e58c886f29220c99da98cc551faa1b9","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.37.0.tgz","fileCount":33,"integrity":"sha512-Wuqma+eQUpsv3rpMw5D9u0C6G5BLombTCtszl5f8AoxRcFZWLzeELypbKyAov3QA3tMKWZ6cmq1RdkuNHXfOkQ==","signatures":[{"sig":"MEUCIQCdEbrI2i6v4DhBo6dibEh39Ejln9WJC/UhpzQ9wZstyQIgK79QDuY8J/+hk1ecWv7BYLjMoEorK0TRW9Y7VWcz5hs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":554397},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"fe4ea2a0f6f368891a3f9af4c1661641f701aab7","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.37.0_1779506985327_0.020116455432519276","host":"s3://npm-registry-packages-npm-production"}},"0.38.1":{"name":"dicerollerts","version":"0.38.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.38.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"38a449eeeda65dd5b4546a45159d2b978088b82b","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.38.1.tgz","fileCount":33,"integrity":"sha512-xq7b5lBXKQ5xY0ujI/s8ESD8WZ2ES/xFyfpeCkblL5J8XYxfU5dDmHnxMPj2kHUHVshzeYeC8LNmCo5oYDxTyQ==","signatures":[{"sig":"MEUCIQDrJ6jZ44KmmtzJfO6CBAh/oihiVrLRFvLy/Bw3xh8FBQIgJ327QEw3jxRrs15X+L7ou8XHWqS6VnbNSWVBUAUS7oo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":559400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"2e344b422fe0d9bdc9213814e7f8a22ae23dc762","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.38.1_1779552810166_0.5851097401018361","host":"s3://npm-registry-packages-npm-production"}},"0.39.0":{"name":"dicerollerts","version":"0.39.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.39.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"9465583078fa45873f29ea1a4a4089877e7e9486","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.39.0.tgz","fileCount":33,"integrity":"sha512-OtXCw8xRolg141o10vVFSseAGydH3N1zc/oSwQRl9sIZrfg1bJELeyiV+K3OvjqZb7MsQg3VYsB7X1ncA2YvVA==","signatures":[{"sig":"MEQCIG4+CPXWuAXU1gt0CBQ7NkE37N1amftT7cK8ZrOhfkCZAiBZ9aksidVmy1uvdRJFqmPQ9mESY921jl7OGvOlwrnj0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":561782},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"b94b59f96de11ee5af889b25fa70a38145f9515c","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.39.0_1779555782180_0.37026806558361924","host":"s3://npm-registry-packages-npm-production"}},"0.40.0":{"name":"dicerollerts","version":"0.40.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.40.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"07fe0029189d16bc0c9d7d625e7c82219fd13914","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.40.0.tgz","fileCount":33,"integrity":"sha512-5jukYCrXHtbraPSsb+lgpZZBNab2ODONKavjDajkxMB114t8AkXncGSD7AghKhwmQ+h9T25bbakCPzRKhL5nYw==","signatures":[{"sig":"MEYCIQCSdmdRJD/wdsv9ThG65fkbhZ1zeTILCmUNeJIaTlE40AIhAIc1M2K5b68wby84K3T8/ldfkSvYMrc+mQH+hqi/Wgo5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":573027},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"436f29ac6edfee3b04f2024689f1cd139e3b1f6f","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.40.0_1779593055983_0.3785655546938975","host":"s3://npm-registry-packages-npm-production"}},"0.41.0":{"name":"dicerollerts","version":"0.41.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.41.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"6783fafab990b71fed383141886529e6a4781b35","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.41.0.tgz","fileCount":33,"integrity":"sha512-5mONMEaEXq7Hxui3HKNvHsStmULR45eFcLCx2B0ajbRBT8449bk2p+T+h/Fx7qK+c+/pqAb+7RKj4caMnXBLGQ==","signatures":[{"sig":"MEYCIQCj+1LEMWN1/nusXrUvuEbDLvbSxapQThYk9TGQwonWFwIhAOvtZTGv6IOw7Wk8YjX5HAqnNww2FPGFAL+fyZk8lHCC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":580916},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"89d7c59fc9e3f5b80be691c61f74065ff2c64fcc","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.41.0_1779731024324_0.7960897837448173","host":"s3://npm-registry-packages-npm-production"}},"0.42.0":{"name":"dicerollerts","version":"0.42.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.42.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"1e735c7dae548887a60da3a033d135879c5c6efa","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.42.0.tgz","fileCount":33,"integrity":"sha512-1xjCQ1T8+zKRJ20/3R9aqyMuGU9Rh2EbYIxgpOoQvg0OYArOTn2lfP0Fc+t2S0LpfRW45qu92vwa7ilbjYGC3A==","signatures":[{"sig":"MEUCIFScYIueIiaU2g8fBkAVchtCIT1bGaFCCaeKQeFwgxcUAiEA+y7rugUMraEqPk0Fv82Fhv/vPbYQzt6iNXEsG2VF0O0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":582171},"main":"dist/index.js","type":"module","_from":"file:dicerollerts-0.42.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"_resolved":"/private/var/folders/l4/x_n_jk1j7p72ypdqgk97jlg40000gq/T/0fa71a0b670e94f24ed7edb33b5c97fe/dicerollerts-0.42.0.tgz","overrides":{"postcss":"^8.5.10"},"_integrity":"sha512-1xjCQ1T8+zKRJ20/3R9aqyMuGU9Rh2EbYIxgpOoQvg0OYArOTn2lfP0Fc+t2S0LpfRW45qu92vwa7ilbjYGC3A==","repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.42.0_1780842706706_0.32933834054618893","host":"s3://npm-registry-packages-npm-production"}},"0.42.1":{"name":"dicerollerts","version":"0.42.1","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.42.1","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"9f436109cd1ba7c93ac18dbea855a695ca967216","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.42.1.tgz","fileCount":33,"integrity":"sha512-O+PKLv7Iiyr5kewwHPDZybIZuhLNwPXK7j/eVMkndkoOjEnNCgXK3DtVXSM4e+UOKYqCLfOK6xrDYhuKcyLuRg==","signatures":[{"sig":"MEYCIQCveUXzD5yf76beDMmlThjdHi6YCVsP24Tiq054EE7KqAIhAL/IYguI3WOzhZYofM4lSGwZwZjBHm7JtaH34MbYftP1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":585166},"main":"dist/index.js","type":"module","_from":"file:dicerollerts-0.42.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"_resolved":"/private/var/folders/l4/x_n_jk1j7p72ypdqgk97jlg40000gq/T/8d4699c361e120ed96efbf618bc6643b/dicerollerts-0.42.1.tgz","overrides":{"postcss":"^8.5.10"},"_integrity":"sha512-O+PKLv7Iiyr5kewwHPDZybIZuhLNwPXK7j/eVMkndkoOjEnNCgXK3DtVXSM4e+UOKYqCLfOK6xrDYhuKcyLuRg==","repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.42.1_1780849765194_0.1873626569723843","host":"s3://npm-registry-packages-npm-production"}},"0.49.0":{"name":"dicerollerts","version":"0.49.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.49.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"584d5f6eca87a0bd935bf5aea071425c44de702c","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.49.0.tgz","fileCount":34,"integrity":"sha512-pzC3/F+6ra927zRh16BlgiJnl6Wshd92LS0Aww5haHfMkog48Y2jir929O1zpNiVwdMDg1954ACkXish+0+OwQ==","signatures":[{"sig":"MEUCIQDTz/2ZjjauUDbuqN46yOZ3Ej4VlB9L3xP2qQt7LSkAPQIgLTEqRxTQOSoCRBLEJRZYwCJ9vrWVMogVvbD9om2KltE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":596382},"main":"dist/index.js","type":"module","_from":"file:dicerollerts-0.49.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"_resolved":"/private/var/folders/l4/x_n_jk1j7p72ypdqgk97jlg40000gq/T/0f8ce1fdf83bd407579511c7e4e8818c/dicerollerts-0.49.0.tgz","overrides":{"postcss":"^8.5.10"},"_integrity":"sha512-pzC3/F+6ra927zRh16BlgiJnl6Wshd92LS0Aww5haHfMkog48Y2jir929O1zpNiVwdMDg1954ACkXish+0+OwQ==","repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.49.0_1781120460714_0.1484603352649143","host":"s3://npm-registry-packages-npm-production"}},"0.50.0":{"name":"dicerollerts","version":"0.50.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.50.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"5fb3e9734acf4e4f2679913060ab78d5b145845b","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.50.0.tgz","fileCount":43,"integrity":"sha512-u6a5VgYY3KM5xHWkbAyTaFrGysT3ij+I4Cmbt3c74QFSK4/NAu11EddIceL5dhBGFbI0UPu38/4+YbZVXZRTrw==","signatures":[{"sig":"MEQCIA8SQb81mLCDyzyejV+5yAtfsCoscFd31lIHx47gesc2AiAi3h3tBIkxQU99AnnYkuesjG/44c7r3tlya1s3kKV54Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":621933},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"d87f52b5c3721611aa6f568cad3f0dcd902327be","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.50.0_1781163143660_0.33649952970607977","host":"s3://npm-registry-packages-npm-production"}},"0.51.0":{"name":"dicerollerts","version":"0.51.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.51.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"88add3114238c4b29ada3c69f5b20fee86e6f3fa","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.51.0.tgz","fileCount":43,"integrity":"sha512-LDnR7XL/P8omOhhJOkzvpwxD99xX2wM8D2qP6SCJBDDLLIEz7JIKeQsUoFKphjbtRG2CYJIPUFiWCbh1ZLakkg==","signatures":[{"sig":"MEUCID6Xjng+sByVp+uLuiUrVZQIH7oh6zhzSGauJdMWTME6AiEAn8Fk/qpLv432a7GQ5dOLUnkxOurPcz2cyGOTzewraDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":630943},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"27f049d44b46ab25aabcbbc9c7aeffd03502ebc0","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.51.0_1781280890942_0.2804955336084771","host":"s3://npm-registry-packages-npm-production"}},"0.52.0":{"name":"dicerollerts","version":"0.52.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.52.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"2b4bed0e792cc20b814e5e59bef74f8084b66fc5","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.52.0.tgz","fileCount":43,"integrity":"sha512-WjLGX2q8jko2fGjubT2yBAiMBfJl41H6a0KD7qQS7V++tjUY3L+WGYpNbeSH5llrzM31BjMjjcJv3TY+5t9zsg==","signatures":[{"sig":"MEUCIQCocs8WN+jIVANbCND1OCRPUsUHz0wz/+I3pQ2HXLMlBwIgAvbtdixo8u1+9FPFir2R4mfCQ5F2f9phr1H+JLlwkL8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":636394},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"572fff06cd5e7139fd7f6cb8b97c1d9f596ed4e8","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.52.0_1781290255800_0.6331991311889462","host":"s3://npm-registry-packages-npm-production"}},"0.53.0":{"name":"dicerollerts","version":"0.53.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.53.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"94a14b02d18cace76e54c18c4a1f6930d0cb0b06","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.53.0.tgz","fileCount":43,"integrity":"sha512-xqcg0SjEchKRV2BvqJeva4aE0ZVOlkPPtrk+7YADabXcVdjh7uOBQC6osylhFInLIN/DsBX0cXD/EgGN7IPHIw==","signatures":[{"sig":"MEYCIQCUDDYwytb7y0n30PPZIqDZDZApnePtIHI8Y3AJoWJhLgIhAMm+dL2QnAss59rSV7/hMljh9XNq4onOO3HNEBzYRbke","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":644350},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"e2b09cc56746ab5a22ffc860efb6bcb72c30f976","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.53.0_1781357819876_0.8684190628593775","host":"s3://npm-registry-packages-npm-production"}},"0.54.0":{"name":"dicerollerts","version":"0.54.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.54.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"5faa6726219c7dc4997c17f03db215b220d5fcfc","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.54.0.tgz","fileCount":44,"integrity":"sha512-6ZtInBeXVbbzmaob0tHDH/HqNOjeQAY1ipcJ3YZy8LzzEM+NlX136GQX6uK86J55yQ8qX345/EhZNWlB7fb7LQ==","signatures":[{"sig":"MEUCIQCDGGLNZ5vaRv5eEjlZQAD9Yl+mS7WYEFJnrNLzjmUIkwIgOjPO8GiNMNJjLlillPhA6+HcK8DBoz3aM3a09YPj6eI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":651056},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"c22c237ec9ba6893529007352d894dff3f23fa6e","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.54.0_1781398445536_0.9278359020164266","host":"s3://npm-registry-packages-npm-production"}},"0.55.0":{"name":"dicerollerts","version":"0.55.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.55.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"5ddb728a64209f60fa73fc9a967959e4f6fae867","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.55.0.tgz","fileCount":44,"integrity":"sha512-pKMYZ22DmLvQB+Be0P230EOXgJ28o4p12qfVemppYurBxY3sn/2V7j4BO1OcXcSAe7mQG0VstyLI60xejGsu7Q==","signatures":[{"sig":"MEUCIG8Xhr49wusCErORyXiaLzzqdgyWySCPGIiZf/1eM2DPAiEA0mL0QNYYXOQEtrtAFAh4Kd/LEntsO1iQxvNs7jRTYm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":651551},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"be341e1044204abf2a2588f1dcaa02a5445b792c","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.55.0_1781449807535_0.19689380598086959","host":"s3://npm-registry-packages-npm-production"}},"0.56.0":{"name":"dicerollerts","version":"0.56.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.56.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"7e833f049034165fd771931f7fbe7f539285ffdf","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.56.0.tgz","fileCount":44,"integrity":"sha512-5cdeTIceyyt0308IylK/6q5DXwb/HR7P+3VBJBEFsKhieSI2CrioqsodMKBowJRH1vNfYoGD+nbrreFJREiaNg==","signatures":[{"sig":"MEUCICZqHjUL8jWTzKHnNrJiIQqILq/k4QRBJunQuExh8Az8AiEAusrvl4sNx8eabnrZSeZIZe1VnleRmlvsK3My0gj8JTY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":653830},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"89a12e7ca4b3e3c7919bf790b2281339329b4cee","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.56.0_1781478124449_0.2788551350835462","host":"s3://npm-registry-packages-npm-production"}},"0.57.0":{"name":"dicerollerts","version":"0.57.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.57.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/fponticelli/dicerollerts#readme","bugs":{"url":"https://github.com/fponticelli/dicerollerts/issues"},"dist":{"shasum":"fa485fe453b9dd5b62164ea9ca1e48c2b37bf869","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.57.0.tgz","fileCount":44,"integrity":"sha512-dZU2Abhwnhzd7MCKQquJ211IQ0yi0JDWqwG4zxFC/JhHaTeyMl435sc/DGBPyUL4/76CQhnl97CQ70dn9V7ZpQ==","signatures":[{"sig":"MEYCIQCX/aqWhPNQSqxUFKVxGIsifoMnpc34yUAhv/Z2X4idoQIhAKG4UIUEBXpm6ZD81Fv32Ws8Kx+QtuH0ChZ/6u7Ahrex","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":662452},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"3d73015753e5e527f362898e70c0ba6d84ecf8c7","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/fponticelli/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.57.0_1781599590195_0.5825608095470294","host":"s3://npm-registry-packages-npm-production"}},"0.58.0":{"name":"dicerollerts","version":"0.58.0","author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","_id":"dicerollerts@0.58.0","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"homepage":"https://github.com/buildlab-com/dicerollerts#readme","bugs":{"url":"https://github.com/buildlab-com/dicerollerts/issues"},"dist":{"shasum":"8b7f27e989ff522c9cc3c8257abb6becea5f2dd2","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.58.0.tgz","fileCount":49,"integrity":"sha512-hcUFU1OdXbXyA+LIUE0zeE4pA1dcUqyEh4Mka0fqfeGZt5J01wXDKAtboB1/ba60xw9WnjHZMlb4fYU7pj5ZWA==","signatures":[{"sig":"MEUCIQDG6XYgFe0+yVJdmzHA4PDxkEh+MY8GBCTYrIHjqbHwSQIgIYKWWGrr1keTfxUoZGwhzkw+tl43CT3Pu073aFnK0oE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":768669},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"98d13a53b82e73bc459eea9890a12491590e8f82","scripts":{"lint":"eslint .","test":"vitest run","build":"vite build && tsc --emitDeclarationOnly","format":"prettier --write .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","prepack":"npm run build","release":"bash scripts/publish.sh","coverage":"vitest run --coverage","lint:fix":"eslint . --fix","test:watch":"vitest","release:dry":"bash scripts/publish.sh --dry","format:check":"prettier --check ."},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"overrides":{"postcss":"^8.5.10"},"repository":{"url":"git+https://github.com/buildlab-com/dicerollerts.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","eslint":"^10.2.0","vitest":"^4.1.3","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^6.0.2","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.3","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/dicerollerts_0.58.0_1785864205379_0.4605727013908205","host":"s3://npm-registry-packages-npm-production"}},"0.59.1":{"name":"dicerollerts","version":"0.59.1","type":"module","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"vite build && tsc --emitDeclarationOnly","prepack":"npm run build","test":"vitest run","test:watch":"vitest","coverage":"vitest run --coverage","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check .","verify":"tsc --noEmit && eslint . && prettier --check . && vitest run","release":"bash scripts/publish.sh","release:dry":"bash scripts/publish.sh --dry"},"devDependencies":{"@eslint/js":"^10.0.1","@vitest/coverage-v8":"^4.1.3","eslint":"^10.2.0","eslint-config-prettier":"^10.1.8","prettier":"^3.8.1","typescript":"^6.0.2","typescript-eslint":"^8.58.1","vite":"^8.0.7","vite-plugin-dts":"^4.5.4","vitest":"^4.1.3"},"overrides":{"postcss":"^8.5.10"},"repository":{"type":"git","url":"git+https://github.com/buildlab-com/dicerollerts.git"},"author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","bugs":{"url":"https://github.com/buildlab-com/dicerollerts/issues"},"homepage":"https://github.com/buildlab-com/dicerollerts#readme","gitHead":"0b24aa155cdb439bf22a8a01efc0d86b8a701646","_id":"dicerollerts@0.59.1","description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-ve5BHzGFmItRjzcC81RSmAylDyEIgsdr3232ugRE9OI1fkHZTfkGa2NaidfWL15frLK3mqE7q7hK0bgmXZe+SQ==","shasum":"0385a1b3d040fca1a97a81cddebfcaaf77949b0e","tarball":"https://registry.npmjs.org/dicerollerts/-/dicerollerts-0.59.1.tgz","fileCount":49,"unpackedSize":776124,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEtzLaAZUTBGcXI+aSgFAlIalF3FVKs9ey+b8fkts5b/AiBHc6a8Ij9VoALscNloBfXD+SLopbeqJApWrNxbukcedQ=="}]},"_npmUser":{"name":"fponticelli","email":"franco.ponticelli@gmail.com"},"directories":{},"maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dicerollerts_0.59.1_1785898158566_0.45078697155484804"},"_hasShrinkwrap":false}},"time":{"created":"2023-04-11T00:55:11.942Z","modified":"2026-08-05T02:49:18.925Z","0.1.0":"2023-04-11T00:55:12.152Z","0.2.0":"2023-04-11T02:26:37.546Z","0.3.0":"2023-04-11T02:53:21.757Z","0.4.0":"2023-04-14T01:11:26.825Z","0.5.0":"2023-04-17T00:25:31.324Z","0.6.0":"2023-04-29T18:42:16.214Z","0.6.1":"2023-04-29T20:00:46.708Z","0.6.2":"2023-04-29T20:06:57.306Z","0.7.0":"2026-04-08T16:30:36.652Z","0.8.0":"2026-04-08T17:44:10.712Z","0.8.1":"2026-04-08T18:10:33.232Z","0.9.0":"2026-04-16T15:36:32.932Z","0.10.0":"2026-04-16T19:23:38.721Z","0.11.0":"2026-04-16T21:22:57.665Z","0.12.0":"2026-04-16T21:40:41.506Z","0.13.0":"2026-04-17T02:16:40.407Z","0.15.0":"2026-04-17T17:14:14.025Z","0.16.0":"2026-04-17T18:50:09.061Z","0.16.1":"2026-04-18T01:51:00.363Z","0.17.0":"2026-05-04T03:15:38.496Z","0.20.0":"2026-05-04T18:58:55.591Z","0.21.0":"2026-05-07T00:27:46.594Z","0.21.1":"2026-05-08T21:41:08.086Z","0.22.0":"2026-05-10T23:09:42.570Z","0.23.0":"2026-05-11T02:58:35.862Z","0.23.1":"2026-05-13T03:33:18.521Z","0.23.5":"2026-05-13T17:14:06.309Z","0.24.0":"2026-05-14T22:05:46.593Z","0.24.1":"2026-05-14T22:32:03.271Z","0.24.2":"2026-05-14T22:38:14.635Z","0.24.3":"2026-05-14T23:58:08.203Z","0.24.4":"2026-05-15T01:32:35.177Z","0.24.5":"2026-05-15T01:41:02.173Z","0.25.0":"2026-05-15T03:22:13.032Z","0.26.0":"2026-05-16T03:20:44.383Z","0.28.0":"2026-05-16T16:32:50.129Z","0.28.1":"2026-05-16T16:48:53.065Z","0.29.0":"2026-05-16T17:52:44.616Z","0.30.0":"2026-05-16T22:19:32.898Z","0.31.0":"2026-05-19T19:45:56.266Z","0.32.0":"2026-05-19T20:54:13.731Z","0.33.0":"2026-05-20T03:17:55.284Z","0.35.0":"2026-05-20T21:21:02.243Z","0.36.0":"2026-05-23T01:07:03.709Z","0.37.0":"2026-05-23T03:29:45.527Z","0.38.1":"2026-05-23T16:13:30.299Z","0.39.0":"2026-05-23T17:03:02.442Z","0.40.0":"2026-05-24T03:24:16.226Z","0.41.0":"2026-05-25T17:43:44.508Z","0.42.0":"2026-06-07T14:31:46.838Z","0.42.1":"2026-06-07T16:29:25.359Z","0.49.0":"2026-06-10T19:41:00.904Z","0.50.0":"2026-06-11T07:32:23.815Z","0.51.0":"2026-06-12T16:14:51.278Z","0.52.0":"2026-06-12T18:50:56.009Z","0.53.0":"2026-06-13T13:37:00.018Z","0.54.0":"2026-06-14T00:54:05.717Z","0.55.0":"2026-06-14T15:10:07.722Z","0.56.0":"2026-06-14T23:02:04.597Z","0.57.0":"2026-06-16T08:46:30.348Z","0.58.0":"2026-08-04T17:23:25.505Z","0.59.1":"2026-08-05T02:49:18.769Z"},"bugs":{"url":"https://github.com/buildlab-com/dicerollerts/issues"},"author":{"name":"Franco Ponticelli"},"license":"Apache-2.0","homepage":"https://github.com/buildlab-com/dicerollerts#readme","repository":{"type":"git","url":"git+https://github.com/buildlab-com/dicerollerts.git"},"description":"A TypeScript library for parsing, rolling, and analyzing dice expressions, plus a small program language for tabletop-RPG-flavoured automation. Supports standard dice notation, custom dice, dice pools, exploding/rerolling/compound mechanics, structured-fa","maintainers":[{"name":"fponticelli","email":"franco.ponticelli@gmail.com"}],"readme":"# dicerollerts\n\nA TypeScript library for parsing, rolling, and analyzing dice expressions, plus\na small program language for tabletop-RPG-flavoured automation. Supports\nstandard dice notation, custom dice, dice pools, exploding/rerolling/compound\nmechanics, structured-face dice, parametric dice, and full probability\nanalysis (exact distributions, joint distributions, and adaptive Monte Carlo).\n\n## Install\n\n```bash\nnpm install dicerollerts\n```\n\n## Quick Start\n\n```ts\nimport { ProgramParser, Evaluator, RR } from 'dicerollerts'\n\nconst result = ProgramParser.parse('4d6 drop 1')\nif (result.success) {\n  const evaluator = new Evaluator(\n    (sides) => Math.floor(Math.random() * sides) + 1,\n  )\n  console.log(evaluator.run(result.program)) // e.g. 14\n}\n```\n\n## One language\n\nThis library is a single language. Dice atoms (`d6`, `4d6`, `dF`, `d%`,\n`d{1,2,3}`, `@name`, `3 @name`) are first-class expressions and compose\nfreely with variables, arithmetic, control flow, records, arrays, and\ncomprehensions:\n\n```text\n$str = 5\n$attack = d20 + $str\nif $attack >= 15 then 2d6 + $str else 0\n```\n\nThere is no separate dice-expression \"mode\" and no backtick wrapping -\nwrite the same notation everywhere. The single public parser entry point\nis `ProgramParser.parse(source)`.\n\n> **Migrating from 0.x**:\n>\n> - Backticks are no longer accepted. Replace `` `d20 + $mod` `` with\n>   `d20 + $mod`. Run stored programs through `migrateSource(text)` (a\n>   one-line regex that strips backticks) for a quick mechanical pass.\n> - Arithmetic that previously lived inside a backtick block is now\n>   program-level, so `4d6 drop 1` and `4d6 + 2d8` behave identically -\n>   the dice modifiers still bind tighter than `+`/`-`, so `4 + 4d6 drop 1`\n>   parses as `4 + ((4d6) drop 1)`.\n> - Public `DiceParser` is gone; use `ProgramParser.parse` for everything.\n>   `Roller.roll` and `DiceStats.{distribution,mean,...}` now accept the\n>   unified `Expression` AST emitted by the parser.\n> - The `DiceExpr` wrapper node is gone. Dice atoms (`Die`, `NDice`,\n>   `CustomDie`, `DiceReduce`, `StructuredDiceRoll`) appear directly in\n>   `Expression`. The `source: string` cosmetic field is removed.\n> - `Evaluator`'s `onDiceExpr` + `onStructuredDiceRoll` callbacks merged\n>   into a single `onDiceTerm: (event: DiceTermResult) => void`. The\n>   `event.kind` discriminator is `'arithmetic'` | `'structured'`.\n> - `RollResult` tag renames: `binary-op-result` → `binary-expr-result`,\n>   `literal-result` → `number-literal-result`, `unary-op-result` →\n>   `unary-expr-result`. Constructors renamed to match (`binaryExprResult`,\n>   `numberLiteralResult`, `unaryExprResult`). Op fields use the program\n>   vocabulary (`add`/`subtract`/`multiply`/`divide`).\n> - `ProgramParameters.list` shape: `defaultExpr` + `defaultSource` →\n>   single `defaultExpression: Expression`.\n> - `partsing` runtime dependency is gone - the package now ships with\n>   zero runtime deps.\n\n---\n\n# 1. Dice Expression Language\n\nPass any of the following to `ProgramParser.parse(...)`. Whitespace is\ngenerally free; `_` is treated as whitespace.\n\n### Multiline expressions\n\nA newline normally ends a statement. An expression may still span several lines\nwhen a line **ends with a pending binary operator** (`+ - * / and or` and the\ncomparison operators) - the trailing operator signals that the right-hand side\ncontinues on the next line:\n\n```\n$dmg = 2d6 + $str +\n       $weapon_bonus +\n       $crit_dice\n\n$hit = $attack >= $ac and\n       not $defender_invisible\n```\n\nThe operator must be the _last_ token on the line; a newline placed _before_ an\noperator ends the statement instead. A `#` comment is allowed between a trailing\noperator and the newline.\n\n## Basic dice and literals\n\n| Notation       | Description                  |\n| -------------- | ---------------------------- |\n| `d6`           | One six-sided die            |\n| `3d6`          | Three six-sided dice, summed |\n| `d20`          | Twenty-sided die             |\n| `d%` or `d100` | Percent die                  |\n| `42`           | Literal number               |\n| `-d6`          | Negated die                  |\n\n## Custom dice\n\n| Notation         | Description                 |\n| ---------------- | --------------------------- |\n| `d{1,1,2,2,3,4}` | Die with custom face values |\n| `dF`             | Fate / Fudge die (-1, 0, 1) |\n| `4dF`            | Four Fate dice              |\n\nCustom face values may be negative or zero.\n\n## Arithmetic\n\nStandard precedence (multiplication / division before addition / subtraction),\nleft-to-right within each tier. Parentheses group sub-expressions.\n\n| Notation    | Description                                                                                                                                                                     |\n| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `3d6 + 4`   | Addition                                                                                                                                                                        |\n| `2d8 - 1`   | Subtraction                                                                                                                                                                     |\n| `d6 * 2`    | Multiplication                                                                                                                                                                  |\n| `d100 / 10` | Division (truncates to integer; throws `UndefinedOutcomeError` on zero divisor - the analyser turns this into `partial-number` / `undefined` `FieldStats` rather than crashing) |\n| `$a max 0`  | Larger of two numbers - see [Scalar min / max](#scalar-min--max)                                                                                                                |\n| `$a min 10` | Smaller of two numbers - see [Scalar min / max](#scalar-min--max)                                                                                                               |\n| `(2d6+1)*3` | Parenthesized                                                                                                                                                                   |\n\nUnicode aliases: `×` and `⋅` are accepted for multiplication; `÷` for division.\n`≤` for `<=`, `≥` for `>=`, `≠` for `!=`. `→` for the `->` match-arm / fold\nlambda arrow. The letter `x` and the colon `:` are **not** accepted as\noperators - they collide with identifiers (and `0x…` literals) and with\nrecord-field / array-slice syntax respectively.\n\n## Scalar min / max\n\n`max` and `min` are also **infix operators over two numbers**: `$a max $b` is\nthe larger of the two, `$a min $b` the smaller. They give the \"floor this at\nzero\" and \"clamp to a range\" idioms a direct spelling instead of a duplicated\n`if` or a two-element comprehension.\n\n```text\n$tens = 4d10 count >= 8\n$ones = 4d10 count == 1\n($tens - $ones) max 0\n```\n\nThey sit **between comparison and addition** in precedence and associate left,\nand `max` and `min` share one level - so the clamp idiom reads in order:\n\n| Written            | Groups as                   |\n| ------------------ | --------------------------- |\n| `$a - $b max 0`    | `($a - $b) max 0`           |\n| `$a max 0 + 1`     | `$a max (0 + 1)`            |\n| `$a * 2 max $b`    | `($a * 2) max $b`           |\n| `$a max 0 > 3`     | `($a max 0) > 3`            |\n| `$x max 0 min 10`  | `($x max 0) min 10` (clamp) |\n| `$a max $b max $c` | `($a max $b) max $c`        |\n\n### Disambiguation from the reducer, aggregator and threshold roles\n\nThe same two words already name a [dice reducer](#expression-sets-and-reducers)\n(`2d6 max`), a [comprehension aggregator](#comprehensions-and-fold)\n(`max for $x in $xs { $x }`) and an\n[explode / reroll threshold](#exploding) (`3d6 explode on max`). One rule keeps\nthem apart, and it has no exceptions:\n\n> **`min` / `max` is the infix operator when - and only when - an operand\n> follows it on the same line**, except inside a dice-modifier threshold slot,\n> where the threshold reading always wins.\n\n```text\n2d6 max              # reducer: the higher of the two dice\n2d6 max 3            # operator: max(sum of 2d6, 3)\n2d6 max max 3        # reducer, then operator: max(higher die, 3)\n3d6 explode on max   # threshold: explode on a natural 6\n3d6 explode on max max 4  # threshold, then operator: max(sum, 4)\nmax for $x in [1, 2] { $x }   # aggregator - `for` is not an operand\n{ max: 5, min: 1 }   # record keys, `$max` / `$r.max` - unaffected\n```\n\nBecause the threshold reading wins outright, a threshold `max` is never also\nthe operator: write the threshold and the operator out in full\n(`3d6 explode on max max 4`). `3d6 explode max 4` is a syntax error, exactly as\nit was before the operators existed.\n\nTwo consequences worth memorising:\n\n- **A negative right operand needs parentheses.** A bare `-` is deliberately\n  _not_ an operand start, so `2d6 max - 1` keeps meaning \"reduce by max, then\n  subtract 1\". Write `$a max (-1)`.\n- **There is no line continuation after `min` / `max`.** Unlike `+` or `and`, a\n  trailing `max` at end of line does not continue on the next one - a `max`\n  with the next line's operand below it is two statements (a reducer, then a\n  reference). Keep both operands on one line, or parenthesise.\n\nThe infix reading also covers only the exact words `min` and `max`; the reducer\naliases `minimum` / `maximum` stay reducer-only.\n\n## Rounding\n\nFive postfix operators turn a numeric expression into a rounded integer. They\nbind tighter than arithmetic - `2d6 / 3 round` rounds the quotient, not the\noperand.\n\n| Form                | Mode                             | `1.5` | `-1.5` | `2.5` |\n| ------------------- | -------------------------------- | ----- | ------ | ----- |\n| `… round`           | Half away from zero              | `2`   | `-2`   | `3`   |\n| `… round up`        | Ceiling - toward `+∞`            | `2`   | `-1`   | `3`   |\n| `… round down`      | Floor - toward `-∞`              | `1`   | `-2`   | `2`   |\n| `… truncate`        | Toward zero                      | `1`   | `-1`   | `2`   |\n| `… round half even` | Banker's rounding (nearest even) | `2`   | `-2`   | `2`   |\n\n`round` is **not** JavaScript's `Math.round` - `-1.5 round` is `-2`, not `-1`.\nThis matches the convention used by spreadsheet `ROUND`, Python's\n`decimal.ROUND_HALF_UP`, and most tabletop rulebooks.\n\nThe keywords are not lexer-level reserved - `$round`, `$truncate`, etc. remain\nvalid identifiers outside the postfix slot.\n\nThe runtime helpers are also exported for consumers that fold `RoundExpr`\nnodes into a normalised number themselves (UIs that display the rounded value\nalongside the source, serializers that pre-compute the result):\n\n```ts\nimport {\n  applyRoundMode,\n  roundHalfAwayFromZero,\n  roundHalfEven,\n} from 'dicerollerts'\n\napplyRoundMode(1.5, 'round-half-even') // 2\nroundHalfAwayFromZero(-1.5) // -2\n```\n\n## Expression sets and reducers\n\nGroup dice into a pool with square brackets. The bare bracket form\n`[d, d, …]` is an array literal (list-typed); adding a reducer\nsuffix turns it into a scalar dice-pool expression.\n\n| Notation              | Description                 |\n| --------------------- | --------------------------- |\n| `[2d6, 3d8, d10]`     | List of three rolled values |\n| `[2d6, 3d8, d10] sum` | Sum of all (explicit `sum`) |\n| `[2d6, 3d8] min`      | Lowest result               |\n| `[2d6, 3d8] max`      | Highest result              |\n| `[2d6, 3d8] average`  | Arithmetic mean (rounded)   |\n| `[2d6, 3d8] median`   | Median                      |\n| `[d20, d20] keep 1`   | Filter + default `sum`      |\n\nReducer aliases: `min` / `minimum` / `take least`; `max` / `maximum` / `take best`;\n`average` / `avg`; `median` / `med`.\n\n> **Migrating from older versions:**\n>\n> - Paren-list dice pools `(d, d, …)` were removed; use `[d, d, …]`.\n> - `as pool` is gone - bracket literals are already list-typed, so\n>   `$rolls = [d20, d20]` replaces the historic\n>   `$rolls = 2d20 as pool`.\n> - Bare `(expr)` parens still work for arithmetic grouping\n>   (`(d6 + 1) * 2`); only the multi-element comma-separated paren\n>   form is gone.\n\n## Drop and Keep\n\nDrop or keep some of the dice in a pool. Filters can be chained - each filter\noperates on the surviving dice from the previous one.\n\n| Notation                     | Shorthand | Description                             |\n| ---------------------------- | --------- | --------------------------------------- |\n| `4d6 drop 1`                 | `4d6d1`   | Drop lowest 1                           |\n| `4d6 drop lowest 1`          | `4d6dl1`  | Same, explicit (`low` is also accepted) |\n| `4d6 drop highest 1`         | `4d6dh1`  | Drop highest 1 (`high` also accepted)   |\n| `4d6 keep 3`                 | `4d6k3`   | Keep highest 3                          |\n| `4d6 keep highest 3`         | `4d6kh3`  | Same, explicit (`high` also accepted)   |\n| `4d6 keep lowest 1`          | `4d6kl1`  | Keep lowest 1                           |\n| `5d6 keep middle 3`          |           | Keep the central band of 3 sorted dice  |\n| `5d6 drop middle 1`          |           | Drop the central die (keep the outer 4) |\n| `5d6 drop high 1 drop low 1` |           | Drop high 1 then low 1 (keep middle 3)  |\n\nThe single-letter shorthands `k<N>` / `d<N>` keep highest / drop lowest; the\ntwo-letter forms `kh<N>` / `kl<N>` / `dh<N>` / `dl<N>` name the direction\nexplicitly. Like the single-letter forms, they take a literal count only - use\nthe long `keep lowest $n` keyword form for a parametric count.\n\nFor `middle`, when the pool size minus N is odd, the extra dropped die is taken\nfrom the upper end of the sorted pool. So `5d6 keep middle 2` keeps sorted\nranks {1, 2} (the lower-middle pair), and `5d6 drop middle 2` keeps the\ncomplement {0, 3, 4}.\n\nHeterogeneous filterable pools are also allowed: `[d20, d12, d10] keep 2`.\n\n## Exploding\n\nRoll again when a trigger condition is met. Extra rolls are added as separate\ndice and contribute to the reducer (typically `sum`).\n\n| Notation                   | Shorthand | Description                             |\n| -------------------------- | --------- | --------------------------------------- |\n| `3d6 explode on 6`         |           | Explode on exact 6, no limit            |\n| `3d6 explode once on 6`    |           | Explode at most once                    |\n| `3d6 explode twice on 6`   |           | At most twice                           |\n| `3d6 explode thrice on 6`  |           | At most three times                     |\n| `3d6 explode 3 times on 6` |           | At most N explosions                    |\n| `3d6 explode on 5 or more` | `3d6e5`   | Explode on 5+                           |\n| `3d6 explode on 2 or less` |           | Explode on 1 or 2                       |\n| `3d6 explode on 3..5`      |           | Explode on a value in [3, 5]            |\n| `3d6 explode 3..5`         |           | Same, `on` omitted                      |\n| `3d6 explode >= 6`         |           | Operator spelling of `on 6 or more`     |\n| `3d6 explode <= 2`         |           | Operator spelling of `on 2 or less`     |\n| `3d6 explode == 6`         |           | Operator spelling of `on 6` (`= 6` too) |\n| `3d6 explode exactly 6`    |           | Keyword spelling of `on 6`              |\n| `3d6 explode on max`       | `3d6em`   | Explode on the die's maximum            |\n| `3d6 explode max`          |           | Same                                    |\n| `3d6 explode always on 6`  |           | Same as `explode on 6`                  |\n\nEvery one of those trigger spellings is accepted by `explode`, `reroll` and\n`compound` alike, before or after a `times` qualifier\n(`3d6 explode twice >= 5`, `3d6 reroll once on 1..2`).\n\n### Cancelling explosions\n\n`cancel <range>` after an `explode` or `compound` trigger takes explosions\n_away_ from the pool. Each die of the **initial** pool whose face matches the\ncancel range removes one explosion from the pool's explosion budget - the\n\"tens explode, ones cancel\" family of rules.\n\n| Notation                                | Description                               |\n| --------------------------------------- | ----------------------------------------- |\n| `10d10 explode on 10 cancel on 1`       | Each 1 rolled denies one 10 its explosion |\n| `10d10 explode twice on 10 cancel on 1` | Pool budget and per-die cap both apply    |\n| `10d10 explode on 10 cancel on 1..2`    | Any 1 or 2 cancels                        |\n| `10d10 explode on 10 cancel >= 2`       | Operator spelling of the cancel threshold |\n| `10d10 compound on 10 cancel on 1`      | Same rule for `compound`                  |\n| `4d6 explode on 6 cancel on 1 keep 3`   | Cancels are counted before `keep` selects |\n\nThe rules in full:\n\n- **Only the initial pool cancels.** A face rolled _inside_ an explode chain\n  never cancels anything, however deep the chain goes. The budget is one\n  up-front number computed from the base pool.\n- **The budget is per pool, not per die.** With `M` base dice matching the\n  trigger and `K` base dice matching the cancel range, `max(M - K, 0)` of the\n  triggering dice begin a chain and the rest stay ordinary dice. Which of them\n  loses is settled left to right - the earliest triggering dice are the ones\n  denied. That choice cannot affect the distribution of a homogeneous pool,\n  but it is deterministic, replay-stable, and visible in the roll trace.\n- **`times` keeps its per-die meaning.** In\n  `10d10 explode twice on 10 cancel on 1` each granted die may still explode at\n  most twice, while the pool budget independently limits how many dice explode\n  at all; whichever binds first wins.\n- **Cancels are counted over the raw pool**, before any `keep` / `drop`\n  selection - filters already run after functors, and a die you dropped still\n  got rolled. All four dice can cancel in\n  `4d6 explode on 6 cancel on 1 keep 3`.\n- **The explosion budget is clamped at zero.** A negative explosion count is\n  meaningless, so extra cancels are simply wasted. This is deliberately _not_\n  symmetric with `count ... cancel`, which is never clamped so that a botch\n  stays expressible - see [Cancelling successes](#cancelling-successes).\n\nThe argument takes the same threshold spellings as a trigger: `cancel on 1`,\nthe bare `cancel 1`, `cancel on 2 or less`, `cancel on 5 or more`,\n`cancel on $ones`, and `cancel on ($n + 1)`.\n\nWhich cancel forms get an exact distribution and which fall back to Monte\nCarlo is tabulated under\n[Cancellation and exact analysis](#cancellation-and-exact-analysis).\n\n## Rerolling\n\nRoll again when triggered, but only the last roll counts.\n\n| Notation                  | Shorthand | Description                  |\n| ------------------------- | --------- | ---------------------------- |\n| `3d6 reroll on 1`         |           | Reroll 1s, no limit          |\n| `d6 reroll once on 1`     |           | Reroll at most once          |\n| `3d6 reroll on 2 or less` | `3d6r2`   | Reroll 1s and 2s             |\n| `3d6 reroll on 1..2`      |           | Same, range spelling         |\n| `3d6 reroll <= 2`         |           | Same, operator spelling      |\n| `3d6 reroll once on 1..2` |           | Range spelling after `times` |\n\n## Compound exploding\n\nLike exploding, but extra rolls are summed into the original die - one die,\nhigher value.\n\n| Notation                    | Shorthand | Description               |\n| --------------------------- | --------- | ------------------------- |\n| `d6 compound on 6`          |           | Compound on 6             |\n| `d6 compound once on 6`     |           | At most once              |\n| `3d6 compound on 6 or more` | `3d6ce6`  | Compound on 6+            |\n| `3d6 compound on 4..6`      |           | Compound on 4, 5 or 6     |\n| `3d6 compound >= 4`         |           | Same, operator spelling   |\n| `3d6 compound on max`       | `3d6cem`  | Compound on the die's max |\n| `3d6 compound max`          |           | Same                      |\n\n## Chaining functors with filters\n\nFilters can chain after a functor - the filter ranks dice by their\nper-original-die total (sum of an explode chain, last reroll, compound\ntotal, or the kept-of-pair for emphasis):\n\n```text\n4d6 explode on 6 keep 3       # keep top 3 post-explode totals\n4d6 reroll on 1 drop lowest 1\n4d6 explode on 6 keep 3 count >= 7   # successes ≥ 7 over the kept totals\n5d6 explode max keep 3\n4d6 reroll on 1 explode on 6 keep 3   # combined functor + filter\n```\n\nNote the difference between a reducer that follows a **filter** and one\nthat follows a bare functor. A filter collapses each original die to a\nsingle total first, so `4d6 explode on 6 keep 3 count >= 7` counts totals\nand a die that exploded to 7+ scores. Without a filter the reducer sees the\n**flattened** pool — an explode chain contributes one entry per rolled die,\nexactly as it does at roll time — so `4d6 explode on 6 count >= 7` is\nidentically zero (no single d6 face reaches 7), while\n`10d10 explode on 10 count >= 8` counts every 8+ in the whole chain. That\nflattened reading is what makes exploding success pools work; `compound`,\n`reroll` and `emphasis` contribute one entry per die either way, and `sum`\nis unaffected because both readings add up to the same total.\n\nThe filter must follow the functor, never precede it\n(`4d6 keep 3 explode on 6` is rejected with a migration hint that\nsuggests the swap). Bounded-times forms (`once`, `twice`,\n`N times`, `emphasis`) get exact-tier distributions. Unbounded\n`always`-times also goes exact via a probability-mass cutoff\n(epsilon = 1e-12); only chains that exceed the joint-enumeration\ncap (e.g. `4d6 explode on 6 keep 3`, ~54M joint cells) fall back\nto Monte Carlo. Combined functors (`reroll once on 1 explode once\non 6`) take the same exact path in their bounded form.\n\n## Emphasis\n\nRoll two dice, keep the result furthest from a center point.\n\n| Notation                    | Description                        |\n| --------------------------- | ---------------------------------- |\n| `d20 emphasis`              | Furthest from average; reroll ties |\n| `d20 emphasis high`         | Tie-break to higher value          |\n| `d20 emphasis low`          | Tie-break to lower value           |\n| `d20 emphasis reroll`       | Reroll ties (explicit)             |\n| `d20 furthest from 10`      | Custom center point (reroll ties)  |\n| `d20 furthest from 10 high` | Custom center, high tie-break      |\n| `d20 furthest from 10 low`  | Custom center, low tie-break       |\n\n## Dice pools / success counting\n\nCount how many dice meet one or more thresholds. Thresholds can be expressed\nwith operators, English `on ...` triggers, or the `exactly` keyword — but not\nas a bare number: `count 5` was ambiguous between `== 5` and `>= 5` and was\nremoved. (Functor triggers keep the bare form, where there is no such\nambiguity: `3d6 explode 6` is fine.) Multiple thresholds may be chained with\n`and` so each die contributes one success per matching threshold; every link\nof the chain must be an explicit threshold form too.\n\n| Notation                            | Shorthand | Description                                             |\n| ----------------------------------- | --------- | ------------------------------------------------------- |\n| `8d10 count >= 6`                   | `8d10c6`  | Count successes >= 6                                    |\n| `8d10 count on 6 or more`           |           | Same, English trigger form                              |\n| `3d6 count == 5`                    |           | Count exact 5s (operator form)                          |\n| `3d6 count exactly 5`               |           | Same, keyword form                                      |\n| `3d6 count on 5`                    |           | Same, trigger form                                      |\n| `3d6 count on 3..5`                 |           | Count dice between 3 and 5 inclusive                    |\n| `4d6 count <= 2`                    |           | Count values <= 2                                       |\n| `4d6 count > 4`                     |           | Count values > 4 (canonicalises to `>= 5`)              |\n| `4d6 count < 3`                     |           | Count values < 3 (canonicalises to `<= 2`)              |\n| `5d10 count on 6 or more and on 10` |           | Multi-step: each die counts once per matching threshold |\n\nThreshold values may be a positive literal, a `$variable`, or a\nparenthesised expression: `8d10 count >= (3d6)` rolls `3d6` once and\ncounts how many of the eight dice land at or above that value. This\napplies generally to dice-modifier arguments: triggers, counts, and\nkeep/drop amounts all accept literals, variables, and parenthesised\nexpressions (e.g. `4d6 explode on $threshold`, `6d20 keep ($n + 1)`,\n`5d10 reroll once on (d4)`).\n\nThe `and` separator only has this meaning inside a `count` reducer; outside it\nremains the boolean operator.\n\n### Multi-step counts\n\nChain thresholds with `and` to give each die one success per matching\nthreshold. For example, in `5d10 count >= 6 and == 10`, a 10 matches **both**\n`>= 6` and `== 10`, so that die contributes 2 successes; a 7 only matches `>= 6`\nand contributes 1; a 3 matches neither and contributes 0. Each segment must be\nan explicit threshold form (operator, `exactly`, or `on`):\n\n```\n5d10 count >= 6 and == 10\n4d12 count >= 6 and >= 10\n8d10 count on 6 or more and on 10\n```\n\n### Cancelling successes\n\n`cancel <range>` after a `count` reducer subtracts one success for every die of\nthe **raw** pool whose face matches the range. This is the World of Darkness\n\"ones cancel successes\" rule, and the reason the feature exists.\n\n| Notation                                     | Description                                          |\n| -------------------------------------------- | ---------------------------------------------------- |\n| `6d10 count >= 6 cancel on 1`                | oWoD 1st ed.: difficulty 6, each 1 removes a success |\n| `10d10 count >= 8 cancel on 1`               | Ten dice, difficulty 8                               |\n| `8d10 count >= 6 and >= 10 cancel on 1`      | Binds to the whole `and` chain, not to one threshold |\n| `10d10 explode on 10 count >= 8 cancel on 1` | oWoD 2nd ed. specialty: 10s explode, 1s still cancel |\n| `2d6c5 cancel on 1`                          | The `c<v>` shorthand takes the same suffix           |\n\nThe rules in full:\n\n- **The total is not clamped.** `6d10 count >= 6 cancel on 1` can evaluate to\n  `-2`, so an oWoD botch or an Exalted-style failure stays expressible and\n  \"zero successes\" stays distinguishable from \"botched by two\". This is\n  deliberately _not_ symmetric with `explode ... cancel`, whose budget is\n  clamped at zero because a negative explosion count is meaningless - see\n  [Cancelling explosions](#cancelling-explosions).\n- **Cancels are read over the raw pool**, before any `keep` / `drop`: all four\n  dice cancel in `4d6 keep 3 count >= 5 cancel on 1`.\n- **Only base dice cancel.** In `10d10 explode on 10 count >= 8 cancel on 1`\n  the count sees the whole flattened pool (base dice plus everything the chains\n  rolled), but only the ten _base_ faces can cancel - a 1 inside a chain does\n  nothing. Exact mean: `10/3 - 1`, i.e. ten dice at one third of a success\n  each, less one success for the expected number of 1s.\n- A `cancel` in the reducer and a `cancel` on the functor are independent and\n  may both appear: `10d10 explode on 10 cancel on 1 count >= 8 cancel on 1`\n  spends the 1s twice, once against explosions and once against successes.\n\nThe oWoD 1st-edition roll that motivated the mechanic, with its botch rule:\n\n```text\n# Six dice at difficulty 6; each 1 cancels a success.\n# Exact analysis: a mean of 2.4 net successes, support -6 .. 6.\n$net = 6d10 count >= 6 cancel on 1\nif $net < 0 then \"botch\" else if $net == 0 then \"failure\" else \"success\"\n```\n\n### Cancellation and exact analysis\n\nPool cancellation is always available to the Monte Carlo tier, and to the exact\ntier only where the pool still factorises. The exact tier **declines rather\nthan approximates**: a form that is not listed as exact falls back to sampling\nand stays correct, it does not report a confident wrong distribution.\n\n| Expression                                      | Tier        | Why                                                                |\n| ----------------------------------------------- | ----------- | ------------------------------------------------------------------ |\n| `10d10 count >= 8 cancel on 1`                  | exact       | Each die contributes an additive `hits(f) - 1{f in C}`             |\n| `4d6 keep 3 count >= 5 cancel on 1`             | exact       | Enumerated by pool composition (roughly up to `14d10 keep 10`)     |\n| `10d10 explode on 10 cancel on 1 count >= 8`    | exact       | Homogeneous pool, reducer is `sum` / `count` / `min` / `max`       |\n| `10d10 explode on 10 count >= 8 cancel on 1`    | exact       | Count over the flattened chain, cancel over the base faces         |\n| `3d6 compound once on 6 cancel on 1 sum`        | exact       | `compound ... cancel` is exact for `sum`                           |\n| `3d6 explode once on 6 cancel on 1 keep 2`      | Monte Carlo | A keep/drop filter ranks per-die totals that the budget correlates |\n| `[d6, d8] explode on 6 cancel on 1 count >= 5`  | Monte Carlo | Heterogeneous pool: which die is denied becomes observable         |\n| `3d6 compound once on 6 cancel on 1 count >= 6` | Monte Carlo | A granted `compound` die's entry depends on its own face           |\n| `3d6 reroll once on 1 count >= 5 cancel on 1`   | Monte Carlo | Cancel reads the raw face, the reducer the settled one             |\n| `2d6 explode once on 6 cancel on 1 average`     | Monte Carlo | `average` / `median` / `pool` depend on the pool's random length   |\n\n`ProgramStats.explainTier` names which of these applied, in the same words -\nthe analyzer and the explanation read the same rule, so they cannot drift.\n\n## Variables in dice expressions\n\nInside a dice expression, `$var` references resolve to the variable's value\nat roll time. Three positions are supported.\n\n**Additive position** - modify a roll with a constant or computed value:\n\n```\n$mod = 5\n$attack = d20 + $mod\n```\n\n**Count position** (parametric count) - roll a variable number of dice:\n\n```\n$rolls = 3\n$damage = $rolls D6     # rolls 3d6\n```\n\nThe variable may itself be a dice expression:\n\n```\n$rolls = d4            # rolls a d4 (1-4)\n$damage = $rolls D6     # rolls between 1d6 and 4d6, summed\n```\n\n**Sides position** (parametric sides):\n\n```\n$sides = 8\n$roll = 1d$sides       # rolls a d8\n```\n\n**Both positions:**\n\n```\n$n = 3\n$s = 6\n$roll = $n D$s          # rolls 3d6\n```\n\nParametric forms **require whitespace** between the variable name and the\n`d`/`D` (`$n d6`, `$n D6`, `$n DF`, `$n d{1,2}`). The no-whitespace form\n`$nD6` is rejected - it's visually ambiguous with a long variable name. The\nparser accepts either lowercase `d` or uppercase `D` after the whitespace.\nThe renderer emits uppercase `D` as the canonical form (`$n D6`) to\ndistinguish parametric heads from compact literal-count dice (`3d6`).\n\nCounts of 0 or fewer return 0; the resolved count is capped at\n`MAX_DICE_COUNT = 10000` per expression - programs that try to roll more\n(e.g., `100000d6`) throw a clear runtime error. The AST holds count and\nsides compactly regardless of size, so `100000d6 keep 1` parses instantly; the\nruntime cap only fires when you actually roll.\n\nParametric counts compose with all modifiers:\n\n```\n$n = d6\n$attack = $n D6 keep 1        # roll N d6, keep highest 1 (where N is itself a roll)\n$pool   = $n D10 count >= 6   # variable-size dice pool\n$burst  = $n D6 explode on 6  # variable-count exploding dice\n$fate   = $n DF               # N Fate dice\n```\n\n**Modifier position** - a threshold, trigger, `times` qualifier or `cancel`\nrange may also be a variable:\n\n```\n$difficulty = 8\n$ones       = 1\n$successes  = 10d10 explode on 8 or more cancel on $ones count >= $difficulty\n```\n\n### Naming a constant does not cost the exact tier\n\nEvery variable slot in a dice atom is **folded to its value before analysis**\nwhen that value is a compile-time constant, so the program above is analysed as\nthough you had written the literals. `$difficulty = 8` is exactly as exact as\n`8`, and that holds for a declared parameter and its overrides too - which is\nwhat lets a UI drive a difficulty control and still get exact distributions.\n\nThe slot does not have to be a bare read: anything\n`constantIntegerInEnv` resolves works, including arithmetic\n(`cancel on ($n + 1)`) and chains of constant bindings. Note that `/` is\ninteger division, so `$d = 8 / 3` folds to `2`.\n\nA slot that is **not** constant - `$d = d6`, a value that depends on a roll -\nhas no single value to substitute, so the atom keeps its variable and the\nprogram falls back to Monte Carlo rather than picking one of the outcomes.\n`ProgramStats.explainTier` says so in those terms.\n\n## Parse errors\n\n```ts\nimport { ProgramParser, suggestKeyword } from 'dicerollerts'\n\nconst r = ProgramParser.parse('3d6 explod on 6')\nif (!r.success) {\n  r.errors[0].message // error description\n  r.errors[0].position // character offset\n  r.errors[0].suggestion // e.g. \"Did you mean 'explode'?\"\n  r.errors[0].context // surrounding input text\n}\n\nsuggestKeyword('explod') // \"explode\"\n```\n\n---\n\n# 2. Roller and roll results\n\n```ts\nimport { Roller, RR, MAX_DICE_COUNT } from 'dicerollerts'\n\nconst roller = new Roller((sides) => Math.floor(Math.random() * sides) + 1)\n\n// With explicit options:\nconst roller2 = new Roller(rollFn, {\n  maxExplodeIterations: 100, // default 100\n  maxRerollIterations: 100,\n  maxEmphasisIterations: 100,\n})\n\nconst roll = roller.roll(expr) // RollResult tree\nRR.getResult(roll) // numeric result\n```\n\n`Roller` operates on the unified `Expression` AST emitted by\n`ProgramParser`. The roll result is a structured tree (`RollResult`)\ndescribing every die rolled, kept, and discarded - useful for transcript\nrendering and replay.\n\n`MAX_DICE_COUNT` is `10_000`. `Roller` enforces this for every n-dice\nexpression at roll time.\n\nTo roll `structured-dice-roll` expressions (`@name` references), use\n`Evaluator.run` instead - `Roller` deals only with numeric results.\n\n## Expression utilities (`DE`)\n\n```ts\nimport { DE } from 'dicerollerts'\n\nDE.toString(expr) // canonical string representation\nDE.validate(expr) // null if valid, ValidationMessage[] if not\nDE.calculateBasicRolls(expr) // count of dice in expression\nDE.simplify(expr) // constant folding & identity elimination\n```\n\n`DE.simplify` performs algebraic simplification on a `DiceExpression`:\nliteral+literal folding, unary negate folding, double-negation, identity\nelimination (`x + 0 → x`, `x * 1 → x`, etc.).\n\n---\n\n# 3. Distribution analysis on dice expressions (`DiceStats`)\n\n```ts\nimport { DiceStats } from 'dicerollerts'\n\n// Exact distribution (for expressions whose support is enumerable):\nconst dist = DiceStats.distribution(expr) // Map<number, number>\nDiceStats.mean(expr)\nDiceStats.stddev(expr)\nDiceStats.min(expr)\nDiceStats.max(expr)\nDiceStats.percentile(expr, 50)\n\n// Monte Carlo (for any expression):\nconst mc = DiceStats.monteCarlo(expr, { trials: 50000 })\nmc.mean\nmc.stddev\nmc.min\nmc.max\nmc.distribution // Map<number, number> - conditional on defined outcomes\nmc.percentile(75)\nmc.undefinedMass // fraction of trials that produced an undefined outcome\n// (division by zero); 0 if every trial was defined\n\n// Streaming Monte Carlo with progress:\nfor await (const progress of DiceStats.monteCarloAsync(expr, {\n  trials: 50_000,\n  chunkSize: 1000,\n})) {\n  // progress.completed, progress.total, progress.result\n}\n\n// Summary: exact when possible (≤ 20 basic rolls), Monte Carlo fallback:\nconst s = DiceStats.summary(expr)\ns.min\ns.max\ns.mean\ns.stddev\ns.distribution\ns.percentiles // { 25, 50, 75 }\n```\n\nExact distribution is supported for: `die`, `custom-die`, `literal`, binary\nand unary ops on those, every `dice-reduce` shape (including `dice-list-with-filter`,\nchained drop/keep, sums, mins, max, average, median, count), explode / reroll /\ncompound (both bounded `times` - `once`, `twice`, `thrice`, `N times` - and the\nunbounded `always` form via a probability-mass cutoff), combined functors\n(`reroll … explode …`), emphasis, and literal-count structured-dice rolls\n(`dice @die [...]; 3 @die`). Parametric-count dice (`$n D6`), variable-count\n`repeat $n { … }`, and chains whose joint enumeration exceeds the\nfive-million-cell cap fall back to Monte Carlo (or `ProgramStats`, which\ncan handle them in context).\n\nPool cancellation (`explode … cancel`, `count … cancel`) is exactly analysed\nonly for the shapes listed under\n[Cancellation and exact analysis](#cancellation-and-exact-analysis); every\nother cancel form falls back to sampling rather than reporting an approximate\ndistribution as exact.\n\n---\n\n# 4. Program Language\n\nA small scripting language for tabletop-RPG-flavoured automation. Variables,\nconditionals, records, arrays, comprehensions, and dice declarations.\n\n```ts\nimport { ProgramParser, Evaluator, ProgramStats } from 'dicerollerts'\n\nconst source =\n$str_mod = 5\n$ac = 15\n$attack = d20 + $str_mod\n$hit = $attack >= $ac\n$damage = if $hit then 2d6 + $str_mod else 0\n{ attack: $attack, hit: $hit, damage: $damage }\n\n\nconst parsed = ProgramParser.parse(source)\nif (!parsed.success) {\n  console.error(parsed.errors)\n} else {\n  // Single roll:\n  const evaluator = new Evaluator(\n    (sides) => Math.floor(Math.random() * sides) + 1,\n  )\n  const result = evaluator.run(parsed.program)\n  // e.g. { attack: 18, hit: true, damage: 14 }\n\n  // Probability analysis (auto-detects strategy):\n  const analysis = ProgramStats.analyze(parsed.program)\n  // analysis.strategy.tier: 'constant' | 'exact' | 'monte-carlo'\n  // analysis.stats: per-field distributions\n}\n```\n\n## Language reference\n\n### Statements\n\n- **Assignment**: `$name = expr` - variables are immutable; reassigning throws.\n  Names match `$[a-z_][a-z0-9_]*`.\n- **Parameter declaration**: `$name is { default: ..., ... }` - see\n  [Parameters](#parameters).\n- **Dice declaration**: `dice @name [ ... ]` - see\n  [Structured-face dice](#structured-face-dice).\n- **Expression statement**: any expression. The program's final value is the\n  value of the last statement.\n\nStatements are separated by newlines. Lines starting with `#` are comments;\n`#` to end-of-line is also a comment.\n\n### Expressions\n\n| Form                                                               | Notes                                                                                                                 |\n| ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |\n| `42`, `-3`, `true`, `false`, `\"text\"`                              | Literals                                                                                                              |\n| `d6`, `4d6`, `4d6 drop 1`, `@name`, `3 @name`                      | Dice atoms - see [Dice Expression Language](#1-dice-expression-language)                                              |\n| `$name`                                                            | Variable reference                                                                                                    |\n| `+`, `-`, `*`, `/`                                                 | Arithmetic (`/` is integer division)                                                                                  |\n| `a max b`, `a min b`                                               | Larger / smaller of two numbers - see [Scalar min / max](#scalar-min--max)                                            |\n| `… round`, `round up`, `round down`, `truncate`, `round half even` | Postfix rounding - see [Rounding](#rounding)                                                                          |\n| `==`, `!=`, `<`, `<=`, `>`, `>=`                                   | Comparisons                                                                                                           |\n| `and`, `or`, `not`                                                 | Booleans                                                                                                              |\n| `if cond then a else b`                                            | Conditional (else required)                                                                                           |\n| `match { ... }`, `match VALUE { ... }`                             | Pattern matching - see [Match](#match-expressions)                                                                    |\n| `{ key: value, ... }`, `{ $var }` (shorthand)                      | Records                                                                                                               |\n| `$rec.field`                                                       | Field access                                                                                                          |\n| `[1, 2, 3]`, `[d6, d8]`                                            | Array literal (also acts as a dice pool with a trailing modifier)                                                     |\n| `[...$arr, d6]`, `[...3d6]`                                        | Spread element - inline a list into an array literal                                                                  |\n| `$arr[0]`, `$arr[1:3]`, `$arr[:-1]`, `$arr[-3:]`                   | Indexing and slicing - see [Slicing](#array-slicing)                                                                  |\n| `repeat N { body }`                                                | Returns array of N body evaluations (a rolled count stays exact-analyzable while its randomness is read nowhere else) |\n| `for $x in arr { body }`                                           | Comprehension - see [Comprehensions](#comprehensions-and-fold)                                                        |\n| `<aggregator> for ...`                                             | Aggregator-prefixed comprehension                                                                                     |\n| `argmin`, `argmax`                                                 | Sugar for sort + slice (returns 1-element array)                                                                      |\n| `fold arr from init ($acc, $x) -> body`                            | Generic left fold                                                                                                     |\n\n`+` is overloaded: when either operand is a string, it concatenates; otherwise\nnumeric.\n\n### Match expressions\n\nReplace nested if-else chains with a flat form. Two modes are supported.\n\n**Guard mode** (no value after `match`): picks the first arm whose pattern is\ntruthy.\n\n```\n$damage = match {\n  $crit -> 4d6 + 1d4 + 4\n  $hit  -> 2d6 + 4\n  _     -> 0\n}\n```\n\n**Value mode** (value after `match`): compares the matched value against each\narm's pattern using `==`.\n\n```\n$roll = match $roll_mode {\n  \"advantage\"    -> 2d20 keep highest 1\n  \"disadvantage\" -> 2d20 keep lowest 1\n  _              -> d20\n}\n```\n\nArms can carry an optional `if guard` clause, evaluated only when the pattern\nmatches:\n\n```\n$damage = match $weapon {\n  \"sword\" if $crit  -> 4d6\n  \"sword\"           -> 2d6\n  \"dagger\" if $crit -> 2d4\n  \"dagger\"          -> 1d4\n  _                 -> 0\n}\n```\n\n- `_` is the wildcard (matches anything; use it as a catch-all).\n- Arms are separated by newlines or commas; trailing separators are allowed.\n- The first matching arm wins; remaining arms are not evaluated.\n- A trailing `_ -> default` is recommended - non-matching trials throw a\n  runtime error.\n\n### Comprehensions and fold\n\nIterate over arrays with optional filtering, optionally collapsing via an\naggregator prefix.\n\n```\n# Map: returns an array.\nfor $x in [1, 2, 3] { $x * 2 }            # [2, 4, 6]\n\n# Map + filter.\nfor $x in [1, 2, 3, 4] if $x > 2 { $x }   # [3, 4]\n\n# Aggregator prefix collapses to a single value.\nsum     for $x in [1, 2, 3] { $x }                # 6\nproduct for $x in [2, 3, 4] { $x }                # 24\nmax     for $x in [3, 1, 5, 2] { $x }             # 5\nmin     for $x in [3, 1, 5, 2] { $x }             # 1\naverage for $x in [2, 4, 6] { $x }                # 4\ncount   for $x in [1, 2, 3, 4, 5] if $x > 2       # 3 (no body - count only)\nfirst   for $x in [1, 2, 3] if $x > 1             # 2 (short-circuits)\nlast    for $x in [1, 2, 3] if $x > 1             # 3\n```\n\nAggregator body rules:\n\n- `count`: body is forbidden (use `count for $x in arr if cond`).\n- `first` / `last`: body is optional (defaults to the element itself).\n- All others (and the no-aggregator form): body is required.\n\n`sum` over records does field-wise sum (matching structured-face dice\nsemantics):\n\n```\nsum for $r in [{a: 1, b: 2}, {a: 3, c: 4}] { $r }\n# {a: 4, b: 2, c: 4}\n```\n\nThe `sort` aggregator returns the elements in sorted order (ascending by\ndefault) rather than collapsing them. Optional `by` (sort key) and explicit\n`asc` / `desc`:\n\n```\nsort for $x in [3, 1, 2] { $x }                          # [1, 2, 3]\nsort for $x in [3, 1, 2] desc { $x }                     # [3, 2, 1]\nsort for $r in $records by $r.priority { $r }            # records sorted by priority\nsort for $r in $records by $r.priority desc { $r }       # descending\nsort for $r in $records if $r.active by $r.priority desc { $r } # filter + by + desc\n```\n\n`argmin` and `argmax` are sugar for `sort` + slice `[0:1]`. They return a\nsingle-element array containing the element with the smallest / largest key:\n\n```\nargmin for $r in $records by $r.priority { $r }   # [record_with_min_priority]\nargmax for $r in $records by $r.priority { $r }   # [record_with_max_priority]\nargmin for $x in [3, 1, 2] { $x }                 # [1]\n```\n\nBoth forms accept a `by` clause and follow the same rules as `sort`. They\nalways sort in their natural direction (`argmin` ascending, `argmax`\ndescending) - explicit `asc` / `desc` is rejected.\n\nFor arbitrary combining logic, use `fold`:\n\n```\nfold [1, 2, 3, 4] from 0 ($acc, $x) -> $acc + $x          # 10\nfold [{a: 1}, {a: 2}, {a: 3}] from {total: 0}\n  ($acc, $x) -> {total: $acc.total + $x.a}                # {total: 6}\n```\n\nComprehension and fold introduce lexical scopes - inner `$x`, `$acc`, etc.\nshadow outer bindings of the same name within the body.\n\n### Array slicing\n\nArrays support Python-style half-open slice notation with optional negative\nindices (counted from the end):\n\n```\n$arr[1:3]    # elements at indices 1, 2 (not 3)\n$arr[:-1]    # all but the last element\n$arr[-3:]    # the last 3 elements\n$arr[:]      # full copy\n```\n\nSlices clamp out-of-range bounds rather than erroring. Slicing and indexing\ncan be chained: `$arr[:3][0]` returns the first element of the first three.\nStep (`[a:b:c]`) is not supported. `$arr[]` is rejected.\n\n### Spread elements\n\n`[...expr]` flattens a list-valued expression into the enclosing array\nliteral. Three operand shapes are lifted to lists automatically:\n\n```\n[...$arr, 99]            # $arr is already a list; concat with 99\n[...3d6]                 # 3d6 is normally a scalar sum - spread lifts\n                         # it to the three individual rolls\n[...3d6 sum]             # explicit sum can also be lifted to its pool\n[...repeat 4 { d6 }, 0]  # repeat produces a list; spread inlines it\n```\n\nBare-scalar values (`[...5]`, `[...d20 + 3]`) are rejected - spread is\nlist-only. Inside dice-pool position (`[...3d6] keep 3`), the spread is\nequivalent to writing the elements out by hand.\n\n### Structured-face dice\n\nDefine a die whose faces are records, then roll N of them with field-wise sum.\nUseful for game systems where each die face yields multiple symbols (Descent,\nStar Wars FFG, Genesys, etc.).\n\n```\ndice @attack [\n  { damage: 1 },\n  { damage: 2, range: 1 },\n  { surge: 1 },\n  { damage: 1, range: 1 },\n  { damage: 0 },\n  { damage: 2 }\n]\n\n# Bare reference rolls one face. The result carries the die's full declared\n# field set, with fields the rolled face lacks defaulting to 0.\n$one = @attack            # e.g. {damage: 2, range: 1, surge: 0}\n\n# With a count, rolls N and field-wise sums (missing fields default to 0).\n$total = 3 @attack        # e.g. {damage: 4, range: 1, surge: 1}\n\n# Parametric count.\n$n is { default: 5 }\n$variable = $n @attack\n```\n\nNumeric-faced dice are also supported and sum numerically:\n\n```\ndice @loaded [ 6, 6, 6, 6, 6, 1 ]\n100 @loaded               # heavily biased toward 6\n```\n\nRules:\n\n- Faces must be all-numeric or all-record (no mixing).\n- Record-face values must be integers (no decimals, strings, booleans, or\n  nested records).\n- Every record roll (any count `>= 1`, including a bare `@d`) carries the\n  field union of every field that appears in any declared face; a field\n  missing from a particular rolled face contributes 0. This makes `@d` and\n  `N @d` field-set-consistent, and means a mixed pool built with\n  `sum for $d in [@a, @b] { $d }` can be read per symbol (`$pool.x`) without a\n  `default` for any symbol whose source die is in the pool. (A `count == 0`\n  roll has no schema to project and stays the empty record `{}`.)\n- Structured-dice rolls cannot be combined with arithmetic or other dice in\n  the same expression - keep them in their own statement (assign to a\n  variable, or place inside a record) and combine at the program level.\n- Each `dice @name` may be declared once per program; redeclaration throws.\n\nSee [docs/structured-dice.md](docs/structured-dice.md) for the trace shape\n(`StructuredDiceRollResult`), the `flatStructuredFaces` walker for\nrendering each die independently, and end-to-end consumer patterns.\n\n#### Reading symbols from a mixed pool\n\nDifferent structured dice can't be combined in one expression, so a mixed\npool (e.g. an FFG / Genesys narrative-dice roll) is built by summing a\ncomprehension over the dice, then read per symbol:\n\n```\n$pool = sum for $d in [@proficiency, @difficulty, @difficulty] { $d }\n$pool.success - $pool.failure\n```\n\nBecause every roll carries its die's full declared schema, any symbol whose\n**source die is in the pool** reads directly and defaults to 0 when it wasn't\nshown — `$pool.triumph` is `0` on a roll where no triumph face came up, not an\nerror. A symbol whose source die is **not** in the pool is still absent and\nthrows `Record has no field 'despair'`. Use the **`default`** operator there\n(and anywhere you want an absent field, out-of-range index, or undefined\noutcome to fall back) to read it as 0:\n\n```\n{\n  net_success: $pool.success - $pool.failure,  # both source dice in the pool\n  triumphs:    $pool.triumph,                  # 0 when no triumph face came up\n  despairs:    $pool.despair default 0,        # 0 — no despair die in this pool\n}\n```\n\n`primary default fallback` yields `primary`, or `fallback` when `primary`\nhas **no value** — a missing record field, an out-of-range index\n(`$xs[99] default 0`), or an undefined outcome such as division by zero\n(`(a / b) default 0`). Every other error (type errors, undefined variables)\nstill propagates, so strict access remains the default everywhere else. It\nbinds tighter than arithmetic, so `$a.x default 0 - $b.y default 0` groups as\n`($a.x default 0) - ($b.y default 0)`. `default` is exact in `ProgramStats`\nanalysis, not only at roll time.\n\n### Parameters\n\nDeclare a variable as a parameter with `is { ... }` to give it a default value\nplus optional metadata. Tools can introspect the program to render UI inputs;\ncallers can override defaults at runtime.\n\n```\n$str_mod is {\n  default: 5,\n  min: 0,\n  max: 30,\n  label: \"STR Modifier\",\n  description: \"Your strength bonus\",\n}\n\n$weapon is {\n  default: \"longsword\",\n  enum: [\"longsword\", \"dagger\", \"greataxe\"],\n}\n\n$advantage is { default: false }\n\n$attack_die is { default: d20 }\n\n$attack = $attack_die + $str_mod\n$hit = $attack >= 15\n{ attack: $attack, hit: $hit }\n```\n\nField rules:\n\n- `default` (required): a number, boolean, string, or dice expression.\n- `label`, `description`: string literals. Either `\"double\"` or `'single'`\n  quotes work; both accept the usual `\\n`, `\\t`, `\\\\` escapes and let the\n  other quote appear unescaped (`\"can't\"`, `'he said \"hi\"'`).\n- `min`, `max`: only valid when the default is a number, or a dice expression.\n- `enum`: only valid when the default is non-number; entries must match the\n  default's primitive type and the default must be a member of the enum.\n- Dice-expression defaults may not reference structured-face dice (`@name`)\n  - use a numeric default.\n- A parameter may not be reassigned with `=`.\n\nOverride at runtime:\n\n```ts\nevaluator.run(program, { parameters: { str_mod: 7, weapon: 'dagger' } })\nProgramStats.analyze(program, { parameters: { str_mod: 7 } })\n```\n\nOverrides are validated (unknown name, type mismatch, out of range, not in\nenum) and throw clear errors. Without overrides, literal defaults act as\nconstants and dice-expression defaults are rolled per execution (or analysed\nexactly).\n\nIntrospect for UI:\n\n```ts\nimport { ProgramParameters } from 'dicerollerts'\n\nconst params = ProgramParameters.list(program)\n// Parameter[] = [{\n//   name, default?, defaultExpression?,\n//   label?, description?, min?, max?, enum?\n// }, ...]\n```\n\nThe input kind is inferred by the consumer from the data: number with `min`\nand `max` → bounded slider; string with `enum` → dropdown; boolean → toggle;\ndice expression default → free-form expression input.\n\nFor consumers that want a canonical version of that dispatch rather than\nre-implementing it, `classifyParameter` returns a tagged `ParameterKind`:\n\n```ts\nimport { ProgramParameters, classifyParameter } from 'dicerollerts'\n\nProgramParameters.list(program).map(classifyParameter)\n// ParameterKind[] - { kind: \"boolean\" } | { kind: \"string-enum\"; choices }\n//                 | { kind: \"number-enum\"; choices }\n//                 | { kind: \"number-range\"; min, max, default }\n//                 | { kind: \"number\"; default } | { kind: \"string\"; default }\n//                 | { kind: \"expression\" }\n```\n\nPrecedence: dice-expression default wins, then boolean, then enum (string\nor number), then number-range (both `min` and `max` present), then plain\nnumber, then string. The classifier never throws; ambiguous specs collapse\nto the most informative kind.\n\n### Reserved words\n\nCannot be used as record keys or identifiers: `if`, `then`, `else`, `true`,\n`false`, `and`, `or`, `not`, `repeat`, `is`, `match`, `dice`, `for`, `in`,\n`fold`, `from`, `by`, `asc`, `desc`, `argmin`, `argmax`. The wildcard `_` is\nalso reserved.\n\n---\n\n# 5. Evaluator\n\n```ts\nimport { Evaluator } from 'dicerollerts'\n\nconst evaluator = new Evaluator(\n  (sides) => Math.floor(Math.random() * sides) + 1,\n  {\n    maxRepeatIterations: 10000, // default 10000\n    onDiceTerm: (event) => {\n      // event.kind is 'arithmetic' | 'structured'\n      // event.node is the lifted dice AST node (Die / NDice / DiceReduce / ...\n      // or StructuredDiceRoll for the structured case)\n      // event.result is a RollResult tree (arithmetic) or\n      // StructuredDiceRollResult (structured)\n    },\n  },\n)\n\nevaluator.run(program)\nevaluator.run(program, { parameters: { str_mod: 7 } })\n```\n\n## Tokenization\n\nFor syntax highlighting and editor integration, the package exports a\n`tokenize(source)` function that classifies a source string into a flat\narray of position-tagged tokens.\n\n```ts\nimport { tokenize } from 'dicerollerts'\n\nconst tokens = tokenize('[d20 + $mod, d20 + $mod] max')\n// → [{ kind: 'punct', text: '[', start: 0, end: 1 },\n//    { kind: 'dice',  text: 'd20', ... },\n//    { kind: 'whitespace', text: ' ', ... },\n//    { kind: 'operator', text: '+', ... },\n//    { kind: 'variable', text: '$mod', ... },\n//    ...\n//    { kind: 'reducer', text: 'max', ... }]\n```\n\nProperties:\n\n- **Total coverage.** Every character of `source` is covered;\n  `tokens.map(t => t.text).join('')` always equals `source`. Whitespace\n  and comments (`# ...`) are first-class tokens.\n- **Context-aware classification.** The same word lands in different\n  `kind`s depending on grammatical role:\n  - `max` in `[a, b] max` → `reducer`;\n  - `max` in `max for $x in $xs { $x }` → `aggregator`;\n  - `max` in `{ max: 5 }` (plain record) → `identifier`;\n  - `max` in `$max` → part of `variable`;\n  - `max` in `$x is { max: 10 }` → `param-field`.\n- **Error recovery.** `tokenize` never throws and never returns an empty\n  array for non-empty input - unrecognized runs are emitted as `error`\n  tokens so half-typed editor buffers keep producing useful output.\n- **Shorthand splitting.** Dice modifier shorthands split into a role\n  token plus a number: `4d6k3` → `dice(\"4d6\") filter(\"k\") number(\"3\")`.\n\nThe full set of token kinds:\n\n| Kind             | Description                                            |\n| ---------------- | ------------------------------------------------------ |\n| `whitespace`     | runs of spaces / tabs / newlines                       |\n| `comment`        | `#` to end of line                                     |\n| `string`         | `\"...\"` or `'...'` (symmetric quotes)                  |\n| `number`         | integer or decimal, including unary-minus signed forms |\n| `dice`           | `d6`, `2d20`, `dF`, `d%`, `d{1,2,3}`                   |\n| `variable`       | `$name` (the `$` is part of the token)                 |\n| `identifier`     | bare identifier in non-keyword position                |\n| `structured-die` | `@name` (the `@` is part of the token)                 |\n| `keyword`        | `if`, `then`, `match`, `for`, `is`, …                  |\n| `reducer`        | `sum`, `max`, … in `[...] reducer` position            |\n| `aggregator`     | `sum`, `count`, `sort`, … in `... for $x in` position  |\n| `functor`        | `explode`, `reroll`, … and shorthands `e`, `r`, `ce`   |\n| `filter`         | `keep`, `drop`, … and shorthands `k`, `d`, `kh`, `kl`  |\n| `param-field`    | `default`, `min`, `max`, … inside `$x is { ... }`      |\n| `operator`       | `+ - * / == != < <= > >= = -> and or not × ⋅ ÷`        |\n| `punct`          | `( ) [ ] { } , . : ; %`                                |\n| `error`          | unrecognized run; tokenizer skipped to keep going      |\n\n`Token` and `TokenKind` are exported as types. Adding a new `TokenKind`\nis a minor-version bump; renaming or removing one is breaking. Consumers\ncan default-case unknown kinds to plain rendering.\n\n## Hooks\n\n`onDiceTerm` fires once per dice term the evaluator executes, in evaluation\norder. It fires:\n\n- once per iteration inside `repeat`;\n- once per passing element inside a comprehension or fold;\n- only for the taken branch of an `if` / `match`;\n- for parameter dice defaults (rolled when no override is provided).\n\nThe callback receives a tagged `DiceTermResult` event:\n\n- `event.kind === 'arithmetic'`: ordinary dice term (`die`, `n-dice`,\n  `custom-die`, `dice-reduce`). `event.result` is a `RollResult` tree.\n- `event.kind === 'structured'`: `structured-dice-roll` expression.\n  `event.result` is a `StructuredDiceRollResult` carrying `name`, per-die\n  `draws`, and the field-wise sum.\n\n`event.node` is the exact AST node from the parsed program - stable across\nruns.\n\n`onScope` is a separate callback that fires at scope boundaries -\niteration boundaries (comprehensions, `repeat`, `fold`) and conditional\nbranch boundaries (`if`, `match`). Consumers that walk the AST in\nlockstep with execution - visualizers, debuggers, the dicerun2\ninline-math walker - use it to know which iteration or branch they're\nin without re-implementing the evaluator's dispatch semantics:\n\n```ts\nnew Evaluator(rng, {\n  onDiceTerm: (e) => {\n    /* dice events */\n  },\n  onScope: (e) => {\n    switch (e.kind) {\n      case 'iteration-enter':\n        /* { node, index, total, element?, accumulator? } */ break\n      case 'iteration-exit':\n        /* { node, index } */ break\n      case 'filter-skip':\n        /* { node, index, element } - comprehension filter rejected */ break\n      case 'sort-reorder':\n        /* { node, sourceToSorted } - emitted once per sort */ break\n      case 'branch-enter':\n        /* { node, branch, scrutinee? } - if-then / if-else / match-arm */ break\n      case 'branch-exit':\n        /* { node } - pair with the matching branch-enter */ break\n    }\n  },\n})\n```\n\n`element` carries the bound element (comprehensions + fold), `accumulator`\nthe running fold state. For `sort` comprehensions, body events fire in\nsource order - `sort-reorder.sourceToSorted` is the permutation\n(`sorted[i] === source[sourceToSorted[i]]`), so consumers render the rows\nin sorted order without re-running the sort.\n\nFor `branch-enter`, `branch` is a tagged union: `{ kind: 'if-then' }`,\n`{ kind: 'if-else' }`, or `{ kind: 'match-arm', armIndex, isWildcard }`\n(where `armIndex` is the source-order position of the matched arm and\n`isWildcard` is `true` for `_`). `scrutinee` carries the matched value\nfor value-mode `match VAL { … }`; it is **absent** (not `undefined`) for\n`if` and for guard-mode `match { … }`. Use `'scrutinee' in event` as the\nvalue-mode discriminator - the absence pattern survives JSON round-trips.\n\nBranch events nest with iteration events on a shared depth stack. The\ncanonical consumer pattern is: push on every enter, pop on every exit,\nand the stack's depth at any dice event is that die's \"open conditional\ndepth\" - useful for animation staggering, debugger frame indicators,\nand conditional-frequency analysis. Condition / scrutinee dice fire on\n`onDiceTerm` _before_ the matching `branch-enter`; arm body dice fire\nbetween `branch-enter` and `branch-exit`. Both callbacks fire\nsynchronously from the same evaluator, so push order is evaluation\norder - subscribe to both and append to one buffer for a merged stream.\n\nIf an arm body throws, `branch-exit` does not fire (the event log is\nleft mid-scope, mirroring the iteration convention). A `match` whose\narms all fail raises `No match arm fired` before any `branch-enter`,\nso the stack stays balanced.\n\n`recordRun` includes scope events in `log.events` only when called with\n`{ captureScopeEvents: true }` (default `false`, so existing replay\nconsumers stay unchanged).\n\n`onAssignment` is a third callback that fires once per execution of an\n`Assignment` statement, after the RHS resolves. Drives Monaco-style\ninlay hints and any other \"show me the resolved value of `$name = …`\"\ntooling that can't run the program client-side because the RHS contains\nrandom dice:\n\n```ts\nconst values = new Map<Assignment, Value>()\nnew Evaluator(rng, {\n  onAssignment: (e) => values.set(e.node, e.value),\n}).run(program)\n// values keyed by AST node identity - last write of each Assignment wins\n```\n\nFires **once per execution**, so the same assignment inside `repeat N`\nfires N times with iteration-distinct values. Consumers that want one\nvalue per source location should key by `event.node` (or\n`event.node.loc.offset`) and use last-write-wins - keying by\n`event.node.name` is a footgun because different scopes can declare the\nsame name with distinct AST nodes. Dice events in the RHS fire on\n`onDiceTerm` before the matching `onAssignment` event. Does NOT fire\nfor parameter declarations (`$x is { … }`) or comprehension / fold\nbinders.\n\n## Replay / audit log\n\n```ts\nimport {\n  recordRun,\n  replayRun,\n  logToJSON,\n  logFromJSON,\n  ReplayDesyncError,\n  type ExecutionLog,\n} from 'dicerollerts'\n\nconst { value, log } = recordRun(program, rollFn, {\n  parameters: { x: 5 },\n  maxRepeatIterations: 1000,\n})\n\n// log.draws: number[] - every value returned by rollFn, in evaluation order\n// log.events: ExecutionEvent[] - one entry per dice-expr / structured-dice-roll\n\n// Replay using only the recorded draws (rollFn is not called):\nconst { value: replayed } = replayRun(program, log)\n// throws ReplayDesyncError if log under- or over-supplies draws\n\n// JSON round-trip (Maps are not used in the log; standard JSON.stringify works):\nconst json = logToJSON(log)\nconst restored = logFromJSON(json)\n```\n\n`recordRun` and `replayRun` accept the same `parameters` and\n`maxRepeatIterations` options as `Evaluator.run`. Branching, comprehensions,\nand `repeat` are all handled - only the draws actually consumed during the\nrecording are stored, and replaying takes the same branches deterministically.\n\n---\n\n# 6. Probability analysis on programs (`ProgramStats`)\n\n`ProgramStats.analyze()` picks one of three strategies:\n\n- **`constant`** - no randomness, single evaluation.\n- **`exact`** - covers single dice expressions, comparisons, conditionals,\n  arithmetic on independent distributions, shared variables (joint\n  enumeration), boolean ops, sort / slice / index over shared rolls,\n  comprehensions over `sum` and `sort`, symmetric statistics of large\n  homogeneous dice pools (see [Large dice pools](#large-dice-pools-exact-by-composition)),\n  `if`-driven discriminated outputs (per-variant conditional stats), and more.\n- **`monte-carlo`** - adaptive batched simulation; stops when per-bin\n  frequencies stabilise.\n\n```ts\nimport { ProgramStats } from 'dicerollerts'\n\nconst result = ProgramStats.analyze(program, {\n  minTrials: 1000, // initial batch\n  maxTrials: 100000, // cap (default 100000)\n  batchSize: 1000, // batch increment (default 1000)\n  targetRelativeError: 0.01, // 1% convergence target\n  parameters: { x: 5 }, // optional overrides\n  signa","readmeFilename":"README.md"}