{"_id":"@codenameryuu/express-group-route","_rev":"7-13f5999a91c7c4d903585e46e069e9ec","name":"@codenameryuu/express-group-route","dist-tags":{"latest":"1.5.1"},"versions":{"1.0.0":{"name":"@codenameryuu/express-group-route","version":"1.0.0","keywords":["express","route","group","end-point","resource","api"],"author":{"name":"codenameryuu"},"license":"MIT","_id":"@codenameryuu/express-group-route@1.0.0","maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"homepage":"https://github.com/codenameryuu/express-group-route#readme","bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"dist":{"shasum":"34b6af246ea66af96f0b5839b7423d882ea853cd","tarball":"https://registry.npmjs.org/@codenameryuu/express-group-route/-/express-group-route-1.0.0.tgz","fileCount":10,"integrity":"sha512-VoY4ATHrIAL/v44aaGkJ0Yk0bpRg3ggA3vUdNE7dsG5iQSJR/l+K3YpXg4GpkEdE5iZtDAVNc0JI8QfIQnP5fQ==","signatures":[{"sig":"MEQCIHCGifQjfPGEy18C+/gdh5f/4R5uwqG23y7q0ZRmhOdpAiA91b+JfLFuBtRBjLiBNMVfzxqb2cQJEINRhYK5PXIAFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38886},"main":"dist/express-group-route.cjs.production.min.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"dist/express-group-route.d.ts","module":"dist/express-group-route.esm.js","engines":{"node":">=24.0.0"},"gitHead":"eb25428d854fccf4779dda8bb0a187d8e6d29a47","scripts":{"lint":"tsdx lint","size":"size-limit","test":"tsdx test --coverage","build":"tsup","start":"tsup --watch","analyze":"size-limit --why","release":"standard-version","coveralls":"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls"},"_npmUser":{"name":"codenameryuu","email":"leaderballon@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/codenameryuu/express-group-route.git","type":"git"},"size-limit":[{"path":"dist/express-group-route.cjs.production.min.js","limit":"10 KB"},{"path":"dist/express-group-route.esm.js","limit":"10 KB"}],"_npmVersion":"11.6.2","description":"Easy route grouping for Express JS with resource api model.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"express":"^5.2.1","pluralize":"^8.0.0","lodash.camelcase":"^4.3.0","express-list-routes":"^1.3.2"},"publishConfig":{"tag":"latest","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","tsup":"^8.5.0","husky":"^4.3.8","sinon":"^18.0.0","tslib":"^2.7.0","coveralls":"^3.1.1","size-limit":"^11.1.4","typescript":"^5.5.4","@types/sinon":"^17.0.3","@types/express":"^5.0.6","@commitlint/cli":"^12.0.1","@types/pluralize":"^0.0.29","standard-version":"^9.5.0","@types/lodash.camelcase":"^4.3.9","@size-limit/preset-small-lib":"^11.1.4","@commitlint/config-conventional":"^12.0.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/express-group-route_1.0.0_1782098934093_0.5261792792560858","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@codenameryuu/express-group-route","version":"1.1.0","keywords":["express","route","group","end-point","resource","api"],"author":{"name":"codenameryuu"},"license":"MIT","_id":"@codenameryuu/express-group-route@1.1.0","maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"homepage":"https://github.com/codenameryuu/express-group-route#readme","bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"dist":{"shasum":"d03a123e51d7ca0c5862e9df88054f6d757a57a1","tarball":"https://registry.npmjs.org/@codenameryuu/express-group-route/-/express-group-route-1.1.0.tgz","fileCount":10,"integrity":"sha512-yWeqQf2cPOZUELsBxydcRSXGEoAwpDdO99w6yTAEoNdNYU20Coje1j4bnW+Pr0W7xjuAabkdOdSD72djQFcO7A==","signatures":[{"sig":"MEUCIQCCrI3knhyJo+wZPUwFhvORlgBtwocE6jtCUGjLWPZNdwIgWXmAP1OtwNSVEij2MjPxeL4jch3eEMEz8jWOUs6HPqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38880},"main":"dist/express-group-route.cjs.production.min.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"dist/express-group-route.d.ts","module":"dist/express-group-route.esm.js","engines":{"node":">=24.0.0"},"gitHead":"eb25428d854fccf4779dda8bb0a187d8e6d29a47","scripts":{"lint":"tsdx lint","size":"size-limit","test":"tsdx test --coverage","build":"tsup","start":"tsup --watch","analyze":"size-limit --why","release":"standard-version","coveralls":"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls"},"_npmUser":{"name":"codenameryuu","email":"leaderballon@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/codenameryuu/express-group-route.git","type":"git"},"size-limit":[{"path":"dist/express-group-route.cjs.production.min.js","limit":"10 KB"},{"path":"dist/express-group-route.esm.js","limit":"10 KB"}],"_npmVersion":"11.6.2","description":"Easy route grouping for Express JS with resource api model.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"express":"^5.2.1","pluralize":"^8.0.0","lodash.camelcase":"^4.3.0","express-list-routes":"^1.3.2"},"publishConfig":{"tag":"latest","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","tsup":"^8.5.0","husky":"^4.3.8","sinon":"^18.0.0","tslib":"^2.7.0","coveralls":"^3.1.1","size-limit":"^11.1.4","typescript":"^5.5.4","@types/sinon":"^17.0.3","@types/express":"^5.0.6","@commitlint/cli":"^12.0.1","@types/pluralize":"^0.0.29","standard-version":"^9.5.0","@types/lodash.camelcase":"^4.3.9","@size-limit/preset-small-lib":"^11.1.4","@commitlint/config-conventional":"^12.0.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/express-group-route_1.1.0_1782098975129_0.9698737813566485","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@codenameryuu/express-group-route","version":"1.2.0","keywords":["express","route","group","end-point","resource","api"],"author":{"name":"codenameryuu"},"license":"MIT","_id":"@codenameryuu/express-group-route@1.2.0","maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"homepage":"https://github.com/codenameryuu/express-group-route#readme","bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"dist":{"shasum":"153ccc5cb96296a646112d09ad93ba36982186c5","tarball":"https://registry.npmjs.org/@codenameryuu/express-group-route/-/express-group-route-1.2.0.tgz","fileCount":10,"integrity":"sha512-pc+eGHuQzT4+VGwQ2JFOC3O9m8Fg2YsgnjsZ4+4a2kPIKCUALqAhLLsZtKVQGUN0FUlq84hyxm4GNjYEAzg3kg==","signatures":[{"sig":"MEYCIQDNSLr/NGX2hOT6I8HIbXdUzcaxwiQ61ZUUetukOd5PxwIhAJnEfg2l6XxNkzbhrIqToLaLHtgzZ7h1di+qZ+HNqhiu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39898},"main":"dist/express-group-route.cjs.production.min.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"dist/express-group-route.d.ts","module":"dist/express-group-route.esm.js","engines":{"node":">=24.0.0"},"gitHead":"eb25428d854fccf4779dda8bb0a187d8e6d29a47","scripts":{"lint":"tsdx lint","size":"size-limit","test":"tsdx test --coverage","build":"tsup","start":"tsup --watch","analyze":"size-limit --why","release":"standard-version","coveralls":"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls"},"_npmUser":{"name":"codenameryuu","email":"leaderballon@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/codenameryuu/express-group-route.git","type":"git"},"size-limit":[{"path":"dist/express-group-route.cjs.production.min.js","limit":"10 KB"},{"path":"dist/express-group-route.esm.js","limit":"10 KB"}],"_npmVersion":"11.6.2","description":"Easy route grouping for Express JS with resource api model.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"express":"^5.2.1","pluralize":"^8.0.0","lodash.camelcase":"^4.3.0","express-list-routes":"^1.3.2"},"publishConfig":{"tag":"latest","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","tsup":"^8.5.0","husky":"^4.3.8","sinon":"^18.0.0","tslib":"^2.7.0","coveralls":"^3.1.1","size-limit":"^11.1.4","typescript":"^5.5.4","@types/sinon":"^17.0.3","@types/express":"^5.0.6","@commitlint/cli":"^12.0.1","@types/pluralize":"^0.0.29","standard-version":"^9.5.0","@types/lodash.camelcase":"^4.3.9","@size-limit/preset-small-lib":"^11.1.4","@commitlint/config-conventional":"^12.0.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/express-group-route_1.2.0_1782099698342_0.27149322234005924","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@codenameryuu/express-group-route","version":"1.3.0","keywords":["express","route","group","end-point","resource","api"],"author":{"name":"codenameryuu"},"license":"MIT","_id":"@codenameryuu/express-group-route@1.3.0","maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"homepage":"https://github.com/codenameryuu/express-group-route#readme","bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"dist":{"shasum":"7173cec268b30f57895260a81748c6dc4d7c20fe","tarball":"https://registry.npmjs.org/@codenameryuu/express-group-route/-/express-group-route-1.3.0.tgz","fileCount":10,"integrity":"sha512-MeO1HQ/HAiJQIhdXOabUhEVG0NcAkCEaEy5oAC16RYV0ts1cTd9LwdOQg3vRZKRwcA+ksg6gCYw8+DQXBAHp+g==","signatures":[{"sig":"MEQCICMKhmuQXgRSTWaBL/m/P4FxxJmdf7aYKqo1NEHEFsarAiAGrNt5arGw/sPNi5ynvIWuK+YBL4/d76ppeBC7hk9JXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41728},"main":"dist/express-group-route.cjs.production.min.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"dist/express-group-route.d.ts","module":"dist/express-group-route.esm.js","engines":{"node":">=24.0.0"},"gitHead":"eb25428d854fccf4779dda8bb0a187d8e6d29a47","scripts":{"lint":"tsdx lint","size":"size-limit","test":"tsdx test --coverage","build":"tsup","start":"tsup --watch","analyze":"size-limit --why","release":"standard-version","coveralls":"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls"},"_npmUser":{"name":"codenameryuu","email":"leaderballon@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/codenameryuu/express-group-route.git","type":"git"},"size-limit":[{"path":"dist/express-group-route.cjs.production.min.js","limit":"10 KB"},{"path":"dist/express-group-route.esm.js","limit":"10 KB"}],"_npmVersion":"11.6.2","description":"Easy route grouping for Express JS with resource api model.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"express":"^5.2.1","pluralize":"^8.0.0","lodash.camelcase":"^4.3.0","express-list-routes":"^1.3.2"},"publishConfig":{"tag":"latest","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","tsup":"^8.5.0","husky":"^4.3.8","sinon":"^18.0.0","tslib":"^2.7.0","coveralls":"^3.1.1","size-limit":"^11.1.4","typescript":"^5.5.4","@types/sinon":"^17.0.3","@types/express":"^5.0.6","@commitlint/cli":"^12.0.1","@types/pluralize":"^0.0.29","standard-version":"^9.5.0","@types/lodash.camelcase":"^4.3.9","@size-limit/preset-small-lib":"^11.1.4","@commitlint/config-conventional":"^12.0.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/express-group-route_1.3.0_1782100170880_0.9632702935392727","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@codenameryuu/express-group-route","version":"1.4.0","keywords":["express","route","group","end-point","resource","api"],"author":{"name":"codenameryuu"},"license":"MIT","_id":"@codenameryuu/express-group-route@1.4.0","maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"homepage":"https://github.com/codenameryuu/express-group-route#readme","bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"dist":{"shasum":"09eb0281007d56dc363f55b4d7cfcee298e81cf7","tarball":"https://registry.npmjs.org/@codenameryuu/express-group-route/-/express-group-route-1.4.0.tgz","fileCount":10,"integrity":"sha512-zK5YvjMIubozUYo39/zu0ZgrTrEwZ89Xep/GYRTGu/4B9qQWnQEhdpt7n8lUY/fU8jA1Cfz4x1VxKqh6cIS1Fw==","signatures":[{"sig":"MEUCIGWouOp50yFJvY3yiuSaXNSAWpXDSVs3BcIeO7uIhD8OAiEAm8l3nYxdXBU5aWXEu5AGoXauKtUnT1KjeCBt+jbgEt0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42183},"main":"dist/express-group-route.cjs.production.min.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"dist/express-group-route.d.ts","module":"dist/express-group-route.esm.js","engines":{"node":">=24.0.0"},"gitHead":"eb25428d854fccf4779dda8bb0a187d8e6d29a47","scripts":{"lint":"tsdx lint","size":"size-limit","test":"tsdx test --coverage","build":"tsup","start":"tsup --watch","analyze":"size-limit --why","release":"standard-version","coveralls":"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls"},"_npmUser":{"name":"codenameryuu","email":"leaderballon@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/codenameryuu/express-group-route.git","type":"git"},"size-limit":[{"path":"dist/express-group-route.cjs.production.min.js","limit":"10 KB"},{"path":"dist/express-group-route.esm.js","limit":"10 KB"}],"_npmVersion":"11.6.2","description":"Easy route grouping for Express JS with resource api model.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"express":"^5.2.1","pluralize":"^8.0.0","lodash.camelcase":"^4.3.0","express-list-routes":"^1.3.2"},"publishConfig":{"tag":"latest","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","tsup":"^8.5.0","husky":"^4.3.8","sinon":"^18.0.0","tslib":"^2.7.0","coveralls":"^3.1.1","size-limit":"^11.1.4","typescript":"^5.5.4","@types/sinon":"^17.0.3","@types/express":"^5.0.6","@commitlint/cli":"^12.0.1","@types/pluralize":"^0.0.29","standard-version":"^9.5.0","@types/lodash.camelcase":"^4.3.9","@size-limit/preset-small-lib":"^11.1.4","@commitlint/config-conventional":"^12.0.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/express-group-route_1.4.0_1782100359168_0.909912094691931","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@codenameryuu/express-group-route","version":"1.5.0","keywords":["express","route","group","end-point","resource","api"],"author":{"name":"codenameryuu"},"license":"MIT","_id":"@codenameryuu/express-group-route@1.5.0","maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"homepage":"https://github.com/codenameryuu/express-group-route#readme","bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"dist":{"shasum":"3f8254ee6dde28a430756589eaf2ca2f6c60ea05","tarball":"https://registry.npmjs.org/@codenameryuu/express-group-route/-/express-group-route-1.5.0.tgz","fileCount":10,"integrity":"sha512-AzDFE8Npq1JELDW5HqJwyPzuljc6YDGKyhMAjZ4CVSFYprHkfn24sLfci96GqoPshYcwnQ7y7ZNzN9S2B6caWw==","signatures":[{"sig":"MEUCIBF07IrNTp9TgF380udlHsOf4hqDO/o8JBLEJe8sXOwAAiEA7ZBWCeppdJ1bQu8YZ0phLW4mGT0UuUGSuNN/fgX9pyY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43077},"main":"dist/express-group-route.cjs.production.min.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"dist/express-group-route.d.ts","module":"dist/express-group-route.esm.js","engines":{"node":">=24.0.0"},"gitHead":"eb25428d854fccf4779dda8bb0a187d8e6d29a47","scripts":{"lint":"tsdx lint","size":"size-limit","test":"tsdx test --coverage","build":"tsup","start":"tsup --watch","analyze":"size-limit --why","release":"standard-version","coveralls":"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls"},"_npmUser":{"name":"codenameryuu","email":"leaderballon@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/codenameryuu/express-group-route.git","type":"git"},"size-limit":[{"path":"dist/express-group-route.cjs.production.min.js","limit":"10 KB"},{"path":"dist/express-group-route.esm.js","limit":"10 KB"}],"_npmVersion":"11.6.2","description":"Easy route grouping for Express JS with resource api model.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"express":"^5.2.1","pluralize":"^8.0.0","lodash.camelcase":"^4.3.0","express-list-routes":"^1.3.2"},"publishConfig":{"tag":"latest","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","tsup":"^8.5.0","husky":"^4.3.8","sinon":"^18.0.0","tslib":"^2.7.0","coveralls":"^3.1.1","size-limit":"^11.1.4","typescript":"^5.5.4","@types/sinon":"^17.0.3","@types/express":"^5.0.6","@commitlint/cli":"^12.0.1","@types/pluralize":"^0.0.29","standard-version":"^9.5.0","@types/lodash.camelcase":"^4.3.9","@size-limit/preset-small-lib":"^11.1.4","@commitlint/config-conventional":"^12.0.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/express-group-route_1.5.0_1782101723080_0.39753854875224715","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@codenameryuu/express-group-route","version":"1.5.1","description":"Easy route grouping for Express JS with resource api model.","author":{"name":"codenameryuu"},"license":"MIT","homepage":"https://github.com/codenameryuu/express-group-route#readme","repository":{"type":"git","url":"git+https://github.com/codenameryuu/express-group-route.git"},"engines":{"node":">=24.0.0"},"scripts":{"start":"tsup --watch","build":"tsup","test":"tsdx test --coverage","lint":"tsdx lint","size":"size-limit","analyze":"size-limit --why","coveralls":"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls","release":"standard-version"},"peerDependencies":{},"husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"prettier":{"printWidth":80,"semi":true,"singleQuote":true,"trailingComma":"es5"},"keywords":["express","route","group","end-point","resource","api"],"publishConfig":{"tag":"latest","access":"public"},"main":"dist/express-group-route.cjs.production.min.js","module":"dist/express-group-route.esm.js","types":"dist/express-group-route.d.ts","size-limit":[{"path":"dist/express-group-route.cjs.production.min.js","limit":"10 KB"},{"path":"dist/express-group-route.esm.js","limit":"10 KB"}],"devDependencies":{"@commitlint/cli":"^21.1.0","@commitlint/config-conventional":"^21.1.0","@size-limit/preset-small-lib":"^12.1.0","@types/express":"^5.0.6","@types/lodash.camelcase":"^4.3.9","@types/pluralize":"^0.0.33","@types/sinon":"^21.0.1","coveralls":"^3.1.1","husky":"^9.1.7","sinon":"^22.0.0","size-limit":"^12.1.0","standard-version":"^9.5.0","tsdx":"^2.0.0","tsup":"^8.5.1","tslib":"^2.8.1","typescript":"^6.0.3"},"dependencies":{"express":"^5.2.1","express-list-routes":"^1.3.2","lodash.camelcase":"^4.3.0","pluralize":"^8.0.0"},"gitHead":"f0e37a5c36055c2e411f5fc8f2bec0ca227b7658","_id":"@codenameryuu/express-group-route@1.5.1","bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-G+vxavumdPDcLUlgYKEpKRJPQF5KBvLD7FEf4sw1t9vtVW2V75Ui04ET32aAs8Qk2HqTaXjK93uQtSTPfXNvSA==","shasum":"52c1f4f0164e206f07e84549d3dc729227b76c30","tarball":"https://registry.npmjs.org/@codenameryuu/express-group-route/-/express-group-route-1.5.1.tgz","fileCount":10,"unpackedSize":43104,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBJZl/Q8KcBqrjmXLps1SfnngutoRZOKr5JsA12yIKguAiEA88zqwfkf2aBpBHZTwzve+6C0X17Nd51pFzzWkgTzcVI="}]},"_npmUser":{"name":"codenameryuu","email":"leaderballon@gmail.com"},"directories":{},"maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/express-group-route_1.5.1_1782706404517_0.09763827754943866"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-22T03:28:53.926Z","modified":"2026-06-29T04:13:24.784Z","1.0.0":"2026-06-22T03:28:54.247Z","1.1.0":"2026-06-22T03:29:35.264Z","1.2.0":"2026-06-22T03:41:38.478Z","1.3.0":"2026-06-22T03:49:31.004Z","1.4.0":"2026-06-22T03:52:39.298Z","1.5.0":"2026-06-22T04:15:23.240Z","1.5.1":"2026-06-29T04:13:24.692Z"},"bugs":{"url":"https://github.com/codenameryuu/express-group-route/issues"},"author":{"name":"codenameryuu"},"license":"MIT","homepage":"https://github.com/codenameryuu/express-group-route#readme","keywords":["express","route","group","end-point","resource","api"],"repository":{"type":"git","url":"git+https://github.com/codenameryuu/express-group-route.git"},"description":"Easy route grouping for Express JS with resource api model.","maintainers":[{"name":"codenameryuu","email":"leaderballon@gmail.com"}],"readme":"# @codenameryuu/express-group-route\r\n\r\nEasy route grouping for Express JS with resource api model.\r\n\r\n## Requirement\r\n\r\n* Express JS 5\r\n\r\n## Installation\r\n\r\n* Install the package\r\n\r\n```bash\r\nyarn add @codenameryuu/express-group-route\r\n```\r\n\r\n## Usage\r\n\r\n```typescript\r\nimport RouteGrouping from '@codenameryuu/express-group-route';\r\n\r\nconst root = RouteGrouping();\r\n\r\nconst m1 = (req, res, next) => {\r\n  console.log('Middleware 1');\r\n  next();\r\n};\r\n\r\nconst m2 = (req, res, next) => {\r\n  console.log('Middleware 2');\r\n  next();\r\n};\r\n\r\nconst auth = (req, res, next) => {\r\n  console.log('Auth Middleware');\r\n  next();\r\n};\r\n\r\nroot.group('/api', m1, m2, api => {\r\n  api.group('/v1', auth, v1 => {\r\n    v1.get('/users', (req, res) => {\r\n      res.send('Users');\r\n    });\r\n  });\r\n});\r\n\r\napp.use(root.getRouter());\r\n```\r\n\r\n> Note: You can add as many middlewares as you want.\r\n\r\nAdd middleware to the group without adding a route.\r\n\r\n```typescript\r\nroot.group('/api', m1, m2, api => {\r\n  api.group(auth, perm, api => {\r\n    api.get('/users', (req, res) => {\r\n      res.send('Users');\r\n    });\r\n    api.get('/comments', (req, res) => {\r\n      res.send('Comments');\r\n    });\r\n  });\r\n  api.get('health-check', (req, res) => {\r\n    res.send('OK');\r\n  });\r\n});\r\n```\r\n\r\n> **Not:** You can nest all routes unlimitedly as above.\r\n\r\n## Resource API Model\r\n\r\nYou can use the resource API model to create a RESTful API. Resource api modeling is a approach to standarts some generic http operations.\r\n\r\nLet's see the examples:\r\n\r\n```typescript\r\nimport { IResource } from '@codenameryuu/express-group-route';\r\n\r\nclass UserController implements IResource {\r\n  index(req, res) {\r\n    res.send('Users');\r\n  }\r\n\r\n  show(req, res) {\r\n    res.send('User');\r\n  }\r\n\r\n  store(req, res) {\r\n    res.send('User created');\r\n  }\r\n\r\n  update(req, res) {\r\n    res.send('User updated');\r\n  }\r\n\r\n  patch(req, res) {\r\n    res.send('User patched');\r\n  }\r\n\r\n  destroy(req, res) {\r\n    res.send('User deleted');\r\n  }\r\n}\r\n\r\nroot.group('/api', m1, m2, api => {\r\n  api.group('/v1/users', v1Auth, v1 => {\r\n    v1.resource(new UserController());\r\n  });\r\n\r\n  api.group('/v2/users', v2Auth, v2 => {\r\n    v2.resource(new UserController());\r\n  });\r\n});\r\n```\r\n\r\nThe output of the above code is as follows:\r\n\r\n**v1**\r\n\r\n```plaintext\r\nGET    /api/v1/users\r\nGET    /api/v1/users/:userId\r\nPOST   /api/v1/users\r\nPUT    /api/v1/users/:userId\r\nPATCH  /api/v1/users/:userId\r\nDELETE /api/v1/users/:userId\r\n\r\n// added middlewares\r\nmiddlewares: [m1, m2, v1Auth]\r\n```\r\n\r\n**v2**\r\n\r\n```plaintext\r\nGET    /api/v2/users\r\nGET    /api/v2/users/:userId\r\nPOST   /api/v2/users\r\nPUT    /api/v2/users/:userId\r\nPATCH  /api/v2/users/:userId\r\nDELETE /api/v2/users/:userId\r\n\r\n// added middlewares\r\nmiddlewares: [m1, m2, v2Auth]\r\n```\r\n\r\n> Note: You don't need to add all routes to the controller. You can add only the routes you want to use.\r\n\r\n### Resource API Model Configuration\r\n\r\nYou can configure the resource API model as you wish.\r\n\r\n```typescript\r\nroot.resource({\r\n  path: 'blogs.comments.likes',\r\n  handlers: new UserController(),\r\n  middlewares: {\r\n    index: [auth],\r\n    destroy: [auth, perm],\r\n  },\r\n  parameters: {\r\n    blogs: 'slug',\r\n  },\r\n});\r\n```\r\n\r\nThe output of the above code is as follows:\r\n\r\n```plaintext\r\nGET    /blogs/:slug/comments/:commentId/likes\r\n          ├── middlewares: [auth]\r\nGET    /blogs/:slug/comments/:commentId/likes/:likeId\r\nPOST   /blogs/:slug/comments/:commentId/likes\r\nPUT    /blogs/:slug/comments/:commentId/likes/:likeId\r\nPATCH  /blogs/:slug/comments/:commentId/likes/:likeId\r\nDELETE /blogs/:slug/comments/:commentId/likes/:likeId\r\n          ├── middlewares: [auth, perm]\r\n```\r\n\r\nWe added the middlewares to the `index` and `destroy` routes. We also added the parameter to the blogs route as `:slug` instead of `:blogId` .\r\n\r\n### Resource API Model Configuration Parameters\r\n\r\n| Name          | Type      | Required | Description               |\r\n| ------------- | --------- | -------- | ------------------------- |\r\n| `path` | string    | false    | The path of the resource. |\r\n| `handlers` | object    | true     | The controller object.    |\r\n| `middlewares` | Endpoints | false    | The middlewares object.   |\r\n| `parameters` | object    | false    | The parameters object.    |\r\n\r\n### Endpoints\r\n\r\n| Name      | Type   | Description        |\r\n| --------- | ------ | ------------------ |\r\n| `index` | GET    | List all resources |\r\n| `show` | GET    | Show a resource    |\r\n| `store` | POST   | Create a resource  |\r\n| `update` | PUT    | Update a resource  |\r\n| `patch` | PATCH  | Patch a resource   |\r\n| `destroy` | DELETE | Delete a resource  |\r\n\r\n> Note: This resource configuration model is inspired by the [Laravel](https://laravel.com/docs/8.x/controllers#resource-controllers) PHP framework.\r\n\r\n## Tests\r\n\r\n```sh\r\n$ yarn test\r\n```\r\n\r\n## Contributing\r\n\r\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\r\n\r\n## License\r\n\r\nThis project is [MIT](https://github.com/codenameryuu/express-group-route/blob/master/LICENSE.md) licensed.\r\n","readmeFilename":"README.md"}