{"_id":"sleepy-serv","_rev":"33-d6e32a98b23f061bd9b4ba2811d03adc","name":"sleepy-serv","dist-tags":{"latest":"0.26.0"},"versions":{"0.1.0":{"name":"sleepy-serv","version":"0.1.0","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.1.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"86292fa51128c51d8ea31607c2cd38df4a3aa1ba","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.1.0.tgz","fileCount":5,"integrity":"sha512-h7LrAUB0KkXb2+/8YMPT1ke/uRsai13vXeu93Nq4kwUII/3lg5kF5xmYVb3VOnqSvF5FAauZusvpckOg2QwjwA==","signatures":[{"sig":"MEUCIDXg14EAkBz4rUBE6CqrxKh9Eo/EHLq14mn+kvfawA8tAiEA8MstXKWu+vguarOMpv7QjggzC8Jzp8VO20hmuX1rpsg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19079},"type":"module","shasum":"86292fa51128c51d8ea31607c2cd38df4a3aa1ba","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-h7LrAUB0KkXb2+/8YMPT1ke/uRsai13vXeu93Nq4kwUII/3lg5kF5xmYVb3VOnqSvF5FAauZusvpckOg2QwjwA==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.1.0_1740531892000_0.5371989308617802","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"sleepy-serv","version":"0.1.1","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.1.1","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"3693f7b33051103813ae2c3f43a3247953959475","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.1.1.tgz","fileCount":5,"integrity":"sha512-42ZQdJXlsXLbBvmJ4W2+1V2I4SGI8W4GEQIEb9yEqGUqrjv2rU4gWTB+f3CZmTtVKaA5oM6HkrTwfVMFSzQ1MQ==","signatures":[{"sig":"MEQCIFdgSzpSxn40z8evWhrpDL5SyWKBDj0NRSva5yrYboalAiA5VLX+G8XMXDjXGUqcMBG28BN5qgFg9iZuI30ei2REXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19079},"type":"module","shasum":"3693f7b33051103813ae2c3f43a3247953959475","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-42ZQdJXlsXLbBvmJ4W2+1V2I4SGI8W4GEQIEb9yEqGUqrjv2rU4gWTB+f3CZmTtVKaA5oM6HkrTwfVMFSzQ1MQ==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.1.1_1740532071368_0.9107947957493203","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"sleepy-serv","version":"0.1.2","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.1.2","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"0ea59d051e0aff84d17785763af3fa8e6b25cb5a","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.1.2.tgz","fileCount":6,"integrity":"sha512-eZ/M2xO/t/EoFYr0pL5TKUHQ9aiRzHsUTj2kcWNPdMKiC333c1+e1fF1ZXAkxE4EqIQRZz9Ttq5Nj1Q3DEUwIA==","signatures":[{"sig":"MEUCIBJa6+0jXCqo4601/8Cw5Tfjg7ouqfSDq7AbQvSm+9pDAiEA2FspbygFBG2Pm32ixh9YcpiuEtQr89jtNvl2EE44UyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26223},"type":"module","shasum":"0ea59d051e0aff84d17785763af3fa8e6b25cb5a","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-eZ/M2xO/t/EoFYr0pL5TKUHQ9aiRzHsUTj2kcWNPdMKiC333c1+e1fF1ZXAkxE4EqIQRZz9Ttq5Nj1Q3DEUwIA==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.1.2_1740548002805_0.2508768357243014","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"sleepy-serv","version":"0.1.3","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.1.3","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"e75a80cdabf11a733bb093529e90b587634d7be2","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.1.3.tgz","fileCount":6,"integrity":"sha512-7mtdqsSV5t+r4QQeJYTY9jpTf+1T7SU8WchUK75ebw73hSN6rC0JZn9c6uL0fLiRHZIfGLequf1V180x53yPDg==","signatures":[{"sig":"MEUCIQDFQGBeszdSg1gqiF22/V7NMH1kUxXDLx7YhULCqJAMeAIgb3uUsXbbmm8GwXXO2BXO8tykt32/iM2X2Et+ASDNDho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26223},"type":"module","shasum":"e75a80cdabf11a733bb093529e90b587634d7be2","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-7mtdqsSV5t+r4QQeJYTY9jpTf+1T7SU8WchUK75ebw73hSN6rC0JZn9c6uL0fLiRHZIfGLequf1V180x53yPDg==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.1.3_1740548349577_0.4686543343556291","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"sleepy-serv","version":"0.2.0","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.2.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"d2629cd9f7a29a3968b9b8fe01de11125844ad9e","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.2.0.tgz","fileCount":6,"integrity":"sha512-AYb4el0+KJTUoQL9tIKNpzxlUkwwi80p6F/pk9HraMe19ekFm3n0gZQzgJC493vE4M4fFuM1N8MHJ2kwW/YVjw==","signatures":[{"sig":"MEQCIDEic+7YDOJs7eO0TJ2EWUHdENuJTKda8yZacrOzPWx3AiAZdHjsTGofefD3Lk+VyOK36r5mo5JZ+whQx7m/U7MS8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26389},"type":"module","shasum":"d2629cd9f7a29a3968b9b8fe01de11125844ad9e","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-AYb4el0+KJTUoQL9tIKNpzxlUkwwi80p6F/pk9HraMe19ekFm3n0gZQzgJC493vE4M4fFuM1N8MHJ2kwW/YVjw==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.2.0_1741672408141_0.8079523555972064","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"sleepy-serv","version":"0.2.1","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.2.1","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"d8f5d584e1ce3d94c81279c8a65b876be39bc207","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.2.1.tgz","fileCount":6,"integrity":"sha512-rWwwrT9cVDOxcxojIZvF6yzw6gMPJIZe0g8Filw8ys7AAeT+B+G9OB1OJuqT8kdMkJbR3hlh1ICH3ND2EZbB9g==","signatures":[{"sig":"MEQCIHZtL/wzehdrrj6tzMrvlyJxV5OxdNJOqZDRJmHvpSxgAiAAishqDarls0LCPmIoupEaMELNOe1Tc2FePS1ag5HsZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26529},"type":"module","shasum":"d8f5d584e1ce3d94c81279c8a65b876be39bc207","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-rWwwrT9cVDOxcxojIZvF6yzw6gMPJIZe0g8Filw8ys7AAeT+B+G9OB1OJuqT8kdMkJbR3hlh1ICH3ND2EZbB9g==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.2.1_1741672857759_0.744297710754436","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"sleepy-serv","version":"0.3.0","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.3.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"ef50ba9ddc910b8c93f5cabdd41b9795e985f34a","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.3.0.tgz","fileCount":6,"integrity":"sha512-Kw8C/a+5zKZOtbaN8QgVCnlosK7P7v896y69K8499SDiColXVndlqHJ17/A32j0+cj6NgYNOxK+qcqS0BS/HHQ==","signatures":[{"sig":"MEUCIHY51gMCfMd10otJMwR+AA1Lc6dKqatXf+z8PxfyPFMlAiEAxEsLHcgUGFgueeV0qMrEM/A3geQrrP9z7frjNJQXknY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29289},"type":"module","shasum":"ef50ba9ddc910b8c93f5cabdd41b9795e985f34a","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-Kw8C/a+5zKZOtbaN8QgVCnlosK7P7v896y69K8499SDiColXVndlqHJ17/A32j0+cj6NgYNOxK+qcqS0BS/HHQ==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.3.0_1741679969314_0.3888204469301386","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"sleepy-serv","version":"0.3.1","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.3.1","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"ff64d9e15bc5f4a748741722565ff080d75a602e","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.3.1.tgz","fileCount":6,"integrity":"sha512-WqPDS8lOvB5pkl3hHXhVGUXCAPZdDnh9TX/GZAHIsjyYqWQ3xqYIydrDJ53umVtuART9GH1dbw1YUlCsiZzF3A==","signatures":[{"sig":"MEQCIG9+BaBWlj9JAwwWfcwBFCQPtzZ2OVEgGSNINEEs/pitAiAW7AEzfCJ6N4ZrPx/bGge2C7NDctXSOAZgPdhPQwT07g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29350},"type":"module","shasum":"ff64d9e15bc5f4a748741722565ff080d75a602e","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-WqPDS8lOvB5pkl3hHXhVGUXCAPZdDnh9TX/GZAHIsjyYqWQ3xqYIydrDJ53umVtuART9GH1dbw1YUlCsiZzF3A==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.3.1_1753892861418_0.07980785902452969","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"sleepy-serv","version":"0.4.0","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.4.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"cf12cd617114a471d9bd3d0207d2ad839a23b767","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.4.0.tgz","fileCount":6,"integrity":"sha512-IdyqvzCPTxol+VX7OYgY+jKLYyuf/GG3wN7YDOrRtgyceN9j6ZQ2azKi1kAGqpkTL5SAkhOfoC95jLLJzkfIpw==","signatures":[{"sig":"MEMCIDmhaBXgFJK2KOGIjWe9eNKa1aqG16lifMYO30ijNuDpAh9n7OGKgFgz/LbNQswwwamWM/xPdoMm6Le9X/Iu+ge1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33732},"type":"module","shasum":"cf12cd617114a471d9bd3d0207d2ad839a23b767","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-IdyqvzCPTxol+VX7OYgY+jKLYyuf/GG3wN7YDOrRtgyceN9j6ZQ2azKi1kAGqpkTL5SAkhOfoC95jLLJzkfIpw==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.4.0_1776068581185_0.6746670151492196","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"sleepy-serv","version":"0.5.0","keywords":["rest","serv","sleepy","web server","www"],"author":"Travis J True","_id":"sleepy-serv@0.5.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"dist":{"shasum":"7e54970d7215b3827ac405d1f35b798194aca138","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.5.0.tgz","fileCount":5,"integrity":"sha512-O0bt9BckuQJKa2OUaXGsUpjBiQsiTKohX5th4jpS8/mxut1bctPAkabkXdl1qTlu1yRfA9ptx6XP7G3aeXAqVA==","signatures":[{"sig":"MEQCIF7cRlVPZNINxru945j0CyVDlJsrQs1YWC/w04zWr+ASAiBaoAB1M2NiIG3e66GkBqMCiemxC6M7J5DFLxlD+VfeIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19950},"type":"module","shasum":"7e54970d7215b3827ac405d1f35b798194aca138","exports":"./src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"travistrue","email":"travis.true08@gmail.com"},"_integrity":"sha512-O0bt9BckuQJKa2OUaXGsUpjBiQsiTKohX5th4jpS8/mxut1bctPAkabkXdl1qTlu1yRfA9ptx6XP7G3aeXAqVA==","_npmVersion":"10.8.3","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.7.9","eslint":"9.20.1"},"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.5.0_1778641534377_0.32881327286639994","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"sleepy-serv","version":"0.6.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"_id":"sleepy-serv@0.6.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"1f2fd3b5de520bf1fd3d78ac1c0ef52e96c5fe5f","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.6.0.tgz","fileCount":9,"integrity":"sha512-2RjGxcrVuQZaP5T0OtqDFsGX1R12d6yidi/iPh+N5fKXpNu51xHCzO/4vJLQSWgBK0NHXMJ8nCXhKUAlVg8IWw==","signatures":[{"sig":"MEUCIQCvlt10pt833p6/Zp+0JlY8tBBIElfBZ78HZlKNyRn2ngIgOS0W+XLNeXr5eT2fOdBBSBZBZIIWi7NBKG2FITBcH6s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52404},"type":"module","exports":"./src/index.js","gitHead":"441e9287c86a53ace165484f5716f15819d8801c","scripts":{},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.18.0","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.6.0_1784535578028_0.053294303692413614","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"sleepy-serv","version":"0.6.1","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"_id":"sleepy-serv@0.6.1","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"c7e71909b68cae5e309cb9033649c75c36d64114","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.6.1.tgz","fileCount":9,"integrity":"sha512-/zkVER2Acw1Jf0qKa46/U3hkcaoPSpfy4eS4Z2W0cwI7B7FnEMxSfqMvPs8ZsHoMKxrlyLYvTKVw90sJVYY0WQ==","signatures":[{"sig":"MEYCIQDiHsYGabZsXvXHiX33CLTgQ4JqBA2c2KVlNPkpL/HgrQIhAOVUe/oZzPcOXCqZAyxBgOqnJQeTC30NXJjHjJheVPvc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52404},"type":"module","exports":"./src/index.js","gitHead":"03f8c4a41627c1c22edd5993dd2c2a7707d2e366","scripts":{},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.18.0","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.6.1_1784537010052_0.21096450280671775","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"sleepy-serv","version":"0.6.2","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.6.2","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"d94bed2d15587128e612ae79e687c2bc2f65e695","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.6.2.tgz","fileCount":10,"integrity":"sha512-RWbFJNB7TdBpIXLj7ufeQhxxg2ggVMdRM+7wh5UQfhF/ze/dq2uIHZoeeWMlH1gFl4Tw5vMDcVl6G8vuB/4yhw==","signatures":[{"sig":"MEUCIH1qURtyHMNVcIQ63OSh6wpNn4PPPs4ImpXGZPB0+8h5AiEAuXwVhjbzBwEV7Q8V9zwTNOebjCGC7wc9d05prCuqNY8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53499},"type":"module","exports":"./src/index.js","gitHead":"678ab4b68430484b88ad1d5d7f46a401c3667780","scripts":{},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.18.0","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.6.2_1784537359407_0.04348845876379359","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"sleepy-serv","version":"0.7.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.7.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"1c6f52ebcdd5e5a91e17fe59d1f593386c8c4f65","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.7.0.tgz","fileCount":21,"integrity":"sha512-tstKWn/0jQEEBS3HyeidhyPi77EdW5oCC/ufWoLufLZy++dMCEPP+J0zAIQQgkxn9ZquqYGcBQ+tpmGBpyhJ7A==","signatures":[{"sig":"MEYCIQDm3MQ7+z8U8pD8JmVZD2oFr+dildwBQWVPxrxixqhHFAIhAPBwo8MG3snZ0AqMlqsLPi+6HgODb9ugc25yyqiO5dzB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94560},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"a7eaaab49ee06eea454319c0a00b466bc78ee206","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.7.0_1786378872531_0.4245057877083893","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"sleepy-serv","version":"0.8.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.8.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"f68ec48fb34ea7eab4f96110c794fa6038043208","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.8.0.tgz","fileCount":21,"integrity":"sha512-0CpsnmOrYvcN4dB54CzpK/08qrLUWG3PeXmjtLtdSpHkuQPICSukJAD65Y1vAvmhaxp7BTxHGbWI8McCf1VZNg==","signatures":[{"sig":"MEQCICDoqpsDt1+bso7n3dkXxd8XbIk80QwTqV99dt0YCqjvAiBpW6zqnKmGYSShzzkKBsAb288+JbJxL+k0uaNvujtNDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":96380},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"56b57f640d66f3ca16de5b043b94b49251512ef5","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.8.0_1786505120722_0.06250149452813303","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"sleepy-serv","version":"0.9.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.9.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"ca083eda81ed4a3384a9f0670f91e4c3f3915d9e","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.9.0.tgz","fileCount":21,"integrity":"sha512-QzmKuFkes+kN+1xhVNTKkcnWhkKwtm+p+tdM/HOUAMOA89kVSF8RHDjo5EKSD7HtbW2vEMjPuD7hrR7m28rV+Q==","signatures":[{"sig":"MEMCH3VEKzuFHZp8rIYhAo/vul4mQ0APU9nPduRuBOov9eMCICkGxma3eupMJZ/rcnvFOsLStuNbVCoMO6loVfvjmOz+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":96016},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"63363764b7ba499a00d6761ed6b2eec89b3ce0dd","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.9.0_1786635221511_0.5732306549966233","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"sleepy-serv","version":"0.10.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.10.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"80505628f3c010c83a3fa6d5afdb962a7f50dad9","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.10.0.tgz","fileCount":21,"integrity":"sha512-UtTO2TC6+naROOdCLOI2r25DIh+0jLDwnEdHJR7K+s+3JXI8IQHDPL6LOw35vIjn/oYbHzpLy087glPL1WZJRQ==","signatures":[{"sig":"MEQCICuYkrL0EgrU2S7vsYScprHJMxcJAInV41bJt79hC0SkAiBt3Q9YEWDuSvl2v2hr/aFGG3NQ7rN95MDCkrIptTGQTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102994},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"07e6b0e2692497319952b23ceaa6348711b81d38","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.10.0_1788392958346_0.7311850704052798","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"sleepy-serv","version":"0.11.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.11.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"522116f33a036c787e119e098c641b5241dbc22a","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.11.0.tgz","fileCount":21,"integrity":"sha512-BleLqwleauwcTQd0n1sZkbWnlj9/A6SzOx4ISolZzh5D2wSHVHj2BT/cK0RgUemYXqvZPIYmOD8RfBLFSpc9FQ==","signatures":[{"sig":"MEUCIQDWUd22qJqmbD5ZgcX021n0gi9ngC6WhD449zgHI30HvAIgPbPmykl82wFAoBPpUZ0KoH9j7cUuKyt6RnMc3Kz0Pz0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102994},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"be9261362afeff95e5db3c3231c3b00cd8b1fdd4","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.11.0_1788394456833_0.5584969437352063","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"sleepy-serv","version":"0.12.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.12.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"0c633f0bfc640dcab3a60cef93c0ffb83b199b26","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.12.0.tgz","fileCount":21,"integrity":"sha512-4QKoxTn85bqyePl6lXnXkQ/g6M3edTUTweDTEkb2FjINpYznXMiZFU8isrF+jOw6lpmkqY+O/qnu0n0902N5lA==","signatures":[{"sig":"MEYCIQDOOCuEPWueYVNn2/I5iMC2WgRGt1FmJWnuu+9cZHnKtQIhALizC6KAlWJuJ20J4sgTlnp9NQaXUPcFoj8TE59+kCal","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":105292},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"0fe3db9a4dc7d820e5b290ae4a92bf8d62c0b35b","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.12.0_1788414524263_0.948811296504009","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"sleepy-serv","version":"0.13.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.13.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"ee47ad912b976768b4a31e62d8c233c70b39bc4f","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.13.0.tgz","fileCount":21,"integrity":"sha512-OOO4HAOvJ61dLPsasiB9fPWSU9BgVX1NqvZoKdKt6crkU2zqtZJJ8qgJMvzCsxbCXgDvdymgHEQ4C/s6AJfSCQ==","signatures":[{"sig":"MEUCIQDxSybhJ5oHcVWyxlSGXGlz1mLXUaEt0+aahjjyz7yjmAIgUYj4kybGcPxzqak0MjRQlmRLC+7LvT+TF/lc7qAd/9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106733},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"6b68eda29d1f889f380efc80b9414383e6755c67","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.13.0_1788457376470_0.9054869946909974","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"sleepy-serv","version":"0.14.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.14.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"0509fd19b0efa2f9ef5831bdbcf3761ec4ea68d2","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.14.0.tgz","fileCount":21,"integrity":"sha512-vSNMQianWjXm8k+3RprsKo5xTYOn3fm1dCdWFkVEEbsY6qulRfVVoN7D9YUfh3SaYKCQ/RBcqaQOPCAV2/Rz/w==","signatures":[{"sig":"MEUCIQDmhPaApStP2wdlcjkdAWHB8r45xRCRFOH81hq+W18PZwIgBmy97olPdf/BUdbfU6jQjnpX79FnhDthtGEdIjNaWIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106793},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"3b36652cb2d8ffe178da037ddf591fd1edac9dc9","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.14.0_1788826771035_0.7677948711654754","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"sleepy-serv","version":"0.15.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.15.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"7a7e5bb8fe3bbaa98d3662d6a5aca51c96f9043e","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.15.0.tgz","fileCount":21,"integrity":"sha512-4h1aGqHc4P4e4tTKM4U0h9UYGB0K6NKS7QDeDjphKojQWGSWHuf/vtriVbhIQQ3TsztzchhGwPXS8jwS20PTEw==","signatures":[{"sig":"MEUCIQCkIuWFPaTLQld9XxWi2S7hNblq9GpMKuehPTvuEHU/pwIgFTEiQtgjeUgUIjUlZ8eqrqCdDrcoLi0g3M5il8gvLB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106793},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"3d957e0f494f32c176d9dc740d80fd7e656d8876","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.15.0_1788830908968_0.468700117647622","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"sleepy-serv","version":"0.16.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.16.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"6784627cf2a20015abc51d0cd94cfc5f76663fdd","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.16.0.tgz","fileCount":21,"integrity":"sha512-2UJH5we7tIQVllWb1ATBEvc9cOkiaxaEy8r/jYuPzI0sWnu6Qo9/sTr5nVih3OdYR1L/es66pvdKe893N54n1w==","signatures":[{"sig":"MEUCIGU6rMUA9coSTDaGXVq1D6JlgmzzmXjAqqtBBfUhjA2nAiEAu0nTk8QS3SXWGWqyXIGt9Jv/3GYqlxquyPChgYQkn/k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106733},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"c6921a713054a45d671bf92ca452b2d1a2fb0283","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.16.0_1788831648625_0.9782710923264475","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"sleepy-serv","version":"0.17.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.17.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"5bfb00df64488cca11d0ed17de5b7267022b47a0","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.17.0.tgz","fileCount":21,"integrity":"sha512-OqV+tfSjjbPKUzsvIn3AvyEbjTGoVgdylowVBghaqe5o+FQmGA1PUCrHEziaqRLJLUqsSmOM+kHY2KAF5CzgbA==","signatures":[{"sig":"MEYCIQC0LiACMhPkWtWCVipVQeNMUorStn9aYHCaOCjbTJmvywIhAKRs4lc0UypK95lp/eiW0bf9x75dYW2y1p6L1m3VPKas","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106793},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"4b73b10d3c0b756a2633ad53ee4ab3b100ec4098","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.17.0_1788834377352_0.17960561473462655","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"sleepy-serv","version":"0.18.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.18.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"dist":{"shasum":"1dee3a3057a87cc4f450e2cfe6911b80c24b2986","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.18.0.tgz","fileCount":21,"integrity":"sha512-mtoFnQ7HOh9/dedjWci19upTcisumKMvXybyKfUDrKMtZB0q1zE3NkL6oF/B6S+Z2f3VzP45LhWVX8GUEEdB4g==","signatures":[{"sig":"MEUCIG5NdlKDZazWVgsXDV/7pgeTfpgNMmCLXbWB6kZPPu3LAiEAxBwI1xfg3JyCL+MpmKZ1INrdNuLlto1F6pJjimGU0zE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106733},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"99bf08ad0f2d587d61868882747cc0970f99c867","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.18.0_1788834890879_0.33684502914792946","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"sleepy-serv","version":"0.19.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.19.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"bin":{"sleepy":"src/cli/index.ts"},"dist":{"shasum":"c2b929bdcf1729636c3b504dd1d336a686d074b9","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.19.0.tgz","fileCount":48,"integrity":"sha512-eFINwwzapatjBkfki9QYKWLFrNkYB7Xw2msVeL7Ua2YJRulF+xkb+xMBCdnxramINBVoD/3IHMoFQ2NLIlomkg==","signatures":[{"sig":"MEUCIGSyiTMEdGh84O9jl2LBaVWgJwkmVUHwD89YLwayxs2qAiEAz9wGsF+PEoYDTs6e6AqXSin8e7hVeJtylr7sSqSga1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121623},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"gitHead":"fd717fcccf99b0353a232bead33472f5ccda20b5","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.19.0_1789024585674_0.5405845042045447","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"sleepy-serv","version":"0.20.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.20.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"bin":{"sleepy":"src/cli/index.ts"},"dist":{"shasum":"120fe92a3593572cd426f90aea4ed5a35f14cc01","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.20.0.tgz","fileCount":48,"integrity":"sha512-EheX27J/BQ4cVP3vDaeDnQ6fpWo+7oZf774Jm62LYuO0FE62iJLhBnLtElX5YhMxM8i4qCNKL+icCO35HQOW+Q==","signatures":[{"sig":"MEYCIQC+ENrO/h+UhlRn3NkPn3lpHfWTl7XuTBUXKwf3JXB3egIhAIq/ZsDYvtC0JbjZWhtOcQlHQjdYmAaaslTib86jUr1V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121998},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"gitHead":"608165cffb5383577d388c42e5e5e31bd71c619c","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.20.0_1789082655207_0.7710284976757846","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"sleepy-serv","version":"0.21.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.21.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"bin":{"sleepy":"src/cli/index.ts"},"dist":{"shasum":"b2350d940eda74c2c5b9374c89fc019f8c8e6b97","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.21.0.tgz","fileCount":48,"integrity":"sha512-aTK4I1JIacCfg+lBt9ZgKsLCNGhUbaIRMzh7NngS8EF25RrNosvrXqV2oUzij7tlMHtsWkz1ZoAZxldMiFgQzw==","signatures":[{"sig":"MEQCIA8YQ2rb4Y3IcJ64xm+253L+PPR6t9gv6haxKLDRYcgDAiBiO999svSbZPo/OTFF1UpiifcIUxmgd0PiPhbbys14gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":122898},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"gitHead":"437c84589855f5b5e6736f8c7cd28cf7b1b86ce8","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.21.0_1789103733763_0.7140947792415222","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"sleepy-serv","version":"0.22.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.22.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"bin":{"sleepy":"src/cli/index.ts"},"dist":{"shasum":"6966cfa16cdc7c19ecf4bdd33cc1988daa9ad42a","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.22.0.tgz","fileCount":48,"integrity":"sha512-THifOUisI7hBtyzMEsLt4dSNkFbNq7GZvGLtweIE/JAU2muuSi6mRUXyay2emggXpD82emO65FlNODknZHbTBw==","signatures":[{"sig":"MEQCICYW10hZAPIbsyYrPNhUvslV3laseuC4uJ/UqMm8ZmTsAiB+drkG5eP/yYS37IDmZVzA2whtDJVXEABK7IYSNBkQUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123506},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"gitHead":"6b93adc5e11bbff99782c8b65334372ecf4e2fad","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.22.0_1789178314101_0.5245315269566537","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"sleepy-serv","version":"0.23.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.23.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"bin":{"sleepy":"src/cli/index.ts"},"dist":{"shasum":"41aa2d8453892d4871086dd25de79179d02993b2","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.23.0.tgz","fileCount":48,"integrity":"sha512-TACmVuQizzImbKkxP5rnHXORbXgNYOtPYIcKFKc/1ccntq7lAed6f5+b/F+4iPOrBVS9VWJ9v+gvNDLcpaqeng==","signatures":[{"sig":"MEQCIHXEY+7u64tChPVAACtY2qVi9Y4wb8gP2lzNPPtSInpEAiAW4dtekubOegZ9CpArMNqvXJxPtj9YyaXvH40jYCIo7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123627},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"gitHead":"606e17ee926f60d75a8191d3d674ff1c7b988ba7","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.23.0_1789369223450_0.9209856177533087","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"sleepy-serv","version":"0.24.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.24.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"bin":{"sleepy":"src/cli/index.ts"},"dist":{"shasum":"060781ac6aafaf5b679d8c23fb0a3dd86229ca89","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.24.0.tgz","fileCount":48,"integrity":"sha512-PO/JnL2jpqCKbgl0At92eZbksab1KwYc/SF6knWbdmO2A+qvghBsyhVjbaYashnObHNi/87oGxidOP/zpAoO0Q==","signatures":[{"sig":"MEUCIQDCRCXbtZu5N6aCICQaSclbECPHPwvoEM6hwdv3sbmlPwIgdvHw21twLOWoMo3ibEQ+ql51vOz9PLoe0ar0tcGP8RQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":126417},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"gitHead":"39910a520c3bf84a41d46c004d6a9d568e8b1f37","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.24.0_1789437710339_0.24412877541696076","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"sleepy-serv","version":"0.25.0","keywords":["rest","serv","sleepy","web server","www"],"author":{"name":"Travis J True"},"license":"MIT","_id":"sleepy-serv@0.25.0","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"bin":{"sleepy":"src/cli/index.ts"},"dist":{"shasum":"6fa81aca826950e3727e5c7b2f7ab7994c7c4481","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.25.0.tgz","fileCount":48,"integrity":"sha512-YT7V6ZA00BgmITpXsUQoJO/LQKkH13xTg0jorXb7RqaO531OShB/ag/hzGwdy1GaWlZNtteTgXpR4njmnvDJ6g==","signatures":[{"sig":"MEUCIFXUVAb1/C13ba4B80MXK/H9bsS8twyyoUa0Gvf4wygMAiEAyJZI7iTHMS0kM4dpW3B/JlGdrBSjcwLTU+DX6ziTRL0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":130423},"type":"module","exports":{".":{"bun":"./src/index.ts","types":"./dist/index.d.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"gitHead":"387fd682d2b459ed3834c5bc339938cee51c14d6","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"repository":{"url":"git+https://github.com/travistrue2008/sleepy-serv.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.1","description":"A more opinionated web server for building REST-ful applications","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sleepy-serv_0.25.0_1789490342742_0.35180242161414843","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"sleepy-serv","description":"A more opinionated web server for building REST-ful applications","author":{"name":"Travis J True"},"license":"MIT","version":"0.26.0","type":"module","bin":{"sleepy":"src/cli/index.ts"},"exports":{".":{"types":"./dist/index.d.ts","bun":"./src/index.ts","default":"./src/index.ts"},"./plugin":{"bun":"./src/plugin/index.ts","default":"./src/plugin/index.ts"}},"repository":{"type":"git","url":"git+https://github.com/travistrue2008/sleepy-serv.git","directory":"packages/server"},"keywords":["rest","serv","sleepy","web server","www"],"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit -p tsconfig.json"},"dependencies":{"ajv":"^8.20.0","ajv-formats":"^3.0.1"},"gitHead":"cd74027d9466395c33722b7dbe2460e5e54dcbdc","_id":"sleepy-serv@0.26.0","bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"homepage":"https://github.com/travistrue2008/sleepy-serv#readme","_nodeVersion":"22.23.2","_npmVersion":"11.19.1","dist":{"integrity":"sha512-gFdU9QO+gQ9sLn5GwyEvecnpU2f4oYEzO8PznGO6a9scK73n8VbMpRd1cPOWwEAspeXNlsbBkACCRJhUMnWA7g==","shasum":"501d3c95ed1d89467aca046c77beb83b6d354e36","tarball":"https://registry.npmjs.org/sleepy-serv/-/sleepy-serv-0.26.0.tgz","fileCount":48,"unpackedSize":130423,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sleepy-serv@0.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHoaqHhgFx+RJp1JYcfuigkW+lCpcQ6gSgE+WCfPR46+AiEA0I55ptrmmoW8UEjMNFCvIoPwH+YFIu8t9BteyQobfLQ="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20a6bcd2-9b17-4bf0-ae8c-d991624d862b"}},"directories":{},"maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sleepy-serv_0.26.0_1789510291565_0.3812742898071726"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-26T01:04:51.999Z","modified":"2026-09-15T22:11:32.039Z","0.1.0":"2025-02-26T01:04:52.189Z","0.1.1":"2025-02-26T01:07:51.542Z","0.1.2":"2025-02-26T05:33:22.989Z","0.1.3":"2025-02-26T05:39:09.802Z","0.2.0":"2025-03-11T05:53:28.371Z","0.2.1":"2025-03-11T06:00:57.962Z","0.3.0":"2025-03-11T07:59:29.498Z","0.3.1":"2025-07-30T16:27:41.666Z","0.4.0":"2026-04-13T08:23:01.310Z","0.5.0":"2026-05-13T03:05:34.598Z","0.6.0":"2026-07-20T08:19:38.179Z","0.6.1":"2026-07-20T08:43:30.173Z","0.6.2":"2026-07-20T08:49:19.534Z","0.7.0":"2026-08-10T16:21:12.701Z","0.8.0":"2026-08-12T03:25:20.879Z","0.9.0":"2026-08-13T15:33:41.674Z","0.10.0":"2026-09-02T23:49:18.489Z","0.11.0":"2026-09-03T00:14:16.973Z","0.12.0":"2026-09-03T05:48:44.403Z","0.13.0":"2026-09-03T17:42:56.613Z","0.14.0":"2026-09-08T00:19:31.155Z","0.15.0":"2026-09-08T01:28:29.098Z","0.16.0":"2026-09-08T01:40:48.751Z","0.17.0":"2026-09-08T02:26:17.476Z","0.18.0":"2026-09-08T02:34:51.013Z","0.19.0":"2026-09-10T07:16:25.824Z","0.20.0":"2026-09-10T23:24:15.342Z","0.21.0":"2026-09-11T05:15:33.899Z","0.22.0":"2026-09-12T01:58:34.368Z","0.23.0":"2026-09-14T07:00:23.590Z","0.24.0":"2026-09-15T02:01:50.523Z","0.25.0":"2026-09-15T16:39:02.891Z","0.26.0":"2026-09-15T22:11:31.710Z"},"bugs":{"url":"https://github.com/travistrue2008/sleepy-serv/issues"},"author":{"name":"Travis J True"},"license":"MIT","homepage":"https://github.com/travistrue2008/sleepy-serv#readme","keywords":["rest","serv","sleepy","web server","www"],"repository":{"type":"git","url":"git+https://github.com/travistrue2008/sleepy-serv.git","directory":"packages/server"},"description":"A more opinionated web server for building REST-ful applications","maintainers":[{"name":"travistrue","email":"travis.true08@gmail.com"}],"readme":"# `sleepy-serv`\n\nA directory-driven web server designed for REST-ful applications\n\n## Important Notes\n\n- This package requires [`bun.sh`](https://bun.sh) instead of NodeJS to run.\n- This project requires bun v1.4 or higher\n\n## Getting Started\n\nThe fastest way to scaffold a new project is the CLI:\n\n```bash\nbunx sleepy-serv init\nbun install\nsleepy dev\n```\n\nOr manually:\n\n```js\n// src/index.ts\nimport { createApp } from 'sleepy-serv'\n\ncreateApp(3000)\n```\n\nRoutes live in `src/api/` and are discovered automatically by the Bun\nplugin at startup. There is no need to pass a directory path or import\nroutes yourself.\n\nTo start the dev server with the plugin preloaded:\n\n```bash\nsleepy dev\n```\n\n### The Plugin\n\n`sleepy-serv` uses a Bun plugin (`sleepy-serv/plugin`) to scan the\nfilesystem and generate static imports for every route at load time. This\nreplaces the previous dynamic `import()` and `fs.readdirSync()` approach\nand enables compatibility with `bun build --compile --bytecode`.\n\nThe plugin is loaded automatically by the CLI commands (`sleepy dev`,\n`sleepy prod`, and `sleepy build`). If you prefer to run your entrypoint directly, preload\nthe plugin yourself:\n\n```bash\nsleepy init  # creates a new project\nsleepy dev   # runs the app (watch mode)\nsleepy prod  # runs the app (NO watch mode)\nsleepy build # for building a single-file bundle via `bun build` (recommended)\n```\n\n### Return Value\n\n`createApp()` calls `Bun.serve()` under the hood and returns an `app`\nobject with these properties:\n- `routes`: a list of all routes defined by the file structure, useful for\n  debugging.\n- `server`: the object returned from `Bun.serve()`. Prefer `app.close()`\n  (see [Shutting Down](#shutting-down)) over calling `server.stop()`\n  directly.\n- `ws`: WebSocket commands for interacting with connected clients:\n  `query(fn)`, `send(fn, event, body)`, `broadcast(event, body)`, and\n  `drop(signal, fn)`.\n- `close`: an `async` function that shuts the app down. See\n  [Shutting Down](#shutting-down).\n\n### Shutting Down\n\n`app.close()` shuts the app down and releases everything it holds:\n\n```js\nconst app = createApp(3000)\n\nawait app.close()\n```\n\nIt stops the server, tears down the Ctrl+D shutdown handler, and calls [`onClose`](#onclose). Pass `close(true)` to force-close active connections rather than waiting for in-flight requests to finish. That argument is handed straight to `server.stop()`, so it behaves exactly as it does in `Bun.serve()`.\n\nThis matters most for tests that start and stop an app per case. Calling `server.stop()` on its own stops the HTTP listener but leaves the Ctrl+D shutdown handler attached to `stdin`, which holds an open handle and can keep the process from exiting. `app.close()` does not have that problem.\n\n### Adding Routes\n\nRoutes are made up as _resources_ and _methods_. Resources are described by a directory path, and methods are described by files created inside of those directories. Resource segments can also represent dynamic routing params by starting the directory name with a colon (`:`).\n\nHere's file structure example:\n\n```\n/src\n  index.js # this is where we called `createApp()`\n  /api\n    /users\n      get.js\n      post.js\n      /:userId\n        get.js\n        delete.js\n        put.js\n```\n\nThe file structure above create the following routes:\n\n- `GET /users`\n- `POST /users`\n- `GET /users/:userId`\n- `DELETE /users/:userId`\n- `PUT /users/:userId`\n\nThese methods are supported:\n\n- GET\n- HEAD\n- PATCH\n- POST\n- PUT\n- DELETE\n\n### Method Definition Files\n\nThe route's logic is implemented in the route definition files. These must `export default` either a function, or an array of functions for middleware purposes. The function signature takes a `BunRequest` object, and must return a `BunResponse` object.\n\nHere's an example of a simple handler function:\n\n```js\nexport default function (req, res, next) {\n  console.log('res:', res)\n  console.log('next:', next) // null for route handlers\n\n  return new Response('Hello world')\n}\n```\n\nThese functions take three parameters:\n- `req`: a `BunRequest` object\n- `res`: a results object\n- `next`: a function to call the next middleware in the chain (or `null` for the final handler)\n\nThe `res` parameter might seem familiar if coming from ExpressJS, but this parameter has a different purpose. The `res` parameter is the \"result\" value handed to the current middleware. Middleware do not mutate it. Instead, whatever a middleware passes into `next(data)` becomes the `res` value the next middleware receives. This way, the `req` object stays as a lean `BunRequest`, and each middleware decides exactly what the next one sees.\n\nThe `next` parameter is a function that advances the chain. Whatever you pass to it becomes the next middleware's `res`. Calling `next()` with no argument sets the next `res` to `undefined`, so to forward the current result unchanged, return `next(res)`. For route handlers (the final function in the chain), `next` will be `null`.\n\nThese handlers can also be `async` functions and `sleepy-serv` will wait for them to finish before moving on.\n\n### Middleware\n\nAs mentioned earlier, method definition files can also export an array of functions:\n\n```js\nexport default [\n  async (req, res, next) => {\n    /* transform `res` into the parsed body for the next middleware */\n    return next(await req.json())\n  },\n  (req, res) => { /* notice that the last function doesn't take `next` */\n    console.log('JSON body:', res)\n\n    return new Response('Hello world')\n  },\n]\n```\n\nThis is useful if you want to break common logic up into reusable functions. The functions in the array are called in-order, and each receives three parameters: `req`, `res`, and `next`.\n\n#### Middleware Chain Behavior\n\nEach middleware function must do one of the following:\n- **Call `next(data)`**: Continue to the next middleware by returning `next(data)`, where `data` becomes that middleware's `res`. To forward the current result unchanged, return `next(res)`\n- **Return a Response**: End the chain (early) by returning a `BunResponse` object\n- **Throw an error**: Stop the chain and trigger error handling\n\nThe `next` parameter will be `null` for the final function in the chain (the route handler), indicating there are no more middleware functions to call.\n\n#### Example with Explicit `next()` Calls\n\n```js\nexport default [\n  (req, res, next) => {\n    console.log('1st middleware')\n\n    if (req.headers.get('authorization')) {\n      return next() // continue to next middleware\n    } else {\n      return new Response('Unauthorized', { status: 401 }) // end chain early\n    }\n  },\n  (req, res, next) => {\n    console.log('2nd middleware')\n\n    return next({ // continue to route handler\n      ...res,\n      user: {\n        id: 123,\n        name: 'John',\n      },\n    })\n  },\n  (req, res) => {\n    console.log('Final, \"route\" handler')\n\n    return new Response(`Hello ${res.user.name}`)\n  },\n]\n```\n\n#### Middleware Execution Order\n\nMiddleware functions are executed in the following order:\n1. **App-level middleware** (defined in `createApp()` options)\n2. **Directory-level middleware** (from `meta.js` files, from root to leaf)\n3. **Route-level middleware** (defined in the route file array)\n\nEach middleware function receives the same `req` object. The `res` value, by contrast, is whatever the previous middleware passed into `next(data)`, allowing data to be transformed or accumulated as it flows through the chain.\n\n#### Breaking the Middleware Chain - Responses\n\nYou might want to break the middleware chain with a response early.\n\nHere's an example:\n\n```js\nexport default [\n  (req, res, next) => {\n    if (req.params.userId === '123') {\n      return new Response('Returned early')\n    } else {\n      return next() // continue to next middleware\n    }\n  },\n  (req, res) => {\n    return new Response('End of chain')\n  },\n]\n```\n\nIn the case above, the 1st middleware function will return a `Response` object if the route param's `userId` is equal to a specific value. In those cases, the last function in the middleware chain will not execute for that request. If the condition is not met, `next()` is called to continue to the next middleware.\n\n#### Breaking the Middleware Chain - Errors\n\nIt's also common to throw errors for things like request validation or when a desired resource is not found. `sleepy-serv` has defined custom `Error` types for every type of 4xx and 5xx error:\n\n```js\nimport { NotFoundError } from 'sleepy-serv'\n\nexport default async function (req, res) {\n  const users = await sql`\nSELECT * FROM Users\nWHERE userId=${req.params.userId}\n  `\n\n  const foundUser = users[0]\n\n  if (foundUser) {\n    return new Response.json(foundUser)\n  } else {\n    throw new NotFoundError()\n  }\n}\n```\n\nIf the user is found in the database, then the request will return with a successful response containing the user's data. If the user is not found, then the `NotFoundError()` is thrown which will automatically respond with a _404 NotFound_ error.\n\nThrowing generic errors also works too:\n\n```js\nexport default async function (req, res) {\n  throw new Error('A problem occurred')\n}\n```\n\n`sleepy-serv` will automatically respond with a _500 InternalServerError_ for any error types that aren't part of the `sleepy-serv` package.\n\n## Metadata Modules\n\nIt's also possible for resource directories to contain a `meta.js` file. These files can export various things that have some sort semantic relationship to the part of the route that they're defined in.\n\n#### Directory-Level Middleware\n\n`meta.js` files can also export an array of middleware functions:\n\n```js\n// meta.js\n\nexport const middleware = [\n  (req, res, next) => {\n    /* do middleware things */\n    return next(res) // Continue to next middleware, forwarding `res`\n  },\n]\n```\n\nThis middleware will be applied to all sibling and descendent method definition files within that directory.\n\nFor example:\n\n```\n/src\n  index.js\n  /api\n    meta.js # metadata\n    get.js\n    /users\n      meta.js # metadata\n      get.js\n      post.js\n      /:userId\n        meta.js # metadata\n        get.js\n        delete.js\n        put.js\n```\n\nThe middleware defined in `/api/meta.js` will be applied by the following routes:\n\n- `GET /`\n- `GET /users`\n- `POST /users`\n- `GET /users/:userId`\n- `DELETE /users/:userId`\n- `PUT /users/:userId`\n\nThe middleware defined in `/api/users/meta.js` will be applied the following routes:\n\n- `GET /users`\n- `POST /users`\n- `GET /users/:userId`\n- `DELETE /users/:userId`\n- `PUT /users/:userId`\n\nThe middleware defined in `/api/users/:userId/meta.js` will be applied the following routes:\n\n- `GET /users/:userId`\n- `DELETE /users/:userId`\n- `PUT /users/:userId`\n\n### Meta Files\n\nAt the time of this writing, `meta.js` only exports middleware functions, but it will eventually be able to provide additional configuration for the endpoint definitions within its scope.\n\n## Built-In Middleware\n\n`sleepy-serv` also comes built-in with a few useful middleware functions that are commonly used.\n\n### parseJsonBody()\n\nThis function returns a middleware that parses the request's body as a JSON string and forwards the parsed value as the next middleware's `res` via `next(body)`. The returned middleware throws a `BadRequestError` if parsing fails, and forwards `res` unchanged (`next(res)`) when there is no `content-type`. Additional body parsers can be written in the future to accommodate other body encoding schemes (such as XML or protobuf).\n\nExample usage:\n\n```js\nimport { parseJsonBody } from 'sleepy-serv'\n\nexport default [\n  parseJsonBody(),\n  (req, res) => {\n    console.log('Parsed JSON:', res)\n\n    return new Response('JSON received')\n  },\n]\n```\n\n### validateSchemas(schemas)\n\nThis function returns a middleware function that validates request data against provided schemas. The returned middleware function has the signature `(req, res, next)` and forwards `res` via `next(res)` after successful validation.\n\nThe `schemas` object can contain these optional properties:\n- `headers`: takes a string formatter schema to evaluate `req.headers`. Header names are case-insensitive, so schema keys are lowercased to match; validation errors report the lowercased name (e.g. `headers.userid`).\n- `params`: takes a string formatter schema to evaluate `req.params`\n- `query`: takes a string formatter schema to evaluate `req.query`\n- `body`: takes a JSON validation schema to evaluate `res` (the body value passed in via `next`)\n\nOnly the keys you pass are validated. Any key you omit is skipped entirely, and `res` is forwarded unchanged via `next(res)`; there is no implicit default schema for a missing `body`.\n\nExample usage:\n\n```js\nimport { parseJsonBody, validateSchemas } from 'sleepy-serv'\n\nexport default [\n  parseJsonBody(),\n  validateSchemas({\n    params: {\n      userId: { type: 'format', value: 'uuid' }\n    },\n    body: {\n      type: 'object',\n      properties: {\n        name: { type: 'string' },\n        email: { type: 'string', format: 'email' }\n      },\n      required: ['name', 'email']\n    }\n  }),\n  (req, res, next) => {\n    // Validation passed, process the request\n    return new Response('Data is valid')\n  },\n]\n```\n\nHere's an example of the schema in action:\n\n```\nPUT /contacts/123/addresses\n\n{\n  street1: '123 Main St.',\n  street2: '#100',\n  city: 'Las Vegas',\n  state: 'NV',\n  postalCode: '12345',\n}\n```\n\n***\nTODO: add JSON schema example.\n\nPlease take a look at the `packages/server/src/middleware.test.js` test file for a far a comprehensive set of examples on how to use this middleware.\n***\n\nThe `headers`, `params`, and `query` (querystrings) can only be strings, so they're evaulated using a simplified _string format schema_ instead of a full JSON schema.\n\nThe string formatter schema looks like this:\n\n```javascript\n{\n  type: 'format',\n  value: 'email',\n}\n```\n\n**`type`**\n\nCan either set to `'format'` or `'pattern'`. The value of `type` determines how the `value` property is used.\n\n**`value`**\n\nThis determines how to evaulate the string based on the `type` parameter. If `type` is set to `'format'`, then `value` can be set to one of the pre-defined formats that's provided by the JSON schema specification. If `type` is set to `'pattern'`, then `value` can be set to a regex pattern instead.\n\nCustom formats can also be provided by using the `setValidationFormats()` during app initialization. Here's an example:\n\n```javascript\nimport { setValidationFormats } from 'sleepy-serv'\n\nsetValidationFormats({\n  phone: /^\\d{10}$/, /* 10-digit, numeric string */\n  postalCode: /^\\d{5}$/, /* 5-digit, numeric string */\n})\n```\n\nCalling `setValidationFormats()` extends the possible values that can be passed to the `value` property when evaulating strings in either the string formatter schema, or the body's JSON schema.\n\n## `createApp()` Options\n\n### `middleware`\n\nYou can define app-level middleware that will be applied to all routes:\n\n```js\nimport { parseJsonBody } from 'sleepy-serv'\n\nconst app = createApp(3000, {\n  middleware: [\n    parseJsonBody(),\n    (req, res, next) => {\n      console.log(`${req.method} ${req.url}`)\n      return next()\n    },\n  ],\n})\n```\n\nApp-level middleware is executed before any directory-level or route-level middleware.\n\nWhen WebSocket support is enabled (`ws: true` or `ws: { ... }`), the\nreserved `/ws` handshake routes are folded into these same chains, so\napp-level middleware runs against them too. A catch-all validator (for\nexample a `validateSchemas` that requires a JSON body or a specific\nheader on every request) will therefore also run against the body-less\n`/ws` handshake requests and reject them. Scope such validators below\nthe reserved paths rather than applying them app-wide.\n\n### `hostname`\n\nThe hostname can be customized like so:\n\n```js\ncreateApp(3000, {\n  hostname: 'test.sleepy-serv.com',\n})\n```\n\n### `mountPath`\n\nThis adds a prefix to all routes. For example:\n\n```js\ncreateApp(3000, {\n  mountPath: 'api/public',\n})\n```\n\nWith the directory structure\n\n```\n/src\n  index.js # createApp()\n  /api\n    get.js\n    /users\n      get.js\n      post.js\n```\n\nYields these routes:\n\n- `GET /api/public`\n- `GET /api/public/users`\n- `POST /api/public/users`\n\n### `onClose`\n\nWhen the app is started, the app can be shutdown gracefully by pressing Ctrl+D in the terminal. That handler is only wired up when `stdin` is a TTY, so it's skipped in CI, in test runners, and anywhere `stdin` is piped. The `onClose` hook will be called during that shutdown if it's defined, and it's also called by [`app.close()`](#shutting-down). `onClose` can also be `async` as well.\n\n```js\nconst app = createApp(3000, {\n  onClose: () => console.info('closing down...'),\n})\n```\n\n### `ws`\n\nWebSocket support is opt-in. Pass `ws: true` to enable with defaults,\nor pass an options object to customize behavior:\n\n```js\ncreateApp(3000, { ws: true })\n```\n\nWith custom tuning and lifecycle hooks:\n\n```js\nconst app = createApp(3000, {\n  ws: {\n    heartbeatInterval: 30_000,\n    dropThreshold: 120_000,\n    reclaimTtl: 300_000,\n    ticketTtl: 10_000,\n    onOpen: clientId => console.log('connected:', clientId),\n    onClose: (clientId, signal) => console.log('closed:', clientId, signal),\n  },\n})\n```\n\nWhen `ws` is omitted (or `false`), no `/ws` endpoints are registered\nand the server does not accept WebSocket upgrades. Calling `app.ws` or\n`req.ws` methods when WebSocket support is disabled throws an error.\n\n- `heartbeatInterval`: how often the client should send heartbeats, in milliseconds. Sent to the client in the welcome message. Defaults to `30_000`.\n- `dropThreshold`: how long the server waits without an inbound message before reaping the connection, in milliseconds. Defaults to `120_000`.\n- `reclaimTtl`: how long an inactive (reaped/dropped) session stays reclaimable, in milliseconds. Defaults to `300_000`.\n- `ticketTtl`: how long a minted upgrade ticket stays valid, in milliseconds. Defaults to `10_000`.\n- `onOpen(clientId)`: fires after a client's welcome message is sent. Wrapped in try/catch so a throwing hook does not break the connection.\n- `onClose(clientId, signal)`: fires when a connection closes. `signal` is a `CloseSignal` value (`{ code, reason }`). Also wrapped in try/catch.\n\n## WebSocket Commands\n\nThe `app.ws` object exposes four methods for interacting with connected clients:\n\n- `query(fn, filter?)`: return a filtered list of sessions. The filter function receives `(session, index)` where `session` is a `SessionEntry` (`{ clientId, type, data }`), and returns a boolean. The optional `filter` parameter controls which sessions are iterated: `'active'` (default), `'inactive'`, or `'all'`. To list all active sessions: `app.ws.query(() => true)`. To include inactive sessions: `app.ws.query(() => true, 'all')`.\n- `send(event, body, fn)`: push a notification to clients matching a filter. The filter function receives `(session, index)` and returns a boolean. To target one client: `app.ws.send('ping', body, s => s.clientId === targetId)`.\n- `broadcast(event, body)`: push a notification to all connected clients.\n- `drop(signal, fn)`: close connections matching a filter. `signal` is a `CloseSignal` (`{ code, reason }`) with `code` validated in the range [4000-4099]. The filter function receives `(session, index)` and returns a boolean. To drop one client: `app.ws.drop({ code: 4000, reason: 'kicked' }, s => s.clientId === targetId)`.\n\nThe same commands are available inside endpoint handlers via `req.ws`:\n\n```js\nexport default function (req) {\n  const targetId = req.query.targetId\n\n  req.ws.send('ping', { from: 'handler' }, s => s.clientId === targetId)\n\n  return Response.json({ ok: true })\n}\n```\n\nThis works from both HTTP and WebSocket transports.\n\n### Typed Connection Data\n\nAll WebSocket types accept an optional generic parameter `<T>` that\nconstrains `session.data` in filter functions and query results:\n\n```ts\ntype ConnectionData = {\n  userId: string\n  role: 'player' | 'spectator'\n}\n\nconst app = createApp<ConnectionData>(3000, { ws: true })\n\n// session.data is typed as ConnectionData\napp.ws.send('event', body, session => {\n  return session.data.userId !== excludedId\n})\n\nconst players = app.ws.query(session => {\n  return session.data.role === 'player'\n})\n```\n\nThe type parameter propagates through `Request<T>`, `Middleware<T>`, and\n`Handler<T>`, so typed handler and middleware functions also get typed\nsession data through `req.ws`:\n\n```ts\nimport type { Request, AsyncHandlerResult } from 'sleepy-serv'\n\ntype ConnectionData = { userId: string }\n\nexport default async function (\n  req: Request<ConnectionData>,\n): AsyncHandlerResult {\n  req.ws.send('joined', {}, session => {\n    return session.data.userId !== 'some-id'\n  })\n\n  return new Response('', { status: 204 })\n}\n```\n\n## Exports\n\n`sleepy-serv` exports several runtime constants and types:\n\n- `ServerCloseSignals`: server close signals: `Ok` (`{ code: 1000, reason: 'ok' }`), `Reaped` (`{ code: 4998, reason: 'reaped' }`), `Superseded` (`{ code: 4999, reason: 'superseded' }`)\n- `CloseSignal`: the type for close signals: `{ code: number, reason: string }`\n- `StatusCode`: the full range of HTTP status codes (1xx through 5xx)\n- `HttpMethod`: HTTP verbs: `Head`, `Get`, `Post`, `Put`, `Patch`, `Delete`\n- `SessionType`: session state: `Active` (`'active'`), `Inactive` (`'inactive'`)\n- `SessionFilter`: session filter: `Active` (`'active'`), `Inactive` (`'inactive'`), `All` (`'all'`)\n- `SessionEntry<T>`: the shape returned by `query()` and received by filter callbacks: `{ clientId: string, type: SessionType, data: T }`\n- `FilterFn<T>`: the filter callback type: `(session: SessionEntry<T>, index: number) => boolean`\n- `SocketCommands<T>`: the type for `app.ws` and `req.ws`\n- Error classes for every 4xx and 5xx status (e.g. `NotFoundError`, `UnauthorizedError`, `InternalServerError`)\n- Middleware helpers: `parseJsonBody`, `validateSchemas`, `setValidationFormats`\n\n## CLI\n\nThe `sleepy` CLI is installed with the package and provides three commands:\n\n### `sleepy init`\n\nScaffolds a new project in the current directory with `package.json`,\n`sleepy.config.ts`, `tsconfig.json`, `src/index.ts`, and\n`src/api/get.ts`. If `package.json` already exists, it merges the\n`dev` and `build` scripts without overwriting other fields. If `src/`\nalready exists, existing files are not overwritten.\n\n### `sleepy dev`\n\nStarts the dev server in watch mode with the plugin preloaded:\n\n```bash\nsleepy dev\n```\n\nEquivalent to:\n\n```bash\nbun --watch --preload sleepy-serv/plugin src/index.ts\n```\n\n### `sleepy prod`\n\nStarts the production server with the plugin preloaded (no watch mode):\n\n```bash\nsleepy prod\n```\n\nEquivalent to:\n\n```bash\nbun --preload sleepy-serv/plugin src/index.ts\n```\n\nUse this when `bun build --compile` is not an option (e.g. dynamic\nimports, native dependencies like `pg`, or when a single-file\nexecutable is not desired).\n\n### `sleepy build`\n\nProduces a production build using `Bun.build()` with the plugin:\n\n```bash\nsleepy build\n```\n\nOutput goes to `./dist` by default. Build options like `compile`,\n`bytecode`, and `outdir` are configured in `sleepy.config.ts` (see\n[Configuration](#configuration)).\n\n## Configuration\n\nCreate a `sleepy.config.ts` (or `.js`) in the project root:\n\n```ts\nexport default {\n  app: {\n    root: './src/api',\n    entrypoint: './src/index.ts',\n  },\n  build: {\n    outdir: './dist',\n    compile: false,\n    bytecode: false,\n    plugins: [],\n  },\n}\n```\n\nAll fields are optional and fall back to the defaults shown above.\n","readmeFilename":"README.md"}