{"_id":"8track","_rev":"17-9676c02c52765627733b9348095ec428","name":"8track","description":"A service worker router with async middleware and neato type-inference inspired by Koa","dist-tags":{"latest":"1.3.3"},"versions":{"1.0.0":{"name":"8track","version":"1.0.0","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.0","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"homepage":"https://github.com/jrf0110/8track#readme","bugs":{"url":"https://github.com/jrf0110/8track/issues"},"dist":{"shasum":"c82869ff8f3c27b2592da04102be2a28d47f3498","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.0.tgz","fileCount":19,"integrity":"sha512-HmBoZO3UQ1Qu0TrsDzCGvjl4o7wrPgBJB1D6C+HVd/CLSEXoqctMFo0EeQqqhDpJurvwsuXz1fNIn2esoudMiQ==","signatures":[{"sig":"MEUCICQ786e3I1y55Ve0eSr8oOkduSJFqz/2PgqT83ByMOxVAiEArQW8rav+vjnrFM9eXbQRRNJCq5bJmHzVHvJGQgK+/JQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":204475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5ZvbCRA9TVsSAnZWagAA3/8QAJqmcVm/5lNUlQRdsaqR\nksg1TWSHNmZBcFJjl/mObKhEgIE4vXDGhlNNhb6tzWMrFhIx0fKd9GW5ng4E\nQdDah09LZaiPxAuyWvA+/8Seqg4HKSrJ8dhRSdXsh0Tzcr6EaFZzNqo4GWrN\nVKs0dm94CRLEV12YRTAOlednPCyNLp74w+twLX6zyY/hyyfTnU57FCTA1SdS\nu6K4ntZ/0JFM5x8U8+Thi3Cdut2n6tQGyoOuCHRdR9mPGpcUk3JFASfUELzD\nm6jg17CVDZOu5Se+TwElISmEQ4X2/5i1tVqT86jqFAB0PDcf2ccQZ0Q24QRI\ngzgi5UrcFlUOkJUOsIQnApEJ1aw7GhCo5zsFblwF3r6v3CHn07sXc4FfbtJH\nDd9WCJoLvW15Qj3hM2XZMOSuKqy8Mz6cR1j75buq+pvqkz7OXi639sHypEXv\nE3yaGbQ3i1o+4bMq3h9p3E4Gd/i+VQ0i5Hf/I2DpePUSN+xw5ExUwUDNFbF+\nKRer0MSEUfUrVbn/wpqIKfpiRLNrRpuv4b5/ev9huWpN17DUXUpMvsB/0rfM\nL0g/0domCnYXIPqBEBZdValHnUJumhSd9NHBJ1S2aQbq3YBTSXiakJVrUmMs\nwP37jV58F9zxzycEAcVv1kQ7IH0i7Y49jArcrp/gDrb9V9Fcpi9qjbbvLuxi\nA3oZ\r\n=TS6z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"1cccac05dd306c656985447aaba22ea2e8815f2d","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"git+https://github.com/jrf0110/8track.git"},"_npmVersion":"5.6.0","description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"_nodeVersion":"8.11.4","dependencies":{"path-to-regexp":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","service-worker-mock":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.0_1558551514868_0.9614735616841101","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"8track","version":"1.0.1","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.1","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"homepage":"https://github.com/jrf0110/8track#readme","bugs":{"url":"https://github.com/jrf0110/8track/issues"},"dist":{"shasum":"832d9243127fa8be3b058033bdbe11d96afc9d6b","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.1.tgz","fileCount":19,"integrity":"sha512-WtvhOiZb/OfjJIPgMNqcdmq5PP3Q0aqAk5JMN/tC4dhwuDBqUeyNA2MB3HSPGVb4Lzpq5yd/As4spJ50MmwyDw==","signatures":[{"sig":"MEYCIQC16R0iU7iMywIOIzDrQewKdnCJf+88xdIaGLU79FbxRAIhAP3A7b2XN2e75A6GVPUkzuVQnfrYh8sHhEx9jfoJmoGR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":204766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8UsUCRA9TVsSAnZWagAAG1IP/R1k1Wem+PLaqZuGU7aT\nF00qwW5rtKnymnUd+4jtDztx0rOiBNWjBvVrm2Iq7Rs9Kt2dlcwqfREPGAzC\nS+E0Y2uB9UaFCsIEnh60FX94VB/hXgUk8Y3VRsRYT/RcUCwh93ZpTY1/7/h3\nRgDY/y59blBoXT5vgPenGLYvOgwrBazeHx28H3Osxi6STz88dumBOhRs6V2c\nyqobOlEVTlLWxA1ZqSK46GBO0fdFXcvQmjJcHqH3Uaekv4T8oMokkIAa2Nhe\n3FYar/KCyQ8ONkmAo0AKHm1EmZrvW0GhMREHU648A7L3gldUE+0t5nF82BGb\njUYfSTaPYoU7sx/u91XIl2bWh/AyatiDzKebYgMq/+0R9kNKeuCSGiCXxerw\nSjfgnl8ppF9EK/DkeW/qZ9495hjG1UItB4tNdGbHb5OLMWt2s250MqbhS2Lv\nwRHCZnJpmp7hUkZiyfGAjW2Wxl1my1lKR2+0MnxMKy36htnFFSvN/rq9Xkjz\n+rTfqwXBfIGiWmXEPpQcCSXTzQBX6NSrMum/FsFQlmjLFTZVVK3WRj493+gp\nGiCmYXhPl+daZMm9mSugcuz/YJr2G/JjJcS2Sb9uwLupsqcHb69Nv/tvfN69\nQuzzZ1bVGCyF2eTxx/0s21Zx2BgfOaBY5/DhcJjSTaZ+Nb3GD1so9zGzsYfV\no54k\r\n=I9tb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"a1eb0b8a675f30c1f0a271b1cf80c986918b239d","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","prepublishOnly":"yarn build"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"git+https://github.com/jrf0110/8track.git"},"_npmVersion":"5.6.0","description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"_nodeVersion":"8.11.4","dependencies":{"path-to-regexp":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","service-worker-mock":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.1_1559317267762_0.6507154232879357","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"8track","version":"1.0.2","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.2","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"dist":{"shasum":"9585978f0ae8c814eb02c07865074e45df26988d","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.2.tgz","fileCount":33,"integrity":"sha512-snuwjWb73oqN/57BEGD/w/pCtOz/SpkH9bxs9YAap3nCFY4VQkQ1WkiXjLq4Mf5Iaq0i5SfYN+pZsBa/+1mD2A==","signatures":[{"sig":"MEQCIDSD9+3pgAzqiblxFiDUeyDVk7vuMD8wB3ZlnzfrOcSRAiBZapZ79NsxvzJtb/16cRDIEdB1SAT9zVwzxvAoAmzVLw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":398820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdArezCRA9TVsSAnZWagAAKF4QAIp5Xg7UUVx7jqzAMenk\nE244B6Bvsk2fV6b75km0amyMAeLYNvhNiU8OFkjCBsA3245qhKTGNtIhLfVv\nnkewQTGv6pvJyHQ9xek8AXVRq19MRk8ODrKQJTlSh2QvzZlhsdwioibiEnE6\nQy0kRwKmtWNQHvVN8uulSLNm8E/vuzNxsUMzXWSvhnahVR7U7H1pje2Pn1pT\nQ9a5LdEpuP8L8JLK96kqdtZDzZX2o4Q8ElQ37TfdSlobSqg/7t5QkLYXsO84\nIPjgTtXdX7ZlsVyVaVzNAulO13Rs4QtlksFQtZVC6DdCpJKxThP4SFicHnXW\nakwavpjcS5dtVcPfk7+x/36dRjh2TsgP3T4SzL8/svvT4s1WlyBUA6sUfZzL\nR/QWXDmrbz9NP7xT83nA0RJa1oWjJcLWYQQfoVQhHM4AIw66ohpToIS004eB\n7xT67WGosYdSZtW9nxmZZXjchoGjVFfzV2E33AG4EeFD1dwGjsTBY329BvYy\nK/i2zZ2RqvhSebnCjhMD/PVZatbVa/CBwojffMRrT/IhktgHCXAFKYZkjzgl\na36TJQGbj4gYVPUcSBp5oOYAP3nMVlCccvcAYFRUo7sUvvciEMWoSHlMDYYY\nNO55Lwd66s8q1yGyYweIkdPfnUoOrp7vUgHAxvvCe7GeB9U2yG+mwkDO+pcW\n0DYH\r\n=OtCU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","prepublishOnly":"yarn build"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"path-to-regexp":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.2_1560459186155_0.8893622359607563","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"8track","version":"1.0.3","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.3","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"bin":{"8track":"./dist/cli.js"},"dist":{"shasum":"8d9ab5fe3c05cc82fdf146c7ce5d1d9ab40f1873","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.3.tgz","fileCount":50,"integrity":"sha512-20f8Bx8tnYt063cAwmtK0ZQc/FKC5Lp0TuVIAyDtl7NhJc5C/dWwKFnjaMQTAk+8p+9kQuAvj9Hx6ggLsTvlSA==","signatures":[{"sig":"MEUCIQDOl4sAeAvYZIg1UqWEZxdP6TR00DYcDpatnKJsZq/YKAIgEYEoK1h4dG0t8svbA8cnQpLifD/hh6MxpP6t6dfMP5g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":618171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKP64CRA9TVsSAnZWagAAZxQQAJ3R4Wt9hvEQdcG8wl0J\ni1qtUBk6xxR9rRtYlRK/J8nFlk5FbhDnKC+qQeN067e8QnUY1Vwg0EoEAnZV\nDqvpiMSx/sY+m+m8L/bDg3y+NNEeNcmOUpeaiB4xTSesT4wX1vWAOsE/nO/P\n8ugLDi+3a43Zj1S+ist29vje81snZ1IdI1nsSCLbx6JhHaVFwydxQ1qman61\n7QhpKfJLCsgL/ZZtYBw45oy5qUJMt12LRSHNbfu7nI5cQ6l3t+Lk+jgI2lP7\niBrEdAALgeX7fHjojaznacD8A+Av4eE1iRkV/3zNyAgqKMiAYDP8G0Watmeu\nR4QKHMmPIkgpVo5UV+m3NyZCA4gNaoBsATtEfO1SHRbNYFlS25p8p+E8z+gA\nL8rmN9rzFdr7FFLctZqyuuKGidHQZVGQnaxCwbtEmTW95Wvml8NOuMiM4/zf\nBKoTjwrV5Mb00/7DhvY5Z8o93UA+DOKEHL0ZOFHCtDhDjSK2kbnLlJv+ReS/\nssJAwFdxPOHl5HN5MjFIiRzJXFjXlvdNaHmBxdsu+W4AA97gMqOhrk1J3Glo\nzsrpbJMlLm0CtTEmx8eLYt5Q6AmBq/l/GUWiViIy36U5Nnr3D2CIguqnHMDi\nGyzsud77cW6PeiDZq5yV78Nroxd352VoVp1McaXT7HpY1rTLwFKC6tCfwlnr\nV5Zq\r\n=TezH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^13.2.4","form-data":"^2.5.0","storage-kv":"^0.0.7","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^13.0.0","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.3_1562967735702_0.818027171028483","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"8track","version":"1.0.4","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.4","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"bin":{"8track":"./dist/cli.js"},"dist":{"shasum":"2f8edc246d5a6d5d29097ec624ff164e3e1e6f42","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.4.tgz","fileCount":50,"integrity":"sha512-5V2IA9eZOjcwKtCrZMaEGmk1lZzqQfkJLv4LF4hlVoM7jBV6S4BsKjTqp4ESp9XE0eipesa18Qw6549moVzNpg==","signatures":[{"sig":"MEQCICg5j6iN/MqkE8wH16PGmswUpmj/p3pAJKZM+rqG5P8CAiBBX7V1/petg6tUmMbypQUgxIKXGFtp2ICO9F+ujMNO/w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":618355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQy35CRA9TVsSAnZWagAAVZoP/2hq1Ffan9GpMu0maR8U\nV8a5LT8qRmGFU23FlIWsyJe8a78VXnhmRefL143v9WPOg2joDweCtLO9Z3TE\nqLuz9erKXGUww6Dx195w4FCa9zg6/gEX9oZwntLIBHqr/uwiv79IuGjaH3rY\nKYpNx/tCkujMMHXcBo82b/0hi8dsWwYbscyv68WYjJlHfKLQ7GFiLkYM0hQv\n2vUZ00OnACl1DixJqrwBl/zuKZRSaxm2xp+bsr6lSjdvY03Sl8XGs6j/uLBN\ndeZnJjTW1D3ndzqvA8Z4/Bk3CdzkBkmxRSL36NaUh8GUysWhMsrVFsXQkVIa\ns0H1L+r3kXbHjik+0WgmwVYpx+frr1QPA/ETAR54oKDYMWV7fdTNvsyreA64\nbqEeeBLRR15lpMrs4KyQdpwyeoYgYMryEcW6EySHFscgYswhtl9jVu11w2U2\nnxVbfN9uVLWDsGxuf3QT8AMXyEbW1hAVsSgATTELxe2STPOgNkB5sXjKCE9I\n5e4dR0G1lWy89O/eYs/tzVqoZE5/g8JqaxbmQi4tUtcNdql1EFgOKoO6rZRv\nlAOBijzicgu1vjMyaYT2/64gLx1vEUidhPPThxN0o3auRFhJluY0OfFqF9rc\nSObcv+xs6Ld9MDbTRhMIE4JBkqeIyjqEU2i9Ud8DsFwaElsJy0pVeeUcBloz\nzVUe\r\n=WmTl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^13.2.4","form-data":"^2.5.0","storage-kv":"^0.0.7","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^13.0.0","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.4_1564683768449_0.16523278402705754","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"8track","version":"1.0.5","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.5","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"bin":{"8track":"./dist/cli.js"},"dist":{"shasum":"259be1cee7eb0d59bd4827d0db3210e57d22317d","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.5.tgz","fileCount":50,"integrity":"sha512-SXvniMI3wIvE7kiIqkUO0eT80I/m7lo/2/qpwR3ze8B5VCfTANrCVp8MIMrRHKYS6Hsi406U9sxS7xqTkKX0Xg==","signatures":[{"sig":"MEUCIGDE94pvliojsWHXq7TVP7L45v05v71AOzSEXhT8OTHpAiEA9F/Otbz4UOiNejgB9ethIuc5sujSHja8bCEYNW55QTI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":618355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXD9cCRA9TVsSAnZWagAAc4UQAIZBBoSYZT5WWErkU+kL\nVfjRzwofp/LGq57B/IHY7z2+gfduYmlcswsi8Is2bba8KSfu+3AN/f26Galz\nVhGA2YydkrRPzDnoFnW2rVhndQlC+NJZByopWc7NLGN8sAjC3wrjvmZdwh/x\n/TTfM8vbE9x65g4i25zF6xsW1YHjybTqaA6gjiy7L5yiEDa9zM6F2MMiVQAw\n1rexHut2ZS+NHK3BeYMz9doKvIKyzF60D7QAapI+GPblyu2vojbSZi6c7WGn\nmkvHx4WmH9Jw3Old88LGnZ4JiTM9eDEbuCc23UMaDjuCb2Ul3FL+GZ1GDrVF\n5YAzqlqMdLOmfdq47gYDZAp1jt7w0zarT1+uf+JDztpA5XS8u4Q6fAwHtHt7\nATEp+ZxJKLSlpzvGer9G1729AOHOQXBazqEBN7FXMyGMWwfkpHPqFw5+nkPy\n40qh3bw/GldAoDIbG504PTeLwF+klZK2RDmIXKIxbXZyYfKu29aD8PNvjsD7\nESnlsWOeWsxv2ey2n4dZAvfL+KKkDQKfIxFxTD7nueF5XzAivp1xmXYyeY+t\ndMOYzKdB50QBbpkyrBgwhPXYoW/YSpJLCSa3vlroIdlTOXUwl4o2EcGWhTP2\nItYjCo/tYJnxdzbY36fopdIhzCfcQVgxjqhK0bOHyp384+pVVBMgJ9oCL28u\nMlus\r\n=KKx4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^13.2.4","form-data":"^2.5.0","storage-kv":"^0.0.8","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^13.0.0","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.5_1566326619437_0.8195053958569087","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"8track","version":"1.0.6","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.6","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"bin":{"8track":"./dist/cli.js"},"dist":{"shasum":"2c9e2e21ef4beb1e994c0c62a6d5e5f4fa3c6130","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.6.tgz","fileCount":50,"integrity":"sha512-cRINrokzEYe/XVTbGY1Z5nlkRCSMJZblSdO4Hw28I/VD0TQ11jUhhaqlnvI8ZysPSyU/YRSSejtOcPb6HHnjyg==","signatures":[{"sig":"MEYCIQChGQOC/XKOLXDSGjxSx9cy37AVvCz8s8jSpWG0b4QuBAIhALzWMhFBM4xg1z+I8bq6WeXinzUcm2y1VShRWkppeH16","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":618355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXWNLCRA9TVsSAnZWagAAsUMP/0NmBKxnV5y42kzHw1Tc\nfwp99Tc0ykboeuWlvj+UCxay+4B6zrm3mxf3+r66Yb+rJ+nVe5XT+z5RKzDN\nf3//4rbiOC0EMq9Dz8+2WPR2eZnIhvXuRxVYs4ztG/ij4y1Zq0rcJOs5TXRZ\nlSzrzLf8cnKCzuIah2ZmGl3rjwYyp1WwsmSEytHEfrQLUeJ361Iggkrkdl1x\nghVIVPitT9mmug/GCNOejQcpkWv3gTwAIcYJHP8czccz2Nwr3QpPjcPRS171\nJUkKnP3sj2UiGIzNfuFzLAcXRflh/lm0adS9i6GZ3OQHooPgyTHqbQBeI/oX\nv90lyoo8RkoC0OBHbc7YuwtJrDkkPRDJvK8NWuI/uguO+6Kk0bW1DKu2AFhU\ngpPacn19I4nJVoEF3g31oG8ozlLgN3QkRT2Bici0cu8OKqo/H6PnVRxQcD2u\nBmSFpsQFuw9UVy97vHg0ZCAz8s6aIjrLyscYvSEAVELLMiym1nVqDvwJMbU3\n3axbT1+vhMde/hNBIeuB19kYMdAoCCanBC94wTTlbSFVRj5aLsd8qSGYcz7P\nNuV4/5+SuRmExzc39duHqmlzCICmA/sBwgTmbQnyBEmM6HE6qqIu8czSIp+z\naD/O4qoWmSIUFpA8rYv8Z+8PScBhXqF+Fe3mHmc8tZKG1CwWkLQudHxNAI7p\no7gi\r\n=b/D0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^13.2.4","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^13.0.0","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.6_1566401354499_0.3636482195965418","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"8track","version":"1.0.7","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.0.7","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"bin":{"8track":"./dist/cli.js"},"dist":{"shasum":"86ee33eba3333217b684f1cc9e0fabf7a5a8f24e","tarball":"https://registry.npmjs.org/8track/-/8track-1.0.7.tgz","fileCount":50,"integrity":"sha512-C4BgGVVs/hO+z578caLijARRMEEhOp9m0ClLPkDWeF/Xin9nFL3D4RPD3CBmI+pQDr/HjjEVZWB6YMGmPWDIYg==","signatures":[{"sig":"MEQCIB5ygpJ0E5rNrDHi6rrgXFxtxtxuiQuBmY680DQbucBPAiAT7LxQR18i/JfndsAli5kywBuzVJXCg1FNFgFiuSkaaw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":620979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXrpcCRA9TVsSAnZWagAAGvQQAKEaNHMWAKG96K1K58Tn\n+IgH5iv3LsrsBm0g1CHabdPtGfFIUsJ6DCrdcRKRLHHhpi/vpaWVLmJhYu7A\nAqm23ih2RQVJpgds+XS3twuS6yQ0P4NNXczLG6EKYRZ0yoRuh6gHBYvWjUzK\n5jS//C8JA2MLeaM4g7P5Bve5XmiZxRArceOA2qSKOMG8qLOTbqoz7E5k5MgV\nN6Qr8tYrc0pIcBV4qqkedBY0c8bi9P6pcOl0W3IqwgMk3rj/GBdT5hbekc5F\nmatPbMmeS7HPzzV46ek7WfNBd+9wjx/xjrWaURGTf612uRbipenqS1gyCykv\neG2iqwsZPnmVf37uqcghnkNHRUdNvSMQblWxDXoVT/CGkF06Rhy3Z9OAp63C\ngKf8fX8VWR5r/5oQYk0s0pviQ3bAj1vDcdcPC2SZ6v1sbcLAruqopv6aTXXC\nm72mzVQs79dm1p2ApMVGU1EgmyYj6jWsjycJUENvY5tWtRSUTbZIODsXRrdW\nmldoVcKlg2/H/BEOAMzVHDocvztPOJZ2caquDWMOd9lbpn/Kxs1gqwUB4ij1\nSFXSxU0Q5BNi8Vf+bCBJomDTV+kAXVfoD+LnIZat6s3PWItj6vYXi7Tf3kiP\npTPjosB6+fMbK6gjunWZQ1iDpgGgpO2ytAlm6DSd5gj754Pac9L8YqaceQ+g\nrbgO\r\n=ayeg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^13.2.4","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^13.0.0","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.0.7_1566489179397_0.7000117091122655","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"8track","version":"1.1.1","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.1.1","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"}],"bin":{"8track":"./dist/cli.js"},"dist":{"shasum":"f344c59ed59304bc2288d1af7cc36f251c18fb3f","tarball":"https://registry.npmjs.org/8track/-/8track-1.1.1.tgz","fileCount":50,"integrity":"sha512-UX9E/b/Zw5svaUdL/SgvLyC1wVlozKabGXR/CqCavKAggFCOd/Eu6k+Zc6U+ivoJskCNo2cEQNqDxSAQ07L0Hw==","signatures":[{"sig":"MEUCIEjQ1TUMk8ii4wTHsj7yqkNIAhulqaPNkuP1XxrARK2HAiEA8eq3bi/PVcZoxWY741Wl2Uxk7BI9oicSoHxZn31NjA4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":622048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejg+7CRA9TVsSAnZWagAAicMP/2JFs0/pRwbEsqa9ecxi\nNc2XqN48tY9rUOX3JKiRanx0kqm1x0ptYUN7cpmudTK9tXjb71Nug2x8+0Ql\n0f0hD1QsI8qYC7eGnhoAdpPURpQFB4bW9pGk2B2L1uSXIeya9xQru8juxGm+\nQzZE+mZBwkXSj3aV31fSspwMdgUNaiEvlRErLFgr4bA7N/CeqPuB0IrhIqrF\nO2AhVEM8OFi4FpmX02ECXtAoS9f3XTaBzNwitpy6nX1fmPiCrT2riuGbVQr6\nIB1uvHXiAi3bM90GGFU7v/46/krEHhb95977AqdWyAgu/b9xvvKi8fFVNQ1y\nMdn6Ra2FW+bDcHq/DBk5LXgb3JBVqzlLjwTv1zCzcJU3hEKPjIqagC6HIyz9\nAlRuPXM4IWsSQXvAXo8KNDGoPV1GLysCoPYP+LhfvbCOqPPz+rryA62GsD86\nCvwTc4cBTJ33yqoZ52nwDOB399XtCzeQqsxa3VOGc9vV+7V+uWyJXwzDYU3x\nyVLzVZz7EH5eo3HkvRomhMONA1vL8xsW6Eb6pGtj5JmrwGpEnZinn9pMqg0s\nAk7PglmEoBrgHhWXTpY/NQCP7Ge5Nm/CQ7EZ+RUpBVoS7JULCB9vdjy8XyVH\nKWKWJD3c7Hv1ygqKbcVQrL5qJD0LsEdEK5GVY4PeDblZahCRKJpBf/enQ4xb\ncVwC\r\n=fd3d\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^15.0.4","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.1.1_1586368443263_0.6999360525291822","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"8track","version":"1.1.2","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.1.2","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"bin":{"8track":"dist/cli.js"},"dist":{"shasum":"c6455b59038cf66ca4dc66ac33ed078e915ef9a3","tarball":"https://registry.npmjs.org/8track/-/8track-1.1.2.tgz","fileCount":50,"integrity":"sha512-+yVNaBrRIr7W5D74ScXvA9YPIPpgW/InCRgZCKx8Qxyt8qRKnkGjR4eGWivP8LxMrw7hPDO2Cct/PMreu/4s0w==","signatures":[{"sig":"MEUCIQD7vZCALtWLO01auM2sEHPwvJyEZeCnDJq4UgtfYp9jggIgCAil7JznbdpyqPoTAePqXeSn7N90fNKh0XUPm8orm8A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":622042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2SfjCRA9TVsSAnZWagAAT2YP/227OU84wvl5MnxcE3qd\nf7CP1cMyu/rXKbQy8l/wh2gkOzCnMWep762YOkdclWFiYaZKgejMoVY4G6lm\n6yCqRXnBOFLMW61R030/y3gUlAH5cCFguLCIGZfVY5339ZOCHq7p/ShEsL0F\nwOJHjo6o8tyEYJjxgn4qC+6hbguY7S4eN4lNdFRg26/MDH7x6fFhmDfj4pu0\n9c97D6pt1GvMGprrg/uNzfY7XXUxkx/O9uZe+oQk8upVZs7cweU5dnQjQGhr\n+SHn15oRKEwmfqDT9tAH+k7968qGoHSL+AmOnWf1LW6DgTFuZ0rE2FzfU3/K\nfrkRyiELxhJ3IEDPlJ+YyZp/zDZdw5p5LvH7eYr96QMUKkjohkKq0BxmpyB8\n/ROK5vpo9veM1H+W2v2CgikW52JqQnOdCE5nuGYanTkf5YYHwiS7Umz0QYwD\nxwvy7LHVIrJTc2kYa+P6jNwcy9hICoCEXvwKuCz37B5dhUyrlMfK1C1ljUVo\neFwmKFliNixZbK5VtZDEpo2cTLJ7yf4R8IAFAmuu531CENOKvGnRoIYhd6ne\ngNSsZVb5HoOEnoS8wobZoV3BTwe3aSWoj+Yd/L8MtUeBOdL2FKPKRQmPl61N\nAi+ukS58R1YnaSHk1WoKqlejI5EeyjmYmZhlEXMDB3XbIlZz8a/1xKCI8HZS\n743F\r\n=h9hi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^15.0.4","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.1.2_1608067042777_0.7242374847459696","host":"s3://npm-registry-packages"}},"1.1.3":{"name":"8track","version":"1.1.3","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.1.3","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"bin":{"8track":"dist/cli.js"},"dist":{"shasum":"a2756a38175c810606d50f1ee32670d152086687","tarball":"https://registry.npmjs.org/8track/-/8track-1.1.3.tgz","fileCount":44,"integrity":"sha512-n2di8SPLfSMPdkEIR1Kh5sAFY4MaOx1kJYEdblshYVX4iP/e5aZBgWU0Y6nKVWGlf/DwBduWQfCCh+Dl24HAKg==","signatures":[{"sig":"MEYCIQCq7NIN7OjYrCQ3CB4JEQzeSwSvzwWTSNnysQN0nIQaowIhAKjS/jTWBWIK4s4nTLEdjw5rn+OqNBHgaJTvxULYAZIH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":619064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4kufCRA9TVsSAnZWagAAG78P/29NDqvNhnv+Sm1aIV9F\n5G4+XRA+Q9MiO0vqwPA+gZ3sbHhMwNmVUw36Ur3UnNLOPIwCR2WkZf3VFTYZ\nKD++EehmajD03Kdq6+Qo6PPEomiQMKz1G7LUDgxoGNcQBV2LbxO/OPCTfurm\nr68wFt934SsrwVgfbSou0zbi4s0qj+UaYiAEno5yW0B/MFU5ftwPZenipJv0\nDfGrOieB6lQ+/9Hs+eSI0r6dU+FltZ31RqlBoLaGLq4u+Po2JzSt3lGOdV+J\niZvNEdOWIgu2gpzxejzBrfZJZqWfpm2oFY17jtGyAoQra5a6PKhvEkoF3qQE\nKCklM8Q+TbeZ5g/+RhYmN1L8R9l9jynco3Wdny9icvU6S0cF9/V0zlF+RD9u\nC159h3OMr53p2FEPOU4fpcw57lvbJwcm5HB/VUxQjT3jpwg6LI2/qwLm2vdo\nTM3HVj5ZGSS3g834CyScFEcXZfMFOY/rhk4pNsjJ2wPVjOC5BcY6WH2fXox/\njghwb9wqHlKcgb7360b9PAZEdOtLu4FbN9+Qs3axVl6XKUaUZ+hAmj3EaIk3\nPvBXCE2zJDvhKy66NYQrmxKnQ75+gkzPztWz9I/s8uPynxHIrTNGxCp/WAl3\nQW65smCixQ1plHccMYJxWe0DGOlv8VtFhH7r1c/+/J5FvVGEV3Z6+v7hpQU7\nyQxy\r\n=z9qy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","typescript":"^3.4.5","@types/yargs":"^15.0.4","service-worker-mock":"^2.0.3","@cloudflare/workers-types":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.1.3_1608666014431_0.7896023914807584","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"8track","version":"1.2.0","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.2.0","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"bin":{"8track":"dist/cli.js"},"dist":{"shasum":"ab2eaffd5c15de5bf3b6b2bc90185daf34525b88","tarball":"https://registry.npmjs.org/8track/-/8track-1.2.0.tgz","fileCount":66,"integrity":"sha512-964cR8+u4iGMYgVz36IYbsiXWls41jcvGftkSR/OUAbJAKUo8T931JCU+9svZoowRO16Al7O8D66E+Pvl5UcOQ==","signatures":[{"sig":"MEUCIQDmK4si1LAdIIRvnKVI3Wy5ALIu9gs72P/jNkrswM0hxAIgC9QWVbcvDZm2Dq9Esii3N3686XQWm8UxJzsvpyVqWXQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":641072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgz2YiCRA9TVsSAnZWagAAjAwP/1nHjfjNXnTCddHbmM2X\nbnlF3SP7UsaxfhLxSRz2z9rt5eQxEFPDgj6LvFAW4bhDxazyJcF+NCQ64Jbz\nvMNZMb057Ghx4chjWUDL5yKh2XcIKI437ljIq38Inzvk3RxaR4RajElDyPNX\nrQQPOk54UN3393IDfcH9/RBBodBPjfZOwjlfx8xVaQ+Ik09kf0biDGQL3HaH\nwH3TyKJ7I5PwiWep+uq8lK+p8HTbHKY3qKnNWiUCkAAMFPp236Jp2R1buLQo\najYvsRPLK1h9wKt0qMG60tLE4JDwTHpguUsMlMac4B3AuHXnyFTKM7JL5XIf\n1jdHfz7aHH8xtxvpCOpUSSCv/WkBWWA+/katnikAdiTKhDi0o+JFPbiDg8Va\nN0ZhVqAzhCpOeVJH4eh5qUFkBZD3yaxWqduONKKG8k9bwSbq+2QRQaqXTDja\n2cH1DT8qp/vV54LZwOQkniXXeSYxFhZ64AUckDIwtULs/xQfax+QK0OxhJUF\nAZ2kxCmhx45AaHA5BVSro10LBypbLrLbBgaYriUFhTPrskAJwG0yKmFoBar8\nbSIJsWb76lYDHdcDJyXp/SXER9jAvIirVHCDTRZ1dYNY7gGttI05GARTHeCV\nKOySaQXtabPuxeCM8xxp1XPXzZoxWH/B/ctGA1UgqKDk6esvTxunBqemBogn\nYhx8\r\n=Vd25\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","node-fetch":"^2.6.1","typescript":"^4.3.3","@types/yargs":"^15.0.4","@types/node-fetch":"^2.5.10","service-worker-mock":"^2.0.5","@cloudflare/workers-types":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.2.0_1624204833435_0.6886705930101062","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"8track","version":"1.3.0","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.3.0","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"bin":{"8track":"dist/cli.js"},"dist":{"shasum":"50c2adf1e5dcdef5f66c6e07625e994491dffa5c","tarball":"https://registry.npmjs.org/8track/-/8track-1.3.0.tgz","fileCount":67,"integrity":"sha512-9rJ4XVmspI0L6xTvH3G+kRKSIn4M0JeUSGPQ9mXGCmAKKpY26GGcXDiN34rJeorZAv4bk5luho8uhbpLT9RFRg==","signatures":[{"sig":"MEUCIQC4ptdl11ZjXTQ1XC6wVjJ60gA8jkumohaANXW9DempcwIgZgNttX9c/hYulZjajP0JO7U2HllPxoG99+U6YAn8c54=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":655141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgz5wcCRA9TVsSAnZWagAAIU0P/RtEDLsYHSClRtmnLBl/\nwLsou1PljfzkM5VhUNoiZtt2a6BWsAYESmUFYu7lmKWBlFzHzRXbI2fM8xNQ\nWuHG0nvR38HMdHMRx3VrOSZW7Xoqj4v4z//jtvOPK9BncNRmR40iW/yR0qai\nAx2MPPd/d8jMkukSupMUwbUwtsQRI45lfQM/l2NWY+tv0K8yD25ZcplNEfih\nLZDOZK9heRuU4IPqezd4Rw9FlHki2pXa1ZiHFQJipfmN6PyEbUCx2SkHQEe1\n0d0ESKNxsaQnbCI0fWI8Vrc5A+WEabfFDQ7Uqfatcxkg13z59Ib92nB6Tok1\n5wkVuGz1zpuOF4qkvcDug5AcurgLvV+kRX9u7Qm7GVMHyu50xjiwkfgXJKRN\nlDZvkKt2wtVP6r4mEigaZCCoIaIoYi7xtVJhVq7jir5I0eh+GO5DhaRbaPEN\nWE7OK12jZ1jCevWTQIyQ+CFPH8Yk3sdchwyyhSgYyJO0ZSRLPiYzLbDRzcWZ\nxXnwfmDsdTHY9Uwk6J0+0x2j7gmDTskfPb0t0lqP6NUe9zmSq4hjbLJS41yc\nFwbFKBcs2QS/o+By9wTulCFIx60t8/R1rootHdK2HsyVgKRfx3UVEbrvjrlj\np4cwdssgDLMjMOplM49Zpa/ijfGzVPaHw/g8UpFtc+VsRjTgfi2v3SVWHSQV\nxgNa\r\n=o5qK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","node-fetch":"^2.6.1","typescript":"^4.3.3","@types/yargs":"^15.0.4","@types/node-fetch":"^2.5.10","service-worker-mock":"^2.0.5","@cloudflare/workers-types":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.3.0_1624218651974_0.7391673668351426","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"8track","version":"1.3.1","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.3.1","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"bin":{"8track":"dist/cli.js"},"dist":{"shasum":"c23dc58964d9d60657ccfda9ebd4c4bb8bd347a7","tarball":"https://registry.npmjs.org/8track/-/8track-1.3.1.tgz","fileCount":76,"integrity":"sha512-A/2cO6gCUr/eaDEDtGbhYQarVu39JBqWmr9oXn4ZEtuhQM6eFXNBzHvwsodSzXNR/vCJx9TRF1eJLXIG1wjj9w==","signatures":[{"sig":"MEQCIH32xnd4lg2OTv2WZAp37TiHcFS6uC+4lCa5Gu99O8yFAiArsYiPgw3Bb5Agg/gid6wpLMUwhpvU2rZ6m4wMHUZnJQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":656588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0mdUCRA9TVsSAnZWagAAOiwP+wW/owEM37XIr4pQV7Vh\n3P1pols9pzGbOA1QQ//mboqheJXTwKGsPhBCrGK0iy+3akPmAyJPZHr6EWJV\nBVzdHrE0FchO5p+2VYdiJ78bG5n5i7oXy5DYihjdWDo6QRbQRZ+wCKEuQqp6\nYqTpfVN1rEUeTaCUntXV8l5NEc6nEd0mcDretveht/94EAeXXxcE4zEdqgbF\nuM5EGmz5bPIpRE2SaoEJ5DCPzUG9sFNcUrtKO3lt83cowGrw4DS8SujiXaHn\nGyGg1AWknZBPpe4gZyo76n2bzcpPhCVYnn0qVVLeZ8MdUoaxrdDGBIeZQyax\nwcq4KCGLfa6isushx2G988nRudsvYZUXirdZz+d3A9JbkpvXGROHFX2Cs3Tq\nn+WCzzmvtcxQEWyLIpxT9+2ZALnQECn1SooAPtzoZuoX7olKGsiqBX0Irgme\nVR+Gm+ZrPdqOUeq6yCSTqYi5tkKvuI5FivwwnQb5PdXH2f2GQTUnh5LXWye7\nhVMvHmZmmszDkSNF5+OvANkz8SOeGUHfnWgqCGJ99a/hHQXc5+cdhCCx9DpN\nqqwPiVo2Ca/jAFxTKAE6VPWtYDS+mIjaD4qeANZvGj/cicYppyBizfTLhljJ\n1heY47/3F0CYdLRmNm9LaW1yAzP5vGpelftaYisjl78/0zWxclRJG02RwMRo\neniY\r\n=Q2Vt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"ava dist/*_test.js","build":"tsc -d","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","node-fetch":"^2.6.1","typescript":"^4.3.3","@types/yargs":"^15.0.4","@types/node-fetch":"^2.5.10","service-worker-mock":"^2.0.5","@cloudflare/workers-types":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.3.1_1624401748180_0.45236658243468786","host":"s3://npm-registry-packages"}},"1.3.2":{"name":"8track","version":"1.3.2","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.3.2","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"homepage":"https://github.com/jrf0110/8track#readme","bugs":{"url":"https://github.com/jrf0110/8track/issues"},"bin":{"8track":"dist/cli.js"},"dist":{"shasum":"db4465ed33275747eddca2e101e62827993c8c06","tarball":"https://registry.npmjs.org/8track/-/8track-1.3.2.tgz","fileCount":74,"integrity":"sha512-rM8VAd8spZx59j6X2Tj1nH3XH5yjoRwADOoAz6E2mOZh+BJLFW5Q77CBLYYe4iCSUwZyaR9TPGF8gslcF2l3Xg==","signatures":[{"sig":"MEYCIQDlkjptArJ/g2k81lw+S0B9jnG7FNvVQvd/VRFTI+dOsQIhAKD1jkrNogEJH3SLx+aSqc8HHBbtQs0GiyTb2iXzV/mR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":143426},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/esm/index.js","gitHead":"9b39fb21bb241e608e274a36675aed1042947603","scripts":{"test":"ava dist/*_test.js","build":"tsc -d && tsc -d --module ESNext --outDir dist/esm","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"yarn build -w","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"git+https://github.com/jrf0110/8track.git"},"_npmVersion":"8.19.3","description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"_nodeVersion":"18.13.0","dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","node-fetch":"^2.6.1","typescript":"^4.3.3","@types/yargs":"^15.0.4","@types/node-fetch":"^2.5.10","service-worker-mock":"^2.0.5","@cloudflare/workers-types":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.3.2_1710799060171_0.7428782058403183","host":"s3://npm-registry-packages"}},"1.3.3-beta-1":{"name":"8track","version":"1.3.3-beta-1","author":{"name":"John Fawcett"},"license":"ISC","_id":"8track@1.3.3-beta-1","maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"bin":{"8track":"dist/cli.js"},"dist":{"shasum":"cf62bc76408b0e2ead350e1bde08ddc5c41ef8e8","tarball":"https://registry.npmjs.org/8track/-/8track-1.3.3-beta-1.tgz","fileCount":79,"integrity":"sha512-sQdJva43xIC+MonNlUh8jN0XRhULDkr0z/W9IzqzaYgu1YWhZr3QrT+ceX03BU3CNDYQ0oX1GjsRhuObfLN52g==","signatures":[{"sig":"MEQCICopk4uV595PCL8UWR+7DwWSRbPzqeoKzRwyfYhzDo5fAiB18+c3xcyz4aoznyXAKL4SjxsRXnyNW/w+UsvYHL0y6A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":147269},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/esm/index.js","scripts":{"test":"ava dist/*_test.js","build":"tsc -d && tsc -d --module ESNext --outDir dist/esm","typecheck":"tsc --noEmit","test:watch":"yarn test -w","build:watch":"tsc -w -d & tsc -w -d --module ESNext --outDir dist/esm","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build:executable":"chmod +x dist/cli.js"},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"repository":{"url":"https://github.com/jrf0110/8track"},"description":"A service worker router with async middleware and neato type-inference inspired by Koa","directories":{},"dependencies":{"yargs":"^15.3.1","form-data":"^2.5.0","storage-kv":"^0.0.9","path-to-regexp":"^3.0.0","isomorphic-fetch":"^2.2.1"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^1.4.1","node-fetch":"^2.6.1","typescript":"^4.3.3","@types/yargs":"^15.0.4","@types/node-fetch":"^2.5.10","service-worker-mock":"^2.0.5","@cloudflare/workers-types":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/8track_1.3.3-beta-1_1718831725202_0.9231666830344907","host":"s3://npm-registry-packages"}},"1.3.3":{"name":"8track","version":"1.3.3","description":"A service worker router with async middleware and neato type-inference inspired by Koa","repository":{"url":"https://github.com/jrf0110/8track"},"bin":{"8track":"dist/cli.js"},"main":"./dist/index.js","module":"./dist/esm/index.js","types":"./dist/index.d.ts","scripts":{"prepublishOnly":"yarn build && yarn build:shebang && yarn build:executable","build":"tsc -d && tsc -d --module ESNext --outDir dist/esm","build:watch":"tsc -w -d & tsc -w -d --module ESNext --outDir dist/esm","build:shebang":"printf '%s\n%s\n' \"#!/usr/bin/env node\n\" \"$(cat dist/cli.js)\" > dist/cli.js","build:executable":"chmod +x dist/cli.js","typecheck":"tsc --noEmit","test":"ava dist/*_test.js","test:watch":"yarn test -w"},"author":{"name":"John Fawcett"},"license":"ISC","devDependencies":{"@cloudflare/workers-types":"^2.2.2","@types/node-fetch":"^2.5.10","@types/yargs":"^15.0.4","ava":"^1.4.1","node-fetch":"^2.6.1","service-worker-mock":"^2.0.5","typescript":"^4.3.3"},"dependencies":{"form-data":"^2.5.0","isomorphic-fetch":"^2.2.1","path-to-regexp":"^3.0.0","storage-kv":"^0.0.9","yargs":"^15.3.1"},"_id":"8track@1.3.3","dist":{"shasum":"b40240716df8cba79db63d2b890a3ac55c7fd400","integrity":"sha512-RVqaIgyKVHif+6KC+9KSwWdNu6Z2QmTROKEpjVzd0M8hf9sUhkEwM9wWscR+AWqI4n9w9oHs8IPuhWynN3rcPA==","tarball":"https://registry.npmjs.org/8track/-/8track-1.3.3.tgz","fileCount":79,"unpackedSize":147262,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPxOX236h+M+LQRIET7u1bCi1lPzrsGeW0GtoSmZ7AigIhANtuD4QgIeNXbL4t2AmA2YSn3R5QQE0/jjknG76ODy8b"}]},"_npmUser":{"name":"johndotawesome","email":"jrf0110@gmail.com"},"directories":{},"maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/8track_1.3.3_1718832363928_0.21319042426627743"},"_hasShrinkwrap":false}},"time":{"created":"2019-05-22T18:58:34.867Z","modified":"2024-06-19T21:26:04.301Z","1.0.0":"2019-05-22T18:58:35.062Z","1.0.1":"2019-05-31T15:41:07.998Z","1.0.2":"2019-06-13T20:53:06.317Z","1.0.3":"2019-07-12T21:42:15.892Z","1.0.4":"2019-08-01T18:22:48.563Z","1.0.5":"2019-08-20T18:43:39.631Z","1.0.6":"2019-08-21T15:29:14.689Z","1.0.7":"2019-08-22T15:52:59.572Z","1.1.1":"2020-04-08T17:54:03.463Z","1.1.2":"2020-12-15T21:17:22.996Z","1.1.3":"2020-12-22T19:40:14.660Z","1.2.0":"2021-06-20T16:00:33.680Z","1.3.0":"2021-06-20T19:50:52.191Z","1.3.1":"2021-06-22T22:42:28.436Z","1.3.2":"2024-03-18T21:57:40.385Z","1.3.3-beta-1":"2024-06-19T21:15:25.385Z","1.3.3":"2024-06-19T21:26:04.117Z"},"maintainers":[{"name":"johndotawesome","email":"jrf0110@gmail.com"},{"name":"robertcepa","email":"robertcepa@icloud.com"},{"name":"rcepa","email":"rcepa@cloudflare.com"}],"author":{"name":"John Fawcett"},"repository":{"url":"https://github.com/jrf0110/8track"},"license":"ISC","readme":"# 8Track - A Service Worker Router\n\n<p align=\"center\"><img src=\"./doc/img/logo.svg\"></p>\n<p align=\"center\">Wanted: a better logo</p>\n\n> A service worker router with async middleware and neato type-inference inspired by Koa\n\n![./doc/img/screen-1.png](./doc/img/screen-1.png)\n\n#### Installation\n\n```\nnpm install -S 8track\n-- Or yarn\nyarn add 8track\n```\n\n##### TypeScript\n\nThis library is written in TypeScript, so typings are bundled.\n\n#### Basic usage\n\n```typescript\nimport { Router, handle } from '8track'\n\nconst router = new Router()\n\nrouter.all`(.*)`.use(async (ctx, next) => {\n  console.log(`Handling ${ctx.event.request.method} - ${ctx.url.pathname}`)\n  await next()\n  console.log(`${ctx.event.request.method} - ${ctx.url.pathname}`)\n})\n\nrouter.get`/`.handle((ctx) => ctx.html('Hello, world!'))\n\nrouter.all`(.*)`.handle((ctx) => ctx.end('Not found', { status: 404 }))\n\naddEventListener('fetch', (event) => handle({ event, router }))\n```\n\n## Examples\n\n#### Add CORS headers\n\n```typescript\nimport { Router } from '8track'\n\nconst router = new Router()\n\nrouter.all`(.*)`.use(async (ctx, next) => {\n  const allowedOrigins = ['https://www.myorigin.com']\n  const allowedHeaders = ['Content-type', 'X-My-Custom-Header']\n  const allowedMethods = ['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH']\n\n  ctx.response.headers.append('Vary', 'Origin')\n  ctx.response.headers.append('Access-Control-Allow-Origin', allowedOrigins.join(','))\n  ctx.response.headers.append('Access-Control-Allow-Headers', allowedHeaders.join(','))\n  ctx.response.headers.append('Access-Control-Allow-Methods', allowedMethods.join(','))\n  ctx.response.headers.append('Access-Control-Allow-Credentials', 'true')\n\n  if (ctx.req.method === 'OPTIONS') {\n    return ctx.end('', { status: 204 })\n  }\n\n  await next()\n})\n```\n\n#### Catch all errors and display error page\n\n![./doc/img/screen-3.png](./doc/img/screen-3.png)\n\n```typescript\nimport { Router, getErrorPageHTML } from '8track'\n\nconst router = new Router()\n\naddEventListener('fetch', (e) => {\n  const res = router.getResponseForEvent(e).catch(\n    (error) =>\n      new Response(getErrorPageHTML(e.request, error), {\n        status: 500,\n        headers: {\n          'Content-Type': 'text/html',\n        },\n      }),\n  )\n\n  e.respondWith(res as any)\n})\n```\n\n#### Attach new properties to each request\n\nEach Middleware and route handler receives a new copy of the ctx object, but a special object under the `data` property is mutable and should be used to share data between handlers\n\n```typescript\ninterface User {\n  id: string\n  name: string\n}\n\n// Pretend this is a function that looks up a user by ID\nasync function getUserById(id: string): Promise<User | undefined> {\n  return null as any\n}\n\n// The describes the shape of the shared data each middleware will use\ninterface RouteData {\n  user?: User\n}\n\n// This middleware attaches the user associated to the route to the request\nconst getUserMiddleware: Middleware<RouteData, { userId: string }> = async (ctx, next) => {\n  ctx.data.user = await getUserById(ctx.params.userId)\n  await next()\n}\n\nconst router = new Router<RouteData>()\n\n// For all user requests, attach the user\nrouter.all`/users/${'userId'}`.use(getUserMiddleware)\n\nrouter.get`/users/${'userId'}`.handle((ctx) => {\n  if (!ctx.data.user) return ctx.end('Not found', { status: 404 })\n  ctx.json(JSON.stringify(ctx.data.user))\n})\n```\n\n#### Sub-router mounting\n\n```typescript\nconst apiRouter = new Router()\nconst usersRouter = new Router()\nconst userBooksRouter = new Router()\n\nusersRouter.get`/`.handle((ctx) => ctx.end('users-list'))\nusersRouter.get`/${'id'}`.handle((ctx) => ctx.end(`user: ${ctx.params.id}`))\nuserBooksRouter.get`/`.handle((ctx) => ctx.end('books-list'))\nuserBooksRouter.get`/${'id'}`.handle((ctx) => ctx.end(`book: ${ctx.params.id}`))\n\nusersRouter.all`/${'id'}/books`.use(userBooksRouter)\napiRouter.all`/api/users`.use(usersRouter)\n```\n\n## API\n\n### Router<RouteData>\n\nInstantiate a new router\n\n```typescript\nconst router = new Router<{ logger: typeof console.log }>()\n```\n\n#### .getResponseForEvent(request: FetchEvent): Promise<Response> | undefined\n\nGiven an event, run the matching middleware chain and return the response returned by the chain.\n\n#### Router handlers and middleware\n\nThe primary way to interact with the router is to add routes via method tags:\n\n```typescript\nrouter.post`/api/users`.handle((ctx) => ctx.json({ id: 123 }))\n```\n\nIn the above example, the `post` tag returns a [RouteMatchResult](#routematchresult) object.\n\n##### Method Matchers\n\nEach of these methods returns a [RouteMatchResult](#routematchresult) object.\n\n- .all\\`pattern\\`\n- .get\\`pattern\\`\n- .post\\`pattern\\`\n- .put\\`pattern\\`\n- .patch\\`pattern\\`\n- .delete\\`pattern\\`\n- .head\\`pattern\\`\n- .options\\`pattern\\`\n\n### RouteMatchResult\n\nWhen you use a template tag on the router, you create a RouteMatchResult.\n\n```typescript\nrouter.patch`/api/users/${'id'}` // RouteMatchResult\n```\n\nThe RouteMatchResult object allows you to mount a route handler or a middleware that only runs when the pattern is matched.\n\n```typescript\nrouter.patch`/api/users/${'id'}`.use(async (ctx, next) => {\n  console.log('Before: User ID', ctx.params.id)\n  await next()\n  console.log('After: User ID', ctx.params.id)\n})\n```\n\n#### .handle((ctx: Context) => any)\n\nMount a route handler that should return an instance of Response\n\n#### .use((ctx: Context, next: () => Promise<void>) => any)\n\nMount a route middleware that can optionally terminate the chain early and handle the request.\n\n```typescript\nrouter.patch`/api/users/${'id'}`.use(async (ctx, next) => {\n  console.log('Before: User ID', ctx.params.id)\n\n  if (ctx.params.id === '123') {\n    return ctx.end(Response.redirect(302))\n  }\n\n  await next()\n\n  console.log('After: User ID', ctx.params.id)\n})\n```\n\n### Context\n\nEach route handler and middleware receives an instance of `Context`.\n\n#### Context Properties\n\n- `readonly event: FetchEvent`\n- `readonly params: Params`\n- `response: Response`\n- `data: Data`\n- `url: URL`\n\n#### Context Methods\n\n- `end(body: string | ReadableStream | Response | null, responseInit: ResponseInit = {})`\n- `html(body: string | ReadableStream, responseInit: ResponseInit = {})`\n- `json(body: any, responseInit: ResponseInit = {})`\n\n##### What's up with that weird syntax?\n\n8track uses a JavaScript feature called [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates) in order to extract parameter names from url patterns. TypeScript is able extract types from tagged template literals:\n\n```typescript\nconst bar = 123\nconst baz = new Date()\n\n// Extracted type here is a tuple [number, Date]\nfoo`testing: ${bar} - ${baz} cool`\n\n// But things get interesting when using literal types\n// Extracted type here is a tuple ['bar', 'baz']\nfoo`testing: ${'bar'} - ${'baz'} cool`\n```\n\nSince the template literal is able to extract a tuple whose types are the _literal values_ passed in, we can utilize generics to describe the shape of the route parameters:\n\n![./doc/img/screen-2.png](./doc/img/screen-2.png)\n\n## Built-in Middleware\n\n### KV Static\n\nServes files from Cloudflare KV.\n\n```typescript\nimport { Router, kvStatic } from '8track'\n\nconst router = new Router()\n\nrouter.all`(.*)`.use(kvStatic({ kv: myKvNamespaceVar, maxAge: 24 * 60 * 60 * 30 }))\n```\n\n## Deploying your worker\n\n8track comes with a CLI to upload your worker and sync your kv files. In order to use 8track's kv [static file middleware](#kv-static), you must upload your files using this CLI.\n\nAdd a deploy script to your package.json:\n\n```javascript\n{\n  \"scripts\": {\n    \"deploy\": \"8track deploy --worker dist/worker.js --kv-files dist/client.js,dist/client.css\"\n  }\n}\n```\n\n**Note**: This does not support globs yet!\n\nYou'll need the following environment variables set:\n\n```bash\n# Your Cloudflare API Token\nCF_KEY\n# Your Cloudflare account email\nCF_EMAIL\n# Your Cloudflare account ID\nCF_ID\n# The ID of the namespace\nKV_NAMESPACE_ID\n# The name of the KV namespace you want to use\nKV_NAMESPACE\n# The variable name your KV namespace is bound to\nKV_VAR_NAME\n```\n","readmeFilename":"README.md"}