{"_id":"@eliyya/type-routes","_rev":"36-b8a78715af46c0b341b48fff0bb18ad0","name":"@eliyya/type-routes","dist-tags":{"latest":"3.1.0"},"versions":{"1.0.0":{"name":"@eliyya/type-routes","version":"1.0.0","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.0.0","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.js"},"dist":{"shasum":"53ae16a2668f3a707458383a789f935305694dcf","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.0.0.tgz","fileCount":4,"integrity":"sha512-taG/lc/oS3DEgG0CAbCZT4O1kzjFUAsPORr2mHwk1WUjaz8PWVgqQwwhpgpe8T0w9zAMkE82YxQQg0L+V+6MEA==","signatures":[{"sig":"MEQCIAyaEoLQPi+j5g9OrldBilwNkTlLPh9iNvNUeHiO0hMpAiAz7WCLEPKJ1vBe34kEdLoc81e6yp0NVRBQ6x529HJwyA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6809},"main":"./lib/index.js","type":"module","types":"./lib/index.d.ts","engines":{"node":">=20.11"},"gitHead":"816ac8ef26d0ddc3ff434068bb98730ae0f098f0","private":false,"scripts":{"build":"tsc"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.8.2","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"20.17.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":">=20.11"},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.0.0_1724530150241_0.7580258486634583","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@eliyya/type-routes","version":"1.0.1","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.0.1","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.js"},"dist":{"shasum":"c68de3c9c0fa499410a0d2fa73968b7277c977a1","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.0.1.tgz","fileCount":4,"integrity":"sha512-v1MlyiS/DcWPXnO/1MZO/KhDa8vjGIfmUmS/G4vQAxudBX1osaG/6wj3eyqMVH+o4KDFr5QPC4fq+kGjsMIQBw==","signatures":[{"sig":"MEYCIQDyr6nnpJQO+O49zEh/whiDLVz67S9M0kqw1egb/z+3GgIhAN/KavSZHPMGRra2o6cu+dPWPXeW/LACfma6qnjsg6Mp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6849},"main":"./lib/index.js","type":"module","types":"./lib/index.d.ts","engines":{"node":">=20.11"},"gitHead":"9a24cb3ed00ba41ee6a2a12a0ccabcc9086696fe","private":false,"scripts":{"build":"tsc","postinstall":"node ./lib/cli.js"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.8.2","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"20.17.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":">=20.11"},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.0.1_1724547173654_0.23624260631408744","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@eliyya/type-routes","version":"1.0.2","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.0.2","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.js"},"dist":{"shasum":"549454ef14d65e110c5f4a8a8d18ec9fe6958d1d","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.0.2.tgz","fileCount":4,"integrity":"sha512-M4iq7qttlfSE3wYAWmQ5Gip4LIJ0Op3OmRhSP7fld9harvz2VNuzFv+Ws3mriB4kaM0iHSaZS4wsWyBWme0d0w==","signatures":[{"sig":"MEYCIQD9fttyCJhxeilNt4qUFszb9GWZ9WvrxFtLh8HNIwIXTgIhAJVHpbTHxF8FOhy+eolts/1KVxnxGuI4CIkHatZV7UND","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6851},"main":"./lib/index.js","type":"module","types":"./lib/index.d.ts","engines":{"node":">=20.11"},"gitHead":"871ec8b94b4ca5936128ce23e12ac51e6722fa72","private":false,"scripts":{"build":"tsc","postinstall":"node ./lib/cli.js"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.8.2","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"20.17.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":">=20.11"},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.0.2_1727829521335_0.7173203085641073","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@eliyya/type-routes","version":"1.0.3","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.0.3","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.js"},"dist":{"shasum":"5538f68217ccf20259b7e8f7da7f56d6e423e990","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.0.3.tgz","fileCount":4,"integrity":"sha512-20CEHzcRytb2LGER2pk4g9jhnC+ofyrcXWiu/3lI0CDGLaVRNi4x7Hu4a86trraMDDfBwKXaDoWSb5JFFZ33DQ==","signatures":[{"sig":"MEUCIQCJ+7mzYV3kq+Gey4/iEdl8mMkUz2JnGaJIyog8utnmewIgXePCVo04HvYnnNluywTo10B51YA7aQupPAAM8UFk51E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6873},"main":"./lib/index.js","type":"module","types":"./lib/index.d.ts","engines":{"node":">=20.11"},"gitHead":"e952442f931bb227c5466e2979f1244a56cb4619","private":false,"scripts":{"build":"tsc","postinstall":"node ./lib/cli.js"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.8.2","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"20.17.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":">=20.11"},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.0.3_1727829742838_0.7075874060628644","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@eliyya/type-routes","version":"1.0.4","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.0.4","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.js"},"dist":{"shasum":"2098d1cf1987f46b97ddc14cbc169f0378ffa08e","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.0.4.tgz","fileCount":4,"integrity":"sha512-dV9y4GFruv837qb8dwpd8cIkYuhEdwwzdjsflzSjxLIcdXa4hw7MwsUp7fgDDHB0fK2/gxdZ+AKV4qN+1U1aNA==","signatures":[{"sig":"MEQCIFn+c5apnWdxvDvTQhfaUcz6tqFm1U7auey+8bBd+C/AAiBra+WlHtx+4xGzPVzipFUXf7P1kesq2z4jZPLShmfFyw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6833},"main":"./lib/index.js","type":"module","types":"./lib/index.d.ts","engines":{"node":">=20.11"},"gitHead":"bcb24489efe2ed8939e3a52e58f7398e235e5655","private":false,"scripts":{"build":"tsc"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.8.2","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"20.17.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":">=20.11"},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.0.4_1727829948180_0.0968912900909995","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@eliyya/type-routes","version":"1.1.0","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.1.0","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"8f38894940f5ea5d47e5460fa1d7e3ee0d657d61","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.1.0.tgz","fileCount":12,"integrity":"sha512-Ht71NbYLHhkg6MXT+WM9wAyQDVXB2+00bjTkyhWd5e/I1mKw5hdlOA78Umtp7yM5M8XI5XxXYADQFgjD+web7g==","signatures":[{"sig":"MEUCIQCCntJa95ART6x4Ln8i9JMVWDG+dGm4CFBu4KHzNORgHgIgSd7nNPtfgaZmowGp2HSCeqQbXi5yqV5Sf0a9F9wrDNM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13294},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"2beb20a6aa2b3869755b1f9b14c73118b3600abe","private":false,"scripts":{"build":"tsc"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.11.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"^14 || ^15","eslint":"^9.15.0","globals":"^15.12.0","chokidar":"^4","@eslint/js":"^9.15.0","typescript":"^5","@types/node":">=22.9.3","typescript-eslint":"^8.15.0"},"peerDependencies":{"next":"^14 || ^15","chokidar":"^4"},"optionalDependencies":{"chokidar":"^3 || ^4"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.1.0_1732406582216_0.6768744041094323","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@eliyya/type-routes","version":"1.1.1","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.1.1","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"7eb1f343fb5dfaa0315a1c2852805d9988337fcb","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.1.1.tgz","fileCount":12,"integrity":"sha512-YvpOgVivwup2ZIH5tzy691J+t0QB/wwv20uMkBqa3GCKCCxAarREeJCtWx1fJh9qF1umDm+sskmZOYbSXubhTg==","signatures":[{"sig":"MEYCIQC+fR8VQITQzHmp8tQoGV4C2OrIEhzOiSgihcgeQKdn2wIhAK93cO6fKkvjZLzUbYgoNmDYIxG8JPgQZfe7bdRJEV09","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13404},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"5e6fbbe8cc0294e8a2e86162c26fe8e5f82f7b0b","private":false,"scripts":{"build":"tsc"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.11.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"^14 || ^15","eslint":"^9.15.0","globals":"^15.12.0","chokidar":"^4","@eslint/js":"^9.15.0","typescript":"^5","@types/node":">=22.9.3","typescript-eslint":"^8.15.0"},"peerDependencies":{"next":"^14 || ^15","chokidar":"^4"},"optionalDependencies":{"chokidar":"^3 || ^4"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.1.1_1732409608931_0.6833329635394603","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"@eliyya/type-routes","version":"1.1.2","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@1.1.2","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"85cef7e98ed0d7176898bdd28c80b216a2697916","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-1.1.2.tgz","fileCount":13,"integrity":"sha512-3KfyNq5CcSslavdX4EjEbjzM9BReDXIqakkA7vFG/stQABNApTbHKYNc5tVK/KimmBE6byufW7AosCpRlaW1ew==","signatures":[{"sig":"MEYCIQC/90nC6AL8jHy9YA6XssTRLjJNfMmhQ/ixzgPHNSpYIwIhAOtojHly3ZxTk8Phd3v9QRCt0ZOmKEgLENMW9p7GjfC+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13578},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"f62b7ccba2eb5fc1e33fec92a547ee019e2b11fa","private":false,"scripts":{"build":"tsc"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.11.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"^14 || ^15","eslint":"^9.15.0","globals":"^15.12.0","chokidar":"^4","@eslint/js":"^9.15.0","typescript":"^5","@types/node":">=22.9.3","typescript-eslint":"^8.15.0"},"peerDependencies":{"next":"^14 || ^15","chokidar":"^4"},"optionalDependencies":{"chokidar":"^3 || ^4"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_1.1.2_1732410161047_0.42166651315648385","host":"s3://npm-registry-packages"}},"2.0.3":{"name":"@eliyya/type-routes","version":"2.0.3","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.0.3","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"fe0479ffcc0d72510decda4703bdea3c523ee8d1","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.0.3.tgz","fileCount":12,"integrity":"sha512-fphpfa0yoAezGWgAn6czd7LNxuZm1GfQyi1HwlBr0AQu9tzj2zkXTUJRjegxXrzAq8SDY4v9cSVN7XtliUicXg==","signatures":[{"sig":"MEYCIQDiE9enIhTk576UYxF88w6N4oXKopiaW0gXLyKVNarTaQIhAPeYCEgyAi3VLZPgWB8WJI9WXuO1S7VedLwPuZqzymOw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14975},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"d5c9d15d74a12f7656e8955a47534761f54b0cdc","private":false,"scripts":{"build":"tsc"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.0.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.11.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"^14 || ^15","eslint":"^9.15.0","globals":"^15.12.0","chokidar":"^4","@eslint/js":"^9.15.0","typescript":"^5","@types/node":">=22.9.3","typescript-eslint":"^8.15.0"},"peerDependencies":{"next":"^14 || ^15","chokidar":"^4"},"optionalDependencies":{"chokidar":"^3 || ^4"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.0.3_1735805141870_0.9965593069047844","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@eliyya/type-routes","version":"2.1.0","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.1.0","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"a34c1497da7bb1cdd7c15340d17cb0e43e97d12d","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.1.0.tgz","fileCount":11,"integrity":"sha512-1IyRK0dRQzUefUIQEbZC2jPaQ22VCpPEEPyTwIdK/aO4cHa/WYiIeL6SGduceKkLAg2EyjIAlE9L/bdpgl5Wrg==","signatures":[{"sig":"MEYCIQDQ7UlOOhS1JiBwY4Ls7UcN+g5DL8mVdH7sQuttLrbiOgIhAIuLz1OVB5S2fb/zgivXGmRZnM+Y4dZXG0CJU86dRKNR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14445},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"19ea34f20dc032db5cf52e2e584d2b3d85627661","private":false,"scripts":{"build":"tsc"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.1.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.13.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.1","eslint":"9.21.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":"^14 || ^15"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.1.0_1741063434610_0.1056242595662853","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@eliyya/type-routes","version":"2.2.0","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.2.0","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"92f78a1f29d79ed58db1f9e15d2820776fcadb83","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.2.0.tgz","fileCount":11,"integrity":"sha512-HQ6edgwQdPhuU2yu4r6mNfR4Q0F+oO69chuKB7FexOJG2s8+++fYJTz70o5xv7/CUTFXGJdyY8xzywrc4K7++Q==","signatures":[{"sig":"MEQCICykyZrxB1R2WMR2v2dnxlBGrBhQ6fomyjtTG3ElKMY6AiAnYJVN3EKZWVFHOj5HW3ZA93N759qD5fou6WRn8QekbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10330},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"f806304fe69ce40813dba622425c5ffaa322b139","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.1.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.13.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.1","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":"^14 || ^15"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.2.0_1741141678737_0.9026567901493632","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@eliyya/type-routes","version":"2.2.1","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.2.1","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"f79a0eb8a9c4b8ac23acd8832b7eaf61df3c58e2","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.2.1.tgz","fileCount":11,"integrity":"sha512-ONm31dqj/HBpr7i/ZxVa/HdJ5GwVri/xe/6HghJcT/AZTGV5t/jlolgG9q1vzh2mFJxh7x5ouL6eRMqK9+F0yQ==","signatures":[{"sig":"MEQCIHMGwZsUcp5qHxpma+tFrfr4swH2OnxUxZZbxdPhgbN3AiAOFkrtbNB/6zg41I4ct1nylesCne/YN9TqIiL/QxQn0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10399},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"39f13c4c7d73e44948dea2ba86a440b25929b7b6","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.1.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.13.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.1","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":"^14 || ^15"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.2.1_1741142549773_0.06805799902948251","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@eliyya/type-routes","version":"2.2.2","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.2.2","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"fba36b2951dd24bc37874006d71b691d48194334","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.2.2.tgz","fileCount":11,"integrity":"sha512-kKse2G+KjmYkLeHjsa88clRNzphpiyW+I0bIdvqMfqcxd5vjJJ87aEQpzDIPcr4VjD+SLXOr65izE123V5eUUg==","signatures":[{"sig":"MEYCIQC3EzOiivhxHjMC6MAlWflI5kvpKu75Tw/fNjxnAThZmQIhAK/9Wx+RU5QzH5dGwz/+iBbf+kyDssTk9mIqw87K7daX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10414},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"72890fc4ba2e09d7b7d968cb9cb045166b128870","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.2.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.14.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.1","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":"^14 || ^15 || 15.x-canary"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.2.2_1742680283012_0.8863002356152498","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@eliyya/type-routes","version":"2.2.3","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.2.3","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"3745a810d7fc21dcafb76b5f95fdde826e5d07aa","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.2.3.tgz","fileCount":11,"integrity":"sha512-dTKtpsGNSvyFZbiMm3AgxHeKHkQo1eAKbNe5+Eww1EfOury3gXPuLh+HtAJ99kixOm9cTU6lZh8CVzDkMnLAAg==","signatures":[{"sig":"MEUCIQCY2slvbsfW66dHcz2mHPUTkDP1YAGMrSxR32UQ/CaTrwIgXYkahC7zwdclXdYKEpmScbkbvnImMTmylHs/CfTQkgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10416},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"f6b40b22884438ca92dd2be6e014fc6184fce779","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.2.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.14.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.1","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":"^14 || ^15 || 15.x.x-canary"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.2.3_1742680441573_0.6532033262784316","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"@eliyya/type-routes","version":"2.2.5","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.2.5","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"e92cad4c70469e7cb72bfa66edb627ff9db99f42","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.2.5.tgz","fileCount":11,"integrity":"sha512-cI7N8GEYrPoWJHKrfnCjGwJIZtMq1SNBvnMYZRwlDbAQHU471K0KNmMs5lJeTwd8LeeYDT2LXnovflurZo8v5Q==","signatures":[{"sig":"MEQCIBqKW1LcRiY1g9YQjs0j4KEBfqrz1xjhav1hx6T91K0hAiBtFTTyGB60/tE9N10X9hTY0nFUL00J1ueXt2uS6FWV2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10546},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"a089a04e40c2a754c5af40303ad5f508ff3794e1","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.4.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"23.6.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.3","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.2.5_1747516409471_0.122420156104321","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"@eliyya/type-routes","version":"2.2.6","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.2.6","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"c782273d4f15ea9e43fcc9df78d223471eb29dfb","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.2.6.tgz","fileCount":11,"integrity":"sha512-PGTEBYYI59xfWStoT5ggXosWbV8xq5yYUBVqRnJXNpnBaQklbAVig+51vHFkkv1ZVRS7HcKUwwIZtvdk6F65AA==","signatures":[{"sig":"MEQCIDeG3e446+iiXgjIOs8gy4nQKnZes4xQv8C/EDPMxKqKAiBVJ65hFjn/v7Onnn5mtddqkeRMBg6M9SEMb1qVZYiplA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10876},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"fb2c144eb54f64cac0c5f75fb350dffea43d6722","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs","postinstall":"./lib/cli.mjs || true"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.4.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"23.6.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.3","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.2.6_1747517173970_0.22466840640509655","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"@eliyya/type-routes","version":"2.2.7","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.2.7","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"644442e49f1c12d8bd13ca8ab62b45722b38f367","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.2.7.tgz","fileCount":11,"integrity":"sha512-gkdKLma4+8uFCz1QNCEm3UnA8knurNewN1Vy2qy5X9pLOhCzSDmpCe7xlDn89YWfYjhfL7lo6DEWkXV/62JAxw==","signatures":[{"sig":"MEYCIQDTHOnRtFvgs2ODmqyH2jt2GRvzukRykj72sq5uf70qQgIhANsuImsifea6sT0+rjPulROLuxAqwmXufG8xvLJFq3ly","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15228},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"01d079f52e08f7d796d35b616f6175d7e9095096","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs","postinstall":"node lib/cli.mjs || 0"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.4.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"23.6.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.3","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.2.7_1747521438854_0.06849506595699428","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@eliyya/type-routes","version":"2.3.0","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.3.0","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"686e74e712723d40a445951262fecf6945eb6ed5","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.3.0.tgz","fileCount":11,"integrity":"sha512-b62kxV4u52GX6zhQZ3z21mY7A3B+VMNOg1R42yzBoubHTgSBvvf/FzFC+VCDHGLywLIYo48YUT7NZL9PtP7A2A==","signatures":[{"sig":"MEYCIQCT6Gm+AYGzbkmCcMJtO3AyBraFwMGa2CDUYO0dJCWIiAIhAIaSNicCM+T0VPhZYEGT5CnjNk/UCODqI5lh6lxiUcTH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11079},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"b2ed91526f9bad40fc567a776106b277ec59dd83","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs","postinstall":"node lib/cli.mjs || 0"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.3.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"24.1.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.4","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.3.0_1754948365243_0.026479227951384576","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@eliyya/type-routes","version":"2.5.0","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.5.0","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"a0f588c0b199cb67f47305baffa4958b1ea1693e","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.5.0.tgz","fileCount":11,"integrity":"sha512-BkWOi+B4Qvc6f11SmGSouLwZqvBzi1mjJVeeKcCJWF5iTNRdp2L1UBagJETfH+Z15D/YX8sFaj69uGdUzckOwg==","signatures":[{"sig":"MEYCIQCxUyXLw6XHML4JFo3iU4BlLj9H23hmH+sZZ+57XCcjkQIhAMxMtXWVIV8Bvr3YYxM/FtK0vFk4YXnQrnlhKfFP8EvD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11790},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"507ab627f9943d05a6793b2378de3e8ccfcf615e","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs","postinstall":"node lib/cli.mjs || 0"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.3","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.19.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.4","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.5.0_1760250776671_0.9537888476683936","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"@eliyya/type-routes","version":"2.5.1","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.5.1","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"9ebcbeb20d81290590b6b40754e393100da78a30","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.5.1.tgz","fileCount":11,"integrity":"sha512-OoLmW/JaCRyND3ok0kgnvqinC7NZQ0ApJGkrMTfYz//87kyDx+HnXzoIntAd6c3/97tGr6vkdID2DgCNLXYpAQ==","signatures":[{"sig":"MEUCIAZ0gPMXedIydvhP/AwPSQ7lpOEuQUmgJ2H5xep31LrJAiEAsfXm1TiWpoGOZkyYusveKcHpb2OZk9H0xUUuLpjP4oY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11890},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"301a8d808b8151b38a556bf524181a333d7ed5a9","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs","postinstall":"node lib/cli.mjs || 0"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.3","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.19.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.4","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.5.1_1760399981117_0.7676597149575632","host":"s3://npm-registry-packages-npm-production"}},"2.5.2":{"name":"@eliyya/type-routes","version":"2.5.2","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.5.2","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.mjs"},"dist":{"shasum":"737514b529bf188c717b53ff11cd3b8ea2f403d6","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.5.2.tgz","fileCount":12,"integrity":"sha512-GkZHkurr66OSpzecnFRuMQ3BwvXVaYTHBLTEcLcbXFoGfpJUMQIAc7Ebm1Wd9jhR3QqfmjsNmYjfTts6ZJ5tJg==","signatures":[{"sig":"MEYCIQDmd/3Ubi0T3OlpShPrU/HcrxrHOkBCCrx7Kv8yehJvigIhAK2qsDd9tFUEDYu7n+sAbf2Q9ffpSsNlK7pMe/xR3Hgn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12217},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.mjs"},"./next":{"import":"./lib/next.mjs"}},"gitHead":"6c66762de55008b754827838510e065ce8e3b2c8","private":false,"scripts":{"build":"tsc && esbuild src/*.mts --minify --platform=node --outdir=lib --out-extension:.js=.mjs","postinstall":"node lib/cli.mjs || 0"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.3","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.19.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.2.4","eslint":"9.21.0","esbuild":"0.25.0","globals":"16.0.0","@eslint/js":"9.21.0","typescript":"5.8.2","@types/node":"22.13.9","typescript-eslint":"8.26.0"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.5.2_1760803496745_0.854131706759059","host":"s3://npm-registry-packages-npm-production"}},"2.5.3":{"name":"@eliyya/type-routes","version":"2.5.3","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.5.3","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.js"},"dist":{"shasum":"6e738f4cc9bea4aac0295607dfab6716f5b0eec8","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.5.3.tgz","fileCount":14,"integrity":"sha512-3T4WRGdMLhX4aIdFujKFwy8jKPEENm+w4PoZh5PiLQmUo/rhutluEYS66THYUT8Q0zHer74cGTGZnbp33uyIeg==","signatures":[{"sig":"MEYCIQCWO3LaKfChAmI1Fh3xEekMkIdxTQzkYCvwg4GfFU0qQQIhAMWS79hLJuv032BVtKgqu+U7eWnbIhAFRwUZ/JsQbgtp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23019},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.js"},"./next":{"import":"./lib/next.js"}},"gitHead":"96a08b60dca2e119e499eee8cc7c30222de75ea5","private":false,"scripts":{"build":"rimraf lib && tsc && esbuild src/*.ts --minify --platform=node --outdir=lib","postinstall":"node lib/cli.js || echo \"\""},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.3","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.20.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.5.6","eslint":"9.38.0","rimraf":"6.0.1","esbuild":"0.25.11","globals":"16.4.0","@eslint/js":"9.38.0","typescript":"5.9.3","@types/node":"24.9.0","typescript-eslint":"8.46.1"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.5.3_1760975573516_0.4733712755815189","host":"s3://npm-registry-packages-npm-production"}},"2.5.4":{"name":"@eliyya/type-routes","version":"2.5.4","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@2.5.4","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"lib/cli.js"},"dist":{"shasum":"a0a8e5234b6dd15387caed4ed2f5483dfa74d4df","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-2.5.4.tgz","fileCount":14,"integrity":"sha512-1h8VUBkFXSBgtWagXiamMfx0dgBp33hSh5/6+9/MCORBwQVOwDeJErCGvOCz8OnHeguosTOC4qM4R4jsowhGag==","signatures":[{"sig":"MEUCIDhIi2YxxQwusUhWiRxHyO6kxtb7iovcIWQFZGxWEwukAiEA0lYKFlUx3OdBnH3H/pN+mgX39gqu2g2QK++ZRIl5PcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23480},"type":"module","engines":{"node":">=20.11"},"exports":{".":{"import":"./lib/index.js"},"./next":{"import":"./lib/cli.js"}},"gitHead":"79c3331ad408975ed768b2f7ab6d87cbd30651cf","private":false,"scripts":{"build":"rimraf lib && tsc && node build.ts","postinstall":"node lib/cli.js || echo \"\""},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"10.9.3","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"22.20.0","engineStrict":true,"_hasShrinkwrap":false,"devDependencies":{"next":"15.5.6","eslint":"9.38.0","rimraf":"6.0.1","esbuild":"0.25.11","globals":"16.4.0","@eslint/js":"9.38.0","typescript":"5.9.3","@types/node":"24.9.0","typescript-eslint":"8.46.1"},"peerDependencies":{"next":">=14"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_2.5.4_1760977650299_0.4314985578913251","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@eliyya/type-routes","version":"3.0.0","keywords":["typescript","next","nextjs","routes"],"author":{"name":"eliyya"},"license":"MIT","_id":"@eliyya/type-routes@3.0.0","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"dist/cli.js"},"dist":{"shasum":"90707a8c631702cea4151fd853d3b75637d7b6f6","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-3.0.0.tgz","fileCount":18,"integrity":"sha512-pE4h6cuB76SPqjJLRrz2CA/zIodZiJUhsHPOMT5+Xlef/Rhcnc3/s9uM0E6ywG9TXpnCb4TP1oVACW5dCFggfw==","signatures":[{"sig":"MEUCIHPjfWvfGCRVd+CGKCLOpzsSXamV+Gch8j5+G1Z+MLneAiEAw5nHPsX0W7JD6ebmvzIDBJvPFszCbDq1jupwvwqi5Yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38249},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js"}},"gitHead":"fdb67be75916be204627ada93b154e67416f0400","scripts":{"lint":"eslint src/","test":"node --experimental-strip-types --test src/**/*.test.ts","build":"tsc","format":"prettier --write \"src/**/*.ts\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"eliyya","email":"elimacmun@gmail.com"},"_npmVersion":"11.9.0","description":"Type your Nextjs routes","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.0","eslint":"^9.0.0","prettier":"^3.0.0","typescript":"^6.0.0","@types/node":"^25.9.0","typescript-eslint":"^8.59.4","eslint-plugin-import-x":"^4.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","eslint-import-resolver-typescript":"^4.4.4"},"peerDependencies":{"next":"^16.0.0"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_3.0.0_1781573677398_0.5019331190333511","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@eliyya/type-routes","version":"3.0.2","keywords":["typescript","next","nextjs","routes"],"author":"eliyya","license":"MIT","_id":"@eliyya/type-routes@3.0.2","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"bin":{"type-routes":"./dist/cli.js"},"dist":{"shasum":"7cdf8dc5bf6f0373808a4a2e0b6684fa06891046","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-3.0.2.tgz","fileCount":18,"integrity":"sha512-Czjsqh/exC+mD5NJNFTc7KGAFOOA/8AKOkaPQ+/EsvZDISCJKahF8nqOA+hBEUqcLLzZDtjzBuWMeV8R8vmcPw==","signatures":[{"sig":"MEYCIQCalW3ZqhrFXrcGCGfdWUMk59xqA48UdiRRmimGdUts8wIhALfgFC4L0NkQC9+vKOuKtr5D/e5pvaRH1RfA6Eetw+Ds","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC2sHSTFLmuuItYYlChiLjbkWJK0kTP3ve1p+EKQNBVOAIhALZCKtJTh4OTW/hpYhjtLOFZqTGAsGZVOL3dIzhVrjtr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@eliyya%2ftype-routes@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40381},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js"}},"scripts":{"lint":"eslint src/","test":"node --experimental-strip-types --test src/**/*.test.ts","build":"tsc","format":"prettier --write \"src/**/*.ts\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0cbef60d-dee1-45b9-924b-9025abced09f"}},"repository":{"url":"git+https://github.com/eliyya/type-routes.git","type":"git"},"description":"Type your Nextjs routes","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.5","eslint":"^9.0.0","prettier":"^3.0.0","typescript":"^6.0.0","@types/node":"^25.9.0","typescript-eslint":"^8.59.4","eslint-plugin-import-x":"^4.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","eslint-import-resolver-typescript":"^4.4.4"},"peerDependencies":{"next":"^16.3.5"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/type-routes_3.0.2_1790396131080_0.5311647880685593","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"_id":"@eliyya/type-routes@3.1.0","bin":{"type-routes":"./dist/cli.js"},"dist":{"shasum":"c667f48d7ec225cf7297b63c1cb2a38e5a7814ce","tarball":"https://registry.npmjs.org/@eliyya/type-routes/-/type-routes-3.1.0.tgz","fileCount":27,"integrity":"sha512-5YW4EjDjBs71IZmwpggGL4szsk9o8m/iZdbX38i8myH7txnG8FaOVHeMJ7jQQJYLYW/yjwQJ37Z5fcHkJ74aRA==","signatures":[{"sig":"MEYCIQCbURM4HnKQ92+bVP970/Y3SezYBb4fHOAuI4b/vqWl4wIhAJCGT6y+vFbq0HF+BW5ZJc/6BFvqsVaCIm01RfnwxZM3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDZc3jclR4HvRko+khplAxZCPNHdd0zlpRCuBW0YSgOFAiAmiPl/A3zaCi/vFYGyB20f8QCAl+Q9RbZUG5REPs4YNQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@eliyya%2ftype-routes@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":87075},"main":"./dist/index.js","name":"@eliyya/type-routes","type":"module","types":"./dist/index.d.ts","author":"eliyya","engines":{"node":">=20.11"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js"}},"license":"MIT","scripts":{"lint":"eslint src/","test":"node --experimental-strip-types --test src/**/*.test.ts","build":"tsc","format":"prettier --write \"src/**/*.ts\"","typecheck":"tsc --noEmit"},"version":"3.1.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0cbef60d-dee1-45b9-924b-9025abced09f"}},"keywords":["typescript","next","nextjs","routes"],"repository":{"url":"git+https://github.com/eliyya/type-routes.git","type":"git"},"description":"Type your Nextjs routes","directories":{},"maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.5","eslint":"^9.0.0","prettier":"^3.0.0","typescript":"^6.0.0","@types/node":"^25.9.0","typescript-eslint":"^8.59.4","eslint-plugin-import-x":"^4.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","eslint-import-resolver-typescript":"^4.4.4"},"peerDependencies":{"next":"^16.3.5"},"peerDependenciesMeta":{"next":{"optional":false}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/type-routes_3.1.0_1790802570937_0.031199546103469533"}}},"time":{"created":"2024-08-24T20:09:10.122Z","modified":"2026-09-30T21:09:31.387Z","1.0.0":"2024-08-24T20:09:10.401Z","1.0.1":"2024-08-25T00:52:53.806Z","1.0.2":"2024-10-02T00:38:41.502Z","1.0.3":"2024-10-02T00:42:23.033Z","1.0.4":"2024-10-02T00:45:48.355Z","1.1.0":"2024-11-24T00:03:02.400Z","1.1.1":"2024-11-24T00:53:29.132Z","1.1.2":"2024-11-24T01:02:41.210Z","2.0.0":"2025-01-02T07:49:35.774Z","2.0.1":"2025-01-02T07:57:18.890Z","2.0.2":"2025-01-02T08:00:34.005Z","2.0.3":"2025-01-02T08:05:42.057Z","2.1.0":"2025-03-04T04:43:54.764Z","2.2.0":"2025-03-05T02:27:58.904Z","2.2.1":"2025-03-05T02:42:29.982Z","2.2.2":"2025-03-22T21:51:23.203Z","2.2.3":"2025-03-22T21:54:01.748Z","2.2.5":"2025-05-17T21:13:29.643Z","2.2.6":"2025-05-17T21:26:14.148Z","2.2.7":"2025-05-17T22:37:19.054Z","2.3.0":"2025-08-11T21:39:25.420Z","2.4.0":"2025-09-10T08:32:57.541Z","2.4.1":"2025-09-10T15:47:55.455Z","2.5.0":"2025-10-12T06:32:56.847Z","2.5.1":"2025-10-13T23:59:41.337Z","2.5.2":"2025-10-18T16:04:57.057Z","2.5.3":"2025-10-20T15:52:53.712Z","2.5.4":"2025-10-20T16:27:30.487Z","3.0.0":"2026-06-16T01:34:37.553Z","3.0.2":"2026-09-26T04:15:31.201Z","3.1.0":"2026-09-30T21:09:31.016Z"},"author":"eliyya","license":"MIT","keywords":["typescript","next","nextjs","routes"],"repository":{"url":"git+https://github.com/eliyya/type-routes.git","type":"git"},"description":"Type your Nextjs routes","maintainers":[{"name":"eliyya","email":"elimacmun@gmail.com"}],"readme":"# type-routes\n\nGenerate a type-safe runtime and TypeScript interface from your Next.js App Router directory structure.\n\n## Install\n\n```shell\nnpm add @eliyya/type-routes\n```\n\n> Peer dependency: `next@^16.3.5` (required).\n\nThis package uses ESM imports.\n\nNext.js 16.3.5 requires `sharp@^0.35.4`, which includes fixes for image decoding vulnerabilities. Existing applications must update their own Next.js dependency and lockfile; updating this package alone does not replace an already installed Next.js version.\n\n## Agent skill\n\n[skills/type-routes/SKILL.md](skills/type-routes/SKILL.md) teaches agents how to\nintegrate this package into Next.js projects, run the CLI in CI pipelines, and\nuse the generated route helpers. It is included in the npm package at\n`node_modules/@eliyya/type-routes/skills/type-routes/SKILL.md`.\n\nCopy the `skills/type-routes` folder into the skill directory supported by your\nagent, or reference its `SKILL.md` in the project's agent instructions.\n\n## CLI\n\n```shell\ntype-routes --help\n```\n\n```\nUsage: type-routes [options]\n\nOptions:\n  -i, --input <dir>        App directory (default: src/app)\n  -o, --output <file>      Output file   (default: src/lib/routes.ts)\n  -w, --watch              Watch for changes\n      --debounce-ms <ms>   Debounce delay (default: 300)\n  -e, --extra <route>      Extra route path (can be repeated)\n  -h, --help               Show this help\n```\n\n### Examples\n\n```shell\n# Basic\ntype-routes\n\n# Custom paths\ntype-routes -i src/app -o src/lib/routes.ts\n\n# App Router at the project root\ntype-routes -i app -o lib/routes.ts\n\n# Watch mode\ntype-routes -w\n\n# Force routes that don't exist on disk\ntype-routes -e / -e /users\n```\n\n`input` must point to the App Router directory. Relative input/output paths are\nresolved from the working directory, so run from the Next application's root\nin a monorepo. Route paths are relative to `input`; a working directory named\n`/app` does not change the generated URL root.\n\n### Pipeline example\n\nGenerate before a standalone typecheck or build that imports the output:\n\n```json\n{\n  \"scripts\": {\n    \"routes:generate\": \"type-routes -i src/app -o src/lib/routes.ts\",\n    \"typecheck\": \"npm run routes:generate && tsc --noEmit\",\n    \"build\": \"npm run routes:generate && next build\"\n  }\n}\n```\n\nAdapt the runner to the project's package manager and preserve existing build\ncommands. Run without `--watch` in CI so generation can finish. The CLI has no\n`--quiet` or `paramConstraints` option; use the plugin with shared options when\nthe output needs constrained parameters.\n\n## Next.js Plugin\n\n```ts\n// next.config.ts\nimport { defineTypeRouteConfig } from '@eliyya/type-routes'\n\nconst nextConfig = {}\n\n// The factory generates routes, then returns a wrapper for the Next config.\nexport default defineTypeRouteConfig({\n    input: 'src/app',\n    output: 'src/lib/routes.ts',\n    quiet: true,\n    extraRoutes: ['/', '/users'],\n    paramConstraints: { locale: ['en', 'es'] },\n})(nextConfig)\n```\n\n### PluginOptions\n\n| Option             | Type                       | Default               | Description                           |\n| ------------------ | -------------------------- | --------------------- | ------------------------------------- |\n| `input`            | `string`                   | `'src/app'`           | App directory                         |\n| `output`           | `string`                   | `'src/lib/routes.ts'` | Output file                           |\n| `extraRoutes`      | `string[]`                 | —                     | Force routes that don't exist on disk |\n| `paramConstraints` | `Record<string, string[]>` | —                     | Restrict dynamic param values         |\n| `watch`            | `boolean`                  | `true`                | Watch during development; initial generation still runs when `false` |\n| `watchDebounceMs`  | `number`                   | `300`                 | Debounce delay in dev mode            |\n| `quiet`            | `boolean`                  | `false`               | Hide routine logs; errors remain visible |\n\nThe plugin generates immediately when its configuration is loaded. In **dev\nmode**, it also watches the input directory unless `watch: false` is configured.\nThe watcher keeps an index of `page.tsx`/`route.ts` paths: saving their content\ndoes not rebuild the route tree or scan the whole directory. Creating, deleting,\nor moving routes updates the index; directory changes and ambiguous events are\nreconciled with the filesystem.\n\nTo run the watcher in a separate process, configure `watch: false` and run\n`type-routes --watch` alongside `next dev`, with matching input, output, and\nextra routes. The CLI does not support `paramConstraints`, so use this mode only\nfor an unconstrained output. Watchers are shared per output within one process;\nseparate CLI and Next processes must not both watch the same output.\n\n`withTypeRoutes` from `@eliyya/type-routes/next` is deprecated. Use\n`defineTypeRouteConfig` from `@eliyya/type-routes` instead; options and behavior\nare unchanged.\n\n## Usage\n\nOnce generated, import the `app` object from your output file:\n\n```ts\nimport { app } from '@/lib/routes' // adjust path to your output\n\n// Static routes\napp.dashboard.settings() // → '/dashboard/settings'\n\n// Dynamic routes\napp.users.$id('123') // → '/users/123'\n\n// Catch-all routes\napp.api.auth.$$all('login', 'callback') // → '/api/auth/login/callback'\n\n// Optional catch-all routes\napp.posts._$$slug() // → '/posts/'\napp.posts._$$slug('hello') // → '/posts/hello'\n\n// With constraints\napp.$locale.dashboard('en') // allowed, → '/en/dashboard'\napp.$locale.dashboard('fr') // type error if constraint is ['en','es']\n\n// Nested Object.assign pattern\napp.$locale.dashboard.reports.cc.$cc_id.$month.$year(\n    'en',   // $locale\n    'cc-1', // $cc_id\n    'jan',  // $month\n    '2026', // $year\n) // → '/en/dashboard/reports/cc/cc-1/jan/2026'\n```\n\n## Features\n\n### Static routes\n\n```\napp/dashboard/settings/page.tsx  →  app.dashboard.settings()\n```\n\n### Dynamic routes (`[param]`)\n\n```\napp/users/[id]/page.tsx  →  app.users.$id('123')\n\napp/[locale]/dashboard/page.tsx  →  app.$locale.dashboard('en')\n```\n\nParams are prefixed with `$` when used as property names.\nPass ancestor parameters at the final route call, in directory order:\n`app.$locale.users.$id('es', '123')`. A node is callable only when it has a\n`page.tsx`, `route.ts`, or an explicit extra route.\n\n### Catch-all routes (`[...param]`)\n\n```\napp/api/auth/[...all]/route.ts  →  app.api.auth.$$all('login', 'callback')\n```\n\nCatch-all params are prefixed with `$$`. They receive rest arguments and `join('/')` them into the path.\n\n### Optional catch-all routes (`[[...param]]`)\n\n```\napp/posts/[[...slug]]/page.tsx  →  app.posts._$$slug()\napp/posts/[[...slug]]/page.tsx  →  app.posts._$$slug('hello')\n```\n\nOptional catch-all params are prefixed with `_$$`. Calling without arguments\nuses an empty array; the current runtime preserves a trailing slash, such as\n`'/posts/'`.\n\n### Route groups (`(group)`)\n\nRoute-group segments like `(marketing)` are stripped from paths and do not appear in the generated types.\n\n### Object.assign pattern\n\nWhen a directory has both a `page.tsx`/`route.ts` and sub-routes, the generated runtime uses `Object.assign(fn, { children })`, so the node is both callable and has sub-properties:\n\n```\napp/dashboard/page.tsx          →  app.dashboard()         // → '/dashboard'\napp/dashboard/settings/page.tsx →  app.dashboard.settings() // → '/dashboard/settings'\n```\n\n## extraRoutes\n\nForce-generate routes even when the corresponding file doesn't exist on disk:\n\n```ts\ndefineTypeRouteConfig({\n    extraRoutes: [\n        '/', // → app/       (creates app(): `/`)\n        '/users', // → app/users/ (creates app.users(): `/users`)\n    ],\n})(nextConfig)\n```\n\n| Passed         | Internal path             |\n| -------------- | ------------------------- |\n| `'/'`          | `app/page.tsx`            |\n| `'/users'`     | `app/users/page.tsx`      |\n| `'users/[id]'` | `app/users/[id]/page.tsx` |\n\nUseful when:\n\n- Your root (`/`) is served by a proxy but has no `app/page.tsx`\n- A directory has no `page.tsx` but the router resolves to a sub-route via middleware\n\n## paramConstraints\n\nRestrict dynamic parameter values at the type level:\n\n```ts\ndefineTypeRouteConfig({\n    paramConstraints: {\n        locale: ['en', 'es'],\n        role: ['admin', 'user'],\n    },\n})(nextConfig)\n```\n\nFor `app/[locale]/dashboard/page.tsx`, the generated output includes:\n\n```ts\ninterface App {\n    $locale: {\n        dashboard: {\n            <$locale extends 'en' | 'es'>($locale: $locale): `/${$locale}/dashboard`\n        }\n    }\n}\n\nexport const app = {\n    $locale: {\n        dashboard: ($locale: 'en' | 'es') => `/${$locale}/dashboard`,\n    },\n} as App\n```\n\nUsing a constrained param with an invalid value produces a type error:\n\n```ts\napp.$locale.dashboard('en') // OK\napp.$locale.dashboard('fr') // Type error: '\"fr\"' is not assignable to '\"en\" | \"es\"'\n```\n\nOrdinary keys are normalized: `locale` → `$locale`. Use the generated names\nexplicitly for catch-all parameters (`$$all`) and optional catch-all parameters\n(`_$$slug`). Constraints apply to TypeScript calls; they do not validate values\nat runtime.\n\n## Programmatic API\n\n```ts\nimport {\n    buildTree,\n    generateInterfaceFile,\n    generateRuntimeFile,\n} from '@eliyya/type-routes'\n\n// Build from normalized paths rooted at app (route groups already removed).\nconst paths = [\n    'app/dashboard/page.tsx',\n    'app/[locale]/dashboard/page.tsx',\n    'app/users/[id]/page.tsx',\n]\n// The second argument is optional.\nconst tree = buildTree(paths, { locale: ['en', 'es'] })\n\n// Generate TypeScript source strings.\nconst interfaceCode = generateInterfaceFile(tree)\nconst runtimeCode = generateRuntimeFile(tree)\n```\n\nUse the CLI or Next plugin to scan files on disk and write the generated output.\n`buildTree` accepts normalized paths; the package's main entry does not export a\nfilesystem scanner.\nThe main entry also exports `extractParam`, `resetId`, and the `TreeNode`,\n`RouteType`, and `PluginOptions` types.\n\n## Supported scope\n\nThe scanner reads App Router `page.tsx` and `route.ts` files only. Other file\nextensions and the Pages Router are not scanned. An existing input directory\nwith no route files produces an empty `app` object.\n\nRoute groups are omitted from URLs. Parallel slots and intercepted routes are\nnot specially normalized, so inspect their generated URLs before using them.\nQuery strings, fragments, `basePath`, rewrites, and parameter URL encoding are\nnot applied automatically.\n\n## How it works\n\n1. Scans the input directory for `page.tsx` and `route.ts` files (watch mode reuses its route index)\n2. Hashes the normalized, sorted, deduplicated route paths, extra routes, parameter constraints, and generator schema version\n3. Skips tree/code generation when that input fingerprint matches and the existing output passes its content-integrity check\n4. Otherwise builds a tree with node types (static, dynamic, catch-all, etc.) and generates a TypeScript `interface App` plus a runtime `export const app`\n\nThe output is written to a single `.ts` file that can be imported anywhere in your project.\nThe first comment contains a SHA-256 hash of the generated content, and the\nsecond stores the input fingerprint. The input fingerprint avoids rebuilding\nunchanged routes and avoids unnecessary writes; the content hash detects an\nedited output. A deleted or edited output is regenerated on the next generation\nrun even when the input fingerprint is unchanged.\n\nCLI generation and watcher regeneration use asynchronous filesystem operations.\nWatcher events are debounced and processed in a serialized queue, so batches do\nnot run overlapping generations. The plugin's initial generation remains\nsynchronous so the output is ready when Next loads its configuration. This does\nnot create a worker thread or a background process; `type-routes --watch` can be\nrun separately when process isolation is desired.\n\nInitial CLI generation errors produce a nonzero exit code, allowing a pipeline\nto stop before typechecking or building with a stale output.\n\n## Motivation\n\n`type-routes` turns the App Router directory structure into reusable URL builder\nfunctions. Callers construct dynamic paths through typed parameters and can use\nthe same generated helpers with links, redirects, router navigation, and API\nrequests.\n","readmeFilename":""}