{"_id":"nfkit","_rev":"37-8cc2c39d84e36185c37d465f9559edbb","name":"nfkit","dist-tags":{"latest":"1.0.37"},"versions":{"1.0.1":{"name":"nfkit","version":"1.0.1","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.1","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"33a97bf0dd80993331c2e695c13f17584dadfb63","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.1.tgz","fileCount":15,"integrity":"sha512-oMtIrTFmVmW1YniKSMX+J/Yt+V8YoJ0abbEeKvf3l9ucIvxb7NQ1idJpzqiBXd33T+p/7P+atqASld67d4L2bw==","signatures":[{"sig":"MEUCIGz+rtO50mkMXWw1duBg2Kkj9UVNefP5EzEfY4JnK8MgAiEA25oJQG3qvLU3AxL7oAsYmoa2Tp74mCBMAx2ZNEzyY9M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26791},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"4f4015eecd129d3e11297f4405118026de07eff9","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"rimraf dist && npm run compile:cjs && npm run compile:esm && npm run compile:types","start":"node dist/index.js","compile:cjs":"esbuild index.ts --outfile=dist/index.cjs --bundle --sourcemap --platform=node --target=es2019 --external:js-base64","compile:esm":"esbuild index.ts --outfile=dist/index.mjs --bundle --sourcemap --platform=neutral --target=esnext --external:js-base64","compile:types":"tsc --emitDeclarationOnly --declaration"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","rimraf":"^6.0.1","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.1_1761272137292_0.9591433588624039","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"nfkit","version":"1.0.2","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.2","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"50af74734dd146fc149c514ccd462c83711bbdf5","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.2.tgz","fileCount":15,"integrity":"sha512-qwrnKmrN9qzZrbiSXXlCIpjufYFm+K34BQyatGT2frXEz7WYAxZMMKsNsrgQVx2tcLMA4iCoC5Yw1EqUSLSmcA==","signatures":[{"sig":"MEUCIEFnicpIMPLYBUbH85TSTJhJCIrF1RJ6bM2RzTjcGrDvAiEAj6ihHxDrFjXYhurhw1KDEWQWOAIubN/oejiJjCq+9iI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52658},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"5d66c637bf0b133809bcaa9fe1995dcef397eafe","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"rimraf dist && npm run compile:cjs && npm run compile:esm && npm run compile:types","start":"node dist/index.js","compile:cjs":"esbuild index.ts --outfile=dist/index.cjs --bundle --sourcemap --platform=node --target=es2019 --external:js-base64","compile:esm":"esbuild index.ts --outfile=dist/index.mjs --bundle --sourcemap --platform=neutral --target=esnext --external:js-base64","compile:types":"tsc --emitDeclarationOnly --declaration"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","rimraf":"^6.0.1","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.2_1761272391606_0.026560229639790878","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"nfkit","version":"1.0.3","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.3","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"1a4cc07f71f8ac0e5de1eccc4c72154fc9af53b3","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.3.tgz","fileCount":16,"integrity":"sha512-Isapyh/AVTArBAbSyZPt6ViLtB0HUTOcGNq1EDrw1zMVgVuA0o2oVUweXcNFEX6Mj8jkFmRdMlVGndITFGL/0g==","signatures":[{"sig":"MEQCIA1qw5LS3emjmJdHBkV2yXED88pTwPLEO7mdkZmCNOtqAiBZVKDoOwyuaIUeqrRh5AwRI3DytSR2ZvYVi6Ba95DEIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127255},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"098c4320327ffa6d21a78d272b0dd051f65fd938","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"rimraf dist && npm run compile:cjs && npm run compile:esm && npm run compile:types","start":"node dist/index.js","compile:cjs":"esbuild index.ts --outfile=dist/index.cjs --bundle --sourcemap --platform=node --target=es2019 --external:js-base64","compile:esm":"esbuild index.ts --outfile=dist/index.mjs --bundle --sourcemap --platform=neutral --target=esnext --external:js-base64","compile:types":"tsc --emitDeclarationOnly --declaration"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","rimraf":"^6.0.1","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.3_1761641835557_0.06677657260438408","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"nfkit","version":"1.0.4","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.4","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"0e933e005fcb9f93bdd7f10c068ca52fb24a5ff4","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.4.tgz","fileCount":16,"integrity":"sha512-RmAyQeUBLuyl8cVtr6/XUKkWbNfBqZYb/BOSGpMqOz+xcdeYmDDFNI4lJIzP5JM/+asIGYRpG8JTWDG/7l12Yg==","signatures":[{"sig":"MEUCIQD3cyCGJVj51O0k5/CdtWl9eqRCb+lV1HiXdPcgRHqEngIgCLQIW/R6SQUyjmqraKPerKwgNCA0MLaKzMZwnNogRws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126963},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"f9953a1d4cd9412e459a3f8f93ea2bfc03827c22","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"rimraf dist && npm run compile:cjs && npm run compile:esm && npm run compile:types","start":"node dist/index.js","compile:cjs":"esbuild index.ts --outfile=dist/index.cjs --bundle --sourcemap --platform=node --target=es2019 --external:js-base64","compile:esm":"esbuild index.ts --outfile=dist/index.mjs --bundle --sourcemap --platform=neutral --target=esnext --external:js-base64","compile:types":"tsc --emitDeclarationOnly --declaration"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","rimraf":"^6.0.1","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.4_1761642089431_0.017333621133865496","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"nfkit","version":"1.0.5","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.5","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"c79dde885743de73af9be0930e9d988a15ade29b","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.5.tgz","fileCount":17,"integrity":"sha512-x4iDbFtOK08z5KKMxWrO+pbgRlvGWM1+cUE8M//5qcYoJmg98tAt04DZRIlh/yC84sBn/p1DcfEoumHCzEm1Mw==","signatures":[{"sig":"MEUCIQCLnpWmbbWAcawZr5zkxZH37gEz2N1N6rv71juxeZ0DWQIgQdD7AQR/WbBSv+gK57UwKF75dExrDAMaYrO/vJuo3JU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132023},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"5abeb30d4e33ba0afc4de1d221e2a3634efa93a0","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.5_1761882223856_0.5275502412107114","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"nfkit","version":"1.0.6","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.6","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"497fbf31bba8187922c8311d2640125addb0b372","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.6.tgz","fileCount":18,"integrity":"sha512-729pX6JIholw+RpdLtMXiAUKN5AP5zZv9o/YvEMyN/MBp01aTfFuLc+YLd2gBtNIh93V0AvzI5aIj4PqmECI3Q==","signatures":[{"sig":"MEUCIHcxTPl8x6s9xxaQ/AktCXloGHabxlH+CzxrTG6Kg+HTAiEAihaaySZ2kW6QTYfF/Kgq8CB7Ncsa9qaCiqMy51KQGoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134418},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"fc0fc5eff621377a2c81af5d2f7ad5f24982419c","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.6_1761889021986_0.7756633365172378","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"nfkit","version":"1.0.7","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.7","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"46259443db67f66ad2d8ff4eb37fafc02dc39aab","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.7.tgz","fileCount":17,"integrity":"sha512-XghbmjdJQXeCjmy1VW1C9p43Wo1aamPeYEJV6xKsKeccPB+XZVXZWWQRNC847u3EyDEY72hLEQ9TAhuQoJGCQA==","signatures":[{"sig":"MEUCIF4qKyWYdTbvJ+fz/t1HRgZo5Bg5ju3Jt54qbKUceKYCAiEA8kTkjqJh0lvqZ2WU/sEYK+NzWzmrX7PyiwI3wi9DqeY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130019},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"111c56251aa88e27d13a8602b6424b51083d738f","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.7_1761895127208_0.7888149557536017","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"nfkit","version":"1.0.8","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.8","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"4d3bca754f3498319fc521ec3469219754a78f95","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.8.tgz","fileCount":18,"integrity":"sha512-0A8AB8ffTrqkrLwqrbjvP58zgYA+D73bc+z3NTCbsced0Ysg1CAQQkRuLufMI+TZ7Ld4Pm1xlDPr3JxVmI2D3Q==","signatures":[{"sig":"MEUCIDQdFmJ8LKfnUsLJmavAmh7iHWwauyZJyVpQB+q6CpR7AiEAtyYkB0TXe7XM5+2CP/0ea88x6iNx3RiDy/QM/m7RIBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151666},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"639099f08cb475e6f87d3125164b66511a557965","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.8_1762226138364_0.3788436977096308","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"nfkit","version":"1.0.9","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.9","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"36361faaacf893e8d21be587fa31e12bc051e479","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.9.tgz","fileCount":18,"integrity":"sha512-b1l8bFh+5/4yE9r8pu5Y9pC1ez37OqSf4GWVVALp54yEVu8U8J+eqedm1sf7m2Z0nGdlpzihy9pqR+9dUi97vg==","signatures":[{"sig":"MEQCIEbt/pCMXq31Vm4fLy4VCDJ3P+T5OPFfZgCHJ8BAeFDfAiAyc1PiYpY1ramx4FT0RAVGb++pZIgSRpOS/KVIc6HlJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151670},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"fd3d3df3ba4da8d50fff2656e9540ee3df1175e5","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.9_1762235718748_0.2545449978180807","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"nfkit","version":"1.0.10","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.10","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"62f9fc44bc5798f7ad15f0768faab833b4ea98c0","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.10.tgz","fileCount":26,"integrity":"sha512-QyCSvRlH9YST2NcjSe0umSdwsznB8W5C4purjtt36TWs6I10uFOTy5nZNzBSlJV2KpF98lF2aaEnPMPCS/LMOg==","signatures":[{"sig":"MEUCIQC+RxSK0zGunN2W94kcSrcLGrjFYISxq1RWeg4IqL8FhwIgLKWuYU7NgSnDoCYDsBGsMqAzzgQx0DevakVjzkUQTzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226416},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"682a4736f9c0902f4243ac0b3ca9b8ea909079c8","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.10_1762742249501_0.662287304388868","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"nfkit","version":"1.0.11","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.11","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"02100607b2bb209a4d9513263b6afece964d189e","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.11.tgz","fileCount":27,"integrity":"sha512-l9Egl61K2v8yZX9T2lqz4u8Ayva4rYOLdJDe5+C5c7FaEQ1kho1Yj4GLsFPrEem/3ZyfBlYox8tqlOZyK4Zidg==","signatures":[{"sig":"MEQCIHnAFk4fK8ZgkoJWxJAjzZi8AKyNKxxfJ4KhZ/Ue47i1AiAzjf4QBJQdfEdumC9Ca1PBqJ2V30STOgoipNzvd85tVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223276},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"1578b0cc562744146aa20c750f4443954af1c83f","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.11_1763686956556_0.9548703671697134","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"nfkit","version":"1.0.12","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.12","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"2766a0c3348dd5b70f920c9b3596e563a98f4283","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.12.tgz","fileCount":28,"integrity":"sha512-1aJd6I37r+UJDGUgVVivK8tp1Sxv+k5TFWcO3WnVA4aTRyr3+8ykyYOlg97o+8gC48r0cp/V9VWM3FWCEAMv9A==","signatures":[{"sig":"MEUCIDc2JoAXuI/FKMsGG3hssyFmMZjO1lB8iD8V0RTkHhQkAiEAnLmi50skF6fcFFmxiubE27cNgggRg7dsNXYSQ0Xs3mw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227800},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"7b6cae652725d3349b72cf0a457a669d89424f31","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.12_1765256327284_0.20009347650186848","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"nfkit","version":"1.0.13","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.13","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"863a2813acf153c986e1ebc9576420fc0f24124f","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.13.tgz","fileCount":29,"integrity":"sha512-EXBrBcj6I+I45Bl9ESG8+Ncrb+d3unkKekVp55m+L+5E3Iol/jyFCWuTs6ZmsKNgLMvcvBmAMP7Pi42L8bH4Ew==","signatures":[{"sig":"MEQCIFwB0Y2+VNlQlHY9ecQM+tBRizvq9CxD+ePx1pASf7MFAiBvVZu7+P8j9Je57OPFls9ccY8BiO0vRyZc4e45N8W0PA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234597},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"1f891dbfa7b085ba487113bf90242a87c45ce183","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Common kits","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.13_1765417866005_0.3313552021775792","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"nfkit","version":"1.0.14","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.14","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"975d0e3055735050fc74f55057b10bf8299f9ae3","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.14.tgz","fileCount":30,"integrity":"sha512-jou0ZvwZXvUlp9T0Rerv19BIqn5m2VgFyy76u5CLSYyKIjEmwKCPWytZyBSTOcPv41OaNBC48uzQO9QtNgDH1A==","signatures":[{"sig":"MEQCIGPEWxdkoZrYqjuJoLuhfJCKNxw1R7+mfY3yEdPkl/aeAiA02FnLFBwNOopUu+zHNfrbG74ODAGN/dxorUZ/o6eMgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235614},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"9e394bd45ea246c30e46c432e2e3e5e3dcef5d1f","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.14_1770080702986_0.009000929328494278","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"nfkit","version":"1.0.15","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.15","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"8bb282c9134892dceef03c08498243178e152dbc","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.15.tgz","fileCount":34,"integrity":"sha512-q80Xn1GD9Tqyv8Gn039P4vYg3pcJZ77Y5VeRRJ3gEkjC/HluAURudURZY3PqnHw/wlY93XTrgIVAZbGQR7rPjg==","signatures":[{"sig":"MEUCIG7sDVCM0V5UxRtgbaLj/fh/0wTJsqiTdR1RWTVcJY6lAiEA5djE97VS0RucHhYLP4/X3bEWK7ftHnAHsYpm9I8fyyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":249575},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"6a2888245a9b4e5c82ccd2e33f0eba6ba5bc09c6","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.15_1770470967040_0.38391408839098196","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"nfkit","version":"1.0.16","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.16","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"b774cfb025b52bd08569248c18c5cd4c256c377a","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.16.tgz","fileCount":34,"integrity":"sha512-aj2ZoyxUsGpV6bdpoCe1gshvgvfRdsFL+oGKSlwyTIOLX7Cn94wSZvmS8k4454ybOAYF/vvHicawQyRSxlR8qw==","signatures":[{"sig":"MEUCIQDXuCFBfaZ4t9piQwfNgq8slIa/LTAekNosRkLE2pyJ8AIgTmwueUVfaFjRcbCiK1kJHyQbhMAF3mnO92pCpGPCK0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251059},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"5fff86880c7036a1bb1e715ba74f64f6af8f8b24","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.16_1770474460786_0.46954791417486685","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"nfkit","version":"1.0.17","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.17","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"b84aaf33ae42c329e9882ed48b940518084a59e3","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.17.tgz","fileCount":34,"integrity":"sha512-AxJk2ZgQVL+Hb0EuxDUkrYZ1QxcKRhG8H8jOFRmogmfojY03B/akN/3Pqz4JkaRwR7+tvCSGWWz7Ks/Hr/uYNA==","signatures":[{"sig":"MEYCIQDeiE4oy6UYQtjsuTaWQ+HsuaykCLqgQbYgd21tcIcDSgIhAPeuekvwHA1laz3alGFC12+EMZ1DjQcB71xmgy6Xa6FE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253059},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"e79bed21fb9051b155a14f5392edf14e548824e1","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.17_1770476367986_0.34376754036268165","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"nfkit","version":"1.0.18","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.18","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"d93c89d280ec1df80aff32f36da57b2a7f06be12","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.18.tgz","fileCount":34,"integrity":"sha512-s2flg/h3vVk0chCDwBWKMjzggPk6xd1QWWR4df3KlfSwPBzW/4+Po6AZzxXsvU40awDzyfaQMn18mlruJMAkLQ==","signatures":[{"sig":"MEUCIQC53GApVzRsu9OfQQ/rQ/LOj3JmAkWm1XnLoeHSPS6kDwIgEl1UBeD/4OCnEk1dXojNeFpDER1m67SjdlbheusZkiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251137},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"1acb14fdcedd5a737ecbbc53ad52b5f196d55884","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.18_1770476874421_0.5274417889670475","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"nfkit","version":"1.0.19","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.19","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"5cf2003d0f7d88f19c82b6ff8eaef415f216b608","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.19.tgz","fileCount":34,"integrity":"sha512-tGWKa1AItV+skKw3Qf/sfANFShonpf93XyyaizIoY66b/6WCE01tYM03VZDDhjDlXjqLyWmmkX9wpMwa4lC9yQ==","signatures":[{"sig":"MEYCIQDLeEwcjRAX8XQUZ0woybc9FmjL4tx/PzOxswj8w693bAIhAMFLEuvfr56Xo4hWvjsWx0lejtOSoOVywtWGD1mqbQgk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251262},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"765dfff573f1e9623f85af52074faf5884d41381","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.19_1770481902422_0.27842957416532443","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"nfkit","version":"1.0.20","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.20","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"cab8cc3794d07e01f536722ad957fe249115a240","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.20.tgz","fileCount":34,"integrity":"sha512-kppv7uijIL5TDDFA1LdCGVF7PERx6QIkK247+tijLuJkIL9cw7Jz510MESoUBml3rTncNb4n2emikeUhbvQYhA==","signatures":[{"sig":"MEQCIDqgCFKXkVGQoM711npbjLGdJUosvEZdQiYPPbCgLUVtAiA3sNRoQ2MyXv6lx1Gdzv9nWEY20FUBBuIf/klZrV1w9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252272},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"d2aaf271723ebb6a95f1ef4d359cd771e60b31e7","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.20_1770483043724_0.6121018405579919","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"nfkit","version":"1.0.21","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.21","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"f716428da5746382ee9e8da2d2151928f9ea894f","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.21.tgz","fileCount":39,"integrity":"sha512-YLs7zUoq9Lz3r91xM4UkHddKWhvaBvdTz+45E/k0xOqKrWiXj0iXMLwSwK9+q1rS39PoV+mD2+vJ8ox/M53HuQ==","signatures":[{"sig":"MEYCIQCzazWsSvfxP/DYc7XPTapYCqk02ifH+qLfj+i3fvFkKwIhAM/0CoxCwSA9JolTZcs8hHNNSjYKJuXf2KzkfuKOy5dk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311425},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"439fc1f534143c227040b6561dadf67b908c1747","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.21_1770530610524_0.9981593272807019","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"nfkit","version":"1.0.22","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.22","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"8266cae2d2d8d48e7644981cc3b66107f75f5ef3","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.22.tgz","fileCount":39,"integrity":"sha512-w0voG3JpSM2WSxv4rkncwQkY2EdQmSADC7qorduy4JHvO2FWkJnoX+GYYJrihjYWQIRCe8t+vDJ1oa14+eG3NA==","signatures":[{"sig":"MEUCIQCR3PhsIJlDxpvANoIvbSmWoedxhDy2h66X1UVBJ7bmtgIgQU4EiUXAtavGpHZLjkkZ1WXFklZV6vVVdSAJsQGQyLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311461},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"87514e32e7911dec73a7e4cf8b2dfb9841e70829","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.22_1770885705080_0.15721531604135652","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"nfkit","version":"1.0.23","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.23","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"8a033cf9f60929dccdaf7483bf5a9dc08efb1b50","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.23.tgz","fileCount":39,"integrity":"sha512-YQceoqNPpaPeLiTEoyePb8pTUoynWj4fMJeZ5MNTQDHOoUxHvvfZ76mGmfGu4xbrlGIMZG8RNgLM5ZWZmymGWg==","signatures":[{"sig":"MEUCIQDqLO0YnVZJ3Z0LlSFOHlZa4twmDOsZT2pAQt2adhqhVwIgSo7cxq9/QJ5OVMjyIzMBTSjVC2QBwcBwWJD3/biy2Gc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312533},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"e7d1fe862b780cd3bb294d298ab2c7a061c1e239","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.23_1770904352938_0.5907012913802523","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"nfkit","version":"1.0.24","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.24","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"1cae0340327fd9d542024c4bbd91bdf25ead9d46","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.24.tgz","fileCount":39,"integrity":"sha512-Av73fUWuEU2rF8Lyng/Y8YIDUDHjeDHqInyKsS0Me+hWlW0TvqIhmK/DMpFS7aXxBf+Fp0btecIVoxXYUmAlnQ==","signatures":[{"sig":"MEUCIQCohi9KaX8puw1rOcY8O8n/UwnOOB4tp90eQKhi1Xu84AIgalmO+heWkE/VA18eUSp5RUnweOPJrzUWEkMyJ0Nxv8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":313529},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"d5504fa3075721877712f59c3c27012d527d8f46","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.24_1770910242114_0.20125150850957074","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"nfkit","version":"1.0.25","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.25","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"5ee5f5bff6cdf62c48d69015d5fa1a39f3cda1ff","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.25.tgz","fileCount":39,"integrity":"sha512-RI3QD4QwJwSLzuPmgny0TB48Pfzf1NkIXvwrgmul34ps0ddIhSoy8jPWvYyAUHnFVEuXGKSFuFow+9zy6r1RWw==","signatures":[{"sig":"MEYCIQCUbwR9bJQgCpP6Gij42OL8GP1AZqldZFSweqbBUkASwgIhAO94z/QfgH+LRmKDyX+eUK1r5jyq3o2jNSQLd9VGXJl1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":313803},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"618ed3b937fd885d4b4136fb9634d48a1d54be42","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.25_1770953078797_0.4074977069072352","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"nfkit","version":"1.0.26","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.26","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"f4f990c4bd257e4c82d5367e1d46721c7d1b16e5","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.26.tgz","fileCount":38,"integrity":"sha512-SJ4fumeZn2NzmwexKEGXEc/ziPpap+V8u7BxWMWjmK912KaLsgOEfV4h488cxtKhKLRALuTn762QcHnM51SvyQ==","signatures":[{"sig":"MEYCIQDabKr7coMeQousZJY+3q++MpDp5Ls5VujbP4RQ6q8F6wIhAPX5wL/k7IXNTW5GMFlmTbJMzDbCNFt7cG5qsiUXu3Cb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291573},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"d14dab9aac7f18f4b1f59cd4a05365c904366dc5","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.26_1770954831682_0.15330267440712397","host":"s3://npm-registry-packages-npm-production"}},"1.0.27":{"name":"nfkit","version":"1.0.27","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.27","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"90aaad681ef11745a83059b85ade1db2b12807c6","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.27.tgz","fileCount":38,"integrity":"sha512-xgsVsp1aHgrkvxWeTb6Zv55kji9Hq3KcFTZqaIDtQmBBgDwcRtmC2o2/BTQ4ZYjzhaopX+uJCFacfRn39xfL2w==","signatures":[{"sig":"MEUCIDob4H3Z/Sp4J07jw/lomzwEsHDZ1sENJkxcdnYmOrOrAiEA8vpomH1oMrhYmh/yTyJK4EntkOaE07Ip96FCrndqiBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291739},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"c1d07104499d9b6efc8e9d46d591958a44607bcd","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.27_1770958438732_0.39933724256278613","host":"s3://npm-registry-packages-npm-production"}},"1.0.28":{"name":"nfkit","version":"1.0.28","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.28","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"88ebbb0f8c0954f88088a52709f48171e7e7e90c","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.28.tgz","fileCount":40,"integrity":"sha512-iwVUlyAYGkRvS585n019mgzea/yYFRuQ51tGlMYRBeH4lRPKpFzzp/mscfNjqLdugcvAXiXCHV3rQbglSHyJSA==","signatures":[{"sig":"MEUCIQDuA0M/lY1TwWcY3y1UWDmeypPU6IVjNxxgM4AdW+a7nQIgIHTGYLc0eYdTAY4TO59Mr7GQHimdSndpMSjd3YXYaIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320440},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"01872ac9f122523e3d5eb2a0f0afd1bceba41d58","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.28_1771072974650_0.3092283036077692","host":"s3://npm-registry-packages-npm-production"}},"1.0.29":{"name":"nfkit","version":"1.0.29","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.29","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"9bf90e712bc77ee7faf83cba9cdf27a1ad03a070","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.29.tgz","fileCount":40,"integrity":"sha512-dt3fhhlvAt594N6OxNkFx4VQwrbd86iFR//NuMvAGPevxGTozekF4oT3J76a45K+f06TLS0icxzxXH5Ux2KbqA==","signatures":[{"sig":"MEQCIDw93psKamn1RNvqjTzoxs9OQs4Fwe0U1mDtDsTQ6pcvAiBcsAfsgLjpnpzK9etjJrFH4ct840Ysuk0B3NdUv5gpVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320476},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"ad4c365d5cbe2b38228f77d52b30d00e6851703d","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.29_1771073328808_0.6325331455278254","host":"s3://npm-registry-packages-npm-production"}},"1.0.30":{"name":"nfkit","version":"1.0.30","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.30","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"0a9984e9d4b306c1c317fa4010f984981d8ddb04","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.30.tgz","fileCount":40,"integrity":"sha512-Gt2FxMpv8IZOX+0AaCl3JwhAzDq7d+cGe4btd97Xx+BKkwvHAlKPWYlT/r9QRDTbnReaC8xCjuhbOp2fZ74ALQ==","signatures":[{"sig":"MEUCIQCW+eZZb8sS5InLDSAJV6hc4SeW0qQ+gEDJ+5Qb+veFfwIgCIh+eSHbYiR1JZJK4ilZS9ba7ekSbdv9+2AM/4jjk8I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329907},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"83dc2973e7991ad272a7c0237b058a7a4d180105","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.30_1771175341994_0.8973090467075455","host":"s3://npm-registry-packages-npm-production"}},"1.0.31":{"name":"nfkit","version":"1.0.31","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.31","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"3a3544598df0e1636042193b5960026fcf433eb8","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.31.tgz","fileCount":40,"integrity":"sha512-Gj/WaJK5fFrhmIAcdpzG4P6gtgsIU+4uQPjza+2fhtgNj2RbOAdcMKWbSAcSgYt0wqzUqu4uVoNhsiJThDTVmQ==","signatures":[{"sig":"MEUCIQDgiEErGSMd/dxLna0dIPOSqtjhvQxebaQ3WVefyWaOtAIgJN529relyCZNWhkJpZaK9jL885YOKM508eL2K+eQPs0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334749},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"a71296d9c2458b652f77b24a16bdea04ac288fce","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.31_1771175957249_0.8636539464914379","host":"s3://npm-registry-packages-npm-production"}},"1.0.32":{"name":"nfkit","version":"1.0.32","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.32","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"29e0bc757fd08b4db2a14e6fb81c48981b73ef78","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.32.tgz","fileCount":40,"integrity":"sha512-y+UoxDBs6JV4CSBZkidBGK4GfzJ1Qev8uU4m4oClWGs09oxOCh6TQqnOGRaZY1yCmD8yzYcED+8waSMU4WS5fg==","signatures":[{"sig":"MEUCIQCgi9pgHZtf+fR3pr7CeugISRDini9LrnsImaCVqLHBRwIgTmBlAi3BG+o1PDrzO313S1K63aDJPvfh90lHSXeExBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329907},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"7a5176fbba1de8ca71c13669b907a32fb2347e90","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.32_1771206308974_0.9751995177519361","host":"s3://npm-registry-packages-npm-production"}},"1.0.33":{"name":"nfkit","version":"1.0.33","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.33","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"177a131aad381a5b5297ecf6da8665efb1af9645","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.33.tgz","fileCount":40,"integrity":"sha512-mhF4ZAoGUD3cI0sB/+qH2AothZG2j5y18FkyTKF6etR6nod8jBJWQ5hAr3Q6HnaWlG3HpUKN5i1wfZqQP6hyZw==","signatures":[{"sig":"MEUCID9w/weFm6L0IlcSPwkUFYvC/lK47/ppPSS8fuTQDgp2AiEAgx8c3diSUnMd1jZtscqDi6JD2RXNNqk407QvD76tbEU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336551},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"ac261fdd60c499a057e1f672c6a939a566e47955","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.6.2","description":"Common kits","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.33_1771232241973_0.08280886319610814","host":"s3://npm-registry-packages-npm-production"}},"1.0.34":{"name":"nfkit","version":"1.0.34","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.34","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"4ee0bdcf380e6b6c5748d426a059c5b75cf15208","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.34.tgz","fileCount":40,"integrity":"sha512-OES5XAE94L8lGgxVtVVo8VRHyzYeEn68o4Mwy5Z215n4ah9weyDt9XWr6L20ov2Pr2CdnVEz/r3kEtYDL31RSg==","signatures":[{"sig":"MEQCIGCY9XFmETYt1Uc3yp7wT4+LRrSMy3mCDgTQ+emui0DEAiBe6ULBd7yarsFOQIjIbMLc2FqRSRH1ra15/Uce+IyI1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341393},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"a2be36071d6c12c5bf126cba0ff69f228aef5a64","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.9.0","description":"Common kits","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.34_1771331247027_0.7001916408990265","host":"s3://npm-registry-packages-npm-production"}},"1.0.35":{"name":"nfkit","version":"1.0.35","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.35","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"499a7105d5aa4d1dd947e6af1f304494cae4f892","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.35.tgz","fileCount":40,"integrity":"sha512-hixpSFi84StHoZPbhpJTfMBKjtnYj8K+aV7dlV6VmIFZ/MdTba7XDsq77R9tH/BaHnMg0q+szLQwpn4GqqF6gQ==","signatures":[{"sig":"MEUCIQC2IPsQ/HlI5bsB4zgANErj01kxv0xsThqNOsf13eN4XAIgI6o515zmjXYMSdFWp1zQ6ZEOOA+2pXDz0WDAMGTSJKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336017},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"4c10330fc6d34cc44df6b9571e6c55a4e297aa36","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"11.9.0","description":"Common kits","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.35_1771331835648_0.14704191884114182","host":"s3://npm-registry-packages-npm-production"}},"1.0.36":{"name":"nfkit","version":"1.0.36","keywords":[],"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","_id":"nfkit@1.0.36","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"homepage":"https://code.moenext.com/nanahira/nfkit","bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"dist":{"shasum":"d4c6e263d32107f1c8f28552182acb7e15e1862e","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.36.tgz","fileCount":40,"integrity":"sha512-6n5q4uIN63VDTY+YlQ01+kZRHYWoD2njELKPYadqPryGzEjURqxiF9Obkckuk7BtVG/vti5njnhIJ+bTa7Uuxw==","signatures":[{"sig":"MEYCIQDY5iDYN873/03MGXDvDLv7hYNIV7HdnL3dpK90+zaDjwIhAOhIFOmTRC4RWUakMrUMG3BEF/FsqtvXUU6cUeDDdHVq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":356746},"jest":{"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"d4f752444ef0e28f9f5bea4cdb127b49e09865b5","scripts":{"lint":"eslint --fix .","test":"jest --passWithNoTests","build":"node build.js","clean":"node build.js clean","start":"node dist/index.cjs","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types"},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"repository":{"url":"https://code.moenext.com/nanahira/nfkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Common kits","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"8.22.0","esbuild":"^0.25.11","ts-jest":"^29.4.5","prettier":"^3.6.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","esbuild-register":"^3.6.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/nfkit_1.0.36_1771814336791_0.4463936360118055","host":"s3://npm-registry-packages-npm-production"}},"1.0.37":{"name":"nfkit","description":"Common kits","version":"1.0.37","main":"dist/index.cjs","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs","types":"./dist/index.d.ts"}},"scripts":{"lint":"eslint --fix .","build":"node build.js","build:cjs":"node build.js cjs","build:esm":"node build.js esm","build:types":"node build.js types","clean":"node build.js clean","test":"jest --passWithNoTests","start":"node dist/index.cjs"},"repository":{"type":"git","url":"https://code.moenext.com/nanahira/nfkit.git"},"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","keywords":[],"bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"homepage":"https://code.moenext.com/nanahira/nfkit","jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"tests","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"},"devDependencies":{"@types/jest":"^30.0.0","@types/node":"^24.9.1","@typescript-eslint/eslint-plugin":"^6.21.0","@typescript-eslint/parser":"^6.21.0","esbuild":"^0.25.11","esbuild-register":"^3.6.0","eslint":"8.22.0","eslint-config-prettier":"^9.1.2","eslint-plugin-prettier":"^5.5.4","jest":"^30.2.0","prettier":"^3.6.2","ts-jest":"^29.4.5","typescript":"^5.9.3"},"gitHead":"cc819ecc5a99012cc564fd3e1ae4ad5ac77af3af","_id":"nfkit@1.0.37","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-JrWBtMPc7h/4ZwzgCvqaDLVKn8ncKlyTGbul9mhOjs9mHe0TwXwP4sFxuguAif1HqGNHHU7NIL9p2Cij5SONCw==","shasum":"d01e6e1a774c0d0cf53179784ccd1f337c21c1b4","tarball":"https://registry.npmjs.org/nfkit/-/nfkit-1.0.37.tgz","fileCount":40,"unpackedSize":359853,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCUMlvahWcmGjpFllzGHKuC1Vn4iz8HeDOHAl1QV69V8QIhAOfzkhzAb0VpBfql0AT6UfqHJ9tAKNqc4qazXke3RUCU"}]},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"directories":{},"maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nfkit_1.0.37_1773278305036_0.24179861290546878"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-24T02:15:37.203Z","modified":"2026-03-12T01:18:25.288Z","1.0.1":"2025-10-24T02:15:37.492Z","1.0.2":"2025-10-24T02:19:51.798Z","1.0.3":"2025-10-28T08:57:15.745Z","1.0.4":"2025-10-28T09:01:29.611Z","1.0.5":"2025-10-31T03:43:44.037Z","1.0.6":"2025-10-31T05:37:02.193Z","1.0.7":"2025-10-31T07:18:47.396Z","1.0.8":"2025-11-04T03:15:38.613Z","1.0.9":"2025-11-04T05:55:18.922Z","1.0.10":"2025-11-10T02:37:29.713Z","1.0.11":"2025-11-21T01:02:36.738Z","1.0.12":"2025-12-09T04:58:47.451Z","1.0.13":"2025-12-11T01:51:06.146Z","1.0.14":"2026-02-03T01:05:03.125Z","1.0.15":"2026-02-07T13:29:27.182Z","1.0.16":"2026-02-07T14:27:40.949Z","1.0.17":"2026-02-07T14:59:28.168Z","1.0.18":"2026-02-07T15:07:54.575Z","1.0.19":"2026-02-07T16:31:42.585Z","1.0.20":"2026-02-07T16:50:43.886Z","1.0.21":"2026-02-08T06:03:30.673Z","1.0.22":"2026-02-12T08:41:45.255Z","1.0.23":"2026-02-12T13:52:33.085Z","1.0.24":"2026-02-12T15:30:42.308Z","1.0.25":"2026-02-13T03:24:39.007Z","1.0.26":"2026-02-13T03:53:51.843Z","1.0.27":"2026-02-13T04:53:58.875Z","1.0.28":"2026-02-14T12:42:54.808Z","1.0.29":"2026-02-14T12:48:48.988Z","1.0.30":"2026-02-15T17:09:02.179Z","1.0.31":"2026-02-15T17:19:17.423Z","1.0.32":"2026-02-16T01:45:09.197Z","1.0.33":"2026-02-16T08:57:22.125Z","1.0.34":"2026-02-17T12:27:27.194Z","1.0.35":"2026-02-17T12:37:15.811Z","1.0.36":"2026-02-23T02:38:56.957Z","1.0.37":"2026-03-12T01:18:25.188Z"},"bugs":{"url":"https://code.moenext.com/nanahira/nfkit/issues"},"author":{"name":"Nanahira","email":"nanahira@momobako.com"},"license":"MIT","homepage":"https://code.moenext.com/nanahira/nfkit","keywords":[],"repository":{"type":"git","url":"https://code.moenext.com/nanahira/nfkit.git"},"description":"Common kits","maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"readme":"# nfkit\n\n`nfkit` is a TypeScript utility package focused on practical backend/frontend engineering helpers: middleware dispatching, i18n pipeline, lightweight app context (DI-like), task scheduling, abortable proxies, and more.\n\n## Feature Count (public exports)\n\nBased on `index.ts`, the package currently exposes **14 public entries**:\n\n- **13 functional modules**\n- **1 shared types module** (`types`)\n\n| # | Entry | Purpose |\n| --- | --- | --- |\n| 1 | `workflow` | Lazy chained calls for property/method/function invocation |\n| 2 | `dual-object` | Dual-state object (`sync object + PromiseLike`) |\n| 3 | `workflow-dispatcher` | Multi-worker task scheduler with retry/backoff and dynamic worker ops |\n| 4 | `round-robin` | Round-robin selector |\n| 5 | `abortable` | AbortSignal-aware proxy wrapper |\n| 6 | `middleware-dispatcher` | Generic middleware dispatching (dynamic/proto variants included) |\n| 7 | `i18n` | i18n pipeline and dictionary lookup middleware |\n| 8 | `patch-string-in-object` | Deep string patching inside object graphs |\n| 9 | `observe-diff` | Object mutation diff observer (`add`/`update`/`delete`) |\n| 10 | `memorize` | Per-instance memoization decorator for methods/getters |\n| 11 | `may-be-array` | `T | T[]` type helper + normalization utility |\n| 12 | `app-context` | Lightweight app context (`provide/use/start/get`) |\n| 13 | `configurer` | Config loading/parsing helpers |\n| 14 | `types` | Shared type exports (`Awaitable`, etc.) |\n\n## Installation\n\n```bash\nnpm i nfkit\n```\n\n## Quick Start\n\n```ts\nimport {\n  createAppContext,\n  MiddlewareDispatcher,\n  I18n,\n  I18nLookupMiddleware,\n  WorkflowDispatcher,\n} from 'nfkit';\n```\n\n## API and Usage\n\n### 1) `workflow`\n\nBuilds a lazy chain. Execution starts only when you `await` (or call `.then/.catch/.finally`).\n\n**API**\n\n```ts\nworkflow<T>(source: T | Promise<T>): Chain<T>\n```\n\n**Example**\n\n```ts\nimport { workflow } from 'nfkit';\n\nclass Client {\n  count = 0;\n  async connect() {\n    return this;\n  }\n  inc(n: number) {\n    this.count += n;\n    return this;\n  }\n}\n\nconst client = new Client();\nconst value = await workflow(client).connect().inc(2).count;\n// value === 2\n```\n\n### 2) `dual-object`\n\nCreates a dual-state object:\n\n- sync access path for properties/methods\n- async object path via `await obj`\n- pending-safe deferred calls for selected async methods (`asyncMethods`)\n\n**API**\n\n```ts\ntype Dual<T> = T & PromiseLike<T>;\nconst DUAL_PENDING: unique symbol;\nthrowDualPending(): never;\n\ndualizeAny<T>(\n  sync: () => T,\n  asyncFn: () => Promise<T>,\n  options?: { asyncMethods?: readonly (keyof T)[] },\n): Dual<T>\n```\n\n**Example**\n\n```ts\nimport { dualizeAny } from 'nfkit';\n\ntype UserClient = {\n  id: string;\n  ping(): Promise<number>;\n};\n\nconst c = dualizeAny<UserClient>(\n  () => ({ id: 'cached', ping: async () => 1 }),\n  async () => ({ id: 'remote', ping: async () => 42 }),\n  { asyncMethods: ['ping'] as const },\n);\n\nconst v = await c.ping(); // works even while object is pending\nconst obj = await c;\n```\n\n### 3) `workflow-dispatcher`\n\nAsynchronous multi-worker dispatcher with:\n\n- global dispatch (auto worker selection)\n- worker-specific dispatch\n- retry + exponential backoff\n- runtime worker replace/add/remove\n\n**API**\n\n```ts\nnew WorkflowDispatcher<F extends (...args: any[]) => Promise<any>>(\n  workersOrPromises: Array<F | Promise<F>>,\n  options?: { maxAttempts?: number; backoffBaseMs?: number },\n)\n\ndispatch(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>>\ndispatchSpecific(index: number, ...args: Parameters<F>): Promise<Awaited<ReturnType<F>>>\nreplaceWorker(index: number, fn: F): void\naddWorker(fn: F): number\nremoveWorker(index: number): Promise<void>\nsnapshot(): WorkerSnapshot<F>[]\nget pending(): number\n```\n\n**Example**\n\n```ts\nimport { WorkflowDispatcher } from 'nfkit';\n\ntype Worker = (x: number) => Promise<string>;\n\nconst d = new WorkflowDispatcher<Worker>([\n  async (x) => `A:${x}`,\n  async (x) => `B:${x}`,\n]);\n\nconst r1 = await d.dispatch(1);\nconst r2 = await d.dispatchSpecific(0, 2);\n```\n\n### 4) `round-robin`\n\nSimple round-robin picker.\n\n**API**\n\n```ts\nclass RoundRobin<T> {\n  constructor(items: T[]);\n  next(): T;\n}\n```\n\n**Example**\n\n```ts\nimport { RoundRobin } from 'nfkit';\n\nconst rr = new RoundRobin(['a', 'b', 'c']);\nrr.next(); // a\nrr.next(); // b\nrr.next(); // c\nrr.next(); // a\n```\n\n### 5) `abortable`\n\nWraps an object/function with an AbortSignal-aware proxy. After abort, access/calls throw (or reject for Promise flows).\n\n**API**\n\n```ts\nclass AbortedError extends Error {}\n\ntype AbortableOpts = {\n  boxPrimitives?: boolean;\n  noRecursive?: boolean;\n};\n\nabortable<T>(obj: T, signal: AbortSignal, opts?: AbortableOpts): T\n```\n\n**Example**\n\n```ts\nimport { abortable } from 'nfkit';\n\nconst ac = new AbortController();\nconst obj = abortable({ n: 1 }, ac.signal);\n\nobj.n; // 1\nac.abort('stop');\n// later access throws AbortedError\n```\n\n### 6) `middleware-dispatcher`\n\nGeneric middleware execution model: `(args..., next)`.\n\nIncludes 3 dispatchers:\n\n- `DynamicMiddlewareDispatcher<F>`: override `buildMiddlewares`\n- `MiddlewareDispatcher<F>`: direct array registration\n- `ProtoMiddlewareDispatcher<A>`: middleware by instance prototype chain\n\n**Core types/options**\n\n```ts\ntype Middleware<F>\ntype MiddlewareNext<F>\ntype MiddlewareDispatcherOptions<F> = {\n  acceptResult?: (res) => boolean | Promise<boolean>;\n  errorHandler?: (e, args, next) => any;\n};\n```\n\n**Example**\n\n```ts\nimport { MiddlewareDispatcher } from 'nfkit';\n\ntype Handler = (x: number) => number;\nconst d = new MiddlewareDispatcher<Handler>();\n\nd.middleware(async (x, next) => {\n  const r = await next();\n  return (r ?? 0) + 1;\n});\n\nd.middleware(async (x) => x * 10);\n\nconst out = await d.dispatch(2); // 21\n```\n\n### 7) `i18n`\n\nMiddleware-based translation pipeline with built-in dictionary lookup middleware.\n\n**API**\n\n```ts\nclass I18n<Ex extends any[] = []> {\n  constructor(options: { locales: string[]; defaultLocale?: string });\n  middleware(mw: I18nMiddleware<Ex>, prior?: boolean): this;\n  removeMiddleware(mw: I18nMiddleware<Ex>): this;\n  getExactLocale(locale: string): string;\n  translateString(locale: string, text: string, ...ex: Ex): Promise<string>;\n  translate<T>(locale: string, obj: T, ...ex: Ex): Promise<T>;\n}\n\ntype I18nDictionary = Record<string, Record<string, string>>;\nI18nLookupMiddleware(\n  dictOrFactory,\n  options?: { matchType?: 'exact' | 'hierarchy' | 'startsWith' },\n)\ncreateI18nLookupMiddleware<Ex>()\n```\n\n**Example**\n\n```ts\nimport { I18n, I18nLookupMiddleware } from 'nfkit';\n\nconst i18n = new I18n({ locales: ['en', 'zh', 'zh-Hans'], defaultLocale: 'en' });\n\ni18n.middleware(\n  I18nLookupMiddleware(\n    {\n      en: { hello: 'Hello' },\n      'zh-Hans': { hello: '你好' },\n    },\n    { matchType: 'hierarchy' },\n  ),\n);\n\nconst s = await i18n.translateString('zh-Hans-CN', 'Say #{hello}');\n// Say 你好\n```\n\n### 8) `patch-string-in-object`\n\nDeeply traverses an object graph and transforms all string values (async callback supported).\n\n**API**\n\n```ts\npatchStringInObject<T>(\n  obj: T,\n  cb: (s: string) => string | Promise<string>,\n): Promise<T>\n```\n\n**Example**\n\n```ts\nimport { patchStringInObject } from 'nfkit';\n\nconst out = await patchStringInObject(\n  { a: 'hello', nested: ['x', 'y'] },\n  (s) => s.toUpperCase(),\n);\n// { a: 'HELLO', nested: ['X', 'Y'] }\n```\n\n### 9) `observe-diff`\n\nCreates a proxy that reports `add/update/delete` changes on property writes/deletes.\n\n**API**\n\n```ts\nobserveDiff<T>(\n  obj: T,\n  cb: (change: {\n    type: 'add' | 'update' | 'delete';\n    key: keyof T;\n    oldValue: T[keyof T] | undefined;\n    newValue: T[keyof T] | undefined;\n  }) => any,\n): T\n```\n\n**Example**\n\n```ts\nimport { observeDiff } from 'nfkit';\n\nconst state = observeDiff<{ count?: number }>({}, (c) => {\n  console.log(c.type, c.key, c.oldValue, c.newValue);\n});\n\nstate.count = 1; // add\nstate.count = 2; // update\ndelete state.count; // delete\n```\n\n### 10) `memorize`\n\nPer-instance memoization decorator for methods/getters.\n\n**API**\n\n```ts\nMemorize(): MethodDecorator & PropertyDecorator\n```\n\n**Example**\n\n```ts\nimport { Memorize } from 'nfkit';\n\nclass Svc {\n  calls = 0;\n\n  @Memorize()\n  expensive() {\n    this.calls += 1;\n    return Math.random();\n  }\n}\n```\n\n> Requires TypeScript decorator support (for example `experimentalDecorators`).\n\n### 11) `may-be-array`\n\nUtility for handling `single value or array` input consistently.\n\n**API**\n\n```ts\ntype MayBeArray<T> = T | T[];\nmakeArray<T>(value: MayBeArray<T>): T[];\n```\n\n**Example**\n\n```ts\nimport { makeArray } from 'nfkit';\n\nmakeArray(1); // [1]\nmakeArray([1, 2]); // [1, 2]\n```\n\n### 12) `app-context`\n\nLightweight app context / DI-like container.\n\nSupports:\n\n- provider registration via `provide`\n- context composition via `use`\n- lifecycle initialization via `start`\n- service lookup via `get/getAsync`\n\n**Core API**\n\n```ts\ncreateAppContext<Req = Empty>(): AppContext<Empty, Req>\n\nctx.provide(ServiceClass, ...args?, options?)\nctx.use(otherCtx)\nctx.get(ServiceClass)\nctx.getAsync(ServiceClass)\nctx.define()\nctx.start()\n```\n\n**Type-driven IoC contract**\n\n`provide()` is type constrained by `AppServiceClass`, whose constructor signature is:\n\n```ts\nnew (ctx: AppContext<...>, ...args) => Service\n```\n\nThat means the **first constructor parameter must be `ctx`**.\n\nThe type system also tracks context shape changes:\n\n- `provide: 'name'` adds `ctx.name` as that service instance type.\n- `merge: ['memberA', 'memberB']` maps selected members from service onto `ctx` with correct member types.\n- `use(otherCtx)` merges provided/required context types across contexts.\n- `start()` resolves to `never` at type level if required context (`Req`) is not satisfied.\n\nCommon `provide` options:\n\n```ts\n{\n  provide?: string; // expose service instance as ctx[prop]\n  merge?: string[]; // map selected service members onto ctx\n  useValue?: instance | Promise<instance>;\n  useFactory?: (ctx, ...args) => instance | Promise<instance>;\n  useClass?: Class;\n}\n```\n\n`provide` vs `merge`:\n\n- `provide`: exposes the whole service instance on context (for example `ctx.logger`).\n- `merge`: exposes selected service members directly on context (for example `ctx.info` from `ctx.logger.info`).\n\nCurrent runtime semantics:\n\n- `ctx.provide/ctx.use` inside a provider constructor: newly added providers are settled after that constructor ends.\n- `ctx.provide/ctx.use` inside `init()`: newly added providers are settled and initialized immediately after the current `init` ends.\n- calling `provide/use` after `start()`: providers are queued; call `define()` to trigger settlement.\n- `use(startedCtx)`: merges existing instances directly; no re-construction and no re-init.\n\n**Example**\n\n```ts\nimport { AppContext, createAppContext } from 'nfkit';\n\nclass LoggerService {\n  constructor(\n    public ctx: AppContext,\n    private prefix = '[app]',\n  ) {}\n\n  logs: string[] = [];\n\n  info(s: string) {\n    this.logs.push(`${this.prefix} ${s}`);\n  }\n}\n\nconst app = await createAppContext()\n  // first constructor argument of provider class is always ctx\n  .provide(LoggerService, '[core]', {\n    provide: 'logger', // ctx.logger -> LoggerService\n    merge: ['info'], // ctx.info -> bound logger.info\n  })\n  .define()\n  .start();\n\napp.logger.info('from instance');\napp.info('from merged method');\n```\n\n### 13) `configurer`\n\nConfig helper for string-based configuration (env-style), with typed getters.\n\n**API**\n\n```ts\nclass Configurer<T extends Record<string, string>> {\n  constructor(defaultConfig: T);\n  loadConfig(options?: {\n    env?: Record<string, string | undefined>;\n    obj?: any;\n  }): ConfigurerInstance<T>;\n  generateExampleObject(): Record<string, unknown>;\n}\n\nclass ConfigurerInstance<T extends Record<string, string>> {\n  getString(key): string;\n  getInt(key): number;\n  getFloat(key): number;\n  getBoolean(key): boolean;\n  getStringArray(key): string[];\n  getIntArray(key): number[];\n  getFloatArray(key): number[];\n  getBooleanArray(key): boolean[];\n  getJSON<R>(key): R;\n}\n```\n\nMerge priority:\n\n`defaultConfig < obj < env`\n\n**Example**\n\n```ts\nimport { Configurer } from 'nfkit';\n\nconst cfg = new Configurer({ PORT: '3000', ENABLE_CACHE: '1' }).loadConfig({\n  env: { PORT: '8080' },\n});\n\ncfg.getInt('PORT'); // 8080\ncfg.getBoolean('ENABLE_CACHE'); // true\n```\n\n### 14) `types`\n\nShared type exports:\n\n```ts\ntype Awaitable<T> = T | Promise<T>;\ntype AnyClass = new (...args: any[]) => any;\ntype ClassType<T = any> = new (...args: any[]) => T;\ninterface Empty {}\ntype Prettify<T> = ...\n```\n\n## Notes\n\nThis README reflects the current implementation exported by `index.ts`.\nIf exports change in future versions, treat source/types as the final reference.\n","readmeFilename":"README.md"}