{"_id":"@ribbon-studios/js-utils","_rev":"26-36a660dac3904c44251b9e84f703bec6","name":"@ribbon-studios/js-utils","dist-tags":{"latest":"3.3.2"},"versions":{"1.1.1":{"name":"@ribbon-studios/js-utils","version":"1.1.1","license":"MIT","_id":"@ribbon-studios/js-utils@1.1.1","maintainers":[{"name":"cozybot","email":"bot@ribbonstudios.com"},{"name":"cecilia-sanare","email":"admin@cecilias.me"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"4f1a78dcb2c44c71f1c0061451fd1d0454d7cd95","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.1.1.tgz","fileCount":15,"integrity":"sha512-mypGGPDxXg2Ex5VMPPTWlX+Ij4cG+TiW2KxcRWproZqQ/fh8ZXqOo+wDJmNA1jFKcxfqolfc71+1gQny+FEs0Q==","signatures":[{"sig":"MEUCIH1phoSGJZaS3N5JrHYBE6sLW3pNGKAdL7R3MTf0Q3uKAiEAhKuLGmV6OVQ0n28uiGMMgjyqtYAzSzYDhouTP38lk/Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10846},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"460998602f82e4442c2a74e95a819d7b7753fcb6","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.5.0","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"18.20.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","chance":"^1.1.11","eslint":"^8.57.0","vitest":"^1.3.1","happy-dom":"^13.5.0","typescript":"^5.3.3","vitest-dom":"^0.1.1","@types/node":"^20.11.20","vite-plugin-dts":"^3.7.3","@vitest/coverage-v8":"^1.3.1","vite-plugin-lib-types":"^3.0.9","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^7.0.2","eslint-plugin-unused-imports":"^3.1.0","@typescript-eslint/eslint-plugin":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.1.1_1712762939180_0.054865725237672525","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@ribbon-studios/js-utils","version":"1.2.0","license":"MIT","_id":"@ribbon-studios/js-utils@1.2.0","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"f3399a0ee42ec395f56fc24a1e96f9c6eb337dea","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.2.0.tgz","fileCount":17,"integrity":"sha512-0ir/+2brETC4pRe0HCTULpncUrYkH9ttP8VfeC5H4mxz60Myp69S2TF26YATcFc+ntQQcv7OXIj6Vmkuj3yRzA==","signatures":[{"sig":"MEUCICkfLx/DjBTd/TTiOu5OMmt4nR+xDTmbxJf0rFMbQ/cAAiEAtA2f0qKrK/CWJFGqTC81vQKouwhCCmRwCTzUvZDUnJs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19726},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"aea19171d8db5a19d5e164b0eee1ed8b7d2bbc11","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.18.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","chance":"^1.1.11","eslint":"^8.57.0","vitest":"^1.3.1","happy-dom":"^13.5.0","typescript":"^5.3.3","vitest-dom":"^0.1.1","@types/node":"^20.11.20","vite-plugin-dts":"^3.7.3","@vitest/coverage-v8":"^1.3.1","vite-plugin-lib-types":"^3.0.9","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^7.0.2","eslint-plugin-unused-imports":"^3.1.0","@typescript-eslint/eslint-plugin":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.2.0_1741457034498_0.2414234941322002","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@ribbon-studios/js-utils","version":"1.3.0","license":"MIT","_id":"@ribbon-studios/js-utils@1.3.0","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"1bf6c35659e73d96bba786de38d010d535b4dad2","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.3.0.tgz","fileCount":19,"integrity":"sha512-adb/MvZuAGAsg+CJHGz9RNGTuBaYewgcm1yWqcTe4vfP8nKtRKUpdsGblO5touYjLnGJIEyyFbHSjFt77YBiDA==","signatures":[{"sig":"MEQCIG4ZJSWLaEyh+apac+CMxi7RkEP8ugnilA12LTVA7ggQAiAPQ8VGGQczBY0nHLS8NaPCe5KPv2BTlEcUGSZLIKL6qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20931},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"aac9a83a43630ddef416d89ec8ea1d2c2931ac02","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.18.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.3.0_1741904729565_0.11991107747770324","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@ribbon-studios/js-utils","version":"1.3.1","license":"MIT","_id":"@ribbon-studios/js-utils@1.3.1","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"b0cf7978412522377dee753057e50ba7408b08a5","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.3.1.tgz","fileCount":19,"integrity":"sha512-HZcAN468cYxdfA755gEVjfO26IhRcGihdIzBY+/4dqoF7cbylp3qV5xCNKfPvsjcsswX8IOWwFU0pbSA3FVFFw==","signatures":[{"sig":"MEYCIQDcgW6+X1cuZ0VZ1hnmLp8F5jSjDOE0+QkUpAg/KMbCGgIhAPIffVPKeUWB4pHTXb+NyKQdYzIkDmRG81+7Zopx2duN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21731},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"fba93d64d885ca972e56e6205b9aee8fbca511ed","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.18.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.3.1_1742352966152_0.36483611073078426","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@ribbon-studios/js-utils","version":"1.4.0","license":"MIT","_id":"@ribbon-studios/js-utils@1.4.0","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"4fc71ba9571145804a2019bbd4cc567640f1fc47","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.4.0.tgz","fileCount":19,"integrity":"sha512-watvGM2Ge+uS2lAA/0KHJPMCKWPfEdblOYNftVyfY7g1OqEUXJt+ddjbqiRZnSE/PU4PhZMBtRWfcA+btSEMcA==","signatures":[{"sig":"MEUCIGduqy8Dgc/ANb9g3ntTJHsTYEiGZlZARxeRe2O8oK0uAiEA1fKy6cDFzy7TjjJO7bfOT1ooUgaT71I8XoFOCvUD4O0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23626},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"ad8777b62e1714ac9e038bbd42863250e8ed6a27","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.4.0_1742402815919_0.4003134593189741","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@ribbon-studios/js-utils","version":"1.4.1","license":"MIT","_id":"@ribbon-studios/js-utils@1.4.1","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"074dfe0f0d7e1eaf05c797bab085d32563293942","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.4.1.tgz","fileCount":19,"integrity":"sha512-BmX8Mj+7W2QOVtfBiKvXrPf7p2pDafdWR1bB9Y2i/rYSqmJGm/JefRus0LVffC9pgR+kremU4yagOyyeLXkRuQ==","signatures":[{"sig":"MEUCIGRUeKyAu/ilKsDh5R57OBFaoloeUJ5fBlmJx78xusILAiEAv9HI87HyM5TOyWo2/4PkBz/lbR3bUaA9CE5PtzfIZxM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23612},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"3b2aab572e9c63ba61fc95ed56ce5674610ddca1","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.4.1_1742403166606_0.9200559951547735","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@ribbon-studios/js-utils","version":"1.4.2","license":"MIT","_id":"@ribbon-studios/js-utils@1.4.2","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"b178557b32a4dc2445d00572224fd65959d4333e","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.4.2.tgz","fileCount":19,"integrity":"sha512-3myg37t7HjlpROl1YyDhCjUJuczspAHERLDIE8yHfSN+kGm94wFZ1DF18ZUzdnh+R5rjzxZlnbi3e9LMxZCtuQ==","signatures":[{"sig":"MEQCIAnB3TzXKqrtB6jzHH3I5q63OfOuouu1AczXwW2s2ry4AiAQWa/cmrr3MbvVpRw7+WHpaKOjNoJng0DdukXw5X0CjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23504},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"bffa08155976f705256df5355e16be236a61c26a","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.4.2_1742405289436_0.5768956566472887","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@ribbon-studios/js-utils","version":"1.4.3","license":"MIT","_id":"@ribbon-studios/js-utils@1.4.3","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"faac61d98667f98d67a6c41eb5d8bca84fd2ae54","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.4.3.tgz","fileCount":19,"integrity":"sha512-bnrqN/FiNkV+QjMsT0YOxzOvR1nAKwf4+Oy4p4VVMXvtX0W1CN7SJPF3Jpqz/uPqltiZB2ZNTxq7TLdx6bKFwQ==","signatures":[{"sig":"MEQCIFfeR18Xn0V9I2E3hbhM0O6xYVMwXDcXswUN1R+IP1hOAiAcvZlRyUwJPmZTETljXfXgVu6see7P/On/RYG4F1SQMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23049},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"78516dc3b66c5c13257122351d7d88925a4b026a","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.4.3_1742436016783_0.5721120675066869","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@ribbon-studios/js-utils","version":"1.5.0","license":"MIT","_id":"@ribbon-studios/js-utils@1.5.0","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"185bcafe3aeecd2c9ce6eeda3ff90e325bda629c","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.5.0.tgz","fileCount":19,"integrity":"sha512-2cX31shex02giicUCM8RRp0itrl6QddTAmOR0VaCdTyUVZ1Rt1b3NXI0PscGoAicjDQwvgPLvK9m6ATlseIpqA==","signatures":[{"sig":"MEUCIAReqPkkPcY3dxfuqdxJoSpQPKp8E0TVApJiGf9Ab/kwAiEAwu0CjDvHY1C4Ypp1CGz7j73iFe2CA8vBZqRVGfUDSio=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25046},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"d09378c561d5263c94a272f3dbfcbd01a1ac7117","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.5.0_1742441460709_0.8484312238567828","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@ribbon-studios/js-utils","version":"1.5.1","license":"MIT","_id":"@ribbon-studios/js-utils@1.5.1","maintainers":[{"name":"cecilia-sanare","email":"admin@cecilias.me"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"9b69155251e100c832670880a247c6d18ebd8f25","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.5.1.tgz","fileCount":19,"integrity":"sha512-qj/3iTEwMTVawUMMIMnW+8efzUoARE6Sfn/F1ekE/MHbyc0XeuEZP6YnohoFlVyCnqMqzBpspEToW6YP6/sRbw==","signatures":[{"sig":"MEUCIQDveh6UttiTOvFPCYP4TmZxw1uichiyGzf1+e79qH8dpQIgWZlHYBqre9cpQBkEXUfVIcDm+t8hcUFIZDeP18KZwSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25043},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"c3519247f14bc446f778976309fc22f6f66c6990","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.5.1_1743016180939_0.2127489937678022","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@ribbon-studios/js-utils","version":"1.5.2","license":"MIT","_id":"@ribbon-studios/js-utils@1.5.2","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"45e386159b903e0f37f488b42a7913b1954f2fd1","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.5.2.tgz","fileCount":19,"integrity":"sha512-Jey9fqoK8HGUDoqgmcj67yE7RBoE5Up0shyOeYwPAlBTDTGaln94zfQV0PGyzW0sppx1Z/zDhN0e7YRUBwhO5g==","signatures":[{"sig":"MEUCIFlgzE77Rp76Pn7iA9YZvQ8umn49z909wLCSWfRQUDVBAiEAu2C5mh9NujpnT9XMNaVdLDnRcltpcLFPUxSlo0/BrWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25041},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"52b928c684ffacf1bc437e06ee00b7d005daa7c9","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.5.2_1744472210199_0.27107762518767986","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@ribbon-studios/js-utils","version":"1.6.0","license":"MIT","_id":"@ribbon-studios/js-utils@1.6.0","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"c2b6a8e3d33e7589a75b3f31a44864dcbc8024fb","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.6.0.tgz","fileCount":19,"integrity":"sha512-M29UpPlnhurW3JrpwZ5kQc2fm+b340NokSLG0JNxRUWyBeDODrwqD2X0IczQ99VSm9abEiTd5uCtfYrWDKjtag==","signatures":[{"sig":"MEUCIHIdvN4peIM6b4Xq99eGhw+50xVQnzGdoNidorSXH4CiAiEAnXLuauQEigcVBqwC0xLm4XE6VmKhG8/NTuwBuf9npfM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26343},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"85b24b46b7e5e4fe91371364162bf5606e1e2671","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.6.0_1745426237047_0.41356260933415867","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@ribbon-studios/js-utils","version":"1.6.1","license":"MIT","_id":"@ribbon-studios/js-utils@1.6.1","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"4a2da02258bf46beddbcffc163ea4e0de7cfb3b2","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-1.6.1.tgz","fileCount":19,"integrity":"sha512-8VRgN88FKI/GpwKd8pERCMWSjmdkUCyJTafdXsnqrFa5H7+8pp+OZr/S93ITXLpzu8+9xdLBKRWK1a8t1vPynQ==","signatures":[{"sig":"MEUCIQCacnZC9i+tNwXmqzH8XXkCBVtSvR2OAueXp9xOiCOMwwIgfSk4yOYXGVekDh9nTYx8OefARqehbcfG1zlJRumiRaA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26535},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"d7d7fa1ba144e410578335269a2266f9a3a575c3","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_1.6.1_1745520626479_0.7170731085517852","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@ribbon-studios/js-utils","version":"2.0.0","license":"MIT","_id":"@ribbon-studios/js-utils@2.0.0","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"ecaa4d5521e6439fa17f7a50559c59ec82234785","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-2.0.0.tgz","fileCount":19,"integrity":"sha512-YpVxI7BxR4zt9l0WNZlYNYi/2oq4bUo03g7wSeD6d+zAcDyHywmNsjZpNleC8xThz/TE4qvapzqgfmFkVsSPEw==","signatures":[{"sig":"MEUCIQDZi55UeLtnDniHQBWg7kDQ/seF+CQGrhRdLuvIb0Xk6QIgPhoXG8Arr8Siw1DwB2ktmtjSj+J/HpNzGppvqrwgiI4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26273},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"0608162239c063200e1c0d272cc1e7b94e99b471","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_2.0.0_1745521023335_0.05048493471263038","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@ribbon-studios/js-utils","version":"2.1.0","license":"MIT","_id":"@ribbon-studios/js-utils@2.1.0","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"0e01cada9b00019a2efde44f7e1f67fe6912cca8","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-2.1.0.tgz","fileCount":19,"integrity":"sha512-qRqTH3UI9+UYBWBiIigMCVClgdrAh8cAOJRW6/JEvojtjhkLCiZFYryXGE8LmKvUzBjXTTcMMv+1agN+jf7mkQ==","signatures":[{"sig":"MEUCIQCXWOdcSt9IN6+V3UAAA+SKyroUB3PSk1c3Cj2Dv0mHTAIgCvlzfD3Kjl2gdKnZJNj+9bF6gHn0NiB+l0D/4YJ4EHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26539},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"634cc2cb7e2afaaf3035ab255f180b7ee05d2214","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_2.1.0_1748037578989_0.8593221860345015","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@ribbon-studios/js-utils","version":"2.1.1","license":"MIT","_id":"@ribbon-studios/js-utils@2.1.1","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"64d43aaf8f4849151bb9ffaa7cad8e86aed5985f","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-2.1.1.tgz","fileCount":19,"integrity":"sha512-m7HLjmRQyPJPTZS3vllS/wdEsgiHF0XgxoMM8ytQC5TFlf3qlIFLp8ucX5eT8XpYUg4ChHKTUzvu49BKK/fVdQ==","signatures":[{"sig":"MEUCIHKRyOgPjyGlXDrR8aNoKo96e0v64qYHFTNV1VYhdbJpAiEAkHr6c8Z0jW+EVGXqxSZgogKu4XDAgUYUaJHKMGQ+rjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26635},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"6f3be073cb147c777896eab1e8979bfc9fc025d9","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_2.1.1_1754938409003_0.27729851121304105","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@ribbon-studios/js-utils","version":"3.0.0","license":"MIT","_id":"@ribbon-studios/js-utils@3.0.0","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"c15dde0cb1b610469aa2efbd69ff92d4f565f47c","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.0.0.tgz","fileCount":19,"integrity":"sha512-2d2V3SLvgvjdQOZz2afAOwu/pfRaH6med500FR8IF+SXMDeHZAxo+ztEMExOtT0H0QA0ljJEz1y20A2BNAZrzQ==","signatures":[{"sig":"MEUCIQCEyaBcXwI1t097KNIsIsnhFADeTltjdI1nrEEWjDs7gQIgIv3cxXl3Tb99aohhL3mXduN9gAd+Hj7Kgs25SyrNmh4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29271},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"ece95465de931be2fa1c07de0735e33e936bdbe7","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.0.0_1757365477032_0.6912560431425532","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@ribbon-studios/js-utils","version":"3.0.1","license":"MIT","_id":"@ribbon-studios/js-utils@3.0.1","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"bot@ribbonstudios.com"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"34c05b561c20b06094d052f0601b998bfc21b3e3","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.0.1.tgz","fileCount":19,"integrity":"sha512-MMh9q9ir6rxCYYhRhzFoDG6jR/oqrexgFE5KMANXrPzjw7tgqSdVqDRQY4MQhR7BLIXY9R5iJNwsq9r9xd/hyQ==","signatures":[{"sig":"MEUCIQCtc2DFG+72YWMwtnWrYMyp6ym42IW6oxB8lsr0wLAxMgIgfe7bG50sAUYA8RNd9FPDaB91jA876gTtTkJUnd9JEfo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29285},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"ec0ed66190c5ee7d157d9c086711b275c25731c4","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"bot@ribbonstudios.com"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Rainbow Cafe~","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jiti":"^2.4.2","vite":"^6.2.1","chance":"^1.1.12","vitest":"^3.0.8","happy-dom":"^17.4.1","@eslint/js":"^9.22.0","typescript":"^5.8.2","vitest-dom":"^0.1.1","@types/node":"^22.13.10","@types/chance":"^1.1.6","vite-plugin-dts":"^4.5.3","typescript-eslint":"^8.26.0","@vitest/coverage-v8":"^3.0.8","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.26.0","eslint-plugin-unused-imports":"^4.1.4","@typescript-eslint/eslint-plugin":"^8.26.0"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.0.1_1757506997529_0.5950663448038065","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@ribbon-studios/js-utils","version":"3.1.0","license":"MIT","_id":"@ribbon-studios/js-utils@3.1.0","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"eed9abec91c496ca5f9568df30edac9839f24e81","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.1.0.tgz","fileCount":21,"integrity":"sha512-IAWadkR1uRPNtnr4/ZSDXWzRXOcy4qGrDt7QDgKG+8ZG7F32LdvwoxbN9O6xBt0AZt/CxP5lMU88CUOOte3nxQ==","signatures":[{"sig":"MEUCIHoXJuqHJQ+G++JUQfjx7gAsGGbtqvpz2+BWaU3SYCzhAiEA3K66btj2kaKLhcOBeA4jI7V3Apbh38jIwb7bGGohbAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30198},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"7d67f9a11923d0983d91c8d0c74cf7ba07cb9289","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.18.0","jiti":"^2.6.1","vite":"^7.3.1","chance":"^1.1.13","vitest":"^4.0.18","happy-dom":"^20.8.3","@eslint/js":"^10.0.1","typescript":"^5.9.3","vitest-dom":"^0.1.1","@types/node":"^22.19.15","@types/chance":"^1.1.7","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.56.1","@vitest/coverage-v8":"^4.0.18","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.56.1","eslint-plugin-unused-imports":"^4.4.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.1.0_1772850171674_0.5479399523634936","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@ribbon-studios/js-utils","version":"3.1.1","license":"MIT","_id":"@ribbon-studios/js-utils@3.1.1","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"f994fbbf19f5f6a0ad366ba71ecda52a5b0b0650","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.1.1.tgz","fileCount":21,"integrity":"sha512-ioyB50US+pnPspOdsp257UJpE3+dhWQX1Jz7D/EXLSt6e2ZfFAe9F3MUQzc4zTJue6dbFek2wF3M1KBdVZPCEw==","signatures":[{"sig":"MEYCIQCdGRNLi0W75g8gTPSWazwlmJpALk0/BPOE/XqhKwnzPAIhAOUEXTv1seF39wYKOdrNPG9reBDIzn0P6sSCPUJHxUEH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31884},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"53a088f4b3594c655c14e89a1c3f6204f4a121a7","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.18.0","jiti":"^2.6.1","vite":"^7.3.1","chance":"^1.1.13","vitest":"^4.0.18","happy-dom":"^20.8.3","@eslint/js":"^10.0.1","typescript":"^5.9.3","vitest-dom":"^0.1.1","@types/node":"^22.19.15","@types/chance":"^1.1.7","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.56.1","@vitest/coverage-v8":"^4.0.18","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.56.1","eslint-plugin-unused-imports":"^4.4.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.1.1_1772850843637_0.26977931432487146","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"@ribbon-studios/js-utils","version":"3.1.2","license":"MIT","_id":"@ribbon-studios/js-utils@3.1.2","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"7f344e132efa8365240c897ed66546a77ea9a44d","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.1.2.tgz","fileCount":21,"integrity":"sha512-f9o41ns3vjJbjCBVh2snpbc30evQy2UstgFFBpAL6efowKs/NyAa7pZGOZox44QbhEEn75p6UAqo/dA310srqg==","signatures":[{"sig":"MEQCIDvPK8rPH1r92MGB2iaEQRx2ku+ST+8xkt003gL5op3OAiAn+anwPamfLcZ2bG5+uEQNi7GgHXwAH8bgk2i3PNiulA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32186},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"78054cc664ced8bc1cfc496465c5c4151d3d3850","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.18.0","jiti":"^2.6.1","vite":"^7.3.1","chance":"^1.1.13","vitest":"^4.0.18","happy-dom":"^20.8.3","@eslint/js":"^10.0.1","typescript":"^5.9.3","vitest-dom":"^0.1.1","@types/node":"^22.19.15","@types/chance":"^1.1.7","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.56.1","@vitest/coverage-v8":"^4.0.18","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.56.1","eslint-plugin-unused-imports":"^4.4.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.1.2_1772851626297_0.40508275388040516","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@ribbon-studios/js-utils","version":"3.2.0","license":"MIT","_id":"@ribbon-studios/js-utils@3.2.0","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"a4833bc2bef2add61bce530116ce823ffbc135fa","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.2.0.tgz","fileCount":21,"integrity":"sha512-YkAQSsq+WsZVqkfUdjd/L2Jx3ciYnSlAYBKwwAtWuX66WeSLFIxJUoWyqdWEaaGl3txbOSH8r0dQ8q0RHj1O1w==","signatures":[{"sig":"MEUCIGioWtlihkrjMD0whD81nEYmiX606mN9SNcDjt5/NairAiEA7oUp+nBreFPXayTNNv9CdjabDchEhxnfXnpVq3QirNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40510},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"19f6fcb746c82577865daeadc3393b46bb31ab56","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.18.0","jiti":"^2.6.1","vite":"^7.3.1","chance":"^1.1.13","vitest":"^4.0.18","happy-dom":"^20.8.3","@eslint/js":"^10.0.1","typescript":"^5.9.3","vitest-dom":"^0.1.1","@types/node":"^22.19.15","@types/chance":"^1.1.7","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.56.1","@vitest/coverage-v8":"^4.0.18","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.56.1","eslint-plugin-unused-imports":"^4.4.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.2.0_1772857089966_0.7860598467331228","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"@ribbon-studios/js-utils","version":"3.2.1","license":"MIT","_id":"@ribbon-studios/js-utils@3.2.1","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"2f6e0116e0bee1042d3429147ec0e2dea3752a14","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.2.1.tgz","fileCount":22,"integrity":"sha512-6eQkYGBK4wRwWmYczAqpk0m39X2y1yxUNsbVpp0whz9F8iDcV5mOxm4OdOiJIyJYIOOA5AJ1Q/dougkO9TVlYA==","signatures":[{"sig":"MEYCIQC8kiU9i2qrMQCpQ1QOi4glT1aDuDxzm66jd5bjFtPDdQIhAP3A1N2r7f3WZrFguVZIyUd71od+GeG1pp1OQ6xxJ2mI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40723},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"1ff39efd6e0d338dc6b5a39ac34931df2ccd84ff","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.18.0","jiti":"^2.6.1","vite":"^7.3.1","chance":"^1.1.13","vitest":"^4.0.18","happy-dom":"^20.8.3","@eslint/js":"^10.0.1","typescript":"^5.9.3","vitest-dom":"^0.1.1","@types/node":"^22.19.15","@types/chance":"^1.1.7","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.56.1","@vitest/coverage-v8":"^4.0.18","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.56.1","eslint-plugin-unused-imports":"^4.4.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.2.1_1773187493269_0.8591055995814156","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@ribbon-studios/js-utils","version":"3.3.0","license":"MIT","_id":"@ribbon-studios/js-utils@3.3.0","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"homepage":"https://github.com/ribbon-studios/js-utils#readme","bugs":{"url":"https://github.com/ribbon-studios/js-utils/issues"},"dist":{"shasum":"1e6114ac258d3f24993e6e5a2164aaaa2cc71e8d","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.3.0.tgz","fileCount":22,"integrity":"sha512-LvFBHl2cQJst5hGK95+UeGBfn6M4p/r6dd2SDhTwkmrc90PyzsoKJZ+0ZvRbr/ed8T4ou5W65rmVerSUriP48g==","signatures":[{"sig":"MEUCIEu6M+hSww1O953wIzknCGXeQFIyL3CXNxX+Gx35XGHpAiEAk/kDWQIawwAqzj6eizXvVH43Enck2oU9VzNx4ctz28g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40951},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"8c8d918dd8218b5d5ca15b9aadef7e9e367c239e","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"repository":{"url":"git+https://github.com/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.18.0","jiti":"^2.6.1","vite":"^7.3.1","chance":"^1.1.13","vitest":"^4.0.18","happy-dom":"^20.8.3","@eslint/js":"^10.0.1","typescript":"^5.9.3","vitest-dom":"^0.1.1","@types/node":"^22.19.15","@types/chance":"^1.1.7","vite-plugin-dts":"^4.5.4","typescript-eslint":"^8.56.1","@vitest/coverage-v8":"^4.0.18","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.56.1","eslint-plugin-unused-imports":"^4.4.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.3.0_1773380345454_0.6058794070064915","host":"s3://npm-registry-packages-npm-production"}},"3.3.1":{"name":"@ribbon-studios/js-utils","version":"3.3.1","license":"MIT","_id":"@ribbon-studios/js-utils@3.3.1","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"homepage":"https://codeberg.org/ribbon-studios/js-utils","bugs":{"url":"https://codeberg.org/ribbon-studios/js-utils/issues"},"dist":{"shasum":"14bedcd6990fde0614f07a5f680853009a34ae6c","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.3.1.tgz","fileCount":22,"integrity":"sha512-pvk5KdGU/Bcvu6wX3ArM0RtR5hDmMwR/XT4VMJRF6keLVA0WhT5MRkhYtAG32+FjiopH6JSYNF5EpINNeetXnA==","signatures":[{"sig":"MEYCIQDR5rezSGi22jXKpfHoTJxlb1LQ71My0HOYJrV1lU/5HgIhALcJy7JtAlrMeTjcT97ULfmMBWb3XOd7vb+gzA09C59e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41685},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.js","module":"./dist/index.module.js","source":"src/*.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"199faa46fabd4803d173ea3580345e091ad318d1","scripts":{"ci":"bun install --frozen-lockfile","lint":"eslint 'src/**/*.ts'","test":"vitest","build":"rm -rf dist && vite build","badges":"lcov-badge2 -o coverage/badge.svg coverage/lcov.info","test:coverage":"vitest --coverage"},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"repository":{"url":"https://codeberg.org/ribbon-studios/js-utils.git","type":"git"},"_npmVersion":"11.12.0","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.18.0","jiti":"^2.6.1","vite":"^8.0.1","chance":"^1.1.13","vitest":"^4.1.0","happy-dom":"^20.8.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","vitest-dom":"^0.1.1","@types/node":"^25.5.0","lcov-badge2":"^1.1.4","@types/chance":"^1.1.7","vite-plugin-dts":"^4.5.4","semantic-release":"^25.0.3","typescript-eslint":"^8.57.1","@vitest/coverage-v8":"^4.1.0","vite-plugin-lib-types":"^3.1.2","@typescript-eslint/parser":"^8.57.1","eslint-plugin-unused-imports":"^4.4.1","@fsl-s/semantic-release-forgejo":"^1.0.0","@typescript-eslint/eslint-plugin":"^8.57.1"},"_npmOperationalInternal":{"tmp":"tmp/js-utils_3.3.1_1774012206870_0.8618683115794261","host":"s3://npm-registry-packages-npm-production"}},"3.3.2":{"name":"@ribbon-studios/js-utils","version":"3.3.2","description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","type":"module","source":"src/*.ts","main":"./dist/index.cjs","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"ci":"bun install --frozen-lockfile","test":"vitest","test:coverage":"vitest --coverage","lint":"eslint 'src/**/*.ts'","build":"rm -rf dist && vite build --minify","badges":"lcov-badge2 -o coverage/badge.svg coverage/lcov.info"},"devDependencies":{"@eslint/js":"^10.0.1","@fsl-s/semantic-release-forgejo":"^1.0.0","@types/chance":"^1.1.7","@types/node":"^25.5.0","@typescript-eslint/eslint-plugin":"^8.57.1","@typescript-eslint/parser":"^8.57.1","@vitest/coverage-v8":"^4.1.0","ajv":"^8.18.0","chance":"^1.1.13","eslint-plugin-unused-imports":"^4.4.1","happy-dom":"^20.8.4","jiti":"^2.6.1","lcov-badge2":"^1.1.4","semantic-release":"^25.0.3","typescript":"^5.9.3","typescript-eslint":"^8.57.1","vite":"^8.0.1","vite-plugin-dts":"^4.5.4","vite-plugin-lib-types":"^3.1.2","vitest":"^4.1.0","vitest-dom":"^0.1.1"},"publishConfig":{"access":"public"},"homepage":"https://codeberg.org/ribbon-studios/js-utils","bugs":{"url":"https://codeberg.org/ribbon-studios/js-utils/issues"},"repository":{"type":"git","url":"https://codeberg.org/ribbon-studios/js-utils.git"},"license":"MIT","gitHead":"ccecbc119d445ca8e5571662e27d87bf82c4be92","_id":"@ribbon-studios/js-utils@3.3.2","_nodeVersion":"24.14.0","_npmVersion":"11.12.0","dist":{"integrity":"sha512-oJ6eHpLo8d1xOjHuOjMlJaS0yywk9BPnbMw4ZIAqlaXZamLGILWnKUchT3vlpoJ/8T/MOF5fNSNZ1RRbeD/Asg==","shasum":"d7dd80b86d2012fde3d73d9eba6ff968b4837258","tarball":"https://registry.npmjs.org/@ribbon-studios/js-utils/-/js-utils-3.3.2.tgz","fileCount":22,"unpackedSize":32278,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIErWWbCzLkSPH92GT5sXGEMR5ghzu5oW6l3Ve6+6IhXvAiAQSpY2sTKW+rgORUS9RL353+Dc4KOpDoSxqHWR+Q4cfg=="}]},"_npmUser":{"name":"cozybot","email":"ceci+bot@sanare.dev"},"directories":{},"maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/js-utils_3.3.2_1774014328081_0.7153984530921109"},"_hasShrinkwrap":false}},"time":{"created":"2024-04-10T15:28:59.080Z","modified":"2026-03-20T13:45:28.397Z","1.1.1":"2024-04-10T15:28:59.359Z","1.2.0":"2025-03-08T18:03:54.679Z","1.3.0":"2025-03-13T22:25:29.767Z","1.3.1":"2025-03-19T02:56:06.319Z","1.4.0":"2025-03-19T16:46:56.111Z","1.4.1":"2025-03-19T16:52:46.789Z","1.4.2":"2025-03-19T17:28:09.687Z","1.4.3":"2025-03-20T02:00:16.975Z","1.5.0":"2025-03-20T03:31:00.878Z","1.5.1":"2025-03-26T19:09:41.143Z","1.5.2":"2025-04-12T15:36:50.399Z","1.6.0":"2025-04-23T16:37:17.230Z","1.6.1":"2025-04-24T18:50:26.657Z","2.0.0":"2025-04-24T18:57:03.497Z","2.1.0":"2025-05-23T21:59:39.185Z","2.1.1":"2025-08-11T18:53:29.182Z","3.0.0":"2025-09-08T21:04:37.224Z","3.0.1":"2025-09-10T12:23:17.693Z","3.1.0":"2026-03-07T02:22:51.824Z","3.1.1":"2026-03-07T02:34:03.811Z","3.1.2":"2026-03-07T02:47:06.458Z","3.2.0":"2026-03-07T04:18:10.126Z","3.2.1":"2026-03-11T00:04:53.434Z","3.3.0":"2026-03-13T05:39:05.605Z","3.3.1":"2026-03-20T13:10:07.019Z","3.3.2":"2026-03-20T13:45:28.247Z"},"bugs":{"url":"https://codeberg.org/ribbon-studios/js-utils/issues"},"license":"MIT","homepage":"https://codeberg.org/ribbon-studios/js-utils","repository":{"type":"git","url":"https://codeberg.org/ribbon-studios/js-utils.git"},"description":"Collection of generic javascript utilities curated by the Ribbon Studios Team~","maintainers":[{"name":"cecilia-sanare","email":"ceci@sanare.dev"},{"name":"cozybot","email":"ceci+bot@sanare.dev"}],"readme":"[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Coverage][coverage-image]][coverage-url]\n\n[![CI Build][build-image]][build-url]\n[![Semantic Release][semantic-release-image]][semantic-release-url]\n[![Code Style: Prettier][code-style-image]][code-style-url]\n\n</div>\n\n# JS Utils 🔧\n\nCollection of generic javascript utilities curated by the Ribbon Studios Team~\n\n- [Promises](#promises)\n  - [`delay`](#delay)\n    - [`delay.fallback`](#delayfallback)\n  - [`assert`](#assert)\n    - [`assert.defined`](#assertdefined)\n  - [`never`](#never)\n  - [`retry`](#retry)\n- [Fetch](#fetch)\n  - [`rfetch`](#rfetch)\n    - [`rfetch.get`](#rfetchget)\n    - [`rfetch.put`](#rfetchput)\n    - [`rfetch.post`](#rfetchpost)\n    - [`rfetch.patch`](#rfetchpatch)\n    - [`rfetch.delete`](#rfetchdelete)\n    - [`rfetch.interceptors.request`](#rfetchinterceptorsrequest)\n    - [`rfetch.interceptors.reject`](#rfetchinterceptorsreject)\n    - [`rfetch.delimiters`](#rfetchdelimiters)\n- [Storage](#storage)\n  - [`RibbonStorage`](#ribbonstorage)\n\n## Promises\n\n### `delay`\n\nCreates a delayed promise for the given amount of seconds and given promises.\nThis can be useful for allowing spinners / loading skeletons to exist for a bit rather then quickly popping in and out.\n\n```tsx\nimport { delay } from '@ribbon-studios/js-utils';\n\nconst promise = delay(); // Returns a promise with the preset delay\nconst promise = delay(1000); // Returns a promise with the given delay\nconst promise = delay(Promise.resolve('hello')); // Returns the original promise with the preset delay\nconst promise = delay(Promise.resolve('hello'), 1000); // Returns the original promise with the given delay\n```\n\n### `delay.fallback`\n\nThis overrides the default delay value\n\n```tsx\nimport { delay } from '@ribbon-studios/js-utils';\n\nconst promise = delay(); // Returns a promise with a delay of 500ms\ndelay.fallback(100);\nconst promise = delay(); // Returns a promise with a delay of 100ms\n```\n\n### `assert`\n\nOn its own assert isn't overly useful just because of how type assertion works.\n\n```tsx\nimport { assert } from '@ribbon-studios/js-utils';\n\nexport async function example() {\n  const promise: Promise<string | undefined> = Promise.resolve('hello');\n  // Run an assertion on the promises response\n  const assertedPromise: Promise<string | undefined> = assert(promise, (value) => typeof value !== 'undefined');\n  // Unfortunately our response is still considered undefined because we can't forward the assertion\n}\n```\n\n### `assert.defined`\n\nEnsures the promise result is defined.\n\n```tsx\nimport { assert } from '@ribbon-studios/js-utils';\n\nexport async function example() {\n  const promise: Promise<string | undefined> = Promise.resolve('hello');\n\n  // Run an assertion on the promises response\n  const assertedPromise: Promise<string> = assert.defined(promise);\n  // Our promise is no longer considered undefined!\n\n  // You can also pass a message to throw!\n  const assertedPromise: Promise<string> = assert.defined(promise, 'Expected our thing to exist!');\n}\n```\n\n### `never`\n\nCreates a promise that never resolves.\nPrimary use-case for this is testing loading states.\n\nIn the event a promise is passed it will log a warning in the console as a reminder not to leave it in.\n\n```tsx\nimport { never } from '@ribbon-studios/js-utils';\n\nconst promise = never(); // Returns a promise that never resolves\nconst promise = never(Promise.resolve('hello')); // Returns a promise that never resolves\n```\n\n### `retry`\n\nRetries a function `n` times until it resolves successfully.\nThis can be useful for requests that tend to be flaky.\n\n```tsx\nimport { retry } from '@ribbon-studios/js-utils';\n\n// Returns a promise that resolves when the request is successful or fails after its exceeded that maximum attempts.\nconst promise = retry(() => getMaps(), 5);\n```\n\n## Fetch\n\n### `rfetch`\n\nLightweight wrapper around fetch that automatically handles:\n\n- Query Params\n- Form Data & JSON bodies\n- JSON Responses (fallsback to text)\n- Type Casting\n- Errors\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\ntry {\n  const response = await rfetch<MyExpectedResponse>('https://ribbonstudios.com', {\n    params: {\n      hello: 'world',\n    },\n    body: {\n      hallo: 'welt',\n    },\n  });\n\n  console.log(response);\n  // => MyExpectedResponse\n} catch (error: RibbonFetchError<MyExpectedErrorResponse>) {\n  console.error(error);\n  // => { status: number; content: MyExpectedErrorResponse; }\n}\n```\n\n### `rfetch.get`\n\nShorthand for GET requests.\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\n// Shorthand for GET requests.\nawait rfetch.get<MyExpectedResponse>('https://ribbonstudios.com');\n```\n\n### `rfetch.put`\n\nShorthand for PUT requests.\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\n// Shorthand for PUT requests.\nawait rfetch.put<MyExpectedResponse>('https://ribbonstudios.com');\n```\n\n### `rfetch.post`\n\nShorthand for POST requests.\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\n// Shorthand for POST requests.\nawait rfetch.post<MyExpectedResponse>('https://ribbonstudios.com');\n```\n\n### `rfetch.patch`\n\nShorthand for PATCH requests.\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\n// Shorthand for PATCH requests.\nawait rfetch.patch<MyExpectedResponse>('https://ribbonstudios.com');\n```\n\n### `rfetch.delete`\n\nShorthand for DELETE requests.\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\n// Shorthand for DELETE requests.\nawait rfetch.delete<MyExpectedResponse>('https://ribbonstudios.com');\n```\n\n### `rfetch.interceptors.request`\n\nUseful for enhancing requests with additional information\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\nconst interceptor = (url: URL, options: RequestInit): RequestInit | Promise<RequestInit> => {\n  return options; // Return the modified options!\n};\n\nrfetch.interceptors.request.add(interceptor); // Add the interceptor\nrfetch.interceptors.request.remove(interceptor); // Remove the interceptor\nrfetch.interceptors.request.clear(); // Clear all interceptors\n```\n\n### `rfetch.interceptors.reject`\n\nUseful for handling special cases when a failed request occurs\n\n```tsx\nimport { rfetch, type RibbonFetchError } from '@ribbon-studios/js-utils';\n\nconst interceptor = (url: URL, error: RibbonFetchError): RibbonFetchError | Promise<RibbonFetchError> => {\n  return error; // Return the modified error!\n};\n\nrfetch.interceptors.reject.add(interceptor); // Add the interceptor\nrfetch.interceptors.reject.remove(interceptor); // Remove the interceptor\nrfetch.interceptors.reject.clear(); // Clear all interceptors\n```\n\n### `rfetch.delimiters`\n\nSpecifies which delimiters should be used.\n\n```tsx\nimport { rfetch, DelimiterType } from '@ribbon-studios/js-utils';\n\nrfetch.delimiters(DelimiterType.DUPLICATE); // Use duplicate query params\n\n// This is the default functionality\n// https://ribbonstudios.com?hello=world&hello=welt\nawait rfetch.get('https://ribbonstudios.com', {\n  params: {\n    hello: ['world', 'welt'],\n  },\n});\n\nrfetch.delimiters(DelimiterType.COMMA); // Use comma separators\n\n// https://ribbonstudios.com?hello=world,welt\nawait rfetch.get('https://ribbonstudios.com', {\n  params: {\n    hello: ['world', 'welt'],\n  },\n});\n```\n\n### `rfetch.is.error`\n\nA type guard that helps determine if the error is from a `rfetch` response.\n\n```ts\nimport { rfetch } from '@ribbon-studios/js-utils';\n\ntry {\n  await rfetch.get('https://ribbonstudios.com');\n} catch (error: any) {\n  if (rfetch.is.error(error) && error.status === 404) {\n    // Do something!\n  }\n\n  throw error;\n}\n```\n\n## Storage\n\n### `RibbonStorage`\n\nA small wrapper around local / session storage that automatically stringifies and parses responses.\n\n```ts\nimport { RibbonStorage } from '@ribbon-studios/js-utils';\n\nRibbonStorage.local.set('hello', 'world'); // Sets 'hello' key in localStorage to '\"world\"'\nRibbonStorage.local.get('hello'); // 'world'\n\nRibbonStorage.session.set('hello', 'world'); // Sets 'hello' key in sessionStorage to '\"world\"'\nRibbonStorage.session.get('hello'); // 'world'\n```\n\n[_**Want to Contribute?**_](/CONTRIBUTING.md)\n\n[npm-version-image]: https://img.shields.io/npm/v/@ribbon-studios/js-utils.svg\n[npm-downloads-image]: https://img.shields.io/npm/dm/@ribbon-studios/js-utils.svg\n[npm-url]: https://npmjs.org/package/@ribbon-studios/js-utils\n[build-image]: https://codeberg.org/ribbon-studios/js-utils/badges/workflows/ci.yml/badge.svg?branch=main\n[build-url]: https://codeberg.org/ribbon-studios/js-utils/actions?workflow=ci.yml&branch=main\n[coverage-image]: https://ribbon-studios.codeberg.page/js-utils/badge.svg\n[coverage-url]: https://ribbon-studios.codeberg.page/js-utils\n[code-style-image]: https://img.shields.io/badge/code%20style-prettier-ff69b4.svg\n[code-style-url]: https://prettier.io\n[semantic-release-url]: https://github.com/semantic-release/semantic-release\n[semantic-release-image]: https://img.shields.io/badge/%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079\n","readmeFilename":"README.md"}