{"_id":"@goodbyenjn/utils","_rev":"32-10466eedfde612cfc3416d245cf0a8e9","name":"@goodbyenjn/utils","dist-tags":{"latest":"26.9.1"},"versions":{"1.0.0":{"name":"@goodbyenjn/utils","version":"1.0.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@1.0.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"7b0733e50496cacd34d30fbbb14aa7926748cb3b","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-1.0.0.tgz","fileCount":18,"integrity":"sha512-oUR37izaNSkyf8adNOAMwHSYmNWvXkrFaWZiV7bctynCYTjJJk5/AWPqwu28A/N40WCfQ6S7q+2xNpNCDKEv6g==","signatures":[{"sig":"MEYCIQC05t26gW6V5kg+R5hT7KMCL/2cFoAFaCDKUR+9AF4FwQIhALLAK0smtoLtCT/Hqy+badtZulww3CpQksPLkNgQBNt2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":879185},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"e29e8b2e7e1967a7ec6a3af704978a5230e15fe7","scripts":{"build":"pnpm run clean && pnpm run bundle","clean":"rm -rf dist","bundle":"rolldown -c rolldown.config.ts"},"_npmUser":{"name":"goodbyenjn","email":"cc@fuckwall.cc"},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"10.9.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"22.17.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.32.0","remeda":"^2.26.1","rotery":"^0.7.0","prettier":"^3.6.2","rolldown":"1.0.0-beta.29","type-fest":"^4.41.0","typescript":"^5.8.3","@types/node":"^24.1.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.0.0","rolldown-plugin-dts":"^0.14.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.0_1753641961631_0.5832176473244426","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@goodbyenjn/utils","version":"1.1.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@1.1.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"13b8b818e977b6f154ccc39f745cc0723af34ba2","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-1.1.0.tgz","fileCount":18,"integrity":"sha512-n0aoS5svQ2V9abk8WF7Bqvx2SseIsZ3OE5+XNcYMuzSSHSSO+njJLknw10/7WqMrllLhYaFHNF9WL752PQ34Dg==","signatures":[{"sig":"MEUCIAONxZNI44y28E+ADS4TkyJFCQPCN1svrf4i19hwuxHQAiEAsNldiTc/eRzpaomoYcFxVqaHLJft43BkPJIbO0MZOaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":884016},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"e36579efb085bb2a023045295c83b35cb2a0f921","scripts":{"build":"pnpm run clean && pnpm run bundle","clean":"rm -rf dist","bundle":"rolldown -c rolldown.config.ts"},"_npmUser":{"name":"goodbyenjn","email":"cc@fuckwall.cc"},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"10.9.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"22.17.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.32.0","remeda":"^2.26.1","rotery":"^0.7.0","vitest":"^3.2.4","prettier":"^3.6.2","rolldown":"1.0.0-beta.29","type-fest":"^4.41.0","typescript":"^5.8.3","@types/node":"^24.1.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.0.0","rolldown-plugin-dts":"^0.14.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.1.0_1753815947929_0.5964141323382908","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@goodbyenjn/utils","version":"1.1.1","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@1.1.1","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"68c93568d2295f6bb9b80d5622bef5404ba40dcc","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-1.1.1.tgz","fileCount":18,"integrity":"sha512-mEOqzRc5UoHIdBLIa6wnuI5BcfvlnzEyRIrdeYHAjeaS8AqxsOyIo866x3PXCFGWz+d47rz61S9SeBmDxUzbwA==","signatures":[{"sig":"MEUCIBXhcG7dpBSipWbZYiuQUPpzcgYovZW/XwtoEkqT9QkeAiEA2Vma1ejmTln8q0EPvVpWt237GQNNTA2gOfEnfjkJFoE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":884275},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"0b66d7698d7d0681304da4f2815b29471352b295","scripts":{"build":"pnpm run clean && pnpm run bundle","clean":"rm -rf dist","bundle":"rolldown -c rolldown.config.ts"},"_npmUser":{"name":"goodbyenjn","email":"cc@fuckwall.cc"},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"10.9.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"22.17.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.32.0","remeda":"^2.26.1","rotery":"^0.7.0","vitest":"^3.2.4","prettier":"^3.6.2","rolldown":"1.0.0-beta.29","type-fest":"^4.41.0","typescript":"^5.8.3","@types/node":"^24.1.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.0.0","rolldown-plugin-dts":"^0.14.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.1.1_1753984646750_0.21112062463890702","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@goodbyenjn/utils","version":"1.2.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@1.2.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"79e526c8dd3cfac9d6ab312e78ca99031a1a9389","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-1.2.0.tgz","fileCount":18,"integrity":"sha512-1rnaRaqwBb2RP3JOTh/QzLVGL1BW0NTb+aO50opzfxJIHkwb/+cRoxXkE9EQjrcVU5Z+eejAvUNTXb1/pIY/Ww==","signatures":[{"sig":"MEQCIAwoZcBC4KMikwTx+7DmH2a4T3OJVZavjFxEfJFi1wvpAiAbSkhX4NZNjETAGMLs3ot0YLONFyHib4JkL9kVtVZKWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":884944},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"7a3136f2290af90e9afb976d122fad36460c8b3b","scripts":{"build":"pnpm run clean && pnpm run bundle","clean":"rm -rf dist","bundle":"rolldown -c rolldown.config.ts"},"_npmUser":{"name":"goodbyenjn","email":"cc@fuckwall.cc"},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"10.9.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"22.17.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.32.0","remeda":"^2.26.1","rotery":"^0.7.0","vitest":"^3.2.4","prettier":"^3.6.2","rolldown":"1.0.0-beta.29","type-fest":"^4.41.0","typescript":"^5.8.3","@types/node":"^24.1.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.0.0","rolldown-plugin-dts":"^0.14.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.2.0_1753989511004_0.7259471915351481","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@goodbyenjn/utils","version":"1.3.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@1.3.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"4f526ffc1f500cf99086f6a2b7372cfde36fc732","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-1.3.0.tgz","fileCount":18,"integrity":"sha512-vphK4MsjPgc9HHX/T+JBQ6Byt5pjceRtZFWCEVoDzb05+0Ts7FAbMdGeAakDUTgo8XVmWYoM2PYy83dCZe8evg==","signatures":[{"sig":"MEUCICfkzV5ufuN+yE8JyHKIIIwOQPtLNLHq2xdVb3XrgWl0AiEA8KWZW80hwU+/WqRQY1aUXGyxS4A/peQE/QlZcdjQcaM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":878123},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"922920c3a1e6e8dcafc9f9d00b5e773f192cef69","scripts":{"build":"pnpm run clean && pnpm run bundle","clean":"rm -rf dist","bundle":"rolldown -c rolldown.config.ts"},"_npmUser":{"name":"goodbyenjn","email":"cc@fuckwall.cc"},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"10.9.3","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.32.0","remeda":"^2.26.1","rotery":"^0.7.0","vitest":"^3.2.4","prettier":"^3.6.2","rolldown":"1.0.0-beta.29","type-fest":"^4.41.0","typescript":"^5.8.3","@types/node":"^24.1.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.0.0","rolldown-plugin-dts":"^0.14.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.3.0_1757884681550_0.3367528367939441","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@goodbyenjn/utils","version":"1.3.1","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@1.3.1","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"9e739b4e9a7c48bdec70e599ad79906fd145edbb","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-1.3.1.tgz","fileCount":18,"integrity":"sha512-/d0UQ5NPlH4Z2vr44MsY/5LBClEmkLvhcrzgPihn+IFeQ81SKwKGdSSvAGUt53HB3c4gF51tOKHOjx4cX3l0ig==","signatures":[{"sig":"MEQCIFRuU+eTlO8A01ZQhIv2bfV18i/f4uTVk9RfXi6FrCgEAiBUhHDbooDGL91yqfk3Cr/HrdfkIZ6Jj5Hw2cbJZlK1Mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":880937},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"1e00a9f254cbf9a5f726b59a8862df7d7782625d","scripts":{"build":"pnpm run clean && pnpm run bundle","clean":"rm -rf dist","bundle":"rolldown -c rolldown.config.ts"},"_npmUser":{"name":"goodbyenjn","email":"cc@fuckwall.cc"},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"10.9.3","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.32.0","remeda":"^2.26.1","rotery":"^0.7.0","vitest":"^3.2.4","prettier":"^3.6.2","rolldown":"1.0.0-beta.29","type-fest":"^4.41.0","typescript":"^5.8.3","@types/node":"^24.1.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.0.0","rolldown-plugin-dts":"^0.14.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.3.1_1758802448413_0.1685274959512495","host":"s3://npm-registry-packages-npm-production"}},"26.1.0":{"name":"@goodbyenjn/utils","version":"26.1.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.1.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"5ce376188ce2eec9337bddfe48b49b21b2b2574e","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.1.0.tgz","fileCount":18,"integrity":"sha512-RoX6grI1uwTNwvFMhyNYlhdeNPpeUR/ROdYOVCFUF8dz19KZ0Yn1DGWzzIlm+DDFJsN36bjXjuPvR1as7O0LgQ==","signatures":[{"sig":"MEQCIAqMjDTNNzGAs+LJ83A14mrQCBtWcR7g4V1ihTioyxCYAiAjdRfzz7fKpPVatumHaHn/WqX56YRI63QNI/AgBsAMsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1267551},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"1d29b0e959134f84000b39ec3c10fb492573ee77","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.6.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","remeda":"^2.33.1","rotery":"^0.7.0","vitest":"^4.0.16","prettier":"^3.7.4","rolldown":"1.0.0-beta.58","type-fest":"^5.3.1","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.0.3","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.20.0","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.1.0_1767627466776_0.7466224153965448","host":"s3://npm-registry-packages-npm-production"}},"26.1.1":{"name":"@goodbyenjn/utils","version":"26.1.1","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.1.1","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"3620fc51f962898e263e664a8d5ffc1ca4ec3d85","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.1.1.tgz","fileCount":18,"integrity":"sha512-JXne0UgilqHUOaiq/uTTaK/pGmoWLiWIJl1rjjN6tkoF4ytS+57IsOPDKreGmorO5tNx5xMSkxhbNezCF5dGSQ==","signatures":[{"sig":"MEUCIDCSmqm2rLe2Zdi3igT6RNFJ+gfLLD2IWycVrWszT1RTAiEA4ufQpKu6A3VfuX/8uV23ep8Ki6YzPgJ2Q4pEnVq8o3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1269921},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"38c66d851ae48360f5f662e8e8af1cf841526429","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.6.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","remeda":"^2.33.1","rotery":"^0.7.0","vitest":"^4.0.16","prettier":"^3.7.4","rolldown":"1.0.0-beta.58","type-fest":"^5.3.1","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.0.3","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.20.0","vite-tsconfig-paths":"^6.0.5","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.1.1_1769625742196_0.0722677847989297","host":"s3://npm-registry-packages-npm-production"}},"26.1.2":{"name":"@goodbyenjn/utils","version":"26.1.2","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.1.2","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"db808926525417e805b3d0fba333134f75416131","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.1.2.tgz","fileCount":18,"integrity":"sha512-LRt9YD/K4yFncZUF/17LNgchAozaGOPiiy1kxGy/48fbhM0HgQtKhI0MT8IAosFxZRXm0xfk85jJTfGvsqZibg==","signatures":[{"sig":"MEUCIARzpnrB3IJimBrQ5hZp6C6R9ffLJ6JIxd4bV1BGXe9IAiEAxhSANsrOmCI3IrcE31R2QJheSjHAdvQ3go/IiGZieHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272375},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"fb0cc8ea6948124a08bb7bbfc3723d790f0f1e24","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.6.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","remeda":"^2.33.1","rotery":"^0.7.0","vitest":"^4.0.16","prettier":"^3.7.4","rolldown":"1.0.0-beta.58","type-fest":"^5.3.1","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.0.3","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.20.0","vite-tsconfig-paths":"^6.0.5","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.1.2_1769626538526_0.08548196614305437","host":"s3://npm-registry-packages-npm-production"}},"26.1.3":{"name":"@goodbyenjn/utils","version":"26.1.3","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.1.3","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"7c4d58573c9da7a9f04e2f15bd93c73906911ca9","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.1.3.tgz","fileCount":18,"integrity":"sha512-MGKHFfpNWXpzPG5l6GdqxxGzasVJgexgAZpWLdUqZnK+ZXpShw2a7spO4B7+4jmnASOhCwBODV/YYgl4fNP4jA==","signatures":[{"sig":"MEUCIQCvkjnDHwTyVL2/XtIyqPUvnkS91mkdEFpE7yUMz80MYwIgPP1KLcK9NBHo9sHRVDczab1CCsV456H3nwruvWicXUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1269414},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"1ee09da0e883d2c9927168b90a0b6116986bf4e7","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.6.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","remeda":"^2.33.1","rotery":"^0.7.0","vitest":"^4.0.16","prettier":"^3.7.4","rolldown":"1.0.0-beta.58","tinyexec":"^1.0.2","type-fest":"^5.3.1","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.0.3","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.20.0","vite-tsconfig-paths":"^6.0.5","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.1.3_1769811901820_0.7474248050797105","host":"s3://npm-registry-packages-npm-production"}},"26.1.4":{"name":"@goodbyenjn/utils","version":"26.1.4","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.1.4","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"37ab193f0a9c674bca1edbc8815b0e12e60bd1ec","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.1.4.tgz","fileCount":20,"integrity":"sha512-Aw6ve+5hyTGwg72OKSsCIlXYgVQTvwBtiYZIScYd3pOxIIzrZFD3Vwb+hdhwcBoqroycOSkaTRCL5ZExsEqa5Q==","signatures":[{"sig":"MEUCIQD0tEh5F/WPFBK4Nw1vjC6aWa5Fxs5xWp81yOxOZKdtKgIgMgQaioHsGlrxWIVa4VfJTIG1rKaKulNpdqQ4INboJww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1294360},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./shell":{"types":"./dist/shell.d.ts","import":"./dist/shell.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"41b2c21bd7f8f563d2e6ec104f14ae1da28e9f6d","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.6.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","remeda":"^2.33.1","rotery":"^0.7.0","vitest":"^4.0.16","prettier":"^3.7.4","rolldown":"1.0.0-beta.58","tinyexec":"^1.0.2","type-fest":"^5.3.1","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.0.3","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.20.0","vite-tsconfig-paths":"^6.0.5","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.1.4_1769812260997_0.5116703843032764","host":"s3://npm-registry-packages-npm-production"}},"26.2.0":{"name":"@goodbyenjn/utils","version":"26.2.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.2.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"caa21ed7b07441b2ffa83d5e9771270fe088f489","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.2.0.tgz","fileCount":20,"integrity":"sha512-LoNEw3S9cdjXxwiYvjcQMS1oOXv0MccJbyw0w5nJIPmB/ziHdW91Sf9uBG3YGRF9E5IPfj02xJ8EvuV0qJ7DtA==","signatures":[{"sig":"MEUCIQDTybMGbk/rqpCKh1fJzJp+SUBLmoCgo4YnplvggTUzgAIgCbQFWJ6mCuq6P3GCX62C6vyCVCgvabpHbhDdNcoeXFI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1294410},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./shell":{"types":"./dist/shell.d.ts","import":"./dist/shell.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"e010761ad629b17593f6e13e065c0fd7e2c16d4b","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.6.2","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","remeda":"^2.33.1","rotery":"^0.7.0","vitest":"^4.0.16","prettier":"^3.7.4","rolldown":"1.0.0-beta.58","tinyexec":"^1.0.2","type-fest":"^5.3.1","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.0.3","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.20.0","vite-tsconfig-paths":"^6.0.5","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.2.0_1770315830493_0.6827364712992858","host":"s3://npm-registry-packages-npm-production"}},"26.3.0":{"name":"@goodbyenjn/utils","version":"26.3.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.3.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"d047540f95afa05e7ebd48a18e265aadc0090fe8","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.3.0.tgz","fileCount":20,"integrity":"sha512-wYjsUsHAXJ9j5r7T5uFx8ou/9QAZeU9IOvk9TckODVbbi6/2AjjUfIn9JaNkbk+IKESMtEmzmqiiZJ23as/hzg==","signatures":[{"sig":"MEQCIAk3McnuBGOSfqWGq6VsKytsV1IaIxKr+POSazGu6fSbAiAN36tzlrfZa8oON3NHVtElNL2uoA2CyYeJdFIlqrZjGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1294529},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./shell":{"types":"./dist/shell.d.ts","import":"./dist/shell.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"a7b8b7f24fd01a04413c160321775a7b6ba08a12","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.9.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","remeda":"^2.33.1","rotery":"^0.7.0","vitest":"^4.0.16","prettier":"^3.7.4","rolldown":"1.0.0-beta.58","tinyexec":"^1.0.2","type-fest":"^5.3.1","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.0.3","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.20.0","vite-tsconfig-paths":"^6.0.5","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.3.0_1772385671830_0.547887761440683","host":"s3://npm-registry-packages-npm-production"}},"26.4.0":{"name":"@goodbyenjn/utils","version":"26.4.0","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"c2f76c41772422e98ec69d5996602a0b2763ed81","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.0.tgz","fileCount":21,"integrity":"sha512-i7QuQ5K7k6j/u7tyh+H+E3u8BRhzzLQ1KpWIDDEnYYXWhn7MtqsP+qLx3NWxkiQ+0UtgStTnuznvqyOvmt7NLA==","signatures":[{"sig":"MEQCIAFpL7uJOrhWVKpjiEWEV/Br6J7fRIiA7MyHHjc7vKHNAiBIboeR1Gi9TXKTTKGZeUZ6PRRSxdKsoNTUTTJQrTiT7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":220916},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./shell":{"types":"./dist/shell.d.ts","import":"./dist/shell.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"c75c3939519709d542e76ef2c7b4b3f2bcc2b13b","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.11.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"remeda":"^2.33.6","rotery":"^0.7.0","type-fest":"^5.4.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.3","vitest":"^4.0.18","prettier":"^3.8.1","rolldown":"1.0.0-rc.6","tinyexec":"^1.0.2","tinyglobby":"^0.2.15","typescript":"^5.9.3","@types/node":"^25.3.3","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.22.3","vite-tsconfig-paths":"^6.1.1","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.0_1776099641521_0.48827564427885783","host":"s3://npm-registry-packages-npm-production"}},"26.4.1":{"name":"@goodbyenjn/utils","version":"26.4.1","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.1","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"1531fee0b3b6e86c1053058798deafcf10794ec7","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.1.tgz","fileCount":25,"integrity":"sha512-niHPuVvqbSDVzizFcgJzf3AMoKN7kWofJpMk96WiU8gPvVA9es8yc93FbBktdLv8ZjaM0TXmHOJIy/J0p3GM9A==","signatures":[{"sig":"MEUCIQC5r3cMz62OPfw2W4l7DGB9JB6s3BAbNsfOO6PNafsSJgIgRJDP+L+Vy3UU/IQ40EpdTHrDvflqn5F6Jav2nvkT4ug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":257775},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./exec":{"types":"./dist/exec.d.ts","import":"./dist/exec.js"},"./json":{"types":"./dist/json.d.ts","import":"./dist/json.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"79e822c54a0bf141338e971b7064928475597bd4","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.11.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"remeda":"^2.33.7","rotery":"^0.7.0","type-fest":"^5.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.4","vitest":"^4.1.4","prettier":"^3.8.2","rolldown":"1.0.0-rc.15","tinyexec":"^1.1.1","tinyglobby":"^0.2.16","typescript":"^6.0.2","@types/node":"^25.6.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.23.2","vite-tsconfig-paths":"^6.1.1","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.1_1776330647611_0.36575558642196415","host":"s3://npm-registry-packages-npm-production"}},"26.4.2":{"name":"@goodbyenjn/utils","version":"26.4.2","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.2","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"02d0447249c5a2cdc6c504dd483e763ea77cbf78","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.2.tgz","fileCount":25,"integrity":"sha512-8xqgLqvLLlpVIBebE1HlipVN61zND5IbqkMrIa06cfQQT4YS2YsK6VR22uSbxfPd/NrTG3pRkcvWbYsmLmZu/g==","signatures":[{"sig":"MEYCIQC3asguHCMtv7CecLOCVquAtdPKb52gx7yN+1kxhUrBKQIhAPFHxMPOc7HEWwHkxKAi2o6NQ3n98l2J/cZe8Aj4nKsO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":257996},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./exec":{"types":"./dist/exec.d.ts","import":"./dist/exec.js"},"./json":{"types":"./dist/json.d.ts","import":"./dist/json.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"e777cf0ff176d334906739449d4027fdb5c2d52b","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.11.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"remeda":"^2.33.7","rotery":"^0.7.0","type-fest":"^5.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.4","vitest":"^4.1.4","prettier":"^3.8.2","rolldown":"1.0.0-rc.15","tinyexec":"^1.1.1","tinyglobby":"^0.2.16","typescript":"^6.0.2","@types/node":"^25.6.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.23.2","vite-tsconfig-paths":"^6.1.1","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.2_1776342487268_0.6238509267869274","host":"s3://npm-registry-packages-npm-production"}},"26.4.3":{"name":"@goodbyenjn/utils","version":"26.4.3","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.3","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"b15f5f1779eb088add92c5d7a69ac707494420c4","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.3.tgz","fileCount":24,"integrity":"sha512-dleTuAGHW1nH5iYlEvmjGR/RRsP/MC5DKoTzEyc3EKGHTOsYUgXBxUQlKOtLfU8skOXA9Q1Z797sJEcvrle4Sw==","signatures":[{"sig":"MEUCIG09v4gJRg5UzqnwyZADBnCM2hjE3UO4zdffnmDOKkmUAiEA3t/S6/ogAiEvZk0ANqeSzLP9LuJQZavBEkF4IzRA/Ao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":273438},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./exec":{"types":"./dist/exec.d.ts","import":"./dist/exec.js"},"./json":{"types":"./dist/json.d.ts","import":"./dist/json.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"4c38290486b2c924a3893858772c5f82d7848d79","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.11.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"remeda":"^2.33.7","rotery":"^0.7.0","type-fest":"^5.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.4","vitest":"^4.1.4","prettier":"^3.8.2","rolldown":"1.0.0-rc.15","tinyexec":"^1.1.1","tinyglobby":"^0.2.16","typescript":"^6.0.2","@types/node":"^25.6.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.23.2","vite-tsconfig-paths":"^6.1.1","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.3_1776344373526_0.2583026717664516","host":"s3://npm-registry-packages-npm-production"}},"26.4.4":{"name":"@goodbyenjn/utils","version":"26.4.4","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.4","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"02d798952e49d4b65d1419f1b86547853aaac0c7","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.4.tgz","fileCount":24,"integrity":"sha512-IDvxhVJiHldughaGThm2tiJWr9c8VzbitL83Nfb+wws1Fn/qEcJwNDSjHu4HihJewLDI9fg+6nM+ziOYvmZbwQ==","signatures":[{"sig":"MEYCIQDcsiwZdF3DJNVNWozeFOAMCoK5MQkZsUS4YCND10p5jAIhAKJ7VksUaRdcX+aD4hr0hU7pHaW/kBWm76/949TrDIkA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":273594},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./exec":{"types":"./dist/exec.d.ts","import":"./dist/exec.js"},"./json":{"types":"./dist/json.d.ts","import":"./dist/json.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"33c25642772e8095ef4ecd32b5d87d3c84d9f481","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.12.1","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"remeda":"^2.33.7","rotery":"^0.7.0","type-fest":"^5.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.1","eslint":"^9.39.4","vitest":"^4.1.4","prettier":"^3.8.2","rolldown":"1.0.0-rc.15","tinyexec":"^1.1.1","tinyglobby":"^0.2.16","typescript":"^6.0.2","@types/node":"^25.6.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^6.1.4","rolldown-plugin-dts":"^0.23.2","vite-tsconfig-paths":"^6.1.1","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.4_1776455823635_0.6076521080338471","host":"s3://npm-registry-packages-npm-production"}},"26.4.5":{"name":"@goodbyenjn/utils","version":"26.4.5","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.5","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"ff5f9902003209e894420dea7960566d5eaff81a","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.5.tgz","fileCount":24,"integrity":"sha512-cJTdxmyDGIYNbHYUqloy0ZCF8cKHPR2bZ66kVZ+cWIoWlZCy2x4T6rEyhxCnq3XigYf66563/RYubYKwaw1H0Q==","signatures":[{"sig":"MEYCIQCnmyB7A+WKi5Bi5oVIzBXVGmeg50qtnY8WM+c7UZya1gIhANFopjoDGNSPoZGf887+IUOHolrFuAjK8/cPvkYr1kXT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":286452},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./exec":{"types":"./dist/exec.d.ts","import":"./dist/exec.js"},"./json":{"types":"./dist/json.d.ts","import":"./dist/json.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"1750edd5d4ad575b4bd1284b6ba7b349bf214ad2","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","test:ci":"vitest --run","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.12.1","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"remeda":"^2.33.7","rotery":"^0.7.0","type-fest":"^5.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.1","eslint":"^10.2.1","vitest":"^4.1.4","prettier":"^3.8.3","rolldown":"1.0.0-rc.16","tinyexec":"^1.1.1","tinyglobby":"^0.2.16","typescript":"^6.0.3","@types/node":"^25.6.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^6.2.0","rolldown-plugin-dts":"^0.23.2","vite-tsconfig-paths":"^6.1.1","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.5_1777223698192_0.050912765571954566","host":"s3://npm-registry-packages-npm-production"}},"26.4.6":{"name":"@goodbyenjn/utils","version":"26.4.6","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.6","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"ad9cc2306f98d76d19d4014f041f023e6d22195c","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.6.tgz","fileCount":26,"integrity":"sha512-kvPSa0XXyB/UK+oFB9Ix0RXY/mqtC9H9FJ5ngtZq83LXcNDx66LpnyyjaoE+IO2LjL3LKQkg8h5DWK9KdGGhQw==","signatures":[{"sig":"MEUCIFv7IIuxO/E2WnznIgEQctxuh0QIBjw6h78dUJ575k+UAiEApyQvVD2uJ72Z9SxHPQL1PCsISJSv/T3AKY1kj7xXPsU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":274941},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/common.d.ts","import":"./dist/common.js"},"./fs":{"types":"./dist/fs.d.ts","import":"./dist/fs.js"},"./exec":{"types":"./dist/exec.d.ts","import":"./dist/exec.js"},"./glob":{"types":"./dist/glob.d.ts","import":"./dist/glob.js"},"./json":{"types":"./dist/json.d.ts","import":"./dist/json.js"},"./types":{"types":"./dist/types.d.ts"},"./remeda":{"types":"./dist/remeda.d.ts","import":"./dist/remeda.js"},"./result":{"types":"./dist/result.d.ts","import":"./dist/result.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"17676a471277064117f07c48ae2126f8cd29977f","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","test:ci":"vitest --run","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.12.1","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"remeda":"^2.33.7","rotery":"^0.7.0","type-fest":"^5.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.1","eslint":"^10.2.1","vitest":"^4.1.4","prettier":"^3.8.3","rolldown":"1.0.0-rc.16","tinyexec":"^1.1.1","tinyglobby":"^0.2.16","typescript":"^6.0.3","@types/node":"^25.6.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","@goodbyenjn/utils":"file:","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^6.2.0","rolldown-plugin-dts":"^0.23.2","vite-tsconfig-paths":"^6.1.1","safe-stable-stringify":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.6_1777225581270_0.9740680008797229","host":"s3://npm-registry-packages-npm-production"}},"26.4.7":{"name":"@goodbyenjn/utils","version":"26.4.7","keywords":["utils","typescript","javascript"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.4.7","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"11d3b2a723f43d3abace1a134199f58a881a0659","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.4.7.tgz","fileCount":36,"integrity":"sha512-SbyJxN+vY5D9hr7nBkOUphLEnjAfGAeGTaRT5v9f9hiEgzl5Dp8uyFmCC45rqVcs/1l3BriThW3QaCmE3Qqtpg==","signatures":[{"sig":"MEYCIQDV8fSSpWNhxYw0MTI3dxRWIPaFyamSZGKob7l6ts6NFAIhAO+QD2QX32AtnaY7C+uRa3Fu3sYPD+tlhqDp/9oFBgIF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.4.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269297},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./glob":{"types":"./dist/glob/index.d.ts","import":"./dist/glob/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"5df861f366f98eff1bbe24cb9f2eeda7c740625a","scripts":{"dev":"rolldown -c rolldown.config.ts -w","lint":"eslint","test":"vitest","build":"rolldown -c rolldown.config.ts","check":"tsc && eslint && prettier --check .","format":"prettier --write .","release":"bumpp","test:ci":"vitest --run","lint:fix":"eslint --fix","typecheck":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.12.1","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"remeda":"^2.34.0","rotery":"^0.7.0","type-fest":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.2","eslint":"^10.2.1","vitest":"^4.1.5","prettier":"^3.8.3","rolldown":"1.0.0-rc.18","tinyglobby":"^0.2.16","typescript":"^6.0.3","@types/node":"^25.6.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^6.2.0","rolldown-plugin-dts":"^0.23.2","vite-tsconfig-paths":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.4.7_1777537959329_0.9646005879661952","host":"s3://npm-registry-packages-npm-production"}},"26.5.0":{"name":"@goodbyenjn/utils","version":"26.5.0","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.5.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"7e14ad04c5c67fcd9fbc4255c872612afab76731","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.5.0.tgz","fileCount":36,"integrity":"sha512-AhkQIK1Szfk1oFspQLiOag9jth6JhT4hG9g3hTpMRds1VKkFqQW0OwkNHbs8hOyOx48rIIUHnvbosDWbQfR5Pw==","signatures":[{"sig":"MEYCIQCddNilTq+taDINCEthM/eeGksTxtgVLtVjYikPw5V20AIhAJ0FhfrgzAAxg9uINpP8kNGKtqNqy0iWDXiXAyqJSpnw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":268831},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./glob":{"types":"./dist/glob/index.d.ts","import":"./dist/glob/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"fe1a33b5d307a3b36477b9c0fcd0dc8406cbef1c","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.12.1","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"remeda":"^2.34.1","rotery":"^0.7.0","type-fest":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.2","oxfmt":"^0.49.0","oxlint":"^1.64.0","vitest":"^4.1.6","rolldown":"1.0.1","tinyglobby":"^0.2.16","@types/node":"^25.7.0","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.22.1","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.2","rolldown-plugin-dts":"^0.25.0","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260513.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.5.0_1778958801251_0.5564253220215294","host":"s3://npm-registry-packages-npm-production"}},"26.6.0":{"name":"@goodbyenjn/utils","version":"26.6.0","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.6.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"2d275f71af724b2fb56cc783c05e527f109181f3","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.6.0.tgz","fileCount":33,"integrity":"sha512-m1++g5n0ueeS5FVbw8oqxba6570OiPXbL37RWDktgubt1x/8zKNBjrhIs/rhmo2Iv3QsQmyHZsVNYHMVZTbeOg==","signatures":[{"sig":"MEYCIQDlxki12KZWEG4VSYkL+9M/hVwwTRiuIBqXNQAOAdTeaQIhAOHmGLm64cNr/MVFfWhdWTNBiVkdaDoVkcbLYIzsDNSp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187766},"type":"module","engines":{"node":"^22.2.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"ef0a3754abb7b74e94560ef46404c364d83d63a3","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.13.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.7","oxfmt":"^0.54.0","oxlint":"^1.69.0","vitest":"^4.1.8","rolldown":"1.1.1","@types/node":"^25.9.3","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.23.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.3","rolldown-plugin-dts":"^0.25.2","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260612.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.6.0_1781519276527_0.3809730880473321","host":"s3://npm-registry-packages-npm-production"}},"26.6.1":{"name":"@goodbyenjn/utils","version":"26.6.1","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.6.1","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"68717310ba7e41b5327063c5b049fd266823050c","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.6.1.tgz","fileCount":33,"integrity":"sha512-thmHtc6G1toqCoC2poBNUzdhjzCHIkn/hnWyziZFbLjWtqoacuDc4m/4rXc/vAJ2lO8acu+XgVZupZPh6SbYpA==","signatures":[{"sig":"MEYCIQCjIVrMJwfjPTptHFDS/bk0A4TVxbnLi1aW1THlZfHhhwIhAIYcyZHFY6P6+pF8VJDp0WVphxw1g2HdiStFuXaOwQm0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187789},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"23a4beca9f04ae71242ab9bc32251b0be263cdd5","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.13.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.7","oxfmt":"^0.54.0","oxlint":"^1.69.0","vitest":"^4.1.8","rolldown":"1.1.1","@types/node":"^25.9.3","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.23.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.3","rolldown-plugin-dts":"^0.25.2","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260612.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.6.1_1781519418818_0.4755869173895664","host":"s3://npm-registry-packages-npm-production"}},"26.6.2":{"name":"@goodbyenjn/utils","version":"26.6.2","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.6.2","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"7dc26e965df02153075f888cfc934b04db98d855","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.6.2.tgz","fileCount":33,"integrity":"sha512-NtnbV5elcQ7RSt1wnsVapa8x0T6ajdocjgFxbM+EI+i+JTa2oFmJzSaWLIZxl16Pf85qWmSC2ezqqwuFoNA9Mg==","signatures":[{"sig":"MEUCIDVuGV2wu/A8y/WdneGvJ1N4Sdw0O8/uspwxLsS9azgDAiEA6kqpTvO1A8ORRdDYAC5AtHGPtlndYYAmJjSf3B6u84A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187789},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"98eaa16d44615a9ac8663661874ce2bf3536c62f","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.16.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.7","oxfmt":"^0.54.0","oxlint":"^1.69.0","vitest":"^4.1.8","rolldown":"1.1.1","@types/node":"^25.9.3","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.23.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.3","rolldown-plugin-dts":"^0.25.2","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260612.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.6.2_1782558501574_0.7826329974593929","host":"s3://npm-registry-packages-npm-production"}},"26.7.0":{"name":"@goodbyenjn/utils","version":"26.7.0","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.7.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"48b3286983b5e7b307527b523f9ce45c6ccb062e","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.7.0.tgz","fileCount":33,"integrity":"sha512-ITaa+yQ8kTPyvpggFFFCFK6ao+DXOpkZD7O7GMkgqp0xKi7Bm7mEnyrf5bSBBd/TUwI3NCfx7qXGNP7sM36ghQ==","signatures":[{"sig":"MEUCIQD4jPWfec691/+hat0KXRf4fm8cXIIOBS37koQcjNQPPwIgAR/EN+uPs1u5lJOifh0keAo/US5TeGzlSUfPU2h9PFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193146},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"1083f7c4491f23155a532b86a67f6be6767b0d68","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.16.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.7","oxfmt":"^0.54.0","oxlint":"^1.69.0","vitest":"^4.1.8","rolldown":"1.1.1","@types/node":"^25.9.3","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.23.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.3","rolldown-plugin-dts":"^0.25.2","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260612.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.7.0_1783364523418_0.0388148316179624","host":"s3://npm-registry-packages-npm-production"}},"26.7.1":{"name":"@goodbyenjn/utils","version":"26.7.1","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.7.1","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"096964415ce424caa28bb1ec637b97f3c23b2e26","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.7.1.tgz","fileCount":33,"integrity":"sha512-dfsj5lX3ScHUohbKoWula1Y0cYpq9K5KU1SNCB8YeK+YP56krb0ISSS/zNfp9fL5deZkkK2M/i8ka98uQ+35xA==","signatures":[{"sig":"MEUCIQDyhO5HHE7DU2k/I50DT3NJn6zzcroLdDHKT7KL2087BAIgN1VArCxav+IRgav0MuqcnBG+wDrJm6QBDbY6y9vjySg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193769},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"3d31b1f7a69d4a930f83581baf81e826e559f432","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.16.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.7","oxfmt":"^0.54.0","oxlint":"^1.69.0","vitest":"^4.1.8","rolldown":"1.1.1","@types/node":"^25.9.3","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.23.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.3","rolldown-plugin-dts":"^0.25.2","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260612.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.7.1_1783503765219_0.5452212236054734","host":"s3://npm-registry-packages-npm-production"}},"26.7.2":{"name":"@goodbyenjn/utils","version":"26.7.2","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.7.2","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"3ae0bc6c7ebc586664eb9c897e45a62c02ce7cd4","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.7.2.tgz","fileCount":33,"integrity":"sha512-ZqANP6z7ElsFGcCIVjKWbG+CJ0N8rs+/4RaWS9MqdtFtL69EVrcTfxYjwfFbYUK+oFS4MIOeMJLI7pjH/k5DqA==","signatures":[{"sig":"MEYCIQCKKNtKT7UJYUe470eaCloo9oaqAn7Lqg1rtAU82p7YAwIhAIDT/v8/6YIv+q5AlEqKIYLlXTqkB3cARX9sG7Xsnjek","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":196299},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"23c91d63d65ee55c41661eab33c2081e16e8a5e9","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.16.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.7","oxfmt":"^0.54.0","oxlint":"^1.69.0","vitest":"^4.1.8","rolldown":"1.1.1","@types/node":"^25.9.3","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.23.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.3","rolldown-plugin-dts":"^0.25.2","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260612.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.7.2_1783505724857_0.49326977890609336","host":"s3://npm-registry-packages-npm-production"}},"26.7.3":{"name":"@goodbyenjn/utils","version":"26.7.3","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.7.3","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"cfa2135ccf2291cb7c1851a40bb8e69af773ada7","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.7.3.tgz","fileCount":33,"integrity":"sha512-dByGPOjYsvqIqlqPbGRFvwNpSypJ7qKDAA++GeQZmuBN/Dk4yV8FNE3a9Gyic+aygxuadgi6IIG4TZ33nJEjAw==","signatures":[{"sig":"MEQCIAglsRn0N9MwOS3pQKOeC2SRRM3cCQsQdvLi+fflxx3CAiBxFMUxj/+ldyNyksOTlj2PtDCzAFzDXVM5vSVAFR7ZoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":199896},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"2c9155b07921d3b752e3160976675d39cf7cee84","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.16.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.57.7","oxfmt":"^0.54.0","oxlint":"^1.69.0","vitest":"^4.1.8","rolldown":"1.1.1","@types/node":"^25.9.3","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.23.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.5.3","rolldown-plugin-dts":"^0.25.2","vite-tsconfig-paths":"^6.1.1","@typescript/native-preview":"7.0.0-dev.20260612.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.7.3_1784229781059_0.324634858265862","host":"s3://npm-registry-packages-npm-production"}},"26.7.4":{"name":"@goodbyenjn/utils","version":"26.7.4","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.7.4","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"0b6be27abbbc4a436190d850c719fabc9b60f813","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.7.4.tgz","fileCount":33,"integrity":"sha512-p9ByCAI7a7ecrJLm4FDkLxvNtw1VetkM+22cy5vkVrOl4TddkB9Iz6mCEMhc0UWVaKmFXI8Oclq6EgC12vjSrA==","signatures":[{"sig":"MEUCIAFFOXhgPdS2uhPTnTa0Zgm2Vl0sLObUc108FbEJ9wxGAiEAkw5Zr+oA8ibH3Qm1aR1tnWEt3gYtsFpmPVBeVMYSiXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":200472},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"71d60fe52ff4e70b8fc264d06c7cab1f0ef9a16d","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsgo && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest --run","lint:fix":"oxlint --fix","check:type":"tsgo","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.16.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"remeda":"^2.39.0","rotery":"^0.7.0","type-fest":"^5.8.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.64.0","oxfmt":"^0.59.0","oxlint":"^1.74.0","vitest":"^4.1.10","rolldown":"1.2.0","typescript":"^7.0.2","@types/node":"^26.1.1","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^0.24.0","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.6.0","rolldown-plugin-dts":"^0.27.10","vite-tsconfig-paths":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.7.4_1784360637424_0.8808583677908619","host":"s3://npm-registry-packages-npm-production"}},"26.9.0":{"name":"@goodbyenjn/utils","version":"26.9.0","keywords":["javascript","typescript","utils"],"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","_id":"@goodbyenjn/utils@26.9.0","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"homepage":"https://github.com/GoodbyeNJN/utils","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"f54ad2b5d2465c0ff383dc23f92d163345d87395","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.9.0.tgz","fileCount":33,"integrity":"sha512-R6e2hz+yrarzsdng8KvJva2hDMRqWAkKhr/TmDez8WS21he2PyfMJtN6F6oH0XM1O2hvcDew7V3ibwHKiZ972Q==","signatures":[{"sig":"MEQCIHleivzJfOy7nbKR1zOSzG23ya01VefOB2pcSm2P8iqRAiByeb3bzb11+7p/TSIvp/ZGtbcQkxNIaqrRUpHlbmlqvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDpP+2yCwV6ONxorlfiRS+dm5c5UJhSnpxC1GNxPHK3gwIhALtEMzMR/Tz4N9oiZ+52CnMOnW29F7xL0Ne9k6OTzYYY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":202017},"type":"module","engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./exec":{"types":"./dist/exec/index.d.ts","import":"./dist/exec/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./exec/safe":{"types":"./dist/exec/safe.d.ts","import":"./dist/exec/safe.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"}},"gitHead":"7cd19af6c67a949a038a471b976cf4b591d53a89","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsc && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest run","lint:fix":"oxlint --fix","check:type":"tsc","format:write":"oxfmt"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.19.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"remeda":"^2.45.0","rotery":"^0.7.0","type-fest":"^5.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.64.0","oxfmt":"^0.66.0","oxlint":"^1.81.0","vitest":"^5.0.0","rolldown":"1.2.7","typescript":"^7.0.2","@types/node":"^26.4.1","cross-spawn":"^7.0.6","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^7.0.2001","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.7.0","rolldown-plugin-dts":"^0.28.5","vite-tsconfig-paths":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/utils_26.9.0_1788524990440_0.8338303026041436","host":"s3://npm-registry-packages-npm-production"}},"26.9.1":{"_id":"@goodbyenjn/utils@26.9.1","bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"dist":{"shasum":"dc9206d54c7dca8ef3b98c680ba672466e592a56","tarball":"https://registry.npmjs.org/@goodbyenjn/utils/-/utils-26.9.1.tgz","fileCount":33,"integrity":"sha512-8eTPGl7TkadrkYI5O9hohCsb9OMP9ji7Wl6UKG4XZaQFsciTNCRL6tqBJrcveKSDz0hcd+OrW4uCFW1qQ7O61w==","signatures":[{"sig":"MEYCIQCMCSEGHzgaxNQDMxuvaGOZf1xENMBqan3LkyQUji6EfQIhALIY+GrPzss8MdWHpwneg54qkUittZLJD4J71OldLuMQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDhXN1zRPvwYqM+M0EbotGAp65cvR7qS8y/1crElmzazgIhAPzniHgv3zG/WTKNdd/FxTMes8VnpVmA2FTT0Gdo20ra"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@goodbyenjn%2futils@26.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":195082},"name":"@goodbyenjn/utils","type":"module","author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"engines":{"node":"^22.2.0 || ^24.0.0 || >=26.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./fp":{"types":"./dist/fp/index.d.ts","import":"./dist/fp/index.js"},"./fs":{"types":"./dist/fs/index.d.ts","import":"./dist/fs/index.js"},"./json":{"types":"./dist/json/index.d.ts","import":"./dist/json/index.js"},"./types":{"types":"./dist/types.d.ts"},"./option":{"types":"./dist/option/index.d.ts","import":"./dist/option/index.js"},"./result":{"types":"./dist/result/index.d.ts","import":"./dist/result/index.js"},"./fs/safe":{"types":"./dist/fs/safe.d.ts","import":"./dist/fs/safe.js"},"./process":{"types":"./dist/process/index.d.ts","import":"./dist/process/index.js"},"./json/safe":{"types":"./dist/json/safe.d.ts","import":"./dist/json/safe.js"},"./global-types":{"types":"./dist/global-types.d.ts"},"./process/safe":{"types":"./dist/process/safe.d.ts","import":"./dist/process/safe.js"}},"gitHead":"bd4b94afd5777b2e6b126b7d5f3990028224a493","license":"MIT","scripts":{"dev":"rolldown -w -c","lint":"oxlint","test":"vitest","build":"rolldown -c","check":"tsc && oxlint && oxfmt --check","format":"oxfmt --check","test:ci":"vitest run","lint:fix":"oxlint --fix","check:type":"tsc","format:write":"oxfmt"},"version":"26.9.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a42439a-487f-4a8b-8a7c-3ce41edefe0e"}},"homepage":"https://github.com/GoodbyeNJN/utils","keywords":["javascript","typescript","utils"],"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"_npmVersion":"11.19.0","description":"GoodbyeNJN's utils for typescript and javascript","directories":{},"maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"remeda":"^2.45.0","rotery":"^0.7.0","type-fest":"^5.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"memfs":"^4.64.0","oxfmt":"^0.66.0","oxlint":"^1.81.0","vitest":"^5.0.0","rolldown":"1.2.7","typescript":"^7.0.2","@types/node":"^26.4.1","args-tokenizer":"^0.3.0","oxlint-tsgolint":"^7.0.2001","@types/cross-spawn":"^6.0.6","@goodbyenjn/configs":"^26.7.0","rolldown-plugin-dts":"^0.28.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/utils_26.9.1_1789249244871_0.6382131704794887"}}},"time":{"created":"2025-07-27T18:46:01.502Z","modified":"2026-09-12T21:40:45.239Z","1.0.0":"2025-07-27T18:46:01.912Z","1.1.0":"2025-07-29T19:05:48.184Z","1.1.1":"2025-07-31T17:57:27.019Z","1.2.0":"2025-07-31T19:18:31.398Z","1.3.0":"2025-09-14T21:18:01.771Z","1.3.1":"2025-09-25T12:14:08.824Z","26.1.0":"2026-01-05T15:37:47.015Z","26.1.1":"2026-01-28T18:42:22.397Z","26.1.2":"2026-01-28T18:55:38.776Z","26.1.3":"2026-01-30T22:25:02.013Z","26.1.4":"2026-01-30T22:31:01.250Z","26.2.0":"2026-02-05T18:23:50.804Z","26.3.0":"2026-03-01T17:21:12.002Z","26.4.0":"2026-04-13T17:00:41.680Z","26.4.1":"2026-04-16T09:10:47.745Z","26.4.2":"2026-04-16T12:28:07.429Z","26.4.3":"2026-04-16T12:59:33.691Z","26.4.4":"2026-04-17T19:57:03.788Z","26.4.5":"2026-04-26T17:14:58.394Z","26.4.6":"2026-04-26T17:46:21.438Z","26.4.7":"2026-04-30T08:32:39.521Z","26.5.0":"2026-05-16T19:13:21.392Z","26.6.0":"2026-06-15T10:27:56.646Z","26.6.1":"2026-06-15T10:30:18.950Z","26.6.2":"2026-06-27T11:08:21.729Z","26.7.0":"2026-07-06T19:02:03.564Z","26.7.1":"2026-07-08T09:42:45.347Z","26.7.2":"2026-07-08T10:15:24.990Z","26.7.3":"2026-07-16T19:23:01.235Z","26.7.4":"2026-07-18T07:43:57.593Z","26.9.0":"2026-09-04T12:29:50.528Z","26.9.1":"2026-09-12T21:40:44.955Z"},"bugs":{"url":"https://github.com/GoodbyeNJN/utils/issues"},"author":{"name":"GoodbyeNJN","email":"cc@fuckwall.cc"},"license":"MIT","homepage":"https://github.com/GoodbyeNJN/utils","keywords":["javascript","typescript","utils"],"repository":{"url":"git+https://github.com/GoodbyeNJN/utils.git","type":"git"},"description":"GoodbyeNJN's utils for typescript and javascript","maintainers":[{"name":"goodbyenjn","email":"cc@fuckwall.cc"}],"readme":"# @goodbyenjn/utils\n\n[![npm version](https://badge.fury.io/js/@goodbyenjn%2Futils.svg)](https://badge.fury.io/js/@goodbyenjn%2Futils)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA modern TypeScript/JavaScript utility library providing a comprehensive collection of type-safe utility functions, functional error handling with the Result and Option patterns, filesystem operations, and shell command execution.\n\n## Features\n\n- 🚀 **Modern**: Built with TypeScript, targeting ES modules and modern JavaScript\n- 🔒 **Type-safe**: Full TypeScript support with comprehensive type definitions and type inference\n- 📦 **Modular**: Import only what you need with tree-shakable exports and multiple entry points\n- 🛡️ **Result & Option Pattern**: Functional error handling and optional values without exceptions, based on Rust-style Result and Option types\n- 📁 **VFile & FS**: Type-safe file system operations and a powerful virtual file object\n- 🐚 **Exec**: Powerful and flexible command execution with safe and unsafe variants\n- 🧰 **Common Utilities**: String manipulation, math operations, promise utilities, and JSON handling\n- 📊 **FP Utilities**: Functional programming utilities built on top of [Remeda](https://remedajs.com/) and [Rotery](https://github.com/nicolo-ribaudo/rotery), including async iteration helpers\n\n## Installation\n\n```bash\nnpm install @goodbyenjn/utils\n# or\npnpm add @goodbyenjn/utils\n# or\nyarn add @goodbyenjn/utils\n```\n\n## Usage\n\n### Quick Start\n\n```typescript\n// Import what you need from the main module\nimport { sleep, template } from \"@goodbyenjn/utils\";\nimport { exec } from \"@goodbyenjn/utils/process\";\nimport { exec as safeExec } from \"@goodbyenjn/utils/process/safe\";\nimport { BaseVFile } from \"@goodbyenjn/utils/fs\";\nimport { readFile as safeReadFile } from \"@goodbyenjn/utils/fs/safe\";\nimport { Ok, Result } from \"@goodbyenjn/utils/result\";\nimport { parse } from \"@goodbyenjn/utils/json\";\nimport { parse as safeParse } from \"@goodbyenjn/utils/json/safe\";\nimport { Some, None } from \"@goodbyenjn/utils/option\";\nimport type { Nullable, SetOptional } from \"@goodbyenjn/utils/types\";\n\n// Enable global type augmentations (better Object.keys, Map.has, Array.filter, etc.)\nimport \"@goodbyenjn/utils/global-types\";\n```\n\n### Common Utilities\n\n#### String Operations\n\n```typescript\nimport { template, unindent, addPrefix, removeSuffix, joinWith, splitBy } from \"@goodbyenjn/utils\";\n\n// String templating\nconst greeting = template(\"Hello, {name}! You are {age} years old.\", {\n    name: \"Alice\",\n    age: 30,\n});\nconsole.log(greeting); // \"Hello, Alice! You are 30 years old.\"\n\n// Remove common indentation from template strings (default: trim start and end)\nconst code = unindent`\n    function example() {\n        return 'formatted';\n    }\n`;\nconsole.log(code);\n/*\nfunction example() {\n    return 'formatted';\n}\n*/\n\n// Custom trim behavior with factory function\nconst codeNoTrim = unindent(false, false)`\n    function example() {\n        return 'formatted';\n    }\n`;\nconsole.log(codeNoTrim);\n/*\n\nfunction example() {\n    return 'formatted';\n}\n\n*/\n\n// Only trim start, keep end\nconst onlyTrimStart = unindent(true, false)(\"  hello\\n  world\\n\");\nconsole.log(onlyTrimStart); // \"hello\\nworld\\n\"\n\n// Add indentation to strings\nconst indented = indent(2)`\n    if (a) {\n        b()\n    }\n`;\nconsole.log(indented);\n/*\n      if (a) {\n          b()\n      }\n*/\n\n// With custom string\nconst arrowIndented = indent(\">>\")(\"line1\\nline2\");\nconsole.log(arrowIndented); // \">>line1\\n>>line2\"\n\n// Only trim start, keep end\nconst onlyTrimStart = indent(2, true, false)(\"hello\\nworld\\n\");\nconsole.log(onlyTrimStart); // \"  hello\\n  world\\n\"\n\n// Prefix and suffix operations\nconst withPrefix = addPrefix(\"@\", \"myfile\"); // \"@myfile\"\nconst cleaned = removeSuffix(\".js\", \"script.js\"); // \"script\"\n\n// String joining and splitting\nconst path = joinWith(\"/\", \"home\", \"user\", \"docs\"); // \"/home/user/docs\"\nconst parts = splitBy(\"-\", \"hello-world-js\"); // [\"hello\", \"world\", \"js\"]\n\n// Split string by line breaks (handles both \\n and \\r\\n)\nconst lines = splitByLineBreak(\"line1\\nline2\\r\\nline3\");\nconsole.log(lines); // [\"line1\", \"line2\", \"line3\"]\n\n// Parse boolean value with custom default\nconst isEnabled = parseValueToBoolean(\"yes\", false); // true\nconst debugMode = parseValueToBoolean(\"invalid\", \"auto\"); // \"auto\"\n```\n\n#### Promise Utilities\n\n```typescript\nimport { sleep, createLock, createSingleton, createPromiseWithResolvers } from \"@goodbyenjn/utils\";\n\n// Sleep/delay execution\nawait sleep(1000); // Wait 1 second\n\n// Create a reusable mutex lock\nconst lock = createLock();\nawait lock.acquire();\ntry {\n    // Critical section\n    console.log(\"Executing exclusively\");\n} finally {\n    lock.release();\n}\n\n// Singleton pattern factory\nconst getDatabase = createSingleton(() => {\n    console.log(\"Initializing database...\");\n    return new Database();\n});\nconst db1 = await getDatabase(); // Initializes once\nconst db2 = await getDatabase(); // Returns same instance\n\n// Promise with external resolvers\nconst { promise, resolve, reject } = createPromiseWithResolvers<string>();\nsetTimeout(() => resolve(\"done!\"), 1000);\nconst result = await promise;\n```\n\n### Command Execution\n\n```typescript\nimport { exec } from \"@goodbyenjn/utils/process\";\nimport { exec as safeExec } from \"@goodbyenjn/utils/process/safe\";\n\n// 1. Unsafe Execution (throws on failure)\nconst output = await exec`npm install`;\nconsole.log(output.stdout);\n\n// String command with args\nconst lsOutput = await exec(\"ls\", [\"-la\"]);\nconsole.log(lsOutput.stdout);\n\n// 2. Safe Execution (returns Result)\nconst safeOutput = await safeExec`npm install`;\nif (safeOutput.isOk()) {\n    console.log(\"Success:\", safeOutput.unwrap().stdout);\n} else {\n    // Result contains error information (e.g., NonZeroExitError)\n    console.error(\"Failed:\", safeOutput.unwrapErr().message);\n}\n\n// 3. Pipe Output\nconst piped = await exec`echo \"hello\"`.pipe`cat`;\nconsole.log(piped.stdout);\n\n// 4. Iterate Output\nfor await (const line of exec`cat large-file.txt`) {\n    console.log(line);\n}\n\n// 5. Configuration Factory\nconst withCwd = exec({ cwd: \"/path/to/project\" });\nconst result3 = await withCwd`npm install`;\n```\n\n#### Terminal Styling\n\nThe process module provides a type-safe wrapper around Node.js's `util.styleText`. Use\n`styled` to compose terminal styles with chained properties or tagged templates:\n\n```typescript\nimport { styled } from \"@goodbyenjn/utils/process\";\n\n// Chain Node.js text formats\nconsole.log(styled.green(\"Success\"));\nconsole.log(styled.bold.green(\"Build completed\"));\n\n// Use styled as a tagged template\nconst file = \"dist/index.js\";\nconsole.log(styled.yellow`Generated ${file}`);\n```\n\nThe same exports are available from `@goodbyenjn/utils/process/safe`. For a different\nstyling backend, pass a formatter to `createStyled`. The formatter receives all formats\nselected through the property chain, followed by the rendered text and any additional\narguments supplied to the factory:\n\n```typescript\nimport { createStyled } from \"@goodbyenjn/utils/process\";\n\nconst format = (formats: string[], text: string) => {\n    const prefix = formats.length > 0 ? `[${formats.join(\", \")}] ` : \"\";\n    return `${prefix}${text}`;\n};\n\nconst label = createStyled(format);\nconsole.log(label.info(\"Ready\")); // \"[info] Ready\"\nconsole.log(label.warning`Disk space is low`); // \"[warning] Disk space is low\"\n```\n\n#### Math Utilities\n\n```typescript\nimport { linear, scale } from \"@goodbyenjn/utils\";\n\n// Linear interpolation between values\nconst mid = linear(0.5, [0, 100]); // 50\n\n// Scale a value from one range to another\nconst scaledValue = scale(75, [0, 100], [0, 1]); // 0.75\nconst percentage = scale(200, [0, 255], [0, 100]); // 78.43...\n```\n\n#### Error Handling\n\n```typescript\nimport { normalizeError, getErrorMessage } from \"@goodbyenjn/utils\";\n\n// Normalize any value to an Error object\nconst error = normalizeError(\"Something went wrong\");\nconst typeError = normalizeError({ code: 500 });\n\n// Safely extract error message\nconst message1 = getErrorMessage(new Error(\"Oops\"));\nconst message2 = getErrorMessage(\"Plain string error\");\nconst message3 = getErrorMessage(null); // \"Unknown error\"\n```\n\n#### Throttling and Debouncing\n\n```typescript\nimport { debounce, throttle } from \"@goodbyenjn/utils/fp\";\n\n// Debounce - wait for inactivity before executing\nconst debouncedSearch = debounce((query: string) => {\n    console.log(\"Searching for:\", query);\n}, 300);\n\n// Call multiple times, executes only after 300ms of inactivity\ninput.addEventListener(\"input\", e => {\n    debouncedSearch((e.target as HTMLInputElement).value);\n});\n\n// Throttle - execute at most once per interval\nconst throttledScroll = throttle(() => {\n    console.log(\"Scroll position:\", window.scrollY);\n}, 100);\n\nwindow.addEventListener(\"scroll\", throttledScroll);\n```\n\n#### JSON Handling\n\n```typescript\nimport { parse, stringify } from \"@goodbyenjn/utils/json\";\n// Or use the safe-only entry point:\nimport { parse as safeParse, stringify as safeStringify } from \"@goodbyenjn/utils/json/safe\";\n\n// Standard JSON parsing (returns value or nil)\nconst data = parse('{\"a\": 1}'); // Some({ a: 1 })\nconst invalid = parse(\"bad\"); // None\n\n// Safe JSON parsing (returns Result)\nconst result = safeParse('{\"a\": 1}');\nif (result.isOk()) {\n    console.log(result.unwrap().a);\n}\n\n// Safe stringify\nconst json = safeStringify({ a: 1 }); // Result<string, Error>\n```\n\n### File System Operations\n\n```typescript\nimport {\n    BaseVFile,\n    exists as safeExists,\n    mkdir as safeMkdir,\n    mkdtemp as safeMkdtemp,\n    readFile as safeReadFile,\n    readFileByLine as safeReadFileByLine,\n    readJson as safeReadJson,\n    rm as safeRm,\n    writeFile as safeWriteFile,\n    writeJson as safeWriteJson,\n} from \"@goodbyenjn/utils/fs/safe\";\n\n// BaseVFile - Unified file handling\nconst vfile = new BaseVFile(\"example.json\");\n\n// Fluid path manipulation\nvfile.filename(\"data\").extname(\"ts\");\nconsole.log(vfile.basename()); // \"data.ts\"\n\n// Cross-platform path handling\nconst relative = vfile.pathname.relative(); // \"data.ts\" (relative to cwd)\nconst absolute = vfile.pathname(); // \"/full/path/to/data.ts\"\n\n// Built-in operations (available in extended VFile implementations)\n// await vfile.read(); // Get content\n// await vfile.write(); // Write content\n\nconst textResult = await safeReadFile(\"example.txt\");\nif (textResult.isOk()) {\n    console.log(\"File content:\", textResult.unwrap());\n} else {\n    console.error(\"Failed to read file:\", textResult.unwrapErr().message);\n}\n\n// Read and parse JSON safely\nconst jsonResult = await safeReadJson(\"package.json\");\nif (jsonResult.isOk()) {\n    const pkg = jsonResult.unwrap();\n    console.log(\"Package name:\", pkg.name);\n}\n\n// Write JSON file\nconst writeResult = await safeWriteJson(\"data.json\", { users: [] }, 2);\nif (writeResult.isErr()) {\n    console.error(\"Write failed:\", writeResult.unwrapErr());\n}\n\n// Check if file exists\nconst exists = await safeExists(\"path/to/file.txt\");\nif (exists) {\n    console.log(\"File exists!\");\n}\n\n// Create directories (recursive)\nconst mkResult = await safeMkdir(\"src/components/ui\", { recursive: true });\n\n// Create a temporary directory\nconst tempResult = await safeMkdtemp(\"my-temp-dir-\");\n// Or with disposable option\nconst tempDisposableResult = await safeMkdtemp(\"my-temp-dir-\", { disposable: true });\n\n// Delete files or directories\nconst rmResult = await safeRm(\"build\", { recursive: true, force: true });\n\n// Read file line by line\nconst lineResult = await safeReadFileByLine(\"large-file.log\");\nif (lineResult.isOk()) {\n    for await (const line of lineResult.unwrap()) {\n        console.log(line);\n    }\n}\n```\n\n### Glob Patterns\n\n```typescript\nimport { glob, globSync, convertPathToPattern } from \"@goodbyenjn/utils/glob\";\n\n// Async glob pattern matching\nconst files = await glob(\"src/**/*.{ts,tsx}\", { cwd: \".\" });\nconsole.log(\"Found files:\", files);\n\n// Synchronous version\nconst syncFiles = globSync(\"**/*.test.ts\", { cwd: \"tests\" });\n\n// Convert file path to glob pattern\nconst pattern = convertPathToPattern(\"/home/user/project\");\n```\n\n### Result Pattern - Functional Error Handling\n\n```typescript\nimport { Err, Ok, Result } from \"@goodbyenjn/utils/result\";\n\n// Create results explicitly\nconst success = Ok(42);\nconst failure = Err(\"Something went wrong\");\n\n// Handle results with chainable methods\nconst doubled = success\n    .map(value => value * 2) // Supports async: .map(async v => v * 2) returns Promise<Result>\n    .mapErr(err => `Error: ${err}`)\n    .unwrapOr(0); // 84\n\n// Transform error type\nconst result: Result<string, Error> = Ok(\"value\");\nconst transformed = result.mapErr(() => new Error(\"Custom error\"));\n\n// Convert throwing functions or promises to Result\nasync function fetchUser(id: string) {\n    // Result.try catches thrown errors\n    const user = await Result.try(() => JSON.parse(userJson));\n    // Or handle promise rejections\n    const user = await Result.try(fetch(`/api/users/${id}`));\n\n    return user.map(u => u.name).mapErr(err => new Error(`Failed to parse user: ${err.message}`));\n}\n\n// Wrap a function to always return a Result\nconst safeParse = Result.wrap(JSON.parse, Error);\nconst data = safeParse('{\"valid\": true}'); // Result<any, Error>\n\n// Combine multiple Results\nconst results = [Ok(1), Ok(2), Err(\"oops\"), Ok(4)];\nconst combined = Result.all(results); // Err(\"oops\")\n\n// Generator-based \"do\" notation for flattening Results\nconst finalResult = Result.gen(function* () {\n    const a = yield* Ok(10);\n    const b = yield* Ok(20);\n    return a + b;\n}); // Ok(30)\n\n// Supports async generators\nconst asyncFinal = await Result.gen(async function* () {\n    const user = yield* await fetchUser(\"1\");\n    return user.name;\n});\n```\n\n### Type Utilities\n\n```typescript\nimport type {\n    Nullable,\n    Optional,\n    YieldType,\n    OmitByKey,\n    SetNullable,\n    TemplateFn,\n    // New function types with `this` binding\n    FnWithThis,\n    AsyncFnWithThis,\n    SyncFnWithThis,\n    // Re-exported from type-fest\n    SetOptional,\n    SetRequired,\n    PartialDeep,\n    Simplify,\n    LiteralUnion,\n    PackageJson,\n} from \"@goodbyenjn/utils/types\";\n\n// ... (other types)\n\n// Template string function type\nconst myTag: TemplateFn<string> = (strings, ...values) => {\n    return strings[0] + values[0];\n};\n\n// Nullable type for values that can be null or undefined\ntype User = {\nid: string;\nname: string;\nemail: Nullable<string>; // string | null | undefined\n};\n\n// Optional type (undefined but not null)\ntype Profile = {\nbio: Optional<string>; // string | undefined\n};\n\n// Extract yield type from generators\nfunction\\* numberGenerator() {\nyield 1;\nyield 2;\nyield 3;\n}\n\ntype NumberType = YieldType<typeof numberGenerator>; // number\n\n// Omit properties by their value type\ntype Config = {\nname: string;\ndebug: boolean;\nverbose: boolean;\ntimeout: number;\n};\ntype WithoutBooleans = OmitByKey<Config, boolean>; // { name: string; timeout: number }\n\n// Set specific properties to nullable\ntype APIResponse = {\nid: number;\nname: string;\nemail: string;\n};\ntype PartialResponse = SetNullable<APIResponse, \"email\" | \"name\">; // email and name become nullable\n```\n\n### FP Utilities\n\nThe library provides 100+ functional utilities via `@goodbyenjn/utils/fp`, built on top of [Remeda](https://remedajs.com/) and [Rotery](https://github.com/nicolo-ribaudo/rotery):\n\n```typescript\nimport {\n    // Custom type-checking helpers\n    hasOwnProperty,\n    isFunction,\n    isPromiseLike,\n    isOption, // check if a value is an Option\n    isResult, // check if a value is a Result\n\n    // Throttle / debounce (moved from main module)\n    debounce,\n    throttle,\n\n    // Array operations (from Remeda)\n    chunk,\n    filter,\n    find,\n    flatMap,\n    flatten,\n    map,\n    partition,\n    reverse,\n    take,\n    drop,\n    unique,\n\n    // Object operations (from Remeda)\n    pick,\n    omit,\n    merge,\n    keys,\n    values,\n    entries,\n\n    // Functional composition (from Remeda)\n    pipe,\n    compose,\n\n    // Aggregations (from Remeda)\n    groupBy,\n    countBy,\n    sumBy,\n\n    // Async iteration (from Rotery, aliased with P suffix)\n    filterP, // async filter\n    mapP, // async map\n    flatMapP, // async flatMap\n    forEachP, // async forEach\n    every, // sync every\n    everyP, // async every\n    some, // sync some\n    someP, // async some\n    toArray, // collect iterator to array\n    toArrayP, // async collect\n    flatten as flattenSync,\n    flattenP, // async flatten\n    reduceP, // async reduce\n    concurrency, // limit concurrency\n    buffer, // buffer items\n} from \"@goodbyenjn/utils/fp\";\n\n// Type-safe property checking\nconst obj = { name: \"John\", age: 30, active: true };\nif (hasOwnProperty(obj, \"name\")) {\n    console.log(obj.name); // TypeScript type narrowing\n}\n\n// Function type checking\nconst maybeCallback: unknown = (x: number) => x * 2;\nif (isFunction(maybeCallback)) {\n    maybeCallback(5);\n}\n\n// Promise detection\nasync function handleValue(value: any) {\n    if (isPromiseLike(value)) {\n        const result = await value;\n        console.log(\"Async result:\", result);\n    }\n}\n\n// Functional data transformations\nconst users = [\n    { id: 1, name: \"Alice\", role: \"admin\", active: true },\n    { id: 2, name: \"Bob\", role: \"user\", active: false },\n    { id: 3, name: \"Charlie\", role: \"user\", active: true },\n];\n\n// Chain operations with pipe\nconst adminNames = pipe(\n    users,\n    filter(u => u.role === \"admin\"),\n    map(u => u.name),\n); // [\"Alice\"]\n\n// Group users by role\nconst byRole = groupBy(users, u => u.role);\n// { admin: [...], user: [...] }\n\n// Sum ages of active users\nconst totalAge = sumBy(\n    filter(users, u => u.active),\n    u => u.age ?? 0,\n);\n\n// Chunk array into groups\nconst chunked = chunk(users, 2);\n// [[user1, user2], [user3]]\n\n// Async iteration with Rotery helpers\nconst results = await pipe(\n    [1, 2, 3],\n    toIterator,\n    mapP(async n => fetchUser(n)),\n    filterP(async u => u.active),\n    toArrayP,\n);\n```\n\n## Requirements\n\n- **Node.js**: >= 20.0.0\n- **TypeScript**: >= 6.0 (for development/type checking)\n\nModern browsers are supported through ES module imports.\n\n## Versioning\n\n**Note:** This project does **not** follow Semantic Versioning (semver). Instead, it uses a calendar-based versioning scheme:\n\n**Version Format:** `v<YY>.<M>.<PATCH>`\n\n- `<YY>` - Release year (e.g., 26 for 2026)\n- `<M>` - Release month (1-12)\n- `<PATCH>` - Patch/revision number within the same month (starting from 0)\n\n**Example versions:**\n\n- `v26.1.0` - First release in January 2026\n- `v26.1.1` - Second release in January 2026\n- `v26.2.0` - First release in February 2026\n\nThis scheme provides clarity on when features were released while allowing multiple updates within the same month.\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Development mode with watch\npnpm run dev\n\n# Build the library\npnpm run build\n\n# Clean build artifacts\npnpm run clean\n\n# Run tests (if configured)\npnpm run test\n```\n\n## Performance Considerations\n\n- **Tree-shaking**: All modules are properly configured for tree-shaking. Import only what you need.\n- **Result Pattern**: The Result type has minimal overhead compared to exceptions and enables better error handling.\n- **Functional Composition**: Use Remeda utilities with pipe for efficient data transformations.\n- **Shell Execution**: The `$` function safely escapes arguments and is suitable for production use.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request at [GitHub Repository](https://github.com/GoodbyeNJN/utils).\n\n## License\n\nMIT © [GoodbyeNJN](https://github.com/GoodbyeNJN)\n\n## Links\n\n- [GitHub Repository](https://github.com/GoodbyeNJN/utils)\n- [npm Package](https://www.npmjs.com/package/@goodbyenjn/utils)\n- [Issue Tracker](https://github.com/GoodbyeNJN/utils/issues)\n- [Remeda Documentation](https://remedajs.com/)\n\n---\n\n**Maintained with ❤️ by [GoodbyeNJN](https://github.com/GoodbyeNJN)**\n","readmeFilename":"README.md"}