{"_id":"@bepalo/spine","_rev":"28-1a20e244612bd70e422667a723c3e99c","name":"@bepalo/spine","dist-tags":{"latest":"3.16.31"},"versions":{"1.0.3":{"name":"@bepalo/spine","version":"1.0.3","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.0.3","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"368d153d66f7216531c88576244aaa3c3cb597f5","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.0.3.tgz","fileCount":83,"integrity":"sha512-gHmqhgQh/jffuc0e0ltjNSH9nHX8G9GrnpL0x89pV6udOSLioJe43vSRN7RD6uCzReVZgkki6j7Vb1QW1RJjCw==","signatures":[{"sig":"MEUCIBpvhe7Y6gBFGB6nwsZnGZxAKUI96IXa1fzuW1jFmIXqAiEA27okCTwzc2htZ5aQipEY2YM7sLofQIKmL3/HmP6qqZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":863982},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.0.3_1786319315699_0.13714373430693594","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bepalo/spine","version":"1.0.4","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.0.4","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"0e469c69ccf26d378cb97bd3f576dacc75dad416","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.0.4.tgz","fileCount":83,"integrity":"sha512-6lueQA4Qahpwt1Gki0NLjala+uu45hKWFH1Vq4YJsJiQ0AsxVrfvlcnpcxMKPaQtAQoL1c+ye/DSUwzf8ejITA==","signatures":[{"sig":"MEUCIQDfy1EAbHiwIj1mYp/MKMPtwEiPqkRhnBKaA0Hd+qwfJgIgD6J9Gb5qEW7ltTthvkUgNlBnH2q7W9Ct9i9PCWnSAlo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":863982},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.0.4_1786319810120_0.9220546320789091","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bepalo/spine","version":"1.0.5","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.0.5","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"e24a7fd20f12c91230e689b0a076fd6aceb5eba5","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.0.5.tgz","fileCount":83,"integrity":"sha512-pcPBx1fTUWs+CTs1gwjrPki9oCCRuLSVNIuvvDuW7WHOd39LzUvCGplPsoW9DLEW8BeuVM1D4oiE9pktj/DVaw==","signatures":[{"sig":"MEYCIQDDDfyTvQEy9/wuQsdGGHG8v+Tcs37hgepL06FsctH2EgIhAP7khOET5ehfG7Ii2znVuHNIjRgQx8yrt8yKzj5geeSW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":863988},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.0.5_1786382313774_0.15133264164130433","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bepalo/spine","version":"1.0.6","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.0.6","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"a8100361728d1cf21a2a05b98b23ab47cfd16079","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.0.6.tgz","fileCount":83,"integrity":"sha512-oVegttsZ/BGHEtZa4rTcqsyiRwA2ecRyS2pd6lUmgIuuLmr1ys5VhdC7rlG21JdO/ADO7E7B68x0+xWkG5UeZQ==","signatures":[{"sig":"MEYCIQD+qTnNvlC2F8tQcu9as6Md8RA95jhqsMgJdHqEZl2WRgIhALB/tcyZG3c7T65NMu8jezAMyf4F/ym4MBOqsUC9MGCc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":863864},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.0.6_1786382316060_0.729633622599162","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@bepalo/spine","version":"1.1.7","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.1.7","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"34b324e408b19693f99bd0682e3cdc6a4d918629","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.1.7.tgz","fileCount":91,"integrity":"sha512-BiPd+IYHe/TH4TMBtw0Q/fYqdwcbeK2fpXSTmxvjMSnQDvHItbbULtGVSItZ5a0LXEmRGavJgZkzgpMf7Wt92w==","signatures":[{"sig":"MEYCIQCgTeegzcbqwktM2mFbWmoQHSizvbd6zyfXGhDge6Ns9QIhAMFdcu//TOqy5B0YP1h4dZe+flPLcFgaT4J38FE/U47s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1308521},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.1.7_1786457488942_0.6644272289282611","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@bepalo/spine","version":"1.1.8","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.1.8","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"226fedab2be6e4c47c8a0d7cc75e69baf2ee1f4f","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.1.8.tgz","fileCount":83,"integrity":"sha512-gDDq3EoUJ/PSPd6htEqTr+6XF5WLw9109A5KuSGBtnW+KPvFeV1u8jd1IE3q6T24C21RNSbgqWB5+V6RPD6+Cg==","signatures":[{"sig":"MEUCIHtoZADbCjT7zNW39YnD2prplQAC/AQDWKyZWx0k4lbvAiEA0Jyu7Z1IcfmSFn1zQfP1CgMURK8Rq2taQEcR1qrgZAc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":933559},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.1.8_1786457812414_0.7280788325356613","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@bepalo/spine","version":"1.1.9","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.1.9","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"9e1b72fce6ff65f8362349ee31530ac6b3ba5a41","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.1.9.tgz","fileCount":83,"integrity":"sha512-zzP3duqG1TliJBI9ZvqThiQZAuKhXDVsQGMzq9CxQ7M1d1RDmFxytzZqdPScpMIxdnVLCE4wkv4EE6CbhqjrFQ==","signatures":[{"sig":"MEUCIQDYGM0bRDojNEbyYuTpnW8Dx5H/BrPhCvsK6CBhOPOREAIgAOwOQ/7Ub+u+0HbTyU96/IR0Wovi+qO7RG3r/sMhGF4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":933559},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.1.9_1786457976961_0.7833661397258278","host":"s3://npm-registry-packages-npm-production"}},"1.2.10":{"name":"@bepalo/spine","version":"1.2.10","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.2.10","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"24bd7235732a39420124055f8b108452c1023256","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.2.10.tgz","fileCount":91,"integrity":"sha512-eGtkhBIAi3Sm16YqWpqx1MD1Qat7KezPyHOTTn5W901sLeN28FoEC8RoAXVGGa4qS1bQMhwBuFl/WNjy1FBNJg==","signatures":[{"sig":"MEQCIDpAffvoRmj1/m8JO6+5fOxm5K1U72PUXuvNt1KU9Tg1AiBjZJSw6t8p0tXk0yfhji1pjgShqz7A9+QvG17rftcHKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":954254},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.2.10_1786482775374_0.06640409762122546","host":"s3://npm-registry-packages-npm-production"}},"1.2.11":{"name":"@bepalo/spine","version":"1.2.11","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.2.11","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"5032610d625958f132533677b620a916aabae857","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.2.11.tgz","fileCount":91,"integrity":"sha512-yNpI+Xco7sPdLIsYtqg1cKywT5Ho74Cp2E2TSmuCenhfRdmV/FByEK2Mot9XfByOp6XF7VAXVDVijNlg7DnnQg==","signatures":[{"sig":"MEYCIQCceJMMhpBOdn0Kgt687mm8ypbq7RxtW1APf3d6Io6bfwIhAI5m9mYkdoMNNz3tFrWFT2OwFNeQ0CNH+YhTC218bnuC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":954238},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.2.11_1786483431837_0.5434881994637366","host":"s3://npm-registry-packages-npm-production"}},"1.3.12":{"name":"@bepalo/spine","version":"1.3.12","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.3.12","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"a57fdf7b6957f827d4a73fe2f9b9b31b28f488de","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.3.12.tgz","fileCount":91,"integrity":"sha512-OuqaXxEf7HgubYdHJIvSLu/p29QnaaS4/0AxK3pRpF2810wbc4Xpg1PAKjaKni9PWA25e09Dii8ACqwiOaLdtw==","signatures":[{"sig":"MEYCIQCYjn45KxU2sofl53d/WxIGCqJHoI7KUShXEDKPUaaQUAIhAIM7eLvWZ6yqTvWWwsjqp1dlt76OidC+zhfIpHK0p8nx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.3.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1001302},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.3.12_1786553945395_0.8429183321381641","host":"s3://npm-registry-packages-npm-production"}},"1.4.13":{"name":"@bepalo/spine","version":"1.4.13","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.4.13","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"bfe0ddbb63258cc29a655d650c36b0e7291d9d65","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.4.13.tgz","fileCount":91,"integrity":"sha512-arVnGfjvZ96XpP2xrSzGMQjzbt6Wpdeeh+fUcFWqFqfvhG/ekbAFSTPs0Gx1huw+nYGIiKuWGVm6HCGM50yxlg==","signatures":[{"sig":"MEYCIQD0ePxA9+hPmRgZTQxohopiKkIbY2NTwV+mgKOU+kz0ewIhANAGJsPS0/YEIYBao7Y0H5xIyPdgDb4+3ZTB+AloGYU6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.4.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1001274},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.4.13_1786555050779_0.3428390059713531","host":"s3://npm-registry-packages-npm-production"}},"1.5.14":{"name":"@bepalo/spine","version":"1.5.14","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.5.14","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"5139570a0077efe50c37baf19d6f70afb08d8e05","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.5.14.tgz","fileCount":99,"integrity":"sha512-ADLulOumozCgj1/Sjom7iFb+SbVFuQETUb+YNKKDXRziMfUKX9ZqdmvWj8UQ03QkEkCnb4O4ZQevrEm5GAlySg==","signatures":[{"sig":"MEQCICzgy+KUkkf53UnV2Soff5D2qFgCSLXEPykA7paEZrSSAiBwgfsltCBbWMSK58MZ+fOeAvsZhxQBOPr3U9p6ZYe1BQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.5.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1082626},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.5.14_1786667961842_0.9093270002990235","host":"s3://npm-registry-packages-npm-production"}},"1.5.15":{"name":"@bepalo/spine","version":"1.5.15","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.5.15","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"2752c94ac6d03bdf8999ac6a5dc9861585d6ed3f","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.5.15.tgz","fileCount":99,"integrity":"sha512-yV/IRBYphgxWnHJGZ/svTeG+N+9LHGUMrf1gp0vwmLIcBW+qKRnaaembp464m2iHyl2DMb07mnCHAOkKGCTSpA==","signatures":[{"sig":"MEQCID3wA5e5fZ0027YzCG/6bCz7yCmrLWRCufKcL9YiQU2RAiBiVtCBFdSWXVVtk2AkuU7q/r+gjlzFwHaB/Mi4Y76bdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.5.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1082148},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.5.15_1786670514833_0.21677776585481956","host":"s3://npm-registry-packages-npm-production"}},"1.5.16":{"name":"@bepalo/spine","version":"1.5.16","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.5.16","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"0a065051d642dcd9bcf2ad6413bbcde8d3f2a881","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.5.16.tgz","fileCount":99,"integrity":"sha512-otaoDEcFyCsqdfL91vx5Sof3W9nAHuxPKylGOHMclSp8A8vFsKJtzvOZRgXCvAHqBEtNoOQKNolyWS8oB5Uf6g==","signatures":[{"sig":"MEUCIEO0hGdUywunlbSJ1jzNXv1QbyVLbg+XdZbTmgrEu+WSAiEArcdiMnKzPQWvXPqsLUrOD+h5dqsUhd8EI/I2gNaZBfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.5.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1082620},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.5.16_1786671704591_0.5524283235806411","host":"s3://npm-registry-packages-npm-production"}},"1.5.17":{"name":"@bepalo/spine","version":"1.5.17","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@1.5.17","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"929d4e46540db9ebb1c5e1e95135e08ebdca5f40","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-1.5.17.tgz","fileCount":99,"integrity":"sha512-vFBwDR4CbsRVYgKZg4aBl+/dpCXQJSjI7+iIvefV40QVyC4STq7plz88gH5obfqGscet/b93T4qNWtEahss2+g==","signatures":[{"sig":"MEUCIQDQ5uug2QdAIraMmF3N4R2vnsBGh1TWbkdwVR7Jcldh8gIgQhVAmlXw6Dk8Ac3nh6rMVwho8fjnz3sCfb03ZZ3LpX0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@1.5.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1080193},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_1.5.17_1786904281298_0.24544736153837943","host":"s3://npm-registry-packages-npm-production"}},"2.6.18":{"name":"@bepalo/spine","version":"2.6.18","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","feature-rich"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@2.6.18","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"405750fc7b97668a28f4c2643a3ad86cf68c8bb3","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-2.6.18.tgz","fileCount":123,"integrity":"sha512-rrVCjvCSnqaaalvejEy62ht0KXIUPZFY2U5QQPduva6w/5xNEe++6hxAGBzlV7o5Gflyw5/KNZKJ5aE6YD9DSQ==","signatures":[{"sig":"MEYCIQD8U8/SDdMEuNkT7zEZnAuq32AViTMTnJl7Nv52bh7IYwIhAJFuu/whTK6i7G1d0cWsX5xuQwmJoixJKUQK9rmVtE9e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@2.6.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1488163},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_2.6.18_1787151141795_0.38786907490767053","host":"s3://npm-registry-packages-npm-production"}},"2.7.19":{"name":"@bepalo/spine","version":"2.7.19","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@2.7.19","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"80796b9f5524ac4a00890a8cbf4377db511ef12f","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-2.7.19.tgz","fileCount":123,"integrity":"sha512-NHSE3uV/Z5eAcxFftsRKmkzk9m0GLvoxvoAQMPZuSb3vH4b7BXvNsUBtMtBR6noJICZWUfDQYvutSLiC+6PxMg==","signatures":[{"sig":"MEUCIDB1QmAuS249/JmonXahoh43d9aiZ7+skbSB8laC7Z8AAiEAxesstmUkwQaCyEjmo91fx4Q+WC6TiWmu5bnzitQ1vW8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@2.7.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1635718},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_2.7.19_1788625961913_0.8156194681510269","host":"s3://npm-registry-packages-npm-production"}},"2.8.20":{"name":"@bepalo/spine","version":"2.8.20","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@2.8.20","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"570fc54e8706a9e81f0ff995cc747cd80f181e48","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-2.8.20.tgz","fileCount":123,"integrity":"sha512-RRCmjqx9RE/GDp1Kn2HwxU7FLjioL9U62Bt+okVrapNTZqL6xUOF3KbGJnnozD0gCXIWucJ7ixSGwL2KVJ4w8w==","signatures":[{"sig":"MEQCIDPOT/ooz9HG0nZFMQnbXM6tpjhOkq+bywi7yHJsTmNnAiBzBGZ96LtpubD1d0x73EqlJhqLzprvureBcX9dwJtPBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@2.8.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1645868},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./src/index.ts"},"./dist":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_2.8.20_1788632666582_0.9816096768943008","host":"s3://npm-registry-packages-npm-production"}},"2.8.21":{"name":"@bepalo/spine","version":"2.8.21","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@2.8.21","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"1d298c1fc9da9755e9a0cc4cc1a216a1b611be2b","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-2.8.21.tgz","fileCount":123,"integrity":"sha512-jkARsaTDCRS1j9DAqMOFgEUapD/ptvzhsL7svYYo/a/0529o5QG5LrfKnHAZCslHlocnTY9YCmIXm/x4vL3E+w==","signatures":[{"sig":"MEYCIQCcR4v3Bl8j3ubl4s/je5nbd5LoFAdAlKo7iY6H06TvJgIhAJbyDa8Fhn4TB1QxwNl9eM3ZjxiztubGM5dNUqaXiUuj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@2.8.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1645812},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_2.8.21_1788633011489_0.07331344103229354","host":"s3://npm-registry-packages-npm-production"}},"3.9.22":{"name":"@bepalo/spine","version":"3.9.22","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.9.22","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"cc9a97d9c9e8ffa3efbfb2831b4827e1d6785fb1","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.9.22.tgz","fileCount":123,"integrity":"sha512-skrtKRn7nmaVzAp6ET44zj7ezYBjGKUXebgjLJcqkraixso4/QV90dIIii0zroOgiCaggyPnb1V+7HnDFD7bRA==","signatures":[{"sig":"MEYCIQCnfU/FnxSJWk7Eyf5BoMh+Cek1zU6SdhzYyrVX+F+JGwIhAO1CSKQnvAmzPiSYA4GWHjdMtTgbzAkU39uIOxYZ1SYx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.9.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1763870},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.9.22_1789021962364_0.03348978366642297","host":"s3://npm-registry-packages-npm-production"}},"3.10.23":{"name":"@bepalo/spine","version":"3.10.23","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.10.23","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"731c5df929d972b78835c575da4ecc8fa8689ff7","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.10.23.tgz","fileCount":123,"integrity":"sha512-kcThgEDZRpso5z1WapiE5C8fNzG24iB0QfNJ1VG0JVuPvGU4Keh9gd18wfYOKmRU4m4QrJKycjQpBwcPB0wEGg==","signatures":[{"sig":"MEUCIQDCl9dyXg6SdDpki6JN/8/DVZbUy01A5kSxNExtl6Y6IQIgQ7dy+0nSlCZG/5HShxXFSDpENbbMSFQhKnDdqUMz6o8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.10.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1765955},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.10.23_1789378152159_0.2312272717041859","host":"s3://npm-registry-packages-npm-production"}},"3.11.24":{"name":"@bepalo/spine","version":"3.11.24","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.11.24","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"b30fb9341cda496467e3dd9a9f3fd68f6e9ef28b","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.11.24.tgz","fileCount":123,"integrity":"sha512-DolDmETGh2GpBE8CGQL7OTDiwJbUtUT40rIthnnd2ZQNsPpLFW7swbx3ZIHGmYvod3eOavIQpb3cufrLCTGUVQ==","signatures":[{"sig":"MEUCIE4V7UrV8orFiNHdDOZlMJg+HJz8TU+LN1qLlFSWWM2GAiEAwRTlM1knH1PKzlIT0Z2sPUdEM8lZDBBXX4pGfFSD1/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGeRZM+gDQ7KuTslZUDzlZno+EdcqpCLIF6v6csgcD2RAiEAjBWUDHbrMxFFQP/2No1ToSQv0Zitnai8qb/950Cmxps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.11.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1941315},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.11.24_1789575843810_0.9880896048742351","host":"s3://npm-registry-packages-npm-production"}},"3.11.25":{"name":"@bepalo/spine","version":"3.11.25","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.11.25","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"7457da3eec936b36f20bedb70c785df556b437bb","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.11.25.tgz","fileCount":123,"integrity":"sha512-EpihS5RZ/sJIvDK/km6A64VuxrgezhDc21dYWm6i/L75fhuxMy8DGt6rfj8RcoAc9EVksuE22WfB4af19hHjYA==","signatures":[{"sig":"MEYCIQDzRmPnXfyirrxC/j5B8HyJ53QwFOjOPXEMA5juWHMHFwIhALhw2bv9KjUkLVwp4EIKt6awDBGbgORqmY3P/po4zqFi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCnLPFZvDoWjoXdywxyhk4dAhI8pJy1U5F5kVV4JVukFgIgMbGvxy/14JIfdA10dTgKQxRuBUFcuPvBfxxVMxeZm00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.11.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1941315},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.11.25_1789576173133_0.8780205586916756","host":"s3://npm-registry-packages-npm-production"}},"3.12.26":{"name":"@bepalo/spine","version":"3.12.26","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.12.26","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"8b3a9cf830506a80490126139ba848a5a570794b","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.12.26.tgz","fileCount":123,"integrity":"sha512-k7Y7LGHvpo5p7+6V/F4J5VD/edj3GYSvgjvk9FvVWRvFf6hwZBWG7F3ajQHI1jZczQixNT10GGEDBoe9F+Un/Q==","signatures":[{"sig":"MEQCICDw+vw4EbvsM8A/zay9IG3n/PgtvxJbj3V2UQyZMRcUAiBLA6C5Irdo1nZaav4d6ZoJ8sB/TfMXCSOI3+u4PVYaBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCPiOcS6CgO33RAIfFKcBvPBZIyY26DbO6lQ/VNW78gygIhAPHy6kyKSccLXXivRQ9rW+8gi4gOtqjSlIK8bB+vxBO0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.12.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1942503},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.12.26_1789580019908_0.032523439284188216","host":"s3://npm-registry-packages-npm-production"}},"3.12.27":{"name":"@bepalo/spine","version":"3.12.27","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.12.27","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"576ae756e5d1df3d0ceddd22b0ad923dc2c92c98","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.12.27.tgz","fileCount":123,"integrity":"sha512-rPIDwuZBE4IGqpfDaL2VovQnXQHN+tjPq1TL35FwB3brIzYUlokosZibkVCUF4GKzRVeV1nesfsLGYHDjfOsmA==","signatures":[{"sig":"MEQCIDtR/W/AgW8iIg1GcR8XxdM2tQ6ge7f7waWKOBM3O481AiAOtQQJrsT1m1RJD2pyAAWBbstjkEEf9jUdYTUPfh6FtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDqEmHee+wxTmmfH+Kk+urFIon49bxqvvcySxpOlMhxFgIgdPPvF2havZhwCJ4V9/YmoeQr1lFlVRCaCXIaAj3BY/Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.12.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1954615},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.12.27_1789581021794_0.5488853402981726","host":"s3://npm-registry-packages-npm-production"}},"3.13.28":{"name":"@bepalo/spine","version":"3.13.28","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.13.28","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"82767c0aeff24f3df8e281d8de74e6c4ec9bee1a","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.13.28.tgz","fileCount":123,"integrity":"sha512-rd7+ffjAgtmcecHa3kUTfkcp9P9JPnseisPF3/Lq9FsAZJ5rLIzxNwxybhfOpMb7Uwfe7its6y25BmTBw69ykQ==","signatures":[{"sig":"MEQCIDzHdW05Ghqikt5Ii9EheAwLnMPZYjDrEOZtb8TKeHcgAiBNTOQefhzueRg0utfDcj7afmTMqd3qE8k/nVlyw2r78g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA+aMPcqgfniP5oZ+BzyW2wJlrrBMyVNtoska3XnLSsjAiEAnXC5X6Yg+9F3KotnexZ99hCRAmxA2T4z0GKGRKooL+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.13.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2060609},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.13.28_1789788741439_0.6369716703143284","host":"s3://npm-registry-packages-npm-production"}},"3.15.30":{"name":"@bepalo/spine","version":"3.15.30","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"author":"Natnael Eshetu","license":"MIT","_id":"@bepalo/spine@3.15.30","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"homepage":"https://github.com/bepalo/spine#readme","dist":{"shasum":"a5d39568d77b18798adc3165583881ae286d844f","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.15.30.tgz","fileCount":123,"integrity":"sha512-8m/0SVhP+Sh2IVgMBxXWW1KIn7yUZyQoCNqcq1skSs3UA63ksp8wmqi0YXHNfMz1uuvTpNLmn4ko/kH+MNdzxg==","signatures":[{"sig":"MEQCIA2gBHMG5VAZwevZuyV8gFN97YAQFMEqVIQMkCNZWKlbAiAlGArJk+EV7fx/eCEIKQrVwKOeI624DxsrwLZlUGOBow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCDXqTBkwaqOYGpQ5RYUWHsDyoiDwXTLvonI93EkZ0s3QIhAJkG37gQs41XkbQg6pC7+fI7Nkx3TR2WnIOXP66hBxha","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.15.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2068007},"main":"./dist/cjs/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A fast and feature-rich javascript-runtime-agnostic HTTP request router.","directories":{},"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"tmp":"tmp/spine_3.15.30_1790192918741_0.20262944581242404","host":"s3://npm-registry-packages-npm-production"}},"3.16.31":{"_id":"@bepalo/spine@3.16.31","dist":{"shasum":"439924c53324f226ad7c4d318288676c240b558d","tarball":"https://registry.npmjs.org/@bepalo/spine/-/spine-3.16.31.tgz","fileCount":123,"integrity":"sha512-GUiJNLQh0QhixzaSJGlqjzbeNOsShgluTmI3ZWdITSsiaZf4vuuG+ehquG31aKPDEnW2qQsUzZGO8M5yTmoT2Q==","signatures":[{"sig":"MEYCIQDbjL2t7I4p5W7tjiWqBjKHyvU5iJhrpVnowArtz+kTNQIhAJDl1dJOEEexXTtZPCY5UVerrpPmHZARNIbOhrPwH2ss","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA3dDlISKc1GvPw1aCoBNxxuxooDI37TTx9A4QNcHOjKAiEAm+usz3Qc0qN1YhDhUeNEIiTp308y2666Pq9Fo+C7gyQ="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bepalo%2fspine@3.16.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2083966},"main":"./dist/cjs/index.js","name":"@bepalo/spine","types":"./dist/index.d.ts","author":"Natnael Eshetu","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"}},"license":"MIT","scripts":{"test":"bun test","build":"concurrently \"pnpm run build:esm\" \"pnpm run build:cjs\"","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","test:watch":"bun test --watch","build:watch":"concurrently \"tsc --watch --project tsconfig.esm.json\" \"tsc --watch --project tsconfig.cjs.json\"","test:coverage":"bun test --coverage"},"version":"3.16.31","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc6125a3-2b10-4099-b52f-bd2ad29b41c3"}},"homepage":"https://github.com/bepalo/spine#readme","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A Next-Generation Web-Standard HTTP Pipeline-based Router for TypeScript & JavaScript.","directories":{},"maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"dependencies":{"@bepalo/rjson":"^2.2.12"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^5.8.3","@types/node":"^24.0.13","concurrently":"^9.2.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spine_3.16.31_1790260870512_0.010211232664534275"}}},"time":{"created":"2026-08-09T23:48:35.553Z","modified":"2026-09-24T14:41:11.066Z","1.0.3":"2026-08-09T23:48:35.851Z","1.0.4":"2026-08-09T23:56:50.257Z","1.0.5":"2026-08-10T17:18:34.000Z","1.0.6":"2026-08-10T17:18:36.320Z","1.1.7":"2026-08-11T14:11:29.114Z","1.1.8":"2026-08-11T14:16:52.614Z","1.1.9":"2026-08-11T14:19:37.099Z","1.2.10":"2026-08-11T21:12:55.521Z","1.2.11":"2026-08-11T21:23:51.991Z","1.3.12":"2026-08-12T16:59:05.593Z","1.4.13":"2026-08-12T17:17:30.934Z","1.5.14":"2026-08-14T00:39:22.026Z","1.5.15":"2026-08-14T01:21:54.973Z","1.5.16":"2026-08-14T01:41:44.760Z","1.5.17":"2026-08-16T18:18:01.440Z","2.6.18":"2026-08-19T14:52:21.982Z","2.7.19":"2026-09-05T16:32:42.048Z","2.8.20":"2026-09-05T18:24:26.743Z","2.8.21":"2026-09-05T18:30:11.666Z","3.9.22":"2026-09-10T06:32:42.501Z","3.10.23":"2026-09-14T09:29:12.284Z","3.11.24":"2026-09-16T16:24:03.959Z","3.11.25":"2026-09-16T16:29:33.231Z","3.12.26":"2026-09-16T17:33:40.014Z","3.12.27":"2026-09-16T17:50:21.944Z","3.13.28":"2026-09-19T03:32:21.533Z","3.15.30":"2026-09-23T19:48:38.858Z","3.16.31":"2026-09-24T14:41:10.613Z"},"author":"Natnael Eshetu","license":"MIT","homepage":"https://github.com/bepalo/spine#readme","keywords":["router","rest","http","https","middleware","backend","fast","efficient","modern","framework","bun","node","deno","workers"],"repository":{"url":"https://github.com/bepalo/spine.git","type":"git"},"description":"A Next-Generation Web-Standard HTTP Pipeline-based Router for TypeScript & JavaScript.","maintainers":[{"name":"nati-esh-nez","email":"the.defalt8@gmail.com"}],"readme":"# 🏆 @bepalo/spine\n\n![hero](./assets/spine-hero.png)\n\n[![npm version](https://img.shields.io/npm/v/@bepalo/spine.svg)](https://www.npmjs.com/package/@bepalo/spine)\n[![CI](https://img.shields.io/github/actions/workflow/status/bepalo/spine/ci.yaml?label=ci)](https://github.com/bepalo/spine/actions/workflows/ci.yaml)\n[![tests](https://img.shields.io/github/actions/workflow/status/bepalo/spine/testing.yaml?label=tests)](https://github.com/bepalo/spine/actions/workflows/testing.yaml)\n[![license](https://img.shields.io/npm/l/@bepalo/spine.svg)](LICENSE)\n![Benchmarked](https://img.shields.io/badge/benchmarked-yes-green)\n\n<!--\n[![Vitest](https://img.shields.io/badge/vitest-6E9F18?style=for-the-badge&logo=vitest&logoColor=white)](test-result.md) -->\n\n**A Next-Generation Web-Standard HTTP Pipeline-based Router for TypeScript & JavaScript.**\n\nSpine is built from first principles around Web Standard APIs (`Request`, `Response`, `Headers`, `URL`). It replaces traditional recursive middleware onions with **deterministic flat array pipelines**, introduces **pipeline parameter linking**, features **specialized $O(1)$ routing tables**, and delivers zero server lock-in across Bun, Deno, Node.js, and edge runtimes.\n\n```text\n                               ( @bepalo/spine )\n\n                            The 5-Phase Pipeline Flow\n                            ─────────────────────────\n\n                               Incoming Web Request\n                                        │\n                                        ▼\n                                ┌───────────────┐\n                     ┌──────────│  1. Filters   │──────────┐\n                     │          └───────┬───────┘          │\n                     │                  │ <no response>    │\n                     │                  ▼                  │\n                     │          ┌───────────────┐          │\n                     ├──────────│  2. Handlers  │──────────┤\n                     │          └───────┬───────┘          │\n                     │                  │ <no response>    │\n                     │                  ▼                  │\n                     │          ┌───────────────┐          │\n                  <error>       │ 3. Fallbacks  │──────────┤\n                     │          └───────┬───────┘          │\n                     │                  │                  │\n                     ▼                  ▼                  ▼\n             ┌───────────────┐  ┌───────────────────────────────┐\n             │  4. Catchers  │─►│      Response Assembly        │\n             └───────────────┘  └───────────────┬───────────────┘\n                                                │\n                                                ▼\n                                        ┌───────────────┐\n                                        │   5. Afters   │\n                                        └───────┬───────┘\n                                                │\n                                        <afterCatcher> (on after-error)\n                                                │\n                                                ▼\n                                         Final Response\n```\n\n_NOTE: All pipes except handlers are optional and can be disabled for performance. Default pipes can be defined used instead. You can basically use handler pipes with or without default pipes if you want._\n\n---\n\n## ⚡ What Makes Spine Different?\n\n| Feature                   | Spine (`@bepalo/spine`)                                                                             | Express / Koa                                           | Hono / Fastify                     |\n| :------------------------ | :-------------------------------------------------------------------------------------------------- | :------------------------------------------------------ | :--------------------------------- |\n| **Pipeline Architecture** | **Flat Array Pipeline** with explicit signals (`Break_Pipe`, `Break_Pipeline`)                      | Recursive `next()` callback onion (call-stack overhead) | Nested async middleware cascade    |\n| **Execution Guarantees**  | Deterministic 5-phase lifecycle: Filters $\\to$ Handlers $\\to$ Fallbacks $\\to$ Catchers $\\to$ Afters | Order depends on middleware registration sequence       | Mixed middleware / route execution |\n| **Parameter Linking**     | **Built-in**: Params parsed/mutated in filters automatically link downstream                        | ❌ Manual `req` object mutation                         | ❌ Manual `c.set()` state passing  |\n| **HTTP Standards**        | **Full Support** including **HTTP `QUERY`** (RFC 9535)                                              | ❌ Standard methods only                                | ❌ Standard methods only           |\n| **Routing Tables**        | **Specialized $O(1)$ tables** partitioned by depth, globs (`*`), and super-globs (`**`)             | Linear regex iteration                                  | Radix Tree (RegExp-heavy)          |\n| **Runtime Portability**   | **Native Web Standards**: Pure `Request` in, `Response` out (Bun, Deno, Node, Edge)                 | Node.js `IncomingMessage` / `ServerResponse` tied       | Web Standards / Adapters           |\n| **Type Safety**           | **Automatic compile-time path parameter inference** directly from string literals                   | Manual typing / `any`                                   | Generic context inference          |\n| **Streaming Multipart**   | **Zero-dependency state machine** parsing streams chunk-by-chunk (down to 5 bytes)                  | Requires `multer` / `busboy`                            | Requires external plugins          |\n| **Built-in Caching**      | **Memory-bounded LRU & TTL caches** tracking actual bytes in memory                                 | ❌ None                                                 | ❌ None                            |\n| **OpenAPI Generation**    | **Native OpenAPI 3.0 document generation** with auto-tagging and sorting                            | Requires swagger-jsdoc / plugins                        | Requires `@hono/zod-openapi`       |\n\n---\n\n## 🚀 Spine in 30 Seconds\n\n```ts\nimport { Router, json, rjson, text, logRequestsWithColor, HttpError } from \"@bepalo/spine\";\nimport { validate, cors, limitRate, securityHeaders, Status } from \"@bepalo/spine\";\nimport { type, ArkErrors } from \"arktype\";\n\n\n// Define constants and context types\nconst isProduction = process.env.NODE_ENV !== \"production\";\nexport type CTApp = {}; // Router scope context\n\n// Initialize router with maximum path segment depth and defaults\nconst spine = new Router<CTApp>({\n  maxPath: 24,\n  disable: {\n    after: true,\n    catcher: true,\n    fallback: true,\n  },\n  defaultHandler: () => {\n    return json({ message: \"Not found\" }, { status: Status._404_NotFound });\n  },\n  defaultCatcher: ({ error }) => {\n    if (!isProduction) console.error(error);\n    return json(\n      { error: error.message },\n      { status: (error as HttpError).status || Status._500_InternalServerError },\n    );\n  },\n  defaultAfter: logRequestsWithColor({\n    status: { color: \"auto\", bold: true }, // 2xx green, 3xx cyan, 4xx yellow, 5xx red\n    method: { color: \"auto\", bold: true },\n    duration: { color: \"yellow\", dim: true },\n  }),\n  afterCatcher: ({ error }) => {\n    isProduction && console.error(error);\n  },\n});\n\nspine.get(\"/health\", () => json({ status: \"healthy\" }));\n\nconst secRoutes = new Router<CTApp>({ maxPath: 2 });\n\n// Global Filters: Security headers, CORS, and Token-Bucket Rate Limiting\nsecRoutes.filterAll(\"/**\", [\n  securityHeaders(),\n  cors({\n    origins: \"*\",\n    methods: [\"Get\", \"Query\", \"Post\", \"Put\", \"Patch\", \"Delete\"],\n  }),\n  limitRate({\n    key: (ctx) => ctx.request.headers.get(\"x-forwarded-for\") || \"anonymous\",\n    maxTokens: 100,\n    refillInterval: 60, // 100 tokens per minute\n    setXRateLimitHeaders: true,\n  }),\n]);\n\nconst usersApiRoutes = new Router<CTApp>({ maxPath: 2 });\n\n// Parameter Linking & Validation:\n//    Validates & parses parameters in a filter; downstream handlers receive typed numbers!\nusersApiRoutes.filterPost(\"/:id\", [\n  validate({\n    responseType: \"json\",\n    errors: [ArkErrors],\n    paramsMutation: true,\n    params: type({ id: \"string.numeric.parse\" }), // parses \"123\" -> 123\n    // params: { id: (id: string) => parseInt(id) }, // you can use your custom type validator too\n\n\n    bodyParse: true,\n    bodyMutation: true,\n    bodyParseOptions: {\n      accept: [\n        \"application/json\",\n        \"application/rjson\",\n        \"application/x-www-form-urlencoded\"\n      ],\n      maxSize: 1024\n    },\n    body: type({\n      username: \"3 <= string <= 20\",\n      email: \"string.email\",\n      role: \"'admin' | 'user'\",\n    }),\n    strange: false, // strips unexpected fields\n  }),\n]);\n\n// Main Handlers: Type-safe route parameters with zero boilerplate\nusersApiRoutes.post(\"/:id\", ({ params, body }) => {\n  return json({ created: true, id: params.id, user: body }, { status: 201 });\n});\n\n// It is also okay to do validation in handlers.\nusersApiRoutes.get(\"/:id\", [\n  validate({\n    responseType: \"json\",\n    errors: [ArkErrors],\n    paramsMutation: true,\n    params: type({ id: \"string.numeric.parse\" }), // parses \"123\" -> 123\n  }),\n  ({ params }) => {\n    return json({ userId: params.id });\n  }\n]);\n\n// HTTP QUERY Method (RFC 9535 Safe Method with Body)\nusersApiRoutes.query(\"/search\", [\n  validate({ bodyParse: true }),\n  ({ body }) => rjson({ results: [], query: body }),\n]);\n\n// Append the routes to the main router.\nspine.append(secRoutes);\nspine.appendTo(\"/api/users\", usersApiRoutes)\n\n// Introspect route definitions\nconsole.dir(spine.getRoutesByPathnameThenMethod(), { depth: 0 });\n\n// Serve natively on Bun, Deno, Node.js, or workers!\nexport default {\n  fetch: (request: Request) => spine.respond(request),\n};\n```\n\n---\n\n## 📑 Table of Contents\n\n- [Why Spine?](#-what-makes-spine-different)\n- [Spine in 30 Seconds](#-spine-in-30-seconds)\n- [Quick Start](#quick-start)\n  - [Bun](#bun)\n  - [Deno](#deno)\n  - [Node.js (v18+)](#nodejs-v18)\n- [The Pipeline Architecture](#the-pipeline-architecture)\n  - [The 5 Phases](#the-5-phases)\n  - [Control Signals (`Break_Pipe`, `Break_Pipeline`)](#control-signals)\n- [Routing](#routing)\n  - [HTTP Methods & Shorthands](#http-methods--shorthands)\n  - [Parameters & Compile-Time Inference](#parameters--compile-time-inference)\n  - [Path Alternatives](#path-alternatives)\n  - [Wildcards (`*`, `*!`, `**`, `**!`, `::slug`)](#wildcards)\n  - [File-Based Wildcards Table](#file-based-wildcards-table)\n- [Parameter Linking](#parameter-linking)\n- [Validation Engine (`validate`)](#validation-engine-validate)\n- [Request Logging (`logRequestsWithColor`)](#request-logging-logrequestswithcolor)\n- [Built-In Middlewares & Security](#built-in-middlewares--security)\n  - [CORS](#cors)\n  - [Rate Limiting (`limitRate`)](#rate-limiting-limitrate)\n  - [Security Headers (`securityHeaders`)](#security-headers-securityheaders)\n  - [HTTPS Redirection (`forceHttps`)](#https-redirection-forcehttps)\n  - [Authentication & Authorization](#authentication--authorization)\n- [Request Parsers & Responses](#request-parsers--responses)\n  - [Request Parsers](#request-parsers)\n  - [Responses & Helpers (`rjson`, `json`, etc.)](#responses--helpers)\n- [Streaming Multipart Upload Parser](#streaming-multipart-upload-parser)\n- [Caching & Data Structures (`Cache`, `ExpCache`)](#caching--data-structures-cache-expcache)\n- [OpenAPI 3.0 Document Generation](#openapi-30-document-generation)\n- [Router Composition (`appendTo`) & Introspection](#router-composition-appendto--introspection)\n- [File-Based Routing & Watchers](#file-based-routing--watchers)\n- [Performance & Design Invariants](#performance--design-invariants)\n- [📄 License](#-license)\n- [🕊️ Thanks and Enjoy](#️-thanks-and-enjoy)\n- [💖 Be a Sponsor](#-be-a-sponsor)\n\n---\n\n## Quick Start\n\n### Installation\n\n```sh\n# npm\nnpm install @bepalo/spine\n\n# pnpm\npnpm add @bepalo/spine\n\n# bun\nbun add @bepalo/spine\n```\n\n### Bun\n\n```ts\nimport Router, { text, json } from \"@bepalo/spine\";\n\nconst spine = new Router({ maxPath: 24 });\nspine.get(\"/\", () => text(\"Hello from Bun!\"));\nspine.get(\"/users/:id\", ({ params }) => json({ id: params.id }));\n\nBun.serve({\n  port: 3000,\n  fetch: (req) => spine.respond(req),\n});\n```\n\n### Deno\n\n```ts\nimport Router, { text, json } from \"jsr:@bepalo/spine\";\n// or import Router from \"@bepalo/spine\";\n\nconst spine = new Router({ maxPath: 24 });\nspine.get(\"/\", () => text(\"Hello from Deno!\"));\nspine.get(\"/users/:id\", ({ params }) => json({ id: params.id }));\n\nDeno.serve({ port: 3000 }, (req) => spine.respond(req));\n```\n\n### Node.js (v18+)\n\n```ts\nimport { createServer } from \"node:http\";\nimport { Readable } from \"node:stream\";\nimport Router, { text, json } from \"@bepalo/spine\";\n\nconst spine = new Router({ maxPath: 24 });\nspine.get(\"/\", () => text(\"Hello from Node.js!\"));\nspine.get(\"/users/:id\", ({ params }) => json({ id: params.id }));\n\nconst server = createServer(async (req, res) => {\n  const url = `http://${req.headers.host || \"localhost\"}${req.url}`;\n  const isBodyAllowed = ![\"GET\", \"HEAD\"].includes(req.method!);\n\n  const webReq = new Request(url, {\n    method: req.method,\n    headers: req.headers as any,\n    body: isBodyAllowed ? (Readable.toWeb(req) as any) : undefined,\n    duplex: isBodyAllowed ? \"half\" : undefined,\n  } as any);\n\n  const webRes = await spine.respond(webReq);\n\n  res.statusCode = webRes.status;\n  res.statusMessage = webRes.statusText;\n  webRes.headers.forEach((val, key) => res.setHeader(key, val));\n\n  if (webRes.body) {\n    const reader = webRes.body.getReader();\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n      res.write(value);\n    }\n  }\n  res.end();\n});\n\nserver.listen(3000);\n```\n\n---\n\n## The Pipeline Architecture\n\nIn Spine, middleware is not an \"onion\". You do not call `next()` or manage nested promise stacks.\n\nHandlers are structured as **flat, sequential array pipelines**:\n\n```ts\ntype Handler<ExtendContext> = (\n  ctx: Context<ExtendContext>,\n) => Promise<HandlerReturn> | HandlerReturn;\ntype Pipe<ExtendContext> = Array<Handler<ExtendContext>>;\n```\n\n### The 5 Phases\n\nWhen `spine.respond(request)` is executed, requests travel in strict order through 5 phases:\n\n1. **Filters** (`filterGet`, `filterPost`, `filterAll`, etc.): Run before handlers. Used for authentication, CORS, rate limiting, and request parsing. Filters bubble across all matching route entries (Exact $\\to$ Glob $\\to$ SuperGlob $\\to$ `defaultFilter`). If any filter returns a `Response`, execution jumps directly to Response Assembly and Afters.\n2. **Handlers** (`get`, `query`, `post`, `handle`, etc.): Main business logic. **Only the single most specific match runs (`noBubble: true`)**. If no response is returned, runs `defaultHandler` (if defined) before moving to Fallbacks.\n3. **Fallbacks** (`fallbackGet`, `fallbackAll`, etc.): Evaluated if no handler responded. Runs matching fallback routes and `defaultFallback`.\n4. **Catchers** (`catchGet`, `catchAll`, etc.): Evaluated when an uncaught error is thrown during Filters, Handlers, or Fallbacks.\n5. **Afters** (`afterGet`, `afterAll`, `defaultAfter`): Always executes on the final `Response` object for logging, auditing, and header injection. Errors thrown here are captured by `afterCatcher` without breaking the outgoing response.\n\n### Control Signals\n\nHandlers communicate with the pipeline using explicit return values:\n\n```ts\nimport { Break_Pipe, Break_Pipeline } from \"@bepalo/spine\";\n```\n\n- **`void` / `undefined`**: Continues execution to the next handler in the current pipe.\n- **`Response` instance**: **Short-circuits immediately**. Sets the active response and proceeds directly to Response Assembly and Afters.\n- **`Break_Pipe`**: Breaks out of the **current** route pipe without returning a response, allowing parent wildcard pipes in the same phase to continue.\n- **`Break_Pipeline`**: Breaks out of the **entire stage** (e.g. stops filter bubbling to `/**`), without returning a response.\n\n---\n\n## Routing\n\n### HTTP Methods & Shorthands\n\nSpine provides direct shorthands for all HTTP methods:\n\n```ts\nspine.get(\"/items\", handler);\nspine.query(\"/items\", handler); // RFC 9535 HTTP QUERY method\nspine.post(\"/items\", handler);\nspine.put(\"/items/:id\", handler);\nspine.patch(\"/items/:id\", handler);\nspine.delete(\"/items/:id\", handler);\nspine.head(\"/items\", handler);\nspine.options(\"/items\", handler);\nspine.trace(\"/items\", handler);\nspine.connect(\"/items\", handler);\n\n// Multi-method shorthands\nspine.all(\"/health\", handler); // Matches ALL HTTP methods\nspine.crud(\"/users/:id\", handler); // Matches GET, QUERY, POST, PUT, PATCH, DELETE\n```\n\nBatch registration via method strings or matrix arrays:\n\n```ts\nspine.handle(\"Get /users\", handler);\nspine.handle([\"Get /users\", \"Post /users\"], handler);\nspine.handle([[\"Get\", \"Query\", \"Post\"], \"/users\", \"/accounts\"], handler);\n```\n\n### Parameters & Compile-Time Inference\n\nRoute parameters are automatically parsed from string literals with zero manual generic typing:\n\n```ts\n// 'userId' and 'postId' are strongly-typed string parameters on ctx.params!\nspine.get(\"/users/:userId/posts/:postId\", ({ params }) => {\n  return json({ user: params.userId, post: params.postId });\n});\n```\n\n### Path Alternatives\n\nDeclare branching route segments inline using pipe syntax `|`:\n\n```ts\nspine.get(\"/|about|contact\", (ctx) => text(`Matched: ${ctx.pathname}`));\n// Matches: \"/\", \"/about\", and \"/contact\"\n```\n\nCombine alternatives with named parameters:\n\n```ts\nspine.get(\"/api/users|accounts/:type\", ({ params }) => {\n  return json({ type: params.type }); // \"users\" or \"accounts\"\n});\n\nspine.get(\"/status/active|pending:state\", ({ params }) => {\n  return json({ state: params.state }); // \"active\" or \"pending\"\n});\n```\n\n### Wildcards\n\n- `*` — Matches exactly one path segment (e.g. `/files/*`).\n- `*!` — Optional single-segment wildcard at the end (e.g. `/api/*!` matches `/api` and `/api/users`).\n- `**` — Multi-segment wildcard matching any depth (e.g. `/static/**`).\n- `**!` — Optional multi-segment wildcard (e.g. `/assets/**!` matches `/assets`, `/assets/`, and `/assets/a/b/c`).\n- `::slug` — Named super-glob capturing the remaining path into `ctx.params.slug`.\n- `::slug!` — Optional named super-glob.\n\n```ts\nspine.get(\"/files/::filepath\", ({ params }) => {\n  return json({ file: params.filepath }); // e.g. \"docs/2026/report.pdf\"\n});\n```\n\n### File-Based Wildcards Table\n\n| ROUTER PATH            | FILE PATH                     | MATCHES                                       |\n| :--------------------- | :---------------------------- | :-------------------------------------------- |\n| `/exact/path`          | `/exact/path.ts`              | `/exact/path`                                 |\n| `/wild/glob/*`         | `/wild/glob/[#].ts`           | `/wild/glob/abc`                              |\n| `/wild/glob/match/*!`  | `/wild/glob/match/[[#]].ts`   | `/wild/glob/match`, `/wild/glob/match/abc`    |\n| `/named/:id/view`      | `/named/[id]/view.ts`         | `/named/123/view`                             |\n| `/super/globs/**`      | `/super/globs/[##].ts`        | `/super/globs/a/b/c`                          |\n| `/super/globs/**!`     | `/super/globs/[[##]].ts`      | `/super/globs`, `/super/globs/a/b`            |\n| `/named/super/::slug`  | `/named/super/[## slug].ts`   | `/named/super/path/to/file.png`               |\n| `/named/super/::slug!` | `/named/super/[[## slug]].ts` | `/named/super`, `/named/super/path/to/file`   |\n| `/docs/a\\|b\\|c:page`   | `/docs/[[a,b,c] page].ts`     | `/docs/a`, `/docs/b`, `/docs/c`               |\n| `#filename`            | `/#index.ts`                  | Escapes filename (prevents collapsing to `/`) |\n\n---\n\n## Parameter Linking\n\nSpine features **Pipeline Parameter Linking**. When a filter validates or transforms a route parameter (e.g. converting a string ID into a number using `validate({ paramsMutation: true })`), that mutated value automatically forwards to downstream handlers matching that parameter name and index.\n\n```ts\nimport { validate } from \"@bepalo/spine\";\nimport { type, ArkErrors } from \"arktype\";\n\n// 1. Filter mutates params.id into a number\nspine.filterGet(\"/api/users/:id\", [\n  validate({\n    errors: [ArkErrors],\n    paramsMutation: true,\n    params: type({ id: \"string.numeric.parse\" }), // \"123\" -> 123\n  }),\n]);\n\n// 2. Main handler receives the parsed number directly in params!\nspine.get(\"/api/users/:id\", ({ params }) => {\n  // typeof params.id is number!\n  return json({ id: params.id });\n});\n```\n\n> [!NOTE]\n> Single-glob parameters (`:id`) and super-glob parameters (`::id`) use isolated namespaces (`id#1` vs `id##1`), preventing variable collision.\n\n---\n\n## Validation Engine (`validate`)\n\nThe built-in `validate` middleware validates `params`, `query`, `cookie`, and `body` using Regex, custom functions, or schema libraries (such as ArkType or Zod):\n\n```ts\nimport { validate } from \"@bepalo/spine\";\nimport { type, ArkErrors } from \"arktype\";\n\nspine.filterPost(\"/api/users/:id\", [\n  validate({\n    // Response format on error: \"json\" | \"text\" | \"status\"\n    responseType: \"json\",\n\n    // Catch custom schema error classes\n    errors: [ArkErrors],\n\n    // Validate and parse route parameters\n    paramsMutation: true,\n    params: type({\n      id: \"string.numeric.parse\",\n    }),\n\n    // Automatically parse query before validation\n    queryParse: true,\n    queryMutation: true,\n    query: {\n      tab: (val) =>\n        [\"profile\", \"billing\"].includes(val) || new Error(\"Invalid tab\"),\n    },\n\n    // Automatically parse body before validation\n    bodyParse: true,\n    bodyParseOptions: { accept: \"application/json\", maxSize: 1024 * 1024 },\n    bodyMutation: true,\n    body: type({\n      username: \"3 <= string <= 20\",\n      role: \"'admin' | 'user'\",\n      password: \"string >= 8\",\n    }),\n\n    // Strip unexpected properties from mutated objects\n    strange: false,\n  }),\n]);\n```\n\n---\n\n## Request Logging (`logRequestsWithColor`)\n\nHigh-performance After-hook middlewares for request logging:\n\n```ts\nimport { logRequestsWithColor } from \"@bepalo/spine\";\n\nspine.afterAll(\"/**\", [\n  logRequestsWithColor({\n    enable: {\n      requestTime: true,\n      duration: true,\n      status: \"status\",\n      search: \"singleline\",\n    },\n    status: { color: \"auto\", bold: true }, // Auto-colored: 2xx green, 3xx cyan, 4xx yellow, 5xx red\n    method: { color: \"auto\", bold: true }, // Per-method coloring\n    duration: { color: \"yellow\", dim: true },\n  }),\n]);\n```\n\n---\n\n## Built-In Middlewares & Security\n\n### CORS\n\n```ts\nimport { cors } from \"@bepalo/spine\";\n\nspine.filterAll(\"/api/**\", [\n  cors({\n    origins: [\"https://example.com\"], // or \"*\"\n    methods: [ \"Get\", \"Query\", \"Post\", \"Put\", \"Patch\", \"Delete\", \"Head\", \"Options\" ],\n    allowedHeaders: [\"Content-Type\", \"Authorization\"],\n    credentials: true, // Note: credentials cannot be used with origins: \"*\"\n    maxAge: 86400,\n    responseType: \"json\",\n  }),\n]);\n```\n\n### Rate Limiting (`limitRate`)\n\nHigh-performance token-bucket rate limiter supporting interval or continuous refill rates:\n\n```ts\nimport { limitRate } from \"@bepalo/spine\";\n\nspine.filterAll(\"/api/**\", [\n  limitRate({\n    key: (ctx) => ctx.request.headers.get(\"x-forwarded-for\") || \"anonymous\",\n    maxTokens: 100,\n    refillInterval: 60, // 100 tokens per 60s\n    refillRate: 10,\n    setXRateLimitHeaders: true, // Sets X-RateLimit-Limit & X-RateLimit-Remaining\n    responseType: \"json\",\n  }),\n]);\n```\n\n### Security Headers (`securityHeaders`)\n\n```ts\nimport { securityHeaders } from \"@bepalo/spine\";\n\nspine.filterAll(\"/**\", [\n  securityHeaders({\n    xFrameOptions: \"DENY\", // or null to unset default\n    xContentTypeOptions: \"nosniff\", // or null to unset default\n    referrerPolicy: \"strict-origin-when-cross-origin\",\n    strictTransportSecurity: {\n      maxAge: 31536000,\n      includeSubDomains: true,\n      preload: true,\n    },\n    contentSecurityPolicy: {\n      \"default-src\": \"'self'\",\n      \"script-src\": [\"'self'\", \"https://cdn.example.com\"],\n      \"object-src\": \"'none'\",\n      \"upgrade-insecure-requests\": true,\n    },\n    crossOriginOpenerPolicy: \"same-origin\",\n    crossOriginEmbedderPolicy: \"credentialless\",\n    crossOriginResourcePolicy: \"same-site\",\n  }),\n]);\n```\n\n### HTTPS Redirection (`forceHttps`)\n\n```ts\nimport { forceHttps } from \"@bepalo/spine\";\n\nspine.filterAll(\"/**\", [\n  forceHttps({ toPort: 443 }), // 308 Permanent Redirect preserving method and body\n]);\n```\n\n### Authentication & Authorization\n\n```ts\nimport {\n  Router,\n  Status,\n  authenticate,\n  authorize,\n  json,\n  type CTAuth,\n} from \"@bepalo/spine\";\nimport { JWT } from \"@bepalo/jwt\";\n\ntype UserRole = \"admin\" | \"user\";\ntype AuthData = { userId: string; role: UserRole };\n// console.log(JWT.genHmac(\"HS256\"));\nconst adminJWT = JWT.createSymmetric<AuthData>(\"<secret>\", \"HS256\");\n\nconst spine = new Router<CTAuth<AuthData>>({ maxPath: 5 });\n\nspine.filterAll(\"/admin/**\", [\n  authenticate<AuthData>({\n    responseType: \"json\",\n    parseAuth: async (ctx) => {\n      const token = ctx.request.headers\n        .get(\"authorization\")\n        ?.replace(\"Bearer \", \"\");\n      if (!token) return null; // Returns 401 Unauthorized\n      const { valid, error, payload } = adminJWT.verifySync(token);\n      if (error) {\n        return json(\n          { error: error.message },\n          { status: Status._401_Unauthorized },\n        );\n      }\n      const { userId, role } = payload!;\n      return { userId, role };\n    },\n  }),\n\n  authorize<AuthData>({\n    responseType: \"json\",\n    allowRole: (role) => role === \"admin\", // Returns 403 Forbidden on failure\n  }),\n]);\n\nspine.get(\"/admin/users\", ({ auth }) => {\n  const { role, userId } = auth!;\n  // ...\n});\n```\n\n---\n\n## Request Parsers & Responses\n\n### Request Parsers\n\n```ts\nimport { parseQuery, parseCookie, parseBody } from \"@bepalo/spine\";\n\n// Parse URL search parameters into ctx.query\nspine.filterGet(\"/search\", [parseQuery({ responseType: \"json\" })]);\n\n// Parse request cookies into ctx.cookie\nspine.filterAll(\"/**\", [parseCookie({ responseType: \"json\" })]);\n\n// Parse JSON, RJSON, URL-encoded, or plain text bodies into ctx.body\nspine.filterPost(\"/data\", [\n  parseBody({\n    accept: \"application/json\",\n    maxSize: 1024 * 1024, // 1MB limit\n    responseType: \"json\",\n  }),\n]);\n```\n\n### Responses & Helpers\n\n```ts\nimport {\n  json,\n  rjson,\n  text,\n  html,\n  status,\n  redirect,\n  redirectPermanentPreserve,\n  blob,\n  octetStream,\n  setCookie,\n  clearCookie,\n} from \"@bepalo/spine\";\n\n// Standard JSON response\njson({ message: \"Success\" });\n\n// RJSON response using @bepalo/rjson\nrjson({ message: \"RJSON Success\" });\n\n// Plain text and HTML\ntext(\"Hello, world!\");\nhtml(\"<h1>Hello, world!</h1>\");\n\n// Status response\nstatus(204);\n\n// Redirects\nredirectPermanentPreserve(\"/new-url\"); // 308 Permanent Redirect\n\n// Cookie helpers\nctx.headers.append(\n  ...setCookie(\"token\", \"secret\", {\n    path: \"/\",\n    httpOnly: true,\n    secure: true,\n    maxAge: 3600,\n  }),\n);\n```\n\n---\n\n## Streaming Multipart Upload Parser\n\nSpine features a zero-dependency chunked streaming multipart parser capable of handling boundaries split across chunk fragments down to 5 bytes:\n\n_NOTE: `parseUpload` is an abstraction of `parseMultipart`_\n\n```ts\nimport { parseUpload } from \"@bepalo/spine\";\nimport { openSync, closeSync, writeSync } from \"node:fs\";\n\ntype UploadData = { fd: number; offset: number };\n\nconst mimeExtension = (mime: string) => {\n  switch (mime) {\n    case \"image/jpeg\":\n      return \".jpeg\";\n    case \"image/png\":\n      return \".png\";\n    default:\n      \"\";\n  }\n};\n\nspine.post(\"/upload\", [\n  parseUpload<UploadData>({\n    responseType: \"json\",\n    dontCatch: true,\n\n    fileHandle: (path) => ({ fd: openSync(path, \"w\"), offset: 0 }),\n\n    // idGenerator: () => toBase64UUID(crypto.randomUUID()),\n\n    // path: \"./uploads\"\n    path: (id, file) => `.uploads/${id}${mimeExtension(file.type)}`,\n\n    write: async ({ handle }, chunk) => {\n      const { fd, offset } = handle;\n      let written = writeSync(fd, chunk, 0, chunk.length, offset);\n      while (written < chunk.length) {\n        written += writeSync(\n          fd,\n          chunk,\n          written,\n          chunk.length,\n          offset + written,\n        );\n      }\n      handle.offset += written;\n      return written;\n    },\n\n    end: async ({ handle: { fd }, ...file }) => closeSync(fd),\n\n    maxTotalSize: 100 * 1024 * 1024, // 100MB total\n    maxFileSize: 50 * 1024 * 1024, // 50MB max file\n    maxFiles: 10,\n    maxFields: 1,\n    maxFieldSize: 20,\n    // progress only works if Content-Length is specified\n    progressIncrement: 10, // progress report every 10% but actual callback depends on chunk size\n\n    onFileHeader: (ctx, { headers }) => {\n      const contentType = headers.get(\"content-type\");\n      if (\n        ![\"image/jpeg\", \"image/png\"].some((type) =>\n          contentType?.startsWith(type),\n        )\n      ) {\n        return json(\n          { error: \"Unsupported Content-Type\", contentType },\n          { status: Status._400_BadRequest },\n        );\n      }\n    },\n\n    onFileProgress: (ctx, { file, filename, headers, id, name }) => {\n      console.log(`[${name}:${file.fullpath}] ${file.progress.toFixed(2)}%`);\n    },\n  }),\n  ({ fields, files }) => {\n    return json({\n      success: true,\n      fields,\n      files: Object.fromEntries(files),\n      totalSize: Object.values(files).reduce((sum, f) => sum + f.size, 0),\n    });\n  },\n]);\n```\n\n---\n\n## Caching & Data Structures (`Cache`, `ExpCache`)\n\nSpine includes memory-bounded LRU caches that track capacity in **bytes** rather than entry counts:\n\n```ts\nimport { ExpCache } from \"@bepalo/spine\";\n\nconst cache = new ExpCache<string, string>({\n  maxMemory: 32 * 1024 * 1024, // 32MB maximum byte capacity\n  defaultTTL: 3600 * 1000, // 1 hour TTL\n  onMiss: (key, entry, reason, cache) => {\n    // Automatically called on cache miss or expiration\n  },\n});\n\nconst data = \"user-data\";\ncache.set(\"session-1\", data, data.length, { ttl: 60 * 1000 });\nconst value = cache.get(\"session-1\");\n\nsetInterval(() => {\n  cache.evictExpired(); // Purges expired keys\n}, 300_000);\n```\n\n---\n\n## OpenAPI 3.0 Document Generation\n\nGenerate full OpenAPI 3.0.0 specifications directly from your routes and metadata:\n\n```ts\nspine.get(\"/users/:id\", ({ params }) => json({ id: params.id }), {\n  openApi: {\n    summary: \"Get user by ID\",\n    tags: [\"Users\"],\n    responses: {\n      \"200\": { description: \"User found\" },\n      \"404\": { description: \"User not found\" },\n    },\n  },\n});\n\nconst openapi = await spine.generateOpenAPI(\n  {\n    title: \"Application API\",\n    version: \"1.0.0\",\n    servers: [{ url: \"https://api.example.com/v1\" }],\n  },\n  {\n    pick: ({ path }) => path.startsWith(\"/api\"),\n    autoTag: true,\n    autoSummary: true,\n    includeOperationId: true,\n    sortPathnameOrder: 1,\n    sortMethodOrder: 1,\n  },\n);\n```\n\n---\n\n## Router Composition (`append`,`appendTo`) & Introspection\n\nMount sub-routers with path prefixes:\n\n```ts\nconst apiRoutes = new Router({ maxPath: 16 });\napiRoutes.get(\"/users\", () => json({ users: [] }));\napiRoutes.get(\"/posts\", () => json({ posts: [] }));\n\nconst mainRouter = new Router({ maxPath: 24 });\nmainRouter.appendTo(\"/v1\", apiRoutes);\n\n// mainRouter now handles: GET /v1/users, GET /v1/posts\n```\n\n```ts\nconst secRoutes = new Router({ maxPath: 16 });\nsecRoutes.filterAll(\"/**\", [cors(), securityHeaders()]);\nsecRoutes.filterAll(\"/api/**\", [cors(), securityHeaders()]);\n\nconst mainRouter = new Router({ maxPath: 24 });\nmainRouter.append(secRoutes);\n\n// mainRouter now filters: All /**, All /api/**\n```\n\nInspect active route registrations across dimensions:\n\n```ts\nconsole.dir(spine.getRoutesByPathnameThenMethod(), { depth: 5 });\nconsole.dir(spine.getRoutesByPathnameThenHandlerType(), { depth: 5 });\nconsole.dir(spine.getRoutesByHandlerTypeThenMethod(), { depth: 5 });\nconsole.dir(spine.getRoutesByHandlerTypeThenPathname(), { depth: 5 });\nconsole.dir(spine.getRoutesByMethodThenHandlerType(), { depth: 5 });\nconsole.dir(spine.getRoutesByMethodThenPathname(), { depth: 5 });\n```\n\n---\n\n## File-Based Routing & Watchers\n\n### Loading Routes Dynamically\n\n_NOTE: It is best to use generated static imports for production. see [static-route-watchers](#static-route-watchers-for-zero-reflection-production)_\n\n```ts\nconst spine = new Router({ maxPath: 24 });\n\nawait spine.load({\n  routesPath: \"./routes\",\n  // pattern: /\\.(ts|js)$/,\n});\n```\n\nA route file exports handlers matching `<method>` or `<method>_<handlerType>`:\n\n_NOTE: method and handlerType are both case insensitive so you are free to use any casing you want._\n\n```ts\n// routes/users/[id].ts\nimport { json, type HandlerPipe, type CTBody } from \"@bepalo/spine\";\n\nexport const get: HandlerPipe = {\n  pipe: ({ params }) => json({ user: params.id }),\n  openApi: {\n    summary: \"Get user by ID\",\n  },\n};\n\nexport const get: HandlerPipe = {\n  pipe: ({ params }) => json({ user: params.id }),\n  openApi: {\n    summary: \"Get user by ID\",\n  },\n};\n\nexport const post: HandlerPipe<CTBody> = ({ body }) => json({ created: body });\n```\n\n### Static Route Watchers for Zero-Reflection Production\n\nGenerate static import files during development that register routes directly in production:\n\n```ts\n// scripts/watch-routes.ts\nimport { generateStaticRoutesWatcher } from \"@bepalo/spine\";\nimport { readFile, writeFile } from \"node:fs/promises\";\n\ngenerateStaticRoutesWatcher({\n  routesPath: \"./routes\",\n  importRoot: \"./routes/\",\n  output: \"./routes.gen.ts\",\n  read: (f) => readFile(f, \"utf-8\"),\n  write: (f, c) => writeFile(f, c, \"utf-8\"),\n});\n```\n\n```ts\n// server.ts\nimport Router from \"@bepalo/spine\";\nimport setRoutes from \"./routes.gen.ts\";\n\nconst spine = new Router({ maxPath: 24 });\nsetRoutes(spine); // Zero filesystem latency on startup!\n```\n\n---\n\n## Performance & Design Invariants\n\n- **Specialized Routing Tables**: Exact routes use direct $O(1)$ Map lookups. Globs and super-globs are stored in separate index arrays by path segment count.\n- **No String Regex at Matching Time**: Path segments are split once per request and compared by segment.\n- **Flat Execution Pipelines**: Array iteration avoids recursive function call stack overhead.\n- **Strict Depth Boundaries**: `maxPath` enforces a hard limit on segment count, guarding against URI exhaustion attacks.\n- **Zero Cross-Request State Leakage**: Each incoming request receives a fresh `Context` object that can be customized.\n- **Protected After-Hooks**: Errors in After-hooks are caught by `afterCatcher` and never corrupt the outgoing Response.\n- **Optional pipes**: Optional pipes to disable for performance optimization.\n\n---\n\n## 📄 License\n\n[MIT](/LICENSE)\n\n## 🕊️ Thanks and Enjoy\n\nIf you find Spine useful, please consider starring the repository and sharing it with others.\n\n## 💖 Be a Sponsor\n\nSupport development and future improvements.\n\n<a href=\"https://ko-fi.com/natieshzed\">\n  <img height=\"32\" src=\"https://img.shields.io/badge/Ko--fi-donate-orange?style=for-the-badge&logo=ko-fi&logoColor=white\">\n</a>\n","readmeFilename":""}