{"_id":"@danielsharkov/svelte-router","_rev":"68-e9742d01baef6f567fdbf740028fddad","name":"@danielsharkov/svelte-router","dist-tags":{"latest":"4.0.0"},"versions":{"1.0.0":{"name":"@danielsharkov/svelte-router","main":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"version":"1.0.0","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.0.0","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"9c31c793ea0a9b492ac6a7144d5c550aaddc31ac","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.0.0","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-FJ6YHORLnj5PUIUUTsMmEpx+zrDz8/xyb1m0dguBVnYCQ5yHs9hv/fxWu0vOnJwhPKwqdFtKoKOj1XPE0tOYow==","shasum":"7a9a2a90e8b155e63955964e924fbfc88852698f","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.0.0.tgz","fileCount":7,"unpackedSize":22528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAT9PCRA9TVsSAnZWagAAHeAP/jVrL1RqjHqdX3VYeC1i\nV2MQjRWXPKoJWg7jOhyN8zVuwISiIng4nfLjasAVUOFDIfVlPFuJXAoMFXaP\nsa/ivTX1/2fzYrCRXOTm1uR4W/xLgUO72GAnQMfR7p3dVX8TNDGisC44qbTz\n0iUWEM99kGXEzZFM+9xK+9kOineR6BEyjbmaZhLUaQvpZuZvSADfeTV/5qbW\nVH+c1UDRjyRQ4UPDdoHEYtbcJO6Gi2h1noI1aZNlUtmd5eboCP1Gh7jeJnT7\n4VY27JsjsB8JzlNVBWY5xtQ8KHXkODiByX82sKqimvqvl5j+kgljW5MIiV5F\nr6TN538K1dgxmA0FW9ykl7BuWJjrfw/b5qSvimqYdk3RUzIMpMjWgcZVaJ7D\njt6RPLcN60sCLqYT5j9NmfOQlNuEnc4U+MRUyQ2MmQr3KG4QMIV3RTazoTVH\n4LULsru6DGtu6YWTIuZEKZfKCDhylsgKyrhHu2Q8x6HupLt91k+3M6r8q04y\nOrjp3U2OsTYo++vgPoN0erODOXaWZ+jM/HYSkGMWxl0eE0be+wHeI6FdyZcY\nt/UJXn5zmuf4Wt58BP/ryXRgQR42LMJMKl/R/vRo51PSnFFKDxCMVdUELOI1\nEYXtSR1hNHRHOBpwo3oLd92/LMRKxfkO9/w8XyE4bVnNbo4RW6VDfyfbmTCg\nU8YX\r\n=XaB3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA/d3Q63cAcQqKmhEX7tTgDt8EotXz4dDBVAphk5294gIgKTvWL4VscWQ3Q/SgUolboA3IAHIhydS2ITC7nrC842k="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.0.0_1560362830402_0.4591889402604632"},"_hasShrinkwrap":false},"1.0.2":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.0.2","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","peerDependencies":{"svelte":"^3.0.0"},"devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.0.0","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"5f5681b6401ddd2b05e3936616a619f569ba9066","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.0.2","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-WA7h8nhq2R4CcKobJ9EY+8LQDXRHeo8UBL26Z/JzT5EgZ5ofnBjXnEBUcszFUSoVCiUXx70rlLYUqKyIq8z6Ew==","shasum":"2500aeaff286c96617f9289112dec1d31e4fe661","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.0.2.tgz","fileCount":6,"unpackedSize":22553,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAjc+CRA9TVsSAnZWagAAnHsP/09yPQ3TrlVMSIduCUSG\nR0cjbNfo+KOvXfeVXJ2CjkyfUpcQxveml5PHpBA0LgLgEKr+YRayNH1x+0y1\nolry/pC89ulgYlbmzjXdU4SSgrMZYmErmC9X6QjmJqtdlurnbbUvflBL6h9N\n/5z0Lp4L229QIwg2H6sVq09410yFUeGuV4amK1OZc9I9stc2ytoys95ZtBZl\njLFTPb+Q+dICH9QJDCzutDGqBAvK3bI07hqAZc9ADwBGWLt8c7tOK6p8g9sN\ndoDsqg0X42q/QwK9v8dDZkl0N6agA/sTb8c2xiKGr/rGnPRHYvSUIZ6eZm2Y\nuXmermTm8N1I6vSw2xhdvc7NvT/x2d37ozI5MMa8ZyzU2hzYUjdisNUL89Ec\nT103DXJv1NI9ntwH/NiZgSP1lERZGUbiyc0iclPBL8NLsg5hH7ssjkNmdAL+\nle+Hh/AiYR3KKm/WXYHi17xSfsqwjl0zL9wHvb4TxFLiwMlywK4OHkm4Xytg\nevS6h8j6hz/+lud/fPMRYntNEHwOR9b1CY1CgXnbfvelbBXgOJ/glJwQeG9o\nfNpOFrTX4EUjx4GvpRD3FJBSDYAhYLDMGH41YsUhHEOInUG8KimqQ6RRqy0Z\nXv/D/OY2cJ5ndKe+yBgw9kqLdd11xpqhDKmwrHGHNKCOBhaCJhMpxpxUAqmi\nx5Yp\r\n=x7Th\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID9z3Mt0W6SwO3EIzCt0+hDXEThsN2mS0TTFcSO/1MOZAiBvB3RSooDKhWdIhaHFQCRb0HpglNHwKt9Ec1rfUHu4CQ=="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.0.2_1560426301189_0.4036457601336221"},"_hasShrinkwrap":false},"1.0.3":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.0.3","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"54aa504a15cb0bcabe8fdb16b493a85c04dd8284","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.0.3","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-3HXA0ZJO29RWlevPoLEc/JJo0uNUZkqdx8pR85ePc/67Jo/eIGe+Q2evQia05grlWURvT2nueaErymfYCE113g==","shasum":"59f0e29fea46614508d548206730f4506abaa755","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.0.3.tgz","fileCount":6,"unpackedSize":22576,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC/LmCRA9TVsSAnZWagAA/X8P+gPLtJIKk5DfZoQoWnxo\nb44UDGVzEKQzFATkDCXPGUFUy/bz5y7MWkLa5EWxmEmDb0w7y374sxP08jGE\nXjqMoB7xJQX3LORObSIzh3C1JxkDtXET3UtmCoa/Qs92Y0uHw3e3qMOjxJI5\nEJCCqZfLThmQJ6VEAiGazE1Y7qF3vmf0FcNwPFPBENKOdixMgdE9/kb7r6SN\nwZg1QuA77pCY2qwOVrknXFE+9CAjV7TagpzG52wKaHfuuHYVnWMlCRcGG0IB\nxbetavGSSBET8WfjcCVjWY9L6f7XKztAntL2/bRIolWkywWQiItv/NjjF7Hi\nismNGR/xg5ckDVJ0VuDhd17Mo1LmvOIT/7ZaQuRV97ffyonE2fHOcet9qGKr\n4b3mLuDp3SlKX3sZUG3AVFc27nToxGmmuz85CImmdgkeT8Wq2MVy2U30H9ra\nMp2L5KOMpQ7+NnDbe26SOZWnTN4TwzSOFKkQ570DNjgdjZvr+gFsvSEbnP+R\nDI4lzbZfe9cY0zcbrLQRcroCtz8g93XFLE5iwaMi4U+YbOaQWe4hhenXpfBZ\nH7zSmJ+xgtjmOo9/12M0jM+U6IUviMGXJzdWrvwjZiVPYxekoWCtm5hk/axZ\nWT20XUikXu44yEdpOq0ZB/aIKXbGtX7KsUb8wkd0k4GrFHR4GZoNnMZO3G55\nwOtc\r\n=PY8A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHWMo3HplqCxaCnq5/x9kGkMNtl/9WsMH32R631UBSc1AiEAy2EDhu0aJonbW06HcP1/SgPLb+ooyzJkZ8zroXCjaC0="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.0.3_1561064165454_0.8897944340813033"},"_hasShrinkwrap":false},"1.1.0":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.1.0","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"f30a7839be15bb907f7d7dc00badeb672d8bca28","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.1.0","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-m1Wfkr9zrdz/EcrjYoqn9zhsBEZ3I/mE5X2dU/X/f/dnKabTzychzHNMXl4YPTpHvp2VOnrq8TR9MJ7r+42QWw==","shasum":"b54e49e73f7e57d4fa239fba2d9349c1b7e4e3db","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.1.0.tgz","fileCount":6,"unpackedSize":22702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdD5xjCRA9TVsSAnZWagAAtfAP/02wpOy3V0jydu0Qgl+2\nOx5iUBLTA5KssA9cZqWwM8ISsSJP+EMrUH5prvNcdhklP9HCVYYaRFxOdLcm\ntWepVK4DcKJUNQKtZdEGzrJeXDSkHezy9us+IWA+XQKEcBHkR8DhbcXv9vVD\nV7bptKkC0IMGUFE0MW5IseywI39VIkbR35uaGBsUm/9oVgNYA+A4Amd9520M\nAyQrpLv7lZvQY9Qc3TLA+TcDqkekTB+xJfLy3m7SWsh8TiQEYiYgsXveKZVY\nbfj8rrAQG1VkT1ihslZUjjnjdnJaL4DIpX65L5bgOYd2pNW9SaXClXgRshWh\n2tFTBuzr6U5S1egh2UQQ1wnS+YxJ4VwvuzO+itkVUOO2f8JE9PRuOrhfU65x\n61+P7eZ0DCceiTSV+D6fhsTTBIfpEciFUwiVm4FPvFBIYW/Rkmf/4GCsgY1y\nibQJ+NWsw8Q0viU1jExEL0/Ga49carJxwDg+4fBe1ND8rZMbLhRphwQLDzRM\nya6edIBoX7UB6GkJLDUDB+EtLBP89IAspoX8hvx4m8tAukYAXryrKK9HMlns\nhd4/D5dY9idcA9a+49zpGw967HgU/q8zQsZbPYIE6NNMlPy9grEU1kkJFsG4\nzfc4ahrLPPQv2EQXvXV2NKcsscy8WnXOs6sVJYUiR5d822NddimOIpL6SBvQ\nxYou\r\n=37Ec\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+aeUAL4pDR8ipubsTHfLDACP2umgUIQaatyv1Yg8jSAIhALAJhoewHGiw3LFNqz0Dm8mF2HuXQTuwnn6CNP3baw+v"}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.1.0_1561304162847_0.7621485556232279"},"_hasShrinkwrap":false},"1.1.1":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.1.1","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"ac5daac5a859097c0352f395f32b90fc4a396642","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.1.1","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-BHzPle6e+hicaVlk5PWy5tAeURwv3bCzZjRBti8TDZg6BXYcibzh+KZz7kun+0LSP3OgsXPu/vtzeXSorj7TrA==","shasum":"78626d629acc407c6f6f1127d802e78889d97bef","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.1.1.tgz","fileCount":6,"unpackedSize":23000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdIRpcCRA9TVsSAnZWagAA0bQP/3TkVlXGdJK8mifIlB7S\nYp+Oe7H9ufW2HkYffzl8FWVMhIYe5GHxJM+rOmEtRLZYAb/qUhJ/ZUr7udex\nORBST6XFrXUoMvmjmSYmq1wVRqdnBA9mggjtCSIDHcrXOuukfPi94fjGc4le\nj7aTTGGNprEkbxKRGOq34nUES+kYjZPvVPP2LENy1LkuqD8LsOMZD1lFFHZa\nbeCyED/1krZ93YLH3qvH5/hT9vMRRXCQpbe2fF3fbu4b29a+p4Di87/fxiVm\n35U9iVktDuPCJfR311UeiRYUpNaVang3DwotuJybNrnKzvIkdPli3opDJxqU\nPdpaELj8rlDa9g+v8cCy3vve+fwIL/MB9bH6D4AXiu3+je2EyRTVscBvL7r7\nULZI3VOkpTpM+O8ONEOy5pway5MavtLEbTRNWUpd0LYY3r6zRZdDkduuycWY\nEVvgNu5ptgCZssvLGFJthDm6CrgVv1y3Oj9RbPRddYpRF9VcYO9bT/j0C/6Z\nqyawIDrg4nzm4Wgetl1UKk5+6HZ1LLKgk82lwF3N3s7U3GmM55KI4ex1MDTP\nB53Cqg6JPnBKeuTcoVv5ka+xE8X8Oc98jjAQirOET8herjr2IdCAcexNOrrn\nVMl743R/LHcKgPkK1vN+v6EW0GyD+6BkcCkUBnbXHhAuyIkFmNH8dD9o+Nhd\nMa9z\r\n=Wl2/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCp39xUEucwGmrT44rnvyzyhgFs8nzKB4qOmpnb7k4lcwIgSdjIVkDDXhtAp9cUtrWEa74F5F6etr/g3hNQLK3kmc8="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.1.1_1562450523311_0.6485231544668357"},"_hasShrinkwrap":false},"1.2.0":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.2.0","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"08ff8ed3a7833da463acf4f5ae5aa685b0a13dd8","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.2.0","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-9bhQMZKTHS80+al201TZelfXvrtozRTutWb8EVrRDge/FRgsCQzMFykVUR22Yadn6dikgK1fBCRsRd/UVvYtSA==","shasum":"ca70be30b931ac5d35652b10149842adafff81db","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.2.0.tgz","fileCount":6,"unpackedSize":23766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdIRvuCRA9TVsSAnZWagAA8GsP/1buGxM2wBo4w+VqitqJ\nNoNr/IFa6SLxiktktZvJz6k5ISZRQPEC0vRa/cs0XK4uYYNsvT0a6B9hSC62\n2X6fm49O/V0hIavCF+I+E2vVd7yx9HlSMzA/0+MxjmQGnBL6oGIONnvjq7yB\n3xxpjZBzFyFjEdKxTp9ykKXsyOGeUnvHjACh907wkoP/2tlTRuu7Q0JBDLN3\nDYQfXcStHCuFyawzpFSUhref/mMkCWQM984LZX1UV7o85vjxsKMerPVAP5Zl\nWaMqfzLlJ8sDOqBs6JJvoD2g7ErserFJhvuYfvSV3MGZz0MbWak+JwG+ZFX/\nqvbL1Ye4maZI7uIfmzt8xrrnx1FzgKhy4VtQP+OzUgfTdF7pRhm8yQ8igC35\ng6l7T7m7EvJXRGo0me6O48MQv6crz770Qx0OnoOHAvISEEbxMvhr00liMXF5\nLNYkxMPHz1sHHXtBnndV8Rf3nc1lc+zlL4oodjBd2h2ukO2sgEfhe1gxqqvJ\nt1PUXjadlXdrl6cw8jiK8FSblY3lFQsDcpxWSjyk9fkMfYnmSLsYeu7moFV4\nf212qv4G1fM8vU8LJ0QaaQriQoFvJEMhKUp/xGo3RfqiaW93QgXgHRfyleEq\nTwIw5Ov2ma/Cfw8SIZQ74RJbZDcsAKU7Kghh7VPTaMRkGwUf9bwhbiE3NbPp\njlrH\r\n=0DGc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXU4NCHTOJ1570uklWWTdAtoQaTb4/sW26hjK87qKBwAiEAzTc5zZqzg8Ha+Qor4mSvW0sRhi/0GvPP00NV5aXFhlM="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.2.0_1562450925644_0.8891130126962021"},"_hasShrinkwrap":false},"1.2.1":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.2.1","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"086c21457f0cb0b4a0c7f85e2d7e7562048a3dda","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.2.1","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5JZXH+AbDVY0EG5ZVoydRqwt+FXziKcjuodZmVIYbXERdfoQAG+KGArv55JvjCBC/U47yF+OnbgdoE+z1SrBXg==","shasum":"b32d34d3ff9e29fa0f5ca2e7776553df31d2d0ee","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.2.1.tgz","fileCount":6,"unpackedSize":23813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdITQjCRA9TVsSAnZWagAA7kwQAIzxsNLfoQ8iE/BZJQC2\na2j11T9XE8IvQFm8e0WOu5poAQGTpnJgV9NqCIOQgDNWt5lp4/phbe01HCyD\nYFYV9WE8ggzdtNMV3OUD0y0Hcf84Y4ppGPPkqbj0aqBe5PuN+tUJxo8oTGDQ\nhVtBlfJROaq2O6rsmOxmQF0lpbgZtyW8qQd8Z7BVj1J8RBWW3EceGwavoS/N\nhlHkAWeepenKJaPaqqwBit+8DiJv4AYE/TBkObOgszLTUfvX4EOgKsVd6qjw\n5x7bRkEh/fur9XZnOIZtg6mz4ODvr1uFEhKKlPSio/AyWgwRHrfZp9u7u9lx\nU7pk9j2wXWWD4X6poRhl0jbKVcA77lCtY2nd1wcafeuXrGaoJGmZJP41Au1M\nigMP+5Ci2P3ZkQWn8Bao2HpU2EGcZH64qbgSYKe15FhkW98ySNNPGOd0ZlHt\nuVuAP77wx3qmAyt2ETTCxrsZ2zSzlGPwvq+WFvO7xj318Jv+NC3kn3Tht5bs\nGUn+qfIjlc8JvAObJantRcN3OuWLe73g4JXORlVs08tXGROOLVHFhMZfulMK\nMKp2oFmY3Q+V0K23MdhOyTdw6Rhz3Tp+CQAwKOBh1CzRCY8TMis52hzvOFTu\n6X/oM1EQ2EPuEh3rfVMRZc5ccldzLQov9QMG3M1gdGIIddGth0wSyT9N29GY\ngzCL\r\n=2oXK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLQ/Od1IoEyBCMn2ejzzBehs9o81QAKdibQJ+ECXmpPgIgTkxaD0m7jaU7trwrkhwjeFDNMuGrayll27LC7FU8l3w="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.2.1_1562457122938_0.766911292461524"},"_hasShrinkwrap":false},"1.3.1":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.3.1","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"c624216e2d00fa17bf713f65dca9ea801f0f1a08","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.3.1","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5oZtj7Sm+LFg+xbl9saQbZQV8HZT9DLRQDFpStOD7AYvX5B66fmvMod0Gg61rpxVeZeiDUOIsLCT4bybyEQK4w==","shasum":"be76ecbf80506c1bdbca4560ad553bdbaa1a77b2","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.3.1.tgz","fileCount":6,"unpackedSize":26439,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNEn4CRA9TVsSAnZWagAA/akP/1Ou1LOCsVoWryX/1LS7\nHUFuxD4VuyWA6gH3mMZRO26QZT0ixxToY5w0D9W5pHr4HJZZnmEKTuhpUNGS\n74UAmmNtJhzQVpiztU3Cjnqeoyr+8Gx8THXRv3Dh27AljvJ7Pqm3p7LjWhyQ\no0QLprcA7uKAm3BQMAJmYajfx2dFj1wyt0Z582GAqFqS1vDOQ7BH8eux9SCP\nxDS2xtWhT4MYMm+b/u7tQQmlqXPDHiwRY2zTDOkDoQM8DfL8bSShjsSb1ie7\nFwh0a2zbKePjCtY3y58nfXxUNRh862S5RgEs1ezw4jExqB8PcAXzErDcj8o5\nYR+iKT1gy4etFJN7YnFFOu40rrK/Vkd9wM80vu2zh7ooCtUtDbro2FohOHom\nQAgEFztUuME6ZUMh8Y+0VmSaBkrbJvR9a3N158jUPKf32YWTgEv/0A0Uq7zg\nON0a9M+Hfz4tvviR1y6ocltbudUn9HZnP1BV0qRdyQCFV+VnoNxQtHzRyW/S\nB/qbbPhyPQVy6vBzYD49WMAqiBCkCdsVVhfpxoemrpLH09E18x1wx7DYf79a\ngnkAvBHzBtr1IqrUUwjcLoRmltkDjzNEnLWGv2ggvGnX+L8o8vRlMShAJDuZ\nw8f5royb54SEMfMw9g2LsJmbo3z796jUZwRwMQlfmEZVBBaLfokFQQHZf3Yr\n/Fxg\r\n=WfgN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3zerdZIQyoRfT1+zEb6hVOCtkdXnLBPQFGmg9aHjIeAiAY6E0RWO19tYkYXGdj8FAKTfLuqcTP/dZ5/vO46Rplig=="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.3.1_1563707895942_0.3904281902848521"},"_hasShrinkwrap":false},"1.3.2":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.3.2","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"3f1632c99b8929a86708d4cb1f505526c649cb33","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.3.2","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-6sd5Ogza8maI3JOIcYv8ssAOFRzyarUTWAtLuiIav/mUS9LxbsWmEsHh6dRzgiVPqrbOI4REFxlfAolbXPxo6Q==","shasum":"d903c1fd107864513d7c4058303670e9fe74a782","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.3.2.tgz","fileCount":6,"unpackedSize":26446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdPc2uCRA9TVsSAnZWagAACu4P+QBVJ5FFz0g7DKsBLMQy\nxUtRYFIxzndEgRTYc7Kddckh1KDGbe6mZv1Xd2Cb6wEPgy1lhk3FYUT05Ezm\ngTRgWIdpQg3F/kcECWhM4tusTPsesB6Gi3xzwuN2qCt+W/34q3aGrPQgIKio\nXzs4PRXljj2eP8i4cX6SyDPJmWegb8kaGmdjYIXQ5R5nuFZez/WzRtKvXFFM\nB6No+9QrYWwzAiSJ+JxWDm7QQ+gMXnSmocy19v2saJdx3bF82HKSupsofTOQ\nwKP64pl8CAvUKFzvFaXkSUwbjgwkgcs2Dtk0kz5TOj7mriQ3Y4/Vjoms4SQP\nulAoUU5zjrOrF+EgEU/D6SlmqoSM2AowAPtOn0idHgZLrPbOoV3QimQ/wInn\nmWcD4g5PwGZpeghSYA8/7mfNiP0aDrQbFi+lEIOdT5sySGrT3r+oBhejpdqa\niquMHoy6cgYNmYdqCFxGkl5pLPjrhtfPoc64ApcqSswOQ4RMQp8reZt88BWl\nJoqerVMb850zwT2h5VKCh+U976JTvmFuljSuADZRCrIiNABco5dweZYubzps\nYVenEqiRBXCiL6oahkRfiCRAatd1+xCXFfK2r02PWAIM2vvqMc/VdFvWsypI\nNu06vNMhwQxVUsC/mOWiT3TdrtH37qzwnt8jfHlOUWHk2SNSE1qWPPueIrLZ\nJN3h\r\n=Ny8P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGqaewGe3J9xENueZAqkJxNUQTO9GXNadDKQ6fCHkUeyAiEAtMsu4LtTlBGEMKflzfevig04V2dwdMedZg+qdY6hicE="}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.3.2_1564331437304_0.6212224014900825"},"_hasShrinkwrap":false},"1.3.3":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.3.3","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"e1f980eb3fb1c8daef636781d8dfa253ec97a294","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.3.3","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-4saBe2t12l5wwVA831JKVafePOL2LybC9/2nLIK3dU6S8HEa3FmaykgEqiJ9q86K5h9gnv7aWMiUAZTlhijnKg==","shasum":"0219f5001128e5d8790e3fc38a255e943594b744","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.3.3.tgz","fileCount":7,"unpackedSize":26903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbDf8CRA9TVsSAnZWagAAELEP/iyax1IIb99nb35dAt4g\nHcTQSZQdxBhLNwJfMHNs3ROv1tLHhpuiJxQzPze1wuKQG9Ar76TIwIe1Eopf\nZBAz/3Jgyw78UQmC+I3bnGutaG0zZKBn059jcuWJEz+IyM2wZw8uocT0sjpi\nESuGdmg1GQ7VEBcIrGU3z7iBy/yA5VxIZoeX97K6E72HcWIM1IWRY751VxP5\n4/+gpFBdGM2DwgBQsWPK5bBpxQdZMwj9h2W3TErwI0V6k+PWRZGOLDYKRJaG\naQka7eAliesPLkt+e3enggsBXcElTn3Kpr/nPIJ/9gZX7qYcPuwHftEhhWsi\nNRudjlkyXWPFJy04N4EeBAIwrECum8q2C68XotXbNENL7CwP4oThxVefU8xh\nJtrTUMKmMff9wATICmRPf3xqs3uLkcl1qfqWu7HMbFwI+xlryzByFPbuGcSp\n9qTL12TGvHa6dH9SQ9Wf+3a9r5f4GdUX4QdnLpqPmkgUSK1LoUX/3wSe9c8E\n3AukdA9Lv02R6wSBzUJUtGZ8b+JyPgRZcYHvF+L6ikcUoXrPjVJXLGDLT2ft\nHELhPpsB3+FwuSGi0VD8gxKYK9QtjGCp6PtbquKOXvxrg0lc/nT6loe2O5fF\nTGhEeUtZqKb29xZrsZ6zgxlsdbZRXhujKLCfQUQCs4VFueV3XYzkE5Qi9lY2\nUWO+\r\n=DaLY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpTx/ib2ZN6BrVfeWalzqRNxZIJNfi7zs46cRSq/M2qwIhAP8EEA/Gu6CkiqhN56kOrWK8c4vnYNB7axlUQNGsxJ3s"}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.3.3_1567373307992_0.37128289573120354"},"_hasShrinkwrap":false},"1.3.4":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.3.4","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"5fcd11bed40c09972729e40857afae6084a6cc82","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.3.4","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ZtU83rKXm3BWCvHT1HPIBPB59BrRvdKOZwS6kmokdeMOj8Dx3G920p33Ai/2y/Tb7duPwmJQJeuVj2ifzcTTmw==","shasum":"fe349b9cd0dcdcc06b7d8885083e32774173d660","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.3.4.tgz","fileCount":6,"unpackedSize":26684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdesS+CRA9TVsSAnZWagAAUe8P+gLz2XdLMnB36IUkTOsx\nTCvT9gvtDeD8R6rbkqBA8jNM12PkNJAzsqqQ/7a08ikJDxtQCCwtXhL0wmbU\nJXa1yIdrqyF0yEOdinBl7BWxyBzUNNB4yd8i0vjRoRf5I/cY+bG6hKcptCQq\nyLzWpICIL1VSWW5M8h1IcFsnw0sp8vl91ZoDSYqgeOG8W4344flY/cXgIFzw\ndDgZKzuBS7UFCHte9nBOFIhZihuAuX2xhTavxhifQDR3/wS2zz1VLSoncUm8\ngkOOfsaxHr9IymAw+vDnzBizWj/Hu6RayUjWEL5BgtA/waSZxzGEWjLlIbEg\nbOas0mo36D4VTqDnM/DvvtL5/Hkjcb5Tguw2rJ5ec9eHZSEdD7eZgsuW8tRe\n7xBvdfOhCJdsIPYnox4vcMJogtlt9eWBddk92zngXioSIh4IBUoZoZZqmpMk\nchGAL+n3V1FQNY6sqepu5mkTFQtAknmPbFvuClm6QSIyZQ/igNq1P1oHEiM+\nZ6Nf7S1W5HbVUYl8e9RtJJliQbrAiPkrP2ALg1tRYvTjWJv2hSKld2DxoSUd\nWNLC/6F69/a73G3jGh1tKHnfeWZ7p2NiNCH3B9F3JgKXoxmCXdr2ceJDyXy4\nphZWrQT41JwozGqDvYlvu0imxA4pANBtTPrNJc1WjaXxgi50wa9tWXRq8evA\ntwLI\r\n=N+gk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD70PyYy+po8V2OT17g3jhnq2bAdx1U/6fUTVsweVpKKQIhAPqB1GrXjUOAK4mQJ12kVUu1UZI5+cchiTEIekDEtv/D"}]},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.3.4_1568326845976_0.3175590468089462"},"_hasShrinkwrap":false},"1.4.4":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.4.4","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"335e05482db739bd8e0df78f5ed9dfe55be48455","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.4.4","_nodeVersion":"14.15.3","_npmVersion":"6.14.9","dist":{"integrity":"sha512-mMAgzen58r98MAEKVIUpWuDxAnrZCdODQBYAlXXzet01XckZ413145SEbPpEbEmMpg9nZaEzDzUjZuSsD5LlrQ==","shasum":"5bffd4a8db5393497c3763350e8e2ac7e58fe97a","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.4.4.tgz","fileCount":7,"unpackedSize":30058,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDK/2CRA9TVsSAnZWagAAhuAQAI0mxRSj7yHQHsCHBnQJ\nL0XGEiI+c02A9WB2An8vuUAkotJOsQPMcacqZwWK4mxT526HuFAvMSNmlJIy\n6CuDpepWL1Q1JF/M0BRmlhL00TweA2p5s4NqTWmfxsr3TO20Tf7wm5e9ur9V\nmRACYZJq4IvWE7NqKurmkGp4D2ZJJM8op/q2XzCedttHq2/1iT2Bn9uvYUn7\n1rdIVaD/IuOatakfdiW6CyxKYhIilb5XqHIaXUjDY88jzWh24fV1Lrw9+Vlw\nz5Dy5PScyx5LAQbBwR33nKkGuAkwvljKQOwjF/EKxfA3mpuGEET8SzP6epqZ\nnPkr1fVBim7u+XTc0OB+oGg7MtVpA1Ngi2fjU46ElbhFCH5Vt8zD/sEYZmcH\nDCqAE+ZkJIx6rVcv7K2i2oaKyMiyopyG5Zg30rkmlBbcthm5t1p1jcVPvepQ\nn4C8/nmG73/mQmH2zUXFq/0k3R3h62M+2oCFsX09OsGYaInV/+/zy05YYOan\nu6bPDgQqIOrLK9pptIaXrJt148Wpm+e8x3wONtsvIhdwuhEm0igFZ4eCTAdu\n82IwSjczZoQQYWhwBjEUBo3Ooa9Ek0PCW4o7CZDrxKaOLFQVI+OSSItJYbgD\nYt0d6nWOGUi7oM9LDiqoXMIcmNJuudTlL43AkTeNUcjE8aD+RMqyYPEbF0nm\nHRpS\r\n=PAuf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC881nuSe41jzan59PmO5ABwIzzIHd1gYp1C6gNp0ZxCAIgfH4DUV+G10/jnI4yKD6skis5cejou1t8XgVN+MhzVD0="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.4.4_1611444214245_0.5101389737405637"},"_hasShrinkwrap":false},"1.4.5":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.4.5","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"f04cb9e3714a4a0d0244f7e18e03caaaa814c0e4","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.4.5","_nodeVersion":"14.15.3","_npmVersion":"6.14.9","dist":{"integrity":"sha512-/7UNe0YsGf/F024lyy1UBGynEGA0x+sGFunYpanIH5/Bvu1glqZ3plPaKZWSoQNrufUjSD3PFNwxDZJ4fUimdA==","shasum":"83c7f1531145bbf37dfaad0ed75102756a7d4117","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.4.5.tgz","fileCount":7,"unpackedSize":30119,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDXBsCRA9TVsSAnZWagAAhAEP/juU0ES4iHGviLphseu7\nJRNmwbrDLgmSjJMnkZKed49SCQsFZnfavbflTlqwjFFgc/S+UhAYcztSbjcS\nyKn2LT0amDxHAYl/4f9FkahbWN7IxZPAByb0a7tweJ7eqEWG1OHPBW8RrybY\nfrK6zwXmJGCBHsLuV0EdfHMyGHvXhBBKiZqS/vsbCBcYmmkfzK69l48wn4Je\na/htdDowk5mXC2TFPmMjQzqzzbWF5XS5IJ87YjEia6LWrCDmzjtjyjSPmuLS\nYSdJuzxCchbicaiuB/BdEK9kj8mb0JxTfH7yLCqx44xLGgvc6qAMEf4XjZHt\nj/ShrsvVC39G0swiyCAzHWUgg+I2Qazaf6I36qZmp4c63JQGZ5lHOireKN+2\nVZf12UP9anvEpwDFxaaAkVW+2vCBIWBDPddC5NULw6+l0jodjaWBXnsBMUQ5\nm03AqE9rR1rUrVB6lAUlEtISJ9BJi61lkHtqnrNLcv3igkvwqK3x82pPV7x9\nSV2dc1jskOmEBlGmE9BdSqUtoU0j0AVusLggqZf4p5BRMzIpOcjAGpv2p+LH\ncg4EHieoia+A5mKBk4cWgloDUMYgorGzp0KfEqOBijVgCiovpZ5QG756wn/J\nCO7GN/hAuCm0HGo/rhecEoRRG79brhlgd//Omr9Pjqr/SjTwwPKLatrkhHy5\nbzOB\r\n=kALm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHnNXb4QhfmamYc773S9A+T+HGcc2KzXfsPYQTvV1Fb4AiBsln/UEig4zFkHdhef0nHLKp8wjodXrHv465WbEjHEcQ=="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.4.5_1611493484322_0.6532805864668709"},"_hasShrinkwrap":false},"1.5.5":{"name":"@danielsharkov/svelte-router","main":"src/index.js","svelte":"src/index.js","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.sharkov@qbeon.com"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"http://danielsharkov.com"}],"publishConfig":{"access":"public"},"version":"1.5.5","description":"A simple and easy to use svelte router.","keywords":["svelte","router"],"license":"MIT","devDependencies":{"cross-env":"^5.2.0","css-loader":"^2.1.1","mini-css-extract-plugin":"^0.6.0","serve":"^11.0.0","style-loader":"^0.23.1","svelte":"^3.5.3","svelte-loader":"2.13.3","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"scripts":{"build":"cross-env NODE_ENV=production webpack","dev":"webpack-dev-server --content-base public --color"},"dependencies":{},"gitHead":"1e99609dde42d88eafca9fbfa2c25a020eeba476","bugs":{"url":"https://github.com/danielsharkov/svelte-router/issues"},"homepage":"https://github.com/danielsharkov/svelte-router#readme","_id":"@danielsharkov/svelte-router@1.5.5","_nodeVersion":"14.15.3","_npmVersion":"6.14.9","dist":{"integrity":"sha512-dfVNp8bndWAj6zjPbs7x4c771NRz9ZvsxbfRZvyqeNESuVniBHELzHnsCSfn/KqnXFNw//y5WrjS18eVPCo81Q==","shasum":"f96179dbdbeb64b4649fd84f82c9d5042ca878a9","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-1.5.5.tgz","fileCount":7,"unpackedSize":30131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNhtHCRA9TVsSAnZWagAAnhIQAImkN98f0Q3q3Q35ExP+\nVAV9oQDPzUx8bZNDQxIYpiB1cTR6PNiB+/fo8Qxg3ieDOGsMTXcaSlxy9RH3\n8hrYM0oxBWvOMHoswOt1cBX/mwKNb8SVEONqL1Odje1G4Mz/htHnmb69Xr+R\ncU9ueVgx/1Uc0oOSU1byalJWou/+eQcgKdcUpITDLKBDJZ7Gm2+bh4qfe1aX\neRK4PotyLzXzyt7/FjTi7M0HGlagoKEb4jX1KtTBjdHHdnoVaF3KeCiFGhxX\nu0G0aFojQpp0gnbFCh+hUpsOi4Tt8addDxmyu3aKljC1+M/Ht0B/qXbnwTdK\nne3PYUdcEGluRXD94lKu/LZgAEmzaf3UR1PNyPaLhRIw8rmrHJxEX4+DwXK/\nSOGbjKNBnQ6+piAwOp7Tq0qN2LSgwLfBuhv2AbL4sTkBg7OPcOjorcvzM5k6\nCQKZ+036zI+FwZuHFBbAAnQf0Qu6ihJx+mKQqBym8Bhuz+TuFh34s320mMvj\nqp65oujAz3ylqTGJ0XTW0qjdET1ByGkAw4ksFKgpSrCFwHfgThwsetCfbpaR\n1RPzF/zMy4bHlJYiGwWIZ2bIm86YWlIlLY5jE1THFo5YXTaaSo3hqQt8jMl3\n2xpFcrGB7+Zx7D6b+XQrKkWKzKCBuafd3VhnQpMAYeQNwDOschqdhhHB6JIo\nzE80\r\n=zztw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPVsgnYot4ZN1O0FUFU+Kfkdat9wlPSOv4njy9Oav3+wIhANYil6OshFQFGpZAD7usdpvVVuOk8UPeWcNkq1Xyzx8w"}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_1.5.5_1614158662980_0.3503766912985795"},"_hasShrinkwrap":false},"2.0.0":{"name":"@danielsharkov/svelte-router","version":"2.0.0","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"main":"src/router.js","source":"src/router.ts","module":"src/router.mjs","svelte":"src/index.js","types":"src/index.d.ts","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"gitHead":"493e9281af93b9a821339a3ce7c5b45b2a1baf71","_id":"@danielsharkov/svelte-router@2.0.0","_nodeVersion":"16.13.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-RRIOKik5mCNsxFUogs6h7WJEIxMKTJuyqZd1wS9ZdkmPvNPg/efD+kLmUuoYnDOdUwO0mAEy88BaQ/fJQtUV4g==","shasum":"f087686f86c500a7a00d0c3f8d0e106ebd929f85","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-2.0.0.tgz","fileCount":12,"unpackedSize":71933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmlrNCRA9TVsSAnZWagAAFLwP/3vK0tKtdC6vSLLq+80J\n82TREyyAQiO2BBqNfr1VQED3vMMDCxvPZy7IF6ChdTmMAgb7U0xgtuikXvVC\n9YPTycwQ0lzcL/oW5rHRzvt18zg7txWsWaDDfnwStH4Z5giedYK2RMiVzdOp\n105rxjvS5W6EooPi1dsqlyXHQoRp5VdSEiXOWR5isq9uEPd5MSSPfTDGhewn\neQXHBDm+xFRucK4ys7o6viSkJCu5J0Or1CBf8m1RCAUmK44eUIEGprJ7Jpws\n390Pp7l6uD5l463E99UlT24O1SQzlbvAFGDxdhRr7W6Ui8Ii4p3mSK58S98l\nbp5xMEPf+vLcguftDfaaH64yFkmpBFF3yKwoXk/sT6QSkWVQ4kQT09tK7aBh\n2ZmBJQ7r2L70iZH0A7aCeyivdgYg2v1YGs1OGzegDL7f7jBTp694B8Bgxx4P\njXlJTpXbgBQVd8WRsv7x5Gsb3pDgljb3jW9yMyYYgpl/v0vQDdzd3s05gRg2\n2cYMQ+ekE0wyopNcMH1oqreOHoh9Skba/ZFMdAIN29ldG/47qu5tsDF9mMXQ\nFqKtlNH6rddYJ8rGzJ1B7onbk1piRBgWSiPY2gwSu3Ih+oRSv8IWSLYvhZ9/\n5M0l5Qwf13pt0Eue4sPBEGmHPqWQB0LxhtlzW8wl7VOvai6lkiHvX7xR+vi2\nw5c+\r\n=crDc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHP4Dp3P1bRM21Jma1Ez7y4krOTARqvZTo5njZP+bhlrAiBJMcsXcGNrwWDTetjb+XFVhK0onFDdsbB5WOccsj/R1w=="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_2.0.0_1637505740915_0.5704165811140711"},"_hasShrinkwrap":false},"2.0.1":{"name":"@danielsharkov/svelte-router","version":"2.0.1","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"main":"src/router.js","source":"src/router.ts","module":"src/router.mjs","svelte":"src/index.js","types":"src/index.d.ts","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"gitHead":"763f909081ec3cd3dd4f8942bea3151748015be9","_id":"@danielsharkov/svelte-router@2.0.1","_nodeVersion":"16.13.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-1QyoQK+U2OkoVaIebEgKs7nbowubbiyRshfxVHG7EftVsVxdh5bvSazUcapz1f6l1VGwTpHnoMx1WuZ1hIoJjQ==","shasum":"3a3f6ea67dc2299f1f0a50705c59d4227f72dfaa","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-2.0.1.tgz","fileCount":12,"unpackedSize":72195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmmCfCRA9TVsSAnZWagAA6GYP/02vNVS1+EUSdGYSsnx6\nLfO+14K8qgvPD9/mdFK0FJuBO3QTrSlxWFa9YNsJkY2qSl7qnfvGdbEvZ/zH\nAjqWXrPLUXp0p5mOi2zySClCM0bEWLvccpp1TfSxgQZOrv+H/h0AZArnYT1t\ndoSvUFjH8gfN17nqVVtQDfImQX+VT3I2fMkMT2nx5CpPmzi/fUh0678YpXaS\nptrYiYJt21oNJeAGdJlWLckDUNbbUCCE+EuDUkIfq5xbjJx+HS5cRnaRc/DX\nmCY3hVFMeUezofUeQc+cH4La72AMzzL6mFef8K4kkGCXZ3AICwdQC4/M3xKV\nTNBcDH9ULA9vkr4QJKBNjIlNiguSHpI6hfgBpSq2Gc4FasVEg9v7f4y2xGUg\nrXoPkno8VXJ4lBhZ46jqclU7vk3FgFcAn1nPpPBsDwPu3qBWflYFFRXSlp+q\ncHGaZC16dkvhyRBPPhYflQ5p0U+Bst4VfLp63UwAIrspiOrkp6x4gDWOmpQj\nHMqwfXHbOQF2ANS1PKwFUFsxiJKimVbhIkT8+ZXNrjVNdfzKq6ZBYeaD9Jlm\nHAdt0WZMMrnMK/oyyqePGTQUc3pFs+cYNTfI8kQMnM+LGtdzM7gHeM6DP6VC\n7LbU/5+Tf1p49zgqAHE7xLWtq26HM85rGDDowFNPSnl/MC8P+L6+YVglTZqG\nDDge\r\n=Bqvu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGdc3q05+np2dcVBD24z77ygYcbUhNRiPpb71A4p3X6HAiA0wwvJ6MKLb9/UGSHIXOs3+7yEJy9iPxl7f/FC9ztTqw=="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_2.0.1_1637507231765_0.49865876682878985"},"_hasShrinkwrap":false},"2.1.3":{"name":"@danielsharkov/svelte-router","version":"2.1.3","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"gitHead":"d49dace782414e469cf49a66b20bd454ff6524f3","_id":"@danielsharkov/svelte-router@2.1.3","_nodeVersion":"16.13.0","_npmVersion":"8.1.3","dist":{"integrity":"sha512-juNC4i7fwx/kZc1SSXzDpn9c/ZVFncgMCCx3wjNaDy+zwxDEqno+RW3Bw4wrhCFWWfZ6aCbths5xibWaPm9qkw==","shasum":"0acd0609616f2cace126041b9e17c2e60f67d0c0","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-2.1.3.tgz","fileCount":12,"unpackedSize":73304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm1ZHCRA9TVsSAnZWagAAgxEP+QDAAIMs0HdD2ID96+tC\n0qsANOHWrKWYFihm0tBDQh8Mc7Zcj4FqR9Uc17qPtBxF2nHxg9ZLF6EGTYc9\ngtFJDHvB+AL9Guq1vaFVoDOGexmRxNcSJbn/Ec58le2qX48vDrp6vi6SVfS8\np8uEx+bHgv8TmDCrPA5R329YPnZf5FDqTN3hxt1AX+YPseczAgGdJyxhnp2r\nHEMZk8/t79fkdlE6IaQcwvEVoghM1ae5zGu1wEMqeZ2jDFuPvU1zEfKI+rk3\nlzjBqAAn0hfyUiDNhAcCUbEuYgGJOQPZ3xobEyNoz9n+Qch8RDujVgu6eD8K\nfEHENHxtIvmjA0YhvUQSrZOnWPtKMNFYENU4Op/GITYn8qWwnb1IVAc11Mid\nEGLFbZHCNS8sRk/62SaD/mFizA0bLIltkFXVRkR17zMvahvvcSBznMRSmU7K\nYIRYPAypyUtf8+pPZ14uRTuy+rdxj/lcKUbavjKpmAEsODlf4gjpkalXZLZt\n9LBuD6sVVc7QpMCV9NONX+8ZC/Bk2g7SDg51Pha6+Hdv/nTQEbCaC60CV0uw\nBRgiKonNiKHG0qptx9jnRpSsaiHyByo90FGcPlKAWq0qh/vONehS9MQHJCh/\nMQG1elwwTI5OW/N1F3aaQsFquGakn38gFhXQkIXNObNIMOtTLxyXVbEo3BQ8\nP5YJ\r\n=0Oey\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC50xn6oR3ef13UjAFMIRWpd5QF1wbZ5BtJ65idjJIgHAiB6ISxB8iqafR+XdUaYp6Tp6fMzI5OGuc7KH4v8rwPpNg=="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_2.1.3_1637570119214_0.28407866254419867"},"_hasShrinkwrap":false},"2.4.6":{"name":"@danielsharkov/svelte-router","version":"2.4.6","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"gitHead":"0b62f4b58c70df0de1309a432680b5e522a305d4","_id":"@danielsharkov/svelte-router@2.4.6","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-ZLH2uVK//KunDFZoDl68IZ/Xi1iO+gMSJfxZq6sUn4xBG9jzyCl8mPUdOp2MCDoR3G0ZxEnle4DokGH2zrg2sQ==","shasum":"f246a7866d0473710f6298b981cbd9b472b3c053","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-2.4.6.tgz","fileCount":12,"unpackedSize":78296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhopZRCRA9TVsSAnZWagAAQ5sP/R2JZ+4sUnFFWNbEiJVU\nivwaYp/Ljdj7dNwKJlmaOM4DW/LLWrnchMUMpQt/lOX22jWff/8K8o06ri6Y\ndgGDr9eaNYy14ZF9gSUu9uASlINerFWm3e67EzfeTVMDGRLgnjI77utKbKzr\nL6vqvO0NprhzBd1FtwDGilgCMrkM5IAsxp9qu2mmHBqcS1Y14bCNCeTQvNvg\nZNH17ugsVeG1+uvA26Jye8NnVqy27VTPwva9lLDt8L3F25qHeszwYtS1uvMO\nx/RA475h3p3tKzGcNVYbRzzM0MHg3OFc5kpzuyPnwP0PLRanfbIJcT6/mCzm\nohIFr9gABK0Y2+dYw6BlYp29T1dRNlxXFodsWU9lxVh9KfDi5U5II7gG1mVF\njB5SZiBtrXYXD13/xNpyUdvxsquPYmljxoRTMCBtZmnQgV/DlVGuM1q2x6on\nHgZqJYwympLi++LC+2JjK/Pj/OefKwXUC5b9HmWul/dPw90F99MJAOepJCzJ\n/PY9C7Xj/ZTyJaDbomF1hUJY+KgiSAaZkVtIIa0tgnWmlcDijKfFJwnNF0I/\n0iJPWH4iG3aNelzKEx+F+wYp0xaK3VCK/RqU6vdzpo/fRUhYWm+dW6m85U5h\n4cExG5lknY+2rmZLJa3DkV+NojdGpXdusjt2VOeY25M0Qc+eIRpAgEI1SsCj\ngnrL\r\n=7BGO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3XIAg7d9Efk9trjvHwscFdGnnwvtYIMJQ9xuBxBchUwIgLY1lQnXmsc4iO0DZlIul46OqfMezwyYpwGM0vMx+lt8="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_2.4.6_1638045265188_0.24177169831343215"},"_hasShrinkwrap":false},"2.4.12":{"name":"@danielsharkov/svelte-router","version":"2.4.12","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"gitHead":"b2a2d180599d164abb1821e3c9b917e3924d5850","_id":"@danielsharkov/svelte-router@2.4.12","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-F41mEVbDwumLkiqY4cPt+r3PDnzTsbTOvV0+QXeR6aozi79YshxEPPTt4cjAzc7R5LT0fYq5UCi1DQIO+g0b5g==","shasum":"13abcd86407bfe863872bed1c0c7bb07524d310f","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-2.4.12.tgz","fileCount":12,"unpackedSize":79687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJho+X1CRA9TVsSAnZWagAACysP/3/PS3SI6B4yGzF3rVFQ\nAQgSaW7ccxqoPM/DsDNzck3Gn0/PNgLEY0DW+7IELWejZvRcKu9/AAD5njP/\n6GD5un8+Bv1upZq7cpZ6w3kG8ZRPSIkyU8IJ9MP14HIOSNIB6kIbnBTr3jWX\nMgJUjUwTivwJy2MqHtkWXXJp2ZZhOHmQXaUBml2WuM1IeQ2Csf0chgaxfa3b\nUNCfqKkzJX+y6caNb4/B35cwsV97bZIdVqcQvZWIEcZSb858ytHUmN6yeFL5\nO3p282wT3PFstpaB44a8rbimq2GMfzfQqBBXfNNQRKi1Gir1hrI+w+3n51mi\n6bOBT3JLTwCNpuIzzM5H5YsuGJdPnWbzLqHz2OQQNZzLl6goN+lh9RFxMRcN\nBKQn6N30hQjEHwPrnWvD5S4BefbrKIGTfr0KCJeMtBtAkfGQLPgl8CY12ot7\n0B13OpSX7AZDFwvjzjwsx0ijx1twGpBO3A0p0K7VBheDP8G7j/EFsaw5IKpj\nm/ZkxfBX8mqSAcSwufMAgnkSWo6bowsi1e7esmLRgdp0ErYeNIuUf3Xs8mZf\nziWM0fq64dKQtiXd76ph3VwnA7+kD/UqIMqIKcKwr3QxGrtQOR9sz0bBTlBc\nV/kpi4BFFoYwTPIyH7s1IAhglMBlfjGCLcAljXWZ76ee0gKQhZmvNHNFHLbl\nE21k\r\n=ySHs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4lFGWR150Tk6A9zrcCIL1NxFc7Ru/zNSvdeWIY54NzgIhAKFxHIgOuHg+M7LOMnpEV1XAutcBwhTHgNc5GkjESDfQ"}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_2.4.12_1638131189477_0.9380260011339447"},"_hasShrinkwrap":false},"3.0.0":{"name":"@danielsharkov/svelte-router","version":"3.0.0","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"gitHead":"417b4f655a28ee6ed5da61783bfe2c39c60cd103","_id":"@danielsharkov/svelte-router@3.0.0","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-ltMLYPD86o/mOlwMai1TcvVOJttWwUNCeTTAo04vPSlNW7XOaKWEK2de5Mev1JkA9a8/HGDO/1b8d2uG2s/ehw==","shasum":"ff1a4d097e412564c83e6eb8d75e2269c33dace2","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.0.0.tgz","fileCount":12,"unpackedSize":74836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpRKZCRA9TVsSAnZWagAAw/0QAISnoPkQvznShCNZYhP5\nnrTj0cY146+Soc2eXNgj4VUHsIVe7xHsX+O6AgL1CvRb5rbNxhVoqQqVcdWv\nMPuD1OH8D3SZ1GjrtEspjzg3Wz+lMwwGAcAo4hRAN/gcl+bkKtoHLKTS8omQ\nd7XOiJY3iuBPxLiu47QhoH5JfkUYaPaHNiO3qYzFAbk7OsOoCnVU4BZGtW5v\nxMLkkMf4fEZ+gPWDEpsjPKV951FCK2nI4FEsUwq3ryTns8K78qyse62/k+ec\n+g4FfzxBDMG5We2IjvKds/p8mnJIXenNky2/NBO2/R/d1M7dwJDjwtVUKtDU\n+m2KEbr3TYMwloTHfN0+P31LV/N9cCe8NTzPQerlP1AlhrTTEy9hfYiMsspf\npVZ1zP+vTZe38sbZjgtp0LqbMBP/wss7sbRLjhL1d8UsRiJsl5zIVRBmd2E3\nikadIQrLDf9BJLBfZ6fpmPHmuJGL1YcurEKSFRxg+lmHfFMyYhe6j3kA+qnt\n2zxI78TRRDVwYIBxZyFTOufb9aFZgQn9orRo/J097ErX6gpjTLOaOx8P5FdM\nyIfp4AUECaBcUNQLTbT7/VM3qcsn8Cv9HpOaE5Et3TCB7w+h1QXHzVcYA6al\npx4mdVJIbJXuL6qfEZ5pUWbHL3+XDPz0Kpj2Vc4agp+UjGD7xPWVEvHuTM0r\n4PyT\r\n=9aaD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBGtpY81aM3lSAZAAHyXmRk2fB4eCPayEYNP8Wcpg1zJAiEAlPhPjDdZG6rqZZoY5Q/9qGVq1gdfCs9n+8BHN6LO/Yg="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.0.0_1638208153338_0.5206360019175358"},"_hasShrinkwrap":false},"3.0.1-test.18":{"name":"@danielsharkov/svelte-router","version":"3.0.1-test.18","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"./src/index.ts","types":"./src/index.d.ts","main":"./src/router.js","module":"./src/router.mjs","svelte":"./src/Router.svelte","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"type":"module","exports":{"./package.json":"./package.json",".":{"types":"./src/index.d.ts","browser":{"import":"./src/router.mjs","default":"./src/router.mjs","require":"./src/router.js"},"import":"./src/router.mjs","default":"./src/router.mjs","require":"./src/router.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"readme":"[![Simple, fast & easy to use Svelte Router](https://github.com/DanielSharkov/svelte-router/blob/master/readme-banner.svg)](#)\r\n\r\n[![Live Demo](https://img.shields.io/badge/▶-Live%20Demo-2962ff)](https://danielsharkov.github.io/svelte-router-examples)\r\n[![Examples](https://img.shields.io/badge/🧩-Examples-ff9100)](https://github.com/DanielSharkov/svelte-router-examples)\r\n[![npm version](https://badge.fury.io/js/@danielsharkov%2Fsvelte-router.svg)](https://badge.fury.io/js/@danielsharkov%2Fsvelte-router)\r\n![GitHub](https://img.shields.io/github/license/danielsharkov/svelte-router)\r\n\r\n# 🗂 Index\r\n\r\n- [Installation](#-installation)\r\n- [Initializing a Router Instance](#initializing-a-router-instance)\r\n- [Fallback Route](#fallback-route)\r\n- [Route View Component Props](#route-view-component-props)\r\n- [Route Props](#route-props)\r\n- [Before-Push Hooks](#before-push-hooks)\r\n- [Global Before-Push Hook](#global-before-push-hook)\r\n- [Programmatic History Navigation](#programmatic-history-navigation)\r\n- [Route Updated Event Listener](#route-updated-event-listener)\r\n- [RouteLink Component](#routelink-component)\r\n\t- [RouteLink with Parameters](#routelink-with-parameters)\r\n- [Svelte Action use:link](#svelte-action-uselink)\r\n- [Route Transitions](#route-transitions)\r\n- [Router Examples](#-router-examples)\r\n\r\n<br>\r\n\r\n# 🧗‍♀️ Getting Started\r\n\r\n## 💿 Installation\r\n\r\nJust `npm i --save-dev @danielsharkov/svelte-router` and done 😁 🎉\r\n\r\n<br>\r\n\r\n## Initializing a Router Instance\r\n\r\nInitialize a new router with the configuration in `src/router.ts` or where\r\never you like, maybe even inside `App.svelte` as a module - it's up to you.\r\n\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewUser from './views/User'\r\n\r\nexport default new SvelteRouter({\r\n\twindow: window,\r\n\tscrollingElement: window.document.scrollingElement,\r\n\tbaseUrl: '/persistent/path',\r\n\troutes: {\r\n\t\t'home': {\r\n\t\t\tpath: '/',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t},\r\n\t\t'users.user': {\r\n\t\t\t// paths must always begin with a slash\r\n\t\t\t// and may take parameters prefixed by a colon\r\n\t\t\tpath: '/users/:uid',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t\t'user.album': {\r\n\t\t\t// paths may take multiple parameters\r\n\t\t\tpath: '/users/:uid/albums/:aid',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t},\r\n})\r\n```\r\n\r\n* `window` should usually be assigned the [browser object model](https://www.w3schools.com/js/js_window.asp)\r\nbut can also be used for testing and debugging purposes.\r\n\r\n* `scrollingElement` should usually be assigned the [Document.scrollingElement](https://developer.mozilla.org/en-US/docs/Web/API/document/scrollingElement),\r\nwhich is the usual scrollable viewport. But if your viewport differs you may\r\nthen provid it your needed `Element`. When no `scrollableElement` is provided\r\nthen the router won't save and restore scroll state by the history.\r\n\r\n* `basePath` is an optional field which has the same principle as the HTML\r\n`<Base>` tag. It acts like a prefix to the paths. It's useful in cases like\r\nhosting on GitHub Pages, where the base URL is always `https://<username>.github.io/<repo-name>`\r\nand the base path therefor always is `/<repo-name>`.\r\n\r\n* a route name is required to be unique and is allowed to contain\r\n`a-z`, `A-Z`, `0-9`, `-`, `_` and `.`\r\n\r\n* static routes will always be preferred to their parameterized counterparts.\r\nThis means `user/a/albums` will be preferred to `/user/:id/albums` if the URL\r\nmatches the static route.\r\n\r\nThen use the `Viewport` as the actual visual router in your `App.svelte`\r\npassing it your created router instance:\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\timport {Viewport} from '@danielsharkov/svelte-router'\r\n\timport router from './router'\r\n</script>\r\n\r\n<nav>\r\n\t<button on:click={router.push('home')}>\r\n\t\tHome\r\n\t</button>\r\n\t<button on:click={router.push('home', {uid: 'paul'})}>\r\n\t\tPaul\r\n\t</button>\r\n\t<button on:click={router.push('home', {\r\n\t\tuserId: 'alex', albumId: 'sumer-2016',\r\n\t})}>\r\n\t\tBob\r\n\t</button>\r\n</nav>\r\n\r\n<Viewport {router}/>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Fallback Route\r\n\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewNotFound from './views/NotFound'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'home': {\r\n\t\t\tpath: '/',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t},\r\n\t\t'404': {\r\n\t\t\tpath: '/404',\r\n\t\t\tcomponent: ViewNotFound,\r\n\t\t},\r\n\t},\r\n\tfallback: {\r\n\t\tname: '404',\r\n\t\treplace: false, // true by default\r\n\t},\r\n})\r\n```\r\n\r\n`fallback` is optional and defines the route the router should fallback to in\r\ncase the user navigates to an inexistent URL. If `replace` is `false` then the\r\nfallback will push the route into the browser history and change the URL,\r\notherwise it'll just display the fallback route in the router viewport without\r\naffecting the browser history. `replace` is `true` by default.\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route View Component Props\r\n\r\nThe route view components always get the props `router`, `params`, `urlQuery`\r\nand `props`.\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let router\r\n\t// router: is the SvelteRouter instance you have provided to <Viewport>\r\n\texport let params\r\n\t// params: is either undefined or the parameters you have defined\r\n\t// in the path template for this route in the router config.\r\n\texport let urlQuery\r\n\t// urlQuery: is either undefined or a key:value object depending whether\r\n\t// the URL has any query parameters.\r\n\texport let props\r\n\t// props: is either undefined or the defined props for this route\r\n\t// in the router config.\r\n\r\n\t// We assume that the route parameters always exist, because we defined\r\n\t// them parameters in the path template for this route in the router config -\r\n\t// and they do always exist, because the router won't route on a route\r\n\t// missing its parameters.\r\n\t// You can may access these values without worry of trying to access an\r\n\t// undefined property.\r\n\tconsole.log(params.someParam)\r\n\r\n\t// Same follows for props, they are hard-coded and therefore always defined.\r\n\tconsole.log(props.nav.title)\r\n\r\n\t// Only the urlQuery keys must be checked first, because there's is no\r\n\t// definition for the URL query.\r\n\tif (urlQuery.search) console.log(search)\r\n</script>\r\n\r\n<!-- Here your Layout & Styles ... -->\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route Props\r\n\r\nRoutes can be assigned arbitrary props which are then available in the view\r\ncomponent:\r\n\r\n<sub>**router.ts**</sub>\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewAbout from './views/About'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'root': {\r\n\t\t\tpath: '/',\r\n\t\t},\r\n\t\t'home': {\r\n\t\t\tpath: '/home',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'Home',\r\n\t\t\t\t\ticon: 'fas fa-home',\r\n\t\t\t\t},\r\n\t\t\t\tpicture: 'https://sample.url/picture.jpg',\r\n\t\t\t},\r\n\t\t},\r\n\t\t'about': {\r\n\t\t\tpath: '/about',\r\n\t\t\tcomponent: ViewAbout,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'About me',\r\n\t\t\t\t\ticon: 'fas fa-address-card',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\t},\r\n})\r\n```\r\n\r\n<sub>**views/Home.svelte**</sub>\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let props\r\n</script>\r\n\r\n<!-- We assume that these props always exist,\r\nbecause we hard-code them into the router -->\r\n<h1>{props.nav.title}</h1>\r\n<img src={props.picture} alt='Some beautiful picture'>\r\n```\r\n\r\n<sub>**App.svelte**</sub>\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\timport router from './router'\r\n</script>\r\n\r\n<nav>\r\n\t{#each $router.routes as route}\r\n\t\t{#if route.props?.nav}\r\n\t\t\t<button on:click={router.push(route.name)}>\r\n\t\t\t\t<i class='{route.props.nav.icon}'/>\r\n\t\t\t\t<span>{route.props.nav.title}</span>\r\n\t\t\t</button>\r\n\t\t{/if}\r\n\t{/each}\r\n</nav>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Before-Push Hooks\r\n\r\nThe `beforePush` hooks are promises which are executed before a route is pushed\r\nto the history. The passed function receives an object containing the current\r\n`location`, the `pendingRoute` (which the router is about to navigate to) and both\r\nthe `resolver` and `rejector`. A hook must either resolve (approve) the pending\r\nroute otherwise to reject it by passing an another route, or even\r\nnothing (`undefined`) to cancel routing. It can be used for specifying redirect behavior or\r\nanything else that should be done before a push.\r\n\r\nYou may use the `$router.isLoading` property to determine whether the router is\r\nloading a new route and resolving before push hooks, which may be asynchronous.\r\n\r\n| ⚠ Warning ⚠ |\r\n|:--|\r\nBe sure to always either resolve or reject a hook, otherwise it will **dead-lock** your router.\r\n\r\nSimple example of using a hook:\r\n\r\n```svelte\r\n<script>\r\n\timport {onDestroy} from 'svelte'\r\n\timport router from './router'\r\n\r\n\tconst removeBeforePushHook = router.addBeforePushHook(\r\n\t\t({location, pendingRoute, resolve, reject})=> {\r\n\t\t\tif (pendingRoute.name === '/very/secret/path') {\r\n\t\t\t\treject()\r\n\t\t\t}\r\n\t\t\tresolve()\r\n\t\t}\r\n\t)\r\n\r\n\tonDestroy(()=> {\r\n\t\tremoveBeforePushHook()\r\n\t})\r\n</script>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Global Before-Push Hook\r\n\r\nThe global before push hook is a persistent hook, which can't be removed.\r\nIt's defined right in the router config.\r\nHere's a simple example:\r\n\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport {get as getStore} from 'svelte/store'\r\nimport {isValidUserSession} from 'user_session'\r\n// isValidSession could be any of your implementations - in this example it is\r\n// just a derived store returning false or true\r\n\r\nimport ViewLogin from './views/Login'\r\nimport ViewHome from './views/Home'\r\nimport ViewUser from './views/User'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'root': {\r\n\t\t\tpath: '/',\r\n\t\t},\r\n\t\t'login': {\r\n\t\t\tpath: '/login',\r\n\t\t\tcomponent: ViewLogin,\r\n\t\t},\r\n\t\t'home': {\r\n\t\t\tpath: '/home',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t},\r\n\t\t'user': {\r\n\t\t\tpath: '/user/:uid',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t\t'very-secret': {\r\n\t\t\tpath: '/treasure',\r\n\t\t}\r\n\t},\r\n\tbeforePush({pendingRoute, location, resolve, reject}) {\r\n\t\tif (!getStore(isValidUserSession)) {\r\n\t\t\treject({name: 'login'})\r\n\t\t} else if (pendingRoute.name === 'login') {\r\n\t\t\treject()\r\n\t\t}\r\n\r\n\t\tswitch (pendingRoute) {\r\n\t\tcase 'root':\r\n\t\t\treject({name: 'home'})\r\n\t\t\tbreak\r\n\t\tcase 'user':\r\n\t\t\tif (params.uid === 'a') {\r\n\t\t\t\treject({\r\n\t\t\t\t\tname: pendingRoute.name,\r\n\t\t\t\t\tparams: {uid: 'b'},\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\tbreak\r\n\t\tcase 'very-secret':\r\n\t\t\treject()\r\n\t\t}\r\n\t\tresolve()\r\n\t},\r\n})\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Programmatic History Navigation\r\n\r\nTo programmatically go back or forward in history just use the [browser history API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) or the built-in aliases:\r\n\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let router\r\n</script>\r\n\r\n<button on:click={router.back}>Back</button>\r\n<button on:click={router.forward}>Forward</button>\r\n```\r\n\r\nTo navigate to a new route use the built-in `push` API of the router, which\r\nrequires the route name as the first parameter and if needed a `key:value` object\r\nwith the parameter values:\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let router\r\n</script>\r\n\r\n<button on:click={()=> router.push('home')}>\r\n\tHome\r\n</button>\r\n<button on:click={()=> router.push('user', {uid: 'ndkh2oj2'})}>\r\n\tDennis\r\n</button>\r\n<button on:click={()=> router.push('user', {uid: 'sz92fnkk'})}>\r\n\tErik\r\n</button>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route Updated Event Listener\r\n\r\nThe `routeUpdated` event listener if fired right after the route has been updated.\r\nThe payload in the event is the current location.\r\n\r\n```svelte\r\n<script lang='ts'>\r\nexport let params;\r\n\r\nfunction routeUpdated(event) {\r\n\tconsole.log('Route params changed!', event.detail.params)\r\n\tconsole.log(parms, 'is equal to the event payload')\r\n}\r\n</script>\r\n\r\n<svelte:window on:routeUpdated={routeUpdated}/>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# RouteLink Component\r\nA `<RouteLink>` can only be used inside a `<Viewport>` instance or by\r\npassing it the router instance. You may pass HTML tag attributes like `class`,\r\n`id` and etc. directly to the component - as you'll see in the example below.\r\n\r\n<sub>**router.ts**</sub>\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewAbout from './views/About'\r\nimport ViewUser from './views/User'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'root': {\r\n\t\t\tpath: '/',\r\n\t\t},\r\n\t\t'home': {\r\n\t\t\tpath: '/home',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'Home',\r\n\t\t\t\t\ticon: 'fas fa-home',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\t\t'about': {\r\n\t\t\tpath: '/about',\r\n\t\t\tcomponent: ViewAbout,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'About me',\r\n\t\t\t\t\ticon: 'fas fa-address-card',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\t\t'user': {\r\n\t\t\tpath: '/about/:userName/:userNumber',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t},\r\n})\r\n```\r\n\r\n<sub>**components/Nav.svelte**</sub>\r\n```svelte\r\n<script>\r\n\timport {RouteLink} from '@danielsharkov/svelte-router'\r\n\timport router from '../router'\r\n</script>\r\n\r\n<nav>\r\n\t{#each $router.routes as route}\r\n\t\t{#if route.props?.nav}\r\n\t\t\t<RouteLink to={route.name} class='nav-btn'>\r\n\t\t\t\t<i class=\"{route.props.nav.icon}\"/>\r\n\t\t\t\t<span>{route.props.nav.title}</span>\r\n\t\t\t</RouteLink>\r\n\t\t{/if}\r\n\t{/each}\r\n</nav>\r\n\r\n<!-- The only disadvantage is that you have to define the styles globally -->\r\n<style>\r\n\t:global(.nav-btn) {\r\n\t\tcolor: #ff3e00;\r\n\t}\r\n</style>\r\n```\r\n\r\n#### RouteLink with parameters\r\n\r\n```svelte\r\n<RouteLink to='user' params={{userName: 'john_doe', userNumber: 0397}}>\r\n\tI'm a router link\r\n</RouteLink>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Svelte Action `use:link`\r\nThe use action can only be used inside a `<Viewport>` instance or by\r\npassing it the router instance. When you're using it inside a `<Viewport>`,\r\nthen leave the parameter `router` blank.\r\n\r\n##### Inside a `<Viewport>`\r\n```svelte\r\n<script>\r\n\timport {link} from '@danielsharkov/svelte-router'\r\n</script>\r\n\r\n<a href='/home' use:link class:active={$router.location === 'home'}>\r\n\tHome\r\n</a>\r\n<a href='/about' use:link class:active={$router.location === 'about'}>\r\n\tAbout\r\n</a>\r\n<a href='/user/lauren/8953' use:link class:active={$router.location === 'home'}>\r\n\tLauren#8953 <!-- matches /user/:userName/:userNumber -->\r\n</a>\r\n\r\n<style>\r\n\ta.active {\r\n\t\tcolor: #ff3e00;\r\n\t}\r\n</style>\r\n```\r\n\r\n##### Outside a `<Viewport>`\r\n```svelte\r\n<script>\r\n\timport {Viewport, link} from '@danielsharkov/svelte-router'\r\n\timport router from './router'\r\n</script>\r\n\r\n<a href='/home' use:link={router}>Home</a>\r\n<a href='/about' use:link={router}>About</a>\r\n<a href='/user/lauren/8953' use:link={router}>Lauren</a>\r\n\r\n<Viewport {router}/>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route Transitions\r\nRoute transitions can't be just applied and used on a route easily. If you\r\nwould just add some transitions into the route component and navigate through\r\nthe routes, it will show unexpected behavior (\r\n\tsee Svelte Issues:\r\n\t[#6779](https://github.com/sveltejs/svelte/issues/6779),\r\n\t[#6763](https://github.com/sveltejs/svelte/issues/6763),\r\n\t[and even including my simple REPL](https://svelte.dev/repl/a5122281148c4c458f40e317fc4be11e?version=3.44.2)\r\n).\r\n\r\n**But! Dirty hacks to the rescue:** 😎💡\r\n\r\nTo tell the viewport that a route has a transition you must dispatch the event\r\n`hasOutro` inside the `onMount` handler. Now that the viewport is aware of the\r\noutro transition, it's going to await the route to finish its transition,\r\nbefore switching to the next route.\r\nNow that the router is awaiting the outro, at the end of the transition we have\r\nto tell the viewport that it may switch further to the next route.\r\nThis is done by dispatching the another event called `outroDone`.\r\nThat's the trick!\r\n\r\n| ℹ Info |\r\n|:--|\r\nAny mistaken dispatched event `outroDone` will be ignored by the viewport, as it only listens for the event after the routers location has changed. Meaning you may just dispatch this event on every outro transition without worring.\r\n\r\n| ℹ Info |\r\n|:--|\r\nInside the route component be sure to call the `outroDone` event on the longest outro transition on any element inside the component, as they have to finish as well. For better understanding see the second example below 👇\r\n\r\n| ⚠ Warning ⚠ |\r\n|:--|\r\nBe sure to fire the event `outroDone` after telling the viewport to await the outro transition, otherwise the viewport will wait a indefinitely.\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\timport {onMount, createEventDispatcher} from 'svelte'\r\n\timport {fade} from 'svelte/transition'\r\n\tconst dispatch = createEventDispatcher()\r\n\r\n\tonMount(()=> {\r\n\t\tdispatch('hasOutro')\r\n\t})\r\n</script>\r\n\r\n<div class='page'\r\ntransition:fade={{duration: 400}}\r\non:outroend={()=> dispatch('outroDone')}>\r\n\t<h1>Some content</h1>\r\n\r\n\t<p>Lorem Impsum...</p>\r\n</div>\r\n```\r\n\r\n##### A route containing a child transition\r\n```svelte\r\n<script lang='ts'>\r\n\timport {onMount, createEventDispatcher} from 'svelte'\r\n\timport {fade, fly} from 'svelte/transition'\r\n\tconst dispatch = createEventDispatcher()\r\n\r\n\tonMount(()=> {\r\n\t\tdispatch('hasOutro')\r\n\t})\r\n\t\r\n\tconst custom =()=> ({\r\n\t\tduration: 1000,\r\n\t\tcss: (t)=> (\r\n\t\t\t`opacity: ${t};` +\r\n\t\t\t`transform: rotate(${360 - 360 * t}deg);`\r\n\t\t)\r\n\t})\r\n</script>\r\n\r\n<!-- You may delay the actual route transition, otherwise it will already\r\nfade out and the user will see a blank screen, where it's actually is still\r\nprocessing a child outro. I set it to 600ms, because 1000ms of the longest\r\nchild transition (the heading) minus the 400ms route transition is a delay of 600ms. -->\r\n\r\n<div class='page'\r\ntransition:fade={{duration: 400, delay: 600}}\r\non:outroend={()=> dispatch('outroDone')}>\r\n\t<h1 transition:custom>\r\n\t\tSome content\r\n\t</h1>\r\n\r\n\t<p style='display: inline-block;' transition:fly={{duration: 700}}>\r\n\t\tLorem Impsum...\r\n\t</p>\r\n</div>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# 🧩 Router Examples\r\nYou can find full router examples in [danielsharkov/svelte-router-examples](https://github.com/DanielSharkov/svelte-router-examples)\r\n<br><br><br><br>\r\n\r\n\r\n\r\n# ✨ Thanks for contribution goes to:\r\n[@romshark](https://github.com/romshark)\r\n[@madebyfabian](https://github.com/madebyfabian)\r\n<br><br><br><br>\r\n\r\n\r\n\r\n# ⚖️ License\r\nSvelte Router is a open source software [licensed as MIT](LICENSE).\r\n<br><br><br><br>\r\n\r\n\r\n\r\n# ⚖️ Additional notices\r\nYou may feel free to use the [Logo](https://github.com/DanielSharkov/svelte-router/blob/master/logo.svg), [Animated Logo](https://github.com/DanielSharkov/svelte-router/blob/master/logo-animated.svg) and [Banner](https://github.com/DanielSharkov/svelte-router/blob/master/readme-banner.svg) for non-commercial usage only, but first please ask me kindly. Contact me by email on `scharktv[at]gmail.com`.\r\n","readmeFilename":"README.md","gitHead":"a1bc4bec193d6f40cbe4c29120ea44f4bad5ecbb","_id":"@danielsharkov/svelte-router@3.0.1-test.18","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-/8mdNXsMXIAzZqMytRWRkSICfTf6kZlDVoV8fwyf9/mD6TYaKtfc1CiYKR2l591sdTR2w5iv2TP64TNXix5viA==","shasum":"754181cbe1372cfd0f9e705ad4106e05b02308f6","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.0.1-test.18.tgz","fileCount":15,"unpackedSize":148572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiAq/4CRA9TVsSAnZWagAAK3MP/2ElbHYtmMFWqhatURsj\nOZd91cmRwDFjzXGRhJZNdih6VvDXUlnHlmv3jqNGOAY/k2PTfYvTGdTBXzYs\nvtLwwp3XicqOuolPvqTYExP5tEI31RnK8ute41IMiT5No1c4SKCoyvnolgLi\n1bGMPIH9mKUvltKkhgEA3c47ZNBy/YtPliYKkxkrSojhJqqCDTccfa6PgSDy\nDr2QZwl/5nOU9CzBNJLGU5nMnfTw5JReS9vWD/33UbjcXCwL4Si4EyVFfIhZ\nrw8Ip9Tv0gbThfnKpg0bEuritfeyYNLjGZA5K4N7v3AosW8lM+ap9Kl51Nca\nXhycQs+LNCIm51WJzVnTeoFcJpfB1G1utkJyMEvIEhXIXy288eG0aIH6FUvJ\nb9huzHioPVExbhfKNDx5f3sAjnLzb/vteQ4fOuDWdk4fu8ISMuYk6JRQUa03\n0xysyd0ENne41LrzTmJjQLYTqxOjdXV6qix5mAe9jSJoO6Jm5Vp1bk8PMC0l\nPz7xO+dn45eUwKvAXVqDtADVNEcXlO21dUSQuUFJZaSnXgjS6D6MSCM3q/7t\nNRbc5C+iPhgzMaRpDsmE+X8Xq/WrAeoMJ1bMRJfzTP7VhEqix7P9DUFCbpNH\nDMa/NyIpc9I8e8pjpOsBogHH9Yd/Jh9a0+yK8Xz23X9ZmC6al/XXEH1pbq0u\n/W4R\r\n=6TrF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyyUTwvUi7Vj2eSK/FkHWveFBpDwUT2QRmHjPjML1XvAIgMLsKzRUhmmbvmXnW5M1Vv+kd8k6BXSgK7pbYEWrqtf4="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.0.1-test.18_1644343288632_0.3580532851036651"},"_hasShrinkwrap":false},"3.0.1-test.19":{"name":"@danielsharkov/svelte-router","version":"3.0.1-test.19","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"./src/index.ts","types":"./src/index.d.ts","main":"./src/router_c.js","module":"./src/router_es.js","browser":"./src/router.js","unpkg":"./src/router.min.js","svelte":"./src/Router.svelte","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"type":"module","devDependencies":{"@rollup/plugin-node-resolve":"^13.0.6","@rollup/plugin-typescript":"^8.3.0","@tsconfig/svelte":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^5.4.0","rollup":"^2.60.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.44.2","tslib":"^2.3.1","typescript":"^4.5.2"},"readme":"[![Simple, fast & easy to use Svelte Router](https://github.com/DanielSharkov/svelte-router/blob/master/readme-banner.svg)](#)\r\n\r\n[![Live Demo](https://img.shields.io/badge/▶-Live%20Demo-2962ff)](https://danielsharkov.github.io/svelte-router-examples)\r\n[![Examples](https://img.shields.io/badge/🧩-Examples-ff9100)](https://github.com/DanielSharkov/svelte-router-examples)\r\n[![npm version](https://badge.fury.io/js/@danielsharkov%2Fsvelte-router.svg)](https://badge.fury.io/js/@danielsharkov%2Fsvelte-router)\r\n![GitHub](https://img.shields.io/github/license/danielsharkov/svelte-router)\r\n\r\n# 🗂 Index\r\n\r\n- [Installation](#-installation)\r\n- [Initializing a Router Instance](#initializing-a-router-instance)\r\n- [Fallback Route](#fallback-route)\r\n- [Route View Component Props](#route-view-component-props)\r\n- [Route Props](#route-props)\r\n- [Before-Push Hooks](#before-push-hooks)\r\n- [Global Before-Push Hook](#global-before-push-hook)\r\n- [Programmatic History Navigation](#programmatic-history-navigation)\r\n- [Route Updated Event Listener](#route-updated-event-listener)\r\n- [RouteLink Component](#routelink-component)\r\n\t- [RouteLink with Parameters](#routelink-with-parameters)\r\n- [Svelte Action use:link](#svelte-action-uselink)\r\n- [Route Transitions](#route-transitions)\r\n- [Router Examples](#-router-examples)\r\n\r\n<br>\r\n\r\n# 🧗‍♀️ Getting Started\r\n\r\n## 💿 Installation\r\n\r\nJust `npm i --save-dev @danielsharkov/svelte-router` and done 😁 🎉\r\n\r\n<br>\r\n\r\n## Initializing a Router Instance\r\n\r\nInitialize a new router with the configuration in `src/router.ts` or where\r\never you like, maybe even inside `App.svelte` as a module - it's up to you.\r\n\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewUser from './views/User'\r\n\r\nexport default new SvelteRouter({\r\n\twindow: window,\r\n\tscrollingElement: window.document.scrollingElement,\r\n\tbaseUrl: '/persistent/path',\r\n\troutes: {\r\n\t\t'home': {\r\n\t\t\tpath: '/',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t},\r\n\t\t'users.user': {\r\n\t\t\t// paths must always begin with a slash\r\n\t\t\t// and may take parameters prefixed by a colon\r\n\t\t\tpath: '/users/:uid',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t\t'user.album': {\r\n\t\t\t// paths may take multiple parameters\r\n\t\t\tpath: '/users/:uid/albums/:aid',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t},\r\n})\r\n```\r\n\r\n* `window` should usually be assigned the [browser object model](https://www.w3schools.com/js/js_window.asp)\r\nbut can also be used for testing and debugging purposes.\r\n\r\n* `scrollingElement` should usually be assigned the [Document.scrollingElement](https://developer.mozilla.org/en-US/docs/Web/API/document/scrollingElement),\r\nwhich is the usual scrollable viewport. But if your viewport differs you may\r\nthen provid it your needed `Element`. When no `scrollableElement` is provided\r\nthen the router won't save and restore scroll state by the history.\r\n\r\n* `basePath` is an optional field which has the same principle as the HTML\r\n`<Base>` tag. It acts like a prefix to the paths. It's useful in cases like\r\nhosting on GitHub Pages, where the base URL is always `https://<username>.github.io/<repo-name>`\r\nand the base path therefor always is `/<repo-name>`.\r\n\r\n* a route name is required to be unique and is allowed to contain\r\n`a-z`, `A-Z`, `0-9`, `-`, `_` and `.`\r\n\r\n* static routes will always be preferred to their parameterized counterparts.\r\nThis means `user/a/albums` will be preferred to `/user/:id/albums` if the URL\r\nmatches the static route.\r\n\r\nThen use the `Viewport` as the actual visual router in your `App.svelte`\r\npassing it your created router instance:\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\timport {Viewport} from '@danielsharkov/svelte-router'\r\n\timport router from './router'\r\n</script>\r\n\r\n<nav>\r\n\t<button on:click={router.push('home')}>\r\n\t\tHome\r\n\t</button>\r\n\t<button on:click={router.push('home', {uid: 'paul'})}>\r\n\t\tPaul\r\n\t</button>\r\n\t<button on:click={router.push('home', {\r\n\t\tuserId: 'alex', albumId: 'sumer-2016',\r\n\t})}>\r\n\t\tBob\r\n\t</button>\r\n</nav>\r\n\r\n<Viewport {router}/>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Fallback Route\r\n\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewNotFound from './views/NotFound'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'home': {\r\n\t\t\tpath: '/',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t},\r\n\t\t'404': {\r\n\t\t\tpath: '/404',\r\n\t\t\tcomponent: ViewNotFound,\r\n\t\t},\r\n\t},\r\n\tfallback: {\r\n\t\tname: '404',\r\n\t\treplace: false, // true by default\r\n\t},\r\n})\r\n```\r\n\r\n`fallback` is optional and defines the route the router should fallback to in\r\ncase the user navigates to an inexistent URL. If `replace` is `false` then the\r\nfallback will push the route into the browser history and change the URL,\r\notherwise it'll just display the fallback route in the router viewport without\r\naffecting the browser history. `replace` is `true` by default.\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route View Component Props\r\n\r\nThe route view components always get the props `router`, `params`, `urlQuery`\r\nand `props`.\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let router\r\n\t// router: is the SvelteRouter instance you have provided to <Viewport>\r\n\texport let params\r\n\t// params: is either undefined or the parameters you have defined\r\n\t// in the path template for this route in the router config.\r\n\texport let urlQuery\r\n\t// urlQuery: is either undefined or a key:value object depending whether\r\n\t// the URL has any query parameters.\r\n\texport let props\r\n\t// props: is either undefined or the defined props for this route\r\n\t// in the router config.\r\n\r\n\t// We assume that the route parameters always exist, because we defined\r\n\t// them parameters in the path template for this route in the router config -\r\n\t// and they do always exist, because the router won't route on a route\r\n\t// missing its parameters.\r\n\t// You can may access these values without worry of trying to access an\r\n\t// undefined property.\r\n\tconsole.log(params.someParam)\r\n\r\n\t// Same follows for props, they are hard-coded and therefore always defined.\r\n\tconsole.log(props.nav.title)\r\n\r\n\t// Only the urlQuery keys must be checked first, because there's is no\r\n\t// definition for the URL query.\r\n\tif (urlQuery.search) console.log(search)\r\n</script>\r\n\r\n<!-- Here your Layout & Styles ... -->\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route Props\r\n\r\nRoutes can be assigned arbitrary props which are then available in the view\r\ncomponent:\r\n\r\n<sub>**router.ts**</sub>\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewAbout from './views/About'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'root': {\r\n\t\t\tpath: '/',\r\n\t\t},\r\n\t\t'home': {\r\n\t\t\tpath: '/home',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'Home',\r\n\t\t\t\t\ticon: 'fas fa-home',\r\n\t\t\t\t},\r\n\t\t\t\tpicture: 'https://sample.url/picture.jpg',\r\n\t\t\t},\r\n\t\t},\r\n\t\t'about': {\r\n\t\t\tpath: '/about',\r\n\t\t\tcomponent: ViewAbout,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'About me',\r\n\t\t\t\t\ticon: 'fas fa-address-card',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\t},\r\n})\r\n```\r\n\r\n<sub>**views/Home.svelte**</sub>\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let props\r\n</script>\r\n\r\n<!-- We assume that these props always exist,\r\nbecause we hard-code them into the router -->\r\n<h1>{props.nav.title}</h1>\r\n<img src={props.picture} alt='Some beautiful picture'>\r\n```\r\n\r\n<sub>**App.svelte**</sub>\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\timport router from './router'\r\n</script>\r\n\r\n<nav>\r\n\t{#each $router.routes as route}\r\n\t\t{#if route.props?.nav}\r\n\t\t\t<button on:click={router.push(route.name)}>\r\n\t\t\t\t<i class='{route.props.nav.icon}'/>\r\n\t\t\t\t<span>{route.props.nav.title}</span>\r\n\t\t\t</button>\r\n\t\t{/if}\r\n\t{/each}\r\n</nav>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Before-Push Hooks\r\n\r\nThe `beforePush` hooks are promises which are executed before a route is pushed\r\nto the history. The passed function receives an object containing the current\r\n`location`, the `pendingRoute` (which the router is about to navigate to) and both\r\nthe `resolver` and `rejector`. A hook must either resolve (approve) the pending\r\nroute otherwise to reject it by passing an another route, or even\r\nnothing (`undefined`) to cancel routing. It can be used for specifying redirect behavior or\r\nanything else that should be done before a push.\r\n\r\nYou may use the `$router.isLoading` property to determine whether the router is\r\nloading a new route and resolving before push hooks, which may be asynchronous.\r\n\r\n| ⚠ Warning ⚠ |\r\n|:--|\r\nBe sure to always either resolve or reject a hook, otherwise it will **dead-lock** your router.\r\n\r\nSimple example of using a hook:\r\n\r\n```svelte\r\n<script>\r\n\timport {onDestroy} from 'svelte'\r\n\timport router from './router'\r\n\r\n\tconst removeBeforePushHook = router.addBeforePushHook(\r\n\t\t({location, pendingRoute, resolve, reject})=> {\r\n\t\t\tif (pendingRoute.name === '/very/secret/path') {\r\n\t\t\t\treject()\r\n\t\t\t}\r\n\t\t\tresolve()\r\n\t\t}\r\n\t)\r\n\r\n\tonDestroy(()=> {\r\n\t\tremoveBeforePushHook()\r\n\t})\r\n</script>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Global Before-Push Hook\r\n\r\nThe global before push hook is a persistent hook, which can't be removed.\r\nIt's defined right in the router config.\r\nHere's a simple example:\r\n\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport {get as getStore} from 'svelte/store'\r\nimport {isValidUserSession} from 'user_session'\r\n// isValidSession could be any of your implementations - in this example it is\r\n// just a derived store returning false or true\r\n\r\nimport ViewLogin from './views/Login'\r\nimport ViewHome from './views/Home'\r\nimport ViewUser from './views/User'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'root': {\r\n\t\t\tpath: '/',\r\n\t\t},\r\n\t\t'login': {\r\n\t\t\tpath: '/login',\r\n\t\t\tcomponent: ViewLogin,\r\n\t\t},\r\n\t\t'home': {\r\n\t\t\tpath: '/home',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t},\r\n\t\t'user': {\r\n\t\t\tpath: '/user/:uid',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t\t'very-secret': {\r\n\t\t\tpath: '/treasure',\r\n\t\t}\r\n\t},\r\n\tbeforePush({pendingRoute, location, resolve, reject}) {\r\n\t\tif (!getStore(isValidUserSession)) {\r\n\t\t\treject({name: 'login'})\r\n\t\t} else if (pendingRoute.name === 'login') {\r\n\t\t\treject()\r\n\t\t}\r\n\r\n\t\tswitch (pendingRoute) {\r\n\t\tcase 'root':\r\n\t\t\treject({name: 'home'})\r\n\t\t\tbreak\r\n\t\tcase 'user':\r\n\t\t\tif (params.uid === 'a') {\r\n\t\t\t\treject({\r\n\t\t\t\t\tname: pendingRoute.name,\r\n\t\t\t\t\tparams: {uid: 'b'},\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\tbreak\r\n\t\tcase 'very-secret':\r\n\t\t\treject()\r\n\t\t}\r\n\t\tresolve()\r\n\t},\r\n})\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Programmatic History Navigation\r\n\r\nTo programmatically go back or forward in history just use the [browser history API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) or the built-in aliases:\r\n\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let router\r\n</script>\r\n\r\n<button on:click={router.back}>Back</button>\r\n<button on:click={router.forward}>Forward</button>\r\n```\r\n\r\nTo navigate to a new route use the built-in `push` API of the router, which\r\nrequires the route name as the first parameter and if needed a `key:value` object\r\nwith the parameter values:\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\texport let router\r\n</script>\r\n\r\n<button on:click={()=> router.push('home')}>\r\n\tHome\r\n</button>\r\n<button on:click={()=> router.push('user', {uid: 'ndkh2oj2'})}>\r\n\tDennis\r\n</button>\r\n<button on:click={()=> router.push('user', {uid: 'sz92fnkk'})}>\r\n\tErik\r\n</button>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route Updated Event Listener\r\n\r\nThe `routeUpdated` event listener if fired right after the route has been updated.\r\nThe payload in the event is the current location.\r\n\r\n```svelte\r\n<script lang='ts'>\r\nexport let params;\r\n\r\nfunction routeUpdated(event) {\r\n\tconsole.log('Route params changed!', event.detail.params)\r\n\tconsole.log(parms, 'is equal to the event payload')\r\n}\r\n</script>\r\n\r\n<svelte:window on:routeUpdated={routeUpdated}/>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# RouteLink Component\r\nA `<RouteLink>` can only be used inside a `<Viewport>` instance or by\r\npassing it the router instance. You may pass HTML tag attributes like `class`,\r\n`id` and etc. directly to the component - as you'll see in the example below.\r\n\r\n<sub>**router.ts**</sub>\r\n```ts\r\nimport {SvelteRouter} from '@danielsharkov/svelte-router'\r\nimport ViewHome from './views/Home'\r\nimport ViewAbout from './views/About'\r\nimport ViewUser from './views/User'\r\n\r\nexport default new SvelteRouter({\r\n\twindow,\r\n\troutes: {\r\n\t\t'root': {\r\n\t\t\tpath: '/',\r\n\t\t},\r\n\t\t'home': {\r\n\t\t\tpath: '/home',\r\n\t\t\tcomponent: ViewHome,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'Home',\r\n\t\t\t\t\ticon: 'fas fa-home',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\t\t'about': {\r\n\t\t\tpath: '/about',\r\n\t\t\tcomponent: ViewAbout,\r\n\t\t\tprops: {\r\n\t\t\t\tnav: {\r\n\t\t\t\t\ttitle: 'About me',\r\n\t\t\t\t\ticon: 'fas fa-address-card',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\t\t'user': {\r\n\t\t\tpath: '/about/:userName/:userNumber',\r\n\t\t\tcomponent: ViewUser,\r\n\t\t},\r\n\t},\r\n})\r\n```\r\n\r\n<sub>**components/Nav.svelte**</sub>\r\n```svelte\r\n<script>\r\n\timport {RouteLink} from '@danielsharkov/svelte-router'\r\n\timport router from '../router'\r\n</script>\r\n\r\n<nav>\r\n\t{#each $router.routes as route}\r\n\t\t{#if route.props?.nav}\r\n\t\t\t<RouteLink to={route.name} class='nav-btn'>\r\n\t\t\t\t<i class=\"{route.props.nav.icon}\"/>\r\n\t\t\t\t<span>{route.props.nav.title}</span>\r\n\t\t\t</RouteLink>\r\n\t\t{/if}\r\n\t{/each}\r\n</nav>\r\n\r\n<!-- The only disadvantage is that you have to define the styles globally -->\r\n<style>\r\n\t:global(.nav-btn) {\r\n\t\tcolor: #ff3e00;\r\n\t}\r\n</style>\r\n```\r\n\r\n#### RouteLink with parameters\r\n\r\n```svelte\r\n<RouteLink to='user' params={{userName: 'john_doe', userNumber: 0397}}>\r\n\tI'm a router link\r\n</RouteLink>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Svelte Action `use:link`\r\nThe use action can only be used inside a `<Viewport>` instance or by\r\npassing it the router instance. When you're using it inside a `<Viewport>`,\r\nthen leave the parameter `router` blank.\r\n\r\n##### Inside a `<Viewport>`\r\n```svelte\r\n<script>\r\n\timport {link} from '@danielsharkov/svelte-router'\r\n</script>\r\n\r\n<a href='/home' use:link class:active={$router.location === 'home'}>\r\n\tHome\r\n</a>\r\n<a href='/about' use:link class:active={$router.location === 'about'}>\r\n\tAbout\r\n</a>\r\n<a href='/user/lauren/8953' use:link class:active={$router.location === 'home'}>\r\n\tLauren#8953 <!-- matches /user/:userName/:userNumber -->\r\n</a>\r\n\r\n<style>\r\n\ta.active {\r\n\t\tcolor: #ff3e00;\r\n\t}\r\n</style>\r\n```\r\n\r\n##### Outside a `<Viewport>`\r\n```svelte\r\n<script>\r\n\timport {Viewport, link} from '@danielsharkov/svelte-router'\r\n\timport router from './router'\r\n</script>\r\n\r\n<a href='/home' use:link={router}>Home</a>\r\n<a href='/about' use:link={router}>About</a>\r\n<a href='/user/lauren/8953' use:link={router}>Lauren</a>\r\n\r\n<Viewport {router}/>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# Route Transitions\r\nRoute transitions can't be just applied and used on a route easily. If you\r\nwould just add some transitions into the route component and navigate through\r\nthe routes, it will show unexpected behavior (\r\n\tsee Svelte Issues:\r\n\t[#6779](https://github.com/sveltejs/svelte/issues/6779),\r\n\t[#6763](https://github.com/sveltejs/svelte/issues/6763),\r\n\t[and even including my simple REPL](https://svelte.dev/repl/a5122281148c4c458f40e317fc4be11e?version=3.44.2)\r\n).\r\n\r\n**But! Dirty hacks to the rescue:** 😎💡\r\n\r\nTo tell the viewport that a route has a transition you must dispatch the event\r\n`hasOutro` inside the `onMount` handler. Now that the viewport is aware of the\r\noutro transition, it's going to await the route to finish its transition,\r\nbefore switching to the next route.\r\nNow that the router is awaiting the outro, at the end of the transition we have\r\nto tell the viewport that it may switch further to the next route.\r\nThis is done by dispatching the another event called `outroDone`.\r\nThat's the trick!\r\n\r\n| ℹ Info |\r\n|:--|\r\nAny mistaken dispatched event `outroDone` will be ignored by the viewport, as it only listens for the event after the routers location has changed. Meaning you may just dispatch this event on every outro transition without worring.\r\n\r\n| ℹ Info |\r\n|:--|\r\nInside the route component be sure to call the `outroDone` event on the longest outro transition on any element inside the component, as they have to finish as well. For better understanding see the second example below 👇\r\n\r\n| ⚠ Warning ⚠ |\r\n|:--|\r\nBe sure to fire the event `outroDone` after telling the viewport to await the outro transition, otherwise the viewport will wait a indefinitely.\r\n\r\n```svelte\r\n<script lang='ts'>\r\n\timport {onMount, createEventDispatcher} from 'svelte'\r\n\timport {fade} from 'svelte/transition'\r\n\tconst dispatch = createEventDispatcher()\r\n\r\n\tonMount(()=> {\r\n\t\tdispatch('hasOutro')\r\n\t})\r\n</script>\r\n\r\n<div class='page'\r\ntransition:fade={{duration: 400}}\r\non:outroend={()=> dispatch('outroDone')}>\r\n\t<h1>Some content</h1>\r\n\r\n\t<p>Lorem Impsum...</p>\r\n</div>\r\n```\r\n\r\n##### A route containing a child transition\r\n```svelte\r\n<script lang='ts'>\r\n\timport {onMount, createEventDispatcher} from 'svelte'\r\n\timport {fade, fly} from 'svelte/transition'\r\n\tconst dispatch = createEventDispatcher()\r\n\r\n\tonMount(()=> {\r\n\t\tdispatch('hasOutro')\r\n\t})\r\n\t\r\n\tconst custom =()=> ({\r\n\t\tduration: 1000,\r\n\t\tcss: (t)=> (\r\n\t\t\t`opacity: ${t};` +\r\n\t\t\t`transform: rotate(${360 - 360 * t}deg);`\r\n\t\t)\r\n\t})\r\n</script>\r\n\r\n<!-- You may delay the actual route transition, otherwise it will already\r\nfade out and the user will see a blank screen, where it's actually is still\r\nprocessing a child outro. I set it to 600ms, because 1000ms of the longest\r\nchild transition (the heading) minus the 400ms route transition is a delay of 600ms. -->\r\n\r\n<div class='page'\r\ntransition:fade={{duration: 400, delay: 600}}\r\non:outroend={()=> dispatch('outroDone')}>\r\n\t<h1 transition:custom>\r\n\t\tSome content\r\n\t</h1>\r\n\r\n\t<p style='display: inline-block;' transition:fly={{duration: 700}}>\r\n\t\tLorem Impsum...\r\n\t</p>\r\n</div>\r\n```\r\n\r\n\r\n<br>\r\n\r\n--------------------------------------------------------------------------------\r\n<br>\r\n\r\n\r\n# 🧩 Router Examples\r\nYou can find full router examples in [danielsharkov/svelte-router-examples](https://github.com/DanielSharkov/svelte-router-examples)\r\n<br><br><br><br>\r\n\r\n\r\n\r\n# ✨ Thanks for contribution goes to:\r\n[@romshark](https://github.com/romshark)\r\n[@madebyfabian](https://github.com/madebyfabian)\r\n<br><br><br><br>\r\n\r\n\r\n\r\n# ⚖️ License\r\nSvelte Router is a open source software [licensed as MIT](LICENSE).\r\n<br><br><br><br>\r\n\r\n\r\n\r\n# ⚖️ Additional notices\r\nYou may feel free to use the [Logo](https://github.com/DanielSharkov/svelte-router/blob/master/logo.svg), [Animated Logo](https://github.com/DanielSharkov/svelte-router/blob/master/logo-animated.svg) and [Banner](https://github.com/DanielSharkov/svelte-router/blob/master/readme-banner.svg) for non-commercial usage only, but first please ask me kindly. Contact me by email on `scharktv[at]gmail.com`.\r\n","readmeFilename":"README.md","gitHead":"a1bc4bec193d6f40cbe4c29120ea44f4bad5ecbb","_id":"@danielsharkov/svelte-router@3.0.1-test.19","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-h3MRchxSBaTV/ERg9GucpBSv0XpuGUS7mSqkyva31ynhdmdg885hZeEjE6EM0iSRTfqmHUbLPqnT0UEBtuMveA==","shasum":"a5531f3f9d70bd9f79ab6387fbcaf12879c0ec97","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.0.1-test.19.tgz","fileCount":17,"unpackedSize":257815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiA/e2CRA9TVsSAnZWagAAaMoP/itmdQb99NmXUrkUSVax\nlRTXHLJMg8aO8KckTG64SAL8tKObtOFmWwc4JmSQQJAtsB7l1InxTm1BdAvo\nYqcOZR0ab5RRE8VdmpVznZLryhh88t2Wp+8zHpkMsaWUWpGeDkTvi5X41UWf\nvUFTngubO7tfVSWUoKZRR/KiswCWjqiT1rBCj5yYrFD6hytN6XW1HrVXi4d+\nS58Ttr+ENZVqh1+KJH3lwqknQBaZ97wu7Ok0fhMFNVvGS5yw0w7ZJiEWk8mm\nPRBc5dCyHHaRWYgTQz4MUfXFE8ZRacxSssWj1Kbgs6k1F6lQnE/ISOTrQgUK\nOaSeW1GmE1aERD6YZVOZDG/BsxnySHCx4xObnijnMxYUxr2KxC7Bs9lgTBJE\n4LRXmEwoK5TbiW0yLpgwDippirKcpsZAnJY41I+2CrMHzROWqJUbtqTrlFg3\nxgeLSTxy88Six/G7qVC0smTJDu32hI5IOScKyt7UyZc30S0TWD3gBTasu2U0\nQMkosAEQug6BIWmBTGfb5yjwZnfLMzfDpdod6Uih46Bts0IC8PIY4PglKo/W\nu3k6/Oia6x1tsoVi+6BuSlFEY4XcQrNTm61ob0BYoX21F1E9jgalCZBC+2p1\npcVFHrZP0gJAB5kbvB3KT8cH76UaPDmnZBPiHzPDqSdVVS4XzKVOF7EtxNb9\nzrA6\r\n=BD0+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFn0IxF7GVT2Xb/HSGXdwwxNdNXLzmvqUdH5+zolc02EAiEA7C1XDjLiiwG7Ooo8VSNzTrIQDblPqRhPT+4BYEYPJE4="}]},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.0.1-test.19_1644427190124_0.5903346589650711"},"_hasShrinkwrap":false},"3.0.2":{"name":"@danielsharkov/svelte-router","version":"3.0.2","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.3.0","@rollup/plugin-typescript":"^8.4.0","@tsconfig/svelte":"^3.0.0","@typescript-eslint/eslint-plugin":"^5.36.1","@typescript-eslint/parser":"^5.36.1","rollup":"^2.79.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.49.0","tslib":"^2.4.0","typescript":"^4.8.2"},"gitHead":"514d2915baad187ae7d23a682538da365e34914e","_id":"@danielsharkov/svelte-router@3.0.2","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-RuTFqqwzz9R8p9bMBv/b+z1G39yzQR/ckRx65aiIApRohY4tqfPq8Jr4F6yupvtAoUtpo6vVEJJq4QL57ru3Lw==","shasum":"4f0afaafd071189c8f454e9b80715ac98e88ffaa","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.0.2.tgz","fileCount":12,"unpackedSize":73672,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYLp7sSasNlpLHsQtMt0CbFyyg9xJA+nkvSqfbKt//LQIgD/gQri7WZaNhdSwgK5LyffoQL9GZ5gVjkZomesJh6pQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjETGrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpLNQ/+LQEFssviJeU+8qE/x8qCeRmOV8HvOyPpRB2v5VFgPwYru8Wj\r\n2dtib6jPLkohcbnFvZP/XIDfwtAse9iBnl673bBYE8jHB+mb0q6/mOu1mruZ\r\nBI48GbJsX0a7D6MMIm7QqCFltoXWF+3c9TUppTQ9oqXQz3E+mebaKMAMRyy5\r\nch+kkr6vZhLRvcFz7ci++4EZuWdlDS6c2L4kHhZjx8IvBG4GwpxtNT8u/V9W\r\nClDpc834TgE5xKlgaZvzJ/J8I0l28VDF28B9KdYIzkDQfUTcknQQ7SzfX7N8\r\nghhc4u5Iq9ODwIct4NLoUmExwtxUOejcM3Dxh/KhgiDX25S8TAAEEppX7pNQ\r\nnyhRRbBEiVclKQbLsgWsVY0uQN9YqtFhz7QcyvY7QmQX1+agfsoZZ/gMuP7t\r\nkiJ6lWbON9pOd1baMKtNINeO4P32da+oAJnJ5lXeFzhY6u7u5l9atP5lxb10\r\nNTtozPSWuSNVLs/15diytmTgPfn0v8b9TkWqvvwWkUXbsnj0NloXjByZQzsn\r\nQbOabC8o4XWmfamKvwRQCthdQPZkxZxscTGB0p52lyLuWb9F5J4Mmy/kahw4\r\na3UVlB4KdAvMa7VLfrqGfbK2xdaRPHDqbamFOf9O/4eH89vshcgfZo0g+Oak\r\nhQgiWYvW5/QgIbTJBT92t8WTs7d7GH/GXPY=\r\n=oFnf\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.0.2_1662071211251_0.6448479189926424"},"_hasShrinkwrap":false},"3.0.3":{"name":"@danielsharkov/svelte-router","version":"3.0.3","description":"A simple, fast and easy to use svelte router.","license":"MIT","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.github.io/danielsharkov_com"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^13.3.0","@rollup/plugin-typescript":"^8.4.0","@tsconfig/svelte":"^3.0.0","@typescript-eslint/eslint-plugin":"^5.36.1","@typescript-eslint/parser":"^5.36.1","rollup":"^2.79.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.49.0","tslib":"^2.4.0","typescript":"^4.8.2"},"gitHead":"ac72653941f9b63179173c84223f7b16a9fd5bed","_id":"@danielsharkov/svelte-router@3.0.3","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-ZaetR9WLR1P30Toaorw+sa/pxWlKDCSTHn4z6kgEgLypKXaqbGAw0QDRbcLUY12AoUqKaXkEzbWjNqKLPPg48A==","shasum":"4a3d0adf992cbbe999d37f3de60d61e2a0a561d8","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.0.3.tgz","fileCount":13,"unpackedSize":73672,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZzBMwkecCb0I3JZ5uOGVCE+LJ50oJHrau/w31i6WI8AiADvYzj5kjcjwPb/fXwN+RGX8MWMXO/FWG4SFh5y8k0eA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNXyWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp+lQ/+IjXU2d8zE1/wwoqw3H/ubjj5d7JnAEhwC1BgF/GbPP4+j5fg\r\ndrTXVd86UvCzbaOiIGQKlfnNiJfMkUFSdqv3yJ8RhVTgOkuEw5Am/DRgXZLH\r\nlO1nfW4zLR0jk8lbRKUD786kOvaLFcAQSqEFa3ekumaQbDtGeyXPS5gW/xbA\r\nRPrGHxRohKAFvihRMdomIv8GhrQ2ffExvfAHNDNTu9eRnUgD/d3Sq3uP+Nvm\r\niPnJr/8clei+pWl/fHNuwaVXSaLgR9W+D/vxARxPLbrXgU+P5pqLUxVP90mo\r\n/odU2iz5Y/lX7VdwSgcjLeBgwjyGqhEsL8ZyMwCIYyrcqnEfxJA9nJFK2URh\r\nmPfkk6+OdkbZ6YeRaQeAQ90HXvom37moPY4X2qWVZOGLvb83kxytZDu+5qQu\r\ndJveoHH6Dp5QfpiOkBq/mR6OzKM5KEAMRlbU3FC/KP4WHUCFTrCfpzJ0TEav\r\nb9l5iWhl+rnOmr1uhdSOxdBndc0y0FFSyKBrrXR5hx2jru14+U/iXNO4h1bb\r\np4oPvyBA0DEXenJfAn6RB9G2v7031M3dCGfOwqQ4pNVcl1SsQI7r93c6KT4y\r\nfaksneYoWLbhm2QGsp5+GnTvswqG8K3Fb+BZ3SGDWEoKiRlhLcb93dxBYcSz\r\nMXfF3cbxfy/10+gzQ5PLbO+NmXdyvTXZdwE=\r\n=2/n7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.0.3_1664449686783_0.4693002961514592"},"_hasShrinkwrap":false},"3.1.4":{"name":"@danielsharkov/svelte-router","version":"3.1.4","description":"A simple, fast and easy to use svelte router.","license":"MIT","type":"module","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://danielsharkov.com"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^9.0.2","@tsconfig/svelte":"^3.0.0","@typescript-eslint/eslint-plugin":"^5.42.0","@typescript-eslint/parser":"^5.42.0","rollup":"^3.2.5","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.52.0","tslib":"^2.4.1","typescript":"^4.8.4"},"gitHead":"8ecf6e8e0286dc7cd0aae358f735407eb1fe0ab4","_id":"@danielsharkov/svelte-router@3.1.4","_nodeVersion":"16.17.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-57Bp8twrncz8JF1UqidnifL2VoGX03pRzBemp16LbdbGWktPScQVbJ297Ov+fTvFx11G6rZWhEZunyIDv/PeuQ==","shasum":"6609323e63e86b242ada904034491658342b4d7a","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.1.4.tgz","fileCount":12,"unpackedSize":77976,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDWpUuuz5u15XgyOKCVZMYLO/sXViUF0YSrbjKgklNDuAiBXOBnh8XrrR3fQs2UsZaxaxjEG1l/eYfEdiRE2U9dwWw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjaEquACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmownw/8DOUGAFu/S6NJ8Ce+wAe2GY3hrqlah7Lca6W9dyfnkIiuUTxh\r\n7V9H3iGgb91+SNR4tH6SsUubKtufTthfpTsTeHYkEPlfOkyg9WrcVhyf0ZPY\r\nMhJgHzi8R9CbXSs6UMjRySkr0snob3CAOUe1D2ODapEV9rANCm3Ft5mRCYom\r\nimFlSRP9TSsDokWRK28iR+vgvWwfoRqCnZkBglQaC17/YT8gtmpaqgiQX7dF\r\nWDvY6fobcgMMi/mxVPhz+8Ugg1rOBhC+f6UOhqAwk/ddvWijuCMEGmP2E+17\r\n1cSnIiD1zjLt36UkEBDDldhuNdystoKLrHWQMFb8k7TJBrepdGxvnt+3Dwgr\r\nvJPWyPxw0NdMSwp5edczaTF0LpN3xGY3NDWO4HMk7bwzy3f0EpYvsTDZ3s+7\r\nmhCLSAdoypI39vFif+04zxXeUNcq5uKV3gesFW1BoazrjDgV04cPgF3WvjqU\r\nIVCrUjGZKoCn6IlRKcXUFp2jnFDjE0tydzbJh7ajVTju2L0ZPT8gxOIGSPSK\r\nzyjUZf4TrTCqQWthgPz30jtpnykUwwneJmV/ykzfyUuYeNnj6U+eQZRT8EBv\r\nVLA7rAOedA0XZeKD4n6MkjpE8PrvZQwmTWgig12zKtM+j5UeuzLI+A8r+A/z\r\nhhfSxILytvQkqWxBzA5x0qsqLXXTW+h/Yzw=\r\n=TJY8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.1.4_1667779245829_0.38631910226688615"},"_hasShrinkwrap":false},"3.1.5":{"name":"@danielsharkov/svelte-router","version":"3.1.5","description":"A simple, fast and easy to use svelte router.","license":"MIT","type":"module","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://daniel-scharkov.engineer"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","browser":{"import":"./index.mjs","require":"./index.js"},"import":"./index.mjs","require":"./index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^9.0.2","@tsconfig/svelte":"^3.0.0","@typescript-eslint/eslint-plugin":"^5.42.0","@typescript-eslint/parser":"^5.42.0","rollup":"^3.2.5","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.52.0","tslib":"^2.4.1","typescript":"^4.8.4"},"scripts":{"preinstall":"npx only-allow pnpm","build":"rollup -c","lint":"eslint \"src/*.ts\""},"_id":"@danielsharkov/svelte-router@3.1.5","_integrity":"sha512-FssNzqNES42Yo6g41ugWHywDzpcC3buF6b1GW9nJ5gl1xHjOiY4RP3sMtmR4MYMWZ76XHYPRJD6608AlHnDhdw==","_resolved":"/private/var/folders/14/9gcwxb_91bg1zrs90txtlr380000gp/T/ade99de8ec96e58647c57fa7e14fe425/danielsharkov-svelte-router-3.1.5.tgz","_from":"file:danielsharkov-svelte-router-3.1.5.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-FssNzqNES42Yo6g41ugWHywDzpcC3buF6b1GW9nJ5gl1xHjOiY4RP3sMtmR4MYMWZ76XHYPRJD6608AlHnDhdw==","shasum":"9e2461f4130f543ba6962209951d53b2498a7236","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.1.5.tgz","fileCount":12,"unpackedSize":79565,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIgI1RnbsOVCbLGYueL+3nfOjUbsO0PQRvc7E1zxqqjQIhAPzZGaNYRMvDePog+RE5OgYc/DI3IXdsBJdU+0WBzsNp"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjbu+0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+ww/8CS6Qs1JSFdAEpkwRV5dziTj1wMNiWw+UK2jrar01dH35E4bI\r\n68n/TgTnkilR+4TcWasUcnnn+s0cGe5dnCjZIwxtK+5+cwAw5+5BMoTMyx9S\r\nobE4ssiBvHF+cNyMasfxRHHaoBoSeVj6+kq82gK848TLMI53ciletfEXW9lY\r\nsssYXCLcZGvHT1FsMqY95rXdgQGDff/W78ci2lKmqxCR3n0JCg1MDt17Z2MG\r\noxWFYk0di/Elnx2aXuFKsuUvUFGiTv8DsD2GX3zWXCjFpGRM7peOme1T5GQK\r\nO/8u9xXPOGcAREpsmCgRfT2PkLoxR+rVA6ojIN1GtVg0bNQmdD5pekRyqUhT\r\nY7OuUmV9LAdbbR8lBT/mgiUqu3nTZJdAcHFpadMfPKFI89olZtwdvISjcL4u\r\n2NgtJCXRV8oAPNNfYP/6H/3XG1OT7W1fQAWUwpwKxwbnHb7LgMhv92+XXHee\r\nkaOyTV5sD+l0uhzlJDHzH6QrDgHXHZeHQw+RXiyGiCSKiNDaVksshlYHWMsK\r\ngdp8jQ7r39L4QY8sSWLZhsyh5W9ouccv0xE697SqtqwQvonQxUQUurnO3ass\r\ngMPEqVNXpsD94EANN5FIBVF7JJGmalcefD0sBzAG3DRJP3X9Ai04saPFA+Pr\r\nj4tb4cxuTqMqNzB0Df97aqzwVG/dH15LxIA=\r\n=Tk0J\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.1.5_1668214708778_0.7532303823916586"},"_hasShrinkwrap":false},"3.1.6":{"name":"@danielsharkov/svelte-router","version":"3.1.6","description":"A simple, fast and easy to use svelte router.","license":"MIT","type":"module","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://daniel-scharkov.engineer"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/router.js","module":"src/router.mjs","svelte":"src/index.js","scripts":{"preinstall":"npx only-allow pnpm","build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"devDependencies":{"@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^9.0.2","@tsconfig/svelte":"^3.0.0","@typescript-eslint/eslint-plugin":"^5.42.0","@typescript-eslint/parser":"^5.42.0","rollup":"^3.2.5","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.52.0","tslib":"^2.4.1","typescript":"^4.8.4"},"gitHead":"437806a89ab3e2aaeacf3176aa35162755119a06","_id":"@danielsharkov/svelte-router@3.1.6","_nodeVersion":"16.17.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-32LfSYg0cCnteN94XOPjlhbR/fH29D73h9/4iRPesWzZBVSrQJqboKb8w/K/npUxbVJOHisdr6HXIwJtWL03dQ==","shasum":"f02ada4864b9caff122a50369f5a873ea23ee08a","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-3.1.6.tgz","fileCount":12,"unpackedSize":79453,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC307cNIXHQ8i+RuarTCrrCWzwwvg0Py1SZVBxsUHfEeAiEA/S4J+qfB3yA/xnhzM1gND46C7wkKbtyOCxAmM53qxDQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMfQfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmohsQ/+NJ9AoPxLp5WJEubmWAnBba49DKY+Jk/5sLx0uYcBXnYZcnFj\r\n9Zg2gc3YEQ+d+QcvdFbL3bBvb2ly3ybU/icoHkYKl4FdsvCfoI1llF4Ax6ga\r\n5L4nJ9rn49o8sKN5UNALxJC0jn+KvFHS7JxjOGPA0PLL6/vhDO/Blw+0BDl1\r\nA6cX3i/2XLu99VHmn4TaCH4aMJG8s2xmIr/nLW0TlyXpZ8SM28hox9946/VT\r\nV9b785DVg5/AvxXZ/41UurKAiL5dx3qtnsApcMUlUPXhJg/zQ3Ot8grRDnk/\r\nTAAU3agQD4x8V8rbC4mLEvz71tewHLnP7+eXaTAtndytiLD78t6CICh7i4iy\r\nCXrLJrKTKgcpucMd/cVa1jvJtLURH8gpjsi36rpH5UzrbHOKncVRlzxbl6UA\r\nZkCdpaQU9SET1J1OAM+/jrzizOx1lB25ab7PyfbKLT9htqV3W9K6/2Fblb8g\r\n49rDhkB8YikF6MkA6WoYkdamdeMjZ89dGRg6BjcbfzaiNhryjG6EACE/0qEw\r\nVXc/o4+0aRpZi7hteJELHKMdM+/iw2t08RgdFumqBSxxgXG6ERtfrr3m3otO\r\nYT9F3YNOgkBmDCCwXaO05eecoYsVo1NegU15BdvIEOERmLvSSZMpt6BVDjpV\r\npGgkWlrCQN0+FLUNV+Q+qD5z5Y5ZpRTATsQ=\r\n=CidF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_3.1.6_1680995359339_0.1718982574782233"},"_hasShrinkwrap":false},"4.0.0":{"name":"@danielsharkov/svelte-router","version":"4.0.0","description":"A simple, fast and easy to use svelte router. Developed with smooth page transitions in mind.","license":"MIT","type":"module","keywords":["svelte","svelte3","router","typescript","spa"],"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"homepage":"https://github.com/DanielSharkov/svelte-router","repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"authors":[{"name":"Roman Sharkov","email":"roman.scharkov@gmail.com","url":"https://github.com/romshark"},{"name":"Daniel Sharkov","email":"scharktv@gmail.com","url":"https://daniel-scharkov.engineer"}],"publishConfig":{"access":"public"},"private":false,"source":"src/index.ts","types":"src/index.d.ts","main":"src/index.js","module":"src/index.mjs","svelte":"src/index.js","scripts":{"preinstall":"npx only-allow pnpm","build":"rollup -c","lint":"eslint \"src/*.ts\""},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"},"./Viewport":"./src/Viewport.svelte","./RouteLink":"./src/RouteLink.svelte"},"devDependencies":{"@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^9.0.2","@tsconfig/svelte":"^3.0.0","@typescript-eslint/eslint-plugin":"^5.42.0","@typescript-eslint/parser":"^5.42.0","rollup":"^3.2.5","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","svelte":"^3.52.0","tslib":"^2.4.1","typescript":"^4.8.4"},"gitHead":"dfe23fc45b71c0594014302855b7edbe38ce2aa1","_id":"@danielsharkov/svelte-router@4.0.0","_nodeVersion":"16.17.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-mmce/+WiaOA8rfQEH+rsocY1gcglq5FMSBXuJELD4Fl7TCfukqf12wjkZk9tzzPp+H/7uHnTY8DMAhYiyCLLMg==","shasum":"e4e8a78f2b0db7f54c2b09e9060e48aa91fb1e2e","tarball":"https://registry.npmjs.org/@danielsharkov/svelte-router/-/svelte-router-4.0.0.tgz","fileCount":11,"unpackedSize":65605,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBKdyzJDnRqRPOfqBRwtDz2ij7MwgL99161n5LU38d8iAiB1SlCNqvyR5H0RbrFhL/m6A+j9HORWiPnxTpIqyBCDrw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMqpiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo7mw//WeES6+RhGVXdCd50Xxe/9eAXJ0CodOoXizRp9yx1F4S3EyxL\r\n2TpsVrhvlsxvdziuxBDmkmirLipufJyiz8TEQK8DzZn1cwyY+QdnQvBGi/j6\r\ntpj/wVLcFMgsJLFIi9GBkw+dytR6FPIsjLKGk7lcnJZbhKAo1NJ1I0x4o+Lk\r\nRpUBLYS8FqFZizZWMvcLfI9dmBZKwG4NpYpklLTSZ81wOqzTdjQT/+UY+VzG\r\ncm6kZOM5L/Rsf0P5ElBTR8yj/CM+5QZAD9+14Rd/nuiVJLni0siWLhoI9Mr+\r\nArHkaAW804jCEeigPG9LKWMKJ4vCLjPqkthrpaLPHWDxZL8wt4I3+taTiSrC\r\nxKznBNy3ES4PpOrFeMyR9NgJjhS6OF1qm4gtyWA7ktaFYD2LKNOZaAbDH2JO\r\nCtliaGOSs5jYTKkE8wQ9iGxiX1uxCO/t4LnHLB2HZhPdpiIQMw3zken63GgA\r\n3NyyHu7uml6xTgNOOfYmU1z3ohCdqKWRCyeTMM/0hteHYsoKyIolcva3/HNE\r\nj4J++b+I+lSj2+CbCOJ4FD88MqPKjoUMAPTXX91OQRVwCciu8FJoTuneGVrR\r\nrYXI3W/qtZn8ETCukBMTk6aoWu2I9wWqvgP3ROo3Y1b+LtbrL1ekC17lQVB4\r\nr30qrehDoZP5T/Xq5izUMEKJFxc6XXuwFsQ=\r\n=BUXZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"danielsharkov","email":"scharktv@gmail.com"},"directories":{},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/svelte-router_4.0.0_1681042018135_0.5056877410723564"},"_hasShrinkwrap":false}},"time":{"created":"2019-06-12T18:07:10.374Z","1.0.0":"2019-06-12T18:07:10.635Z","modified":"2023-04-09T12:06:58.517Z","1.0.1":"2019-06-12T23:48:13.215Z","1.0.2":"2019-06-13T11:45:01.467Z","1.0.3":"2019-06-20T20:56:05.650Z","1.1.0":"2019-06-23T15:36:03.038Z","1.1.1":"2019-07-06T22:02:03.524Z","1.2.0":"2019-07-06T22:08:45.822Z","1.2.1":"2019-07-06T23:52:03.057Z","1.3.1":"2019-07-21T11:18:16.075Z","1.3.2":"2019-07-28T16:30:37.444Z","1.3.3":"2019-09-01T21:28:28.152Z","1.3.4":"2019-09-12T22:20:46.142Z","1.4.4":"2021-01-23T23:23:34.355Z","1.4.5":"2021-01-24T13:04:44.482Z","1.5.5":"2021-02-24T09:24:23.251Z","2.0.0":"2021-11-21T14:42:21.103Z","2.0.1":"2021-11-21T15:07:11.908Z","2.1.3":"2021-11-22T08:35:19.359Z","2.4.6":"2021-11-27T20:34:25.324Z","2.4.12":"2021-11-28T20:26:29.678Z","3.0.0":"2021-11-29T17:49:13.584Z","3.0.1-test.0":"2022-02-05T23:46:06.841Z","3.0.1-test.1":"2022-02-06T00:21:24.854Z","3.0.1-test.2":"2022-02-06T01:47:40.938Z","3.0.1-test.3":"2022-02-07T19:29:51.091Z","3.0.1-test.4":"2022-02-07T19:37:30.555Z","3.0.1-test.5":"2022-02-07T20:00:29.968Z","3.0.1-test.6":"2022-02-07T20:11:27.719Z","3.0.1-test.7":"2022-02-08T00:37:53.402Z","3.0.1-test.8":"2022-02-08T01:55:25.163Z","3.0.1-test.9":"2022-02-08T02:14:15.619Z","3.0.1-test.10":"2022-02-08T16:42:44.530Z","3.0.1-test.11":"2022-02-08T16:47:04.610Z","3.0.1-test.12":"2022-02-08T16:50:53.304Z","3.0.1-test.13":"2022-02-08T16:53:34.530Z","3.0.1-test.14":"2022-02-08T17:09:04.807Z","3.0.1-test.16":"2022-02-08T17:38:28.205Z","3.0.1-test.17":"2022-02-08T17:53:04.263Z","3.0.1-test.18":"2022-02-08T18:01:28.821Z","3.0.1-test.19":"2022-02-09T17:19:50.295Z","3.0.1-test.20":"2022-02-10T22:10:18.714Z","3.0.2":"2022-09-01T22:26:51.481Z","3.0.3":"2022-09-29T11:08:06.968Z","3.1.4":"2022-11-07T00:00:46.054Z","3.1.5":"2022-11-12T00:58:28.940Z","3.1.6":"2023-04-08T23:09:19.523Z","4.0.0":"2023-04-09T12:06:58.408Z"},"maintainers":[{"name":"danielsharkov","email":"scharktv@gmail.com"}],"description":"A simple, fast and easy to use svelte router. Developed with smooth page transitions in mind.","homepage":"https://github.com/DanielSharkov/svelte-router","keywords":["svelte","svelte3","router","typescript","spa"],"repository":{"type":"git","url":"git+https://github.com/danielsharkov/svelte-router.git"},"bugs":{"url":"https://github.com/DanielSharkov/svelte-router/issues"},"license":"MIT","readme":"[![Simple, fast & easy to use Svelte Router](https://github.com/DanielSharkov/svelte-router/blob/master/readme-banner.svg)](#)\n\n[![Live Demo](https://img.shields.io/badge/▶-Live%20Demo-2962ff)](https://danielsharkov.github.io/svelte-router-examples)\n[![Examples](https://img.shields.io/badge/🧩-Examples-ff9100)](https://github.com/DanielSharkov/svelte-router-examples)\n[![npm version](https://badge.fury.io/js/@danielsharkov%2Fsvelte-router.svg)](https://badge.fury.io/js/@danielsharkov%2Fsvelte-router)\n![GitHub](https://img.shields.io/github/license/danielsharkov/svelte-router)\n[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/TheComputerM/awesome-svelte#readme)\n\n# 🗂 Index\n\n- [Installation](#-installation)\n- [Initializing a Router Instance](#initializing-a-router-instance)\n- [Fallback Route](#fallback-route)\n- [Route View Component Props](#route-view-component-props)\n- [Route Props](#route-props)\n- [Before-Push Hooks](#before-push-hooks)\n- [Global Before-Push Hook](#global-before-push-hook)\n- [Programmatic History Navigation](#programmatic-history-navigation)\n- [Route Updated Event Listener](#route-updated-event-listener)\n- [RouteLink Component](#routelink-component)\n\t- [RouteLink with Parameters](#routelink-with-parameters)\n- [Svelte Action use:link](#svelte-action-uselink)\n- [Route Transitions](#route-transitions)\n- [Lazy loading](#lazy-loading)\n- [Router Examples](#-router-examples)\n\n<br>\n\n# 🧗‍♀️ Getting Started\n\n## 💿 Installation\n\nDepending on your package manager just:\n\n**pnpm**<br>\n`pnpm add -D @danielsharkov/svelte-router`\n\n**yarn**<br>\n`yarn add --dev @danielsharkov/svelte-router`\n\n**npm**<br>\n`npm i -D @danielsharkov/svelte-router`\n\nAnd done 😁 🎉\n\n<br>\n\n## Initializing a Router Instance\n\nInitialize a new router with the configuration in `src/router.ts` or where\never you like, maybe even inside `App.svelte` as a module - it's up to you.\n\n```ts\nimport SvelteRouter from '@danielsharkov/svelte-router'\nimport ViewHome from './views/Home.svelte'\nimport ViewUser from './views/User.svelte'\nimport ViewAlbum from './views/Album.svelte'\n\nexport default new SvelteRouter({\n\twindow: window,\n\tscrollingElement: window.document.scrollingElement,\n\tbasePath: '/persistent/path',\n\troutes: {\n\t\t'home': {\n\t\t\tpath: '/',\n\t\t\tcomponent: ViewHome,\n\t\t},\n\t\t'users.user': {\n\t\t\t// paths must always begin with a slash\n\t\t\t// and may take parameters prefixed by a colon\n\t\t\tpath: '/users/:uid',\n\t\t\tcomponent: ViewUser,\n\t\t},\n\t\t'user.album': {\n\t\t\t// paths may take multiple parameters\n\t\t\tpath: '/users/:uid/albums/:aid',\n\t\t\tcomponent: ViewAlbum,\n\t\t},\n\t},\n})\n```\n\n* `window` should usually be assigned the [browser object model](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)\nbut can also be used for testing and debugging purposes.\n\n* `scrollingElement` should usually be assigned the [Document.scrollingElement](https://developer.mozilla.org/en-US/docs/Web/API/document/scrollingElement),\nwhich is the usual scrollable viewport. But if your viewport differs you may\nthen provid it your needed `Element`. When no `scrollableElement` is provided\nthen the router won't save and restore scroll state by the history.\n\n* `basePath` is an optional field which has the same principle as the HTML\n`<Base>` tag. It acts like a prefix to the paths. It's useful in cases like\nhosting on GitHub Pages, where the base URL is always `https://<username>.github.io/<repo-name>`\nand the base path therefor always is `/<repo-name>`.\n\n* a route name is required to be unique and is allowed to contain\n`a-z`, `A-Z`, `0-9`, `-`, `_` and `.`\n\n* static routes will always be preferred to their parameterized counterparts.\nThis means `user/a/albums` will be preferred to `/user/:id/albums` if the URL\nmatches the static route.\n\nThen use the `Viewport` as the actual visual router in your `App.svelte`\npassing it your created router instance:\n\n```svelte\n<script lang='ts'>\nimport Viewport from '@danielsharkov/svelte-router/Viewport'\nimport router from './router'\n</script>\n\n<nav>\n\t<button on:click={()=> router.push('home')}>\n\t\tHome\n\t</button>\n\t<button on:click={()=> router.push('users.user', {uid: 'paul'})}>\n\t\tPaul\n\t</button>\n\t<button on:click={()=> router.push('user.album', {uid: 'alex', aid: 'sumer-2016'})}>\n\t\tBob's Album\n\t</button>\n</nav>\n\n<Viewport {router}/>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Fallback Route\n\n```ts\nimport SvelteRouter from '@danielsharkov/svelte-router'\nimport ViewHome from './views/Home.svelte'\nimport ViewNotFound from './views/NotFound.svelte'\n\nexport default new SvelteRouter({\n\twindow,\n\troutes: {\n\t\t'home': {\n\t\t\tpath: '/',\n\t\t\tcomponent: ViewHome,\n\t\t},\n\t\t'404': {\n\t\t\tpath: '/404',\n\t\t\tcomponent: ViewNotFound,\n\t\t},\n\t},\n\tfallback: {\n\t\tname: '404',\n\t\treplace: false, // true by default\n\t},\n})\n```\n\n`fallback` is optional and defines the route the router should fallback to in\ncase the user navigates to an inexistent URL. If `replace` is `false` then the\nfallback will push the route into the browser history and change the URL,\notherwise it'll just display the fallback route in the router viewport without\naffecting the browser history. `replace` is `true` by default.\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Route View Component Props\n\nThe route view components always get the props `router`, `params`, `urlQuery`\nand `props`.\n\n```svelte\n<script lang='ts'>\nexport let router\n// router: is the SvelteRouter instance you provided to <Viewport>\n\nexport let params\n// params: is either undefined or the parameters you defined\n// in the path template for this route in the router config.\n\nexport let urlQuery\n// urlQuery: is either undefined or a key:value object depending whether\n// the URL has any query parameters.\n\nexport let props\n// props: is either undefined or the defined props for this route\n// in the router config.\n\n// We assume that the route parameters always exist, because we defined\n// them parameters in the path template for this route in the router config -\n// and they do always exist, because the router won't route on a route\n// missing its parameters.\n// You can may access these values without worry of trying to access an\n// undefined property.\nconsole.log(params.someParam)\n\n// Same follows for props, they are hard-coded and therefore always defined.\nconsole.log(props.nav.title)\n\n// Only the urlQuery keys must be checked first, because there's is no\n// definition for the URL query.\nif (urlQuery.search) console.log(search)\n</script>\n\n<!-- Here your Layout & Styles ... -->\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Route Props\n\nRoutes can be assigned arbitrary props which are then available in the view\ncomponent:\n\n<sub>**router.ts**</sub>\n```ts\nimport SvelteRouter from '@danielsharkov/svelte-router'\nimport ViewHome from './views/Home.svelte'\nimport ViewAbout from './views/About.svelte'\n\nexport default new SvelteRouter({\n\twindow,\n\troutes: {\n\t\t'root': {\n\t\t\tpath: '/',\n\t\t},\n\t\t'home': {\n\t\t\tpath: '/home',\n\t\t\tcomponent: ViewHome,\n\t\t\tprops: {\n\t\t\t\tnav: {\n\t\t\t\t\ttitle: 'Home',\n\t\t\t\t\ticon: 'fas fa-home',\n\t\t\t\t},\n\t\t\t\tpicture: 'https://sample.url/picture.jpg',\n\t\t\t},\n\t\t},\n\t\t'about': {\n\t\t\tpath: '/about',\n\t\t\tcomponent: ViewAbout,\n\t\t\tprops: {\n\t\t\t\tnav: {\n\t\t\t\t\ttitle: 'About me',\n\t\t\t\t\ticon: 'fas fa-address-card',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n})\n```\n\n<sub>**views/Home.svelte**</sub>\n\n```svelte\n<script lang='ts'>\nexport let props\n</script>\n\n<!-- We assume that these props always exist,\nbecause we hard-coded them into the router -->\n<h1>{props.nav.title}</h1>\n<img src={props.picture} alt='Some beautiful picture'>\n```\n\n<sub>**App.svelte**</sub>\n\n```svelte\n<script lang='ts'>\nimport router from './router'\n</script>\n\n<nav>\n\t{#each $router.routes as route}\n\t\t{#if route.props?.nav}\n\t\t\t<button on:click={router.push(route.name)}>\n\t\t\t\t<i class='{route.props.nav.icon}'/>\n\t\t\t\t<span>{route.props.nav.title}</span>\n\t\t\t</button>\n\t\t{/if}\n\t{/each}\n</nav>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Before-Push Hooks\n\nThe `beforePush` hooks are promises which are executed before a route is pushed\nto the history. The passed function receives an object containing the current\n`location`, the `pendingRoute` (which the router is about to navigate to) and both\nthe `resolver` and `rejector`. A hook must either resolve (approve) the pending\nroute otherwise to reject it by passing an another route, or even\nnothing (`undefined`) to cancel routing. It can be used for specifying redirect behavior or\nanything else that should be done before a push.\n\nYou may use the `$router.isLoading` property to determine whether the router is\nloading a new route and resolving before push hooks, which may be asynchronous.\n\n| ⚠ Warning ⚠ |\n|:--|\nBe sure to always either resolve or reject a hook, otherwise it will **dead-lock** your router.\n\nSimple example of using a hook:\n\n```svelte\n<script>\nimport {onDestroy} from 'svelte'\nimport router from './router'\n\nconst testHookID = 'test-hook'\nconst removeBeforePushHook = router.addBeforePushHook(\n\ttestHookID,\n\t({location, pendingRoute, resolve, reject})=> {\n\t\tif (pendingRoute.name === '/very/secret/path') {\n\t\t\treject()\n\t\t}\n\t\tresolve()\n\t}\n)\n\nonDestroy(()=> {\n\tremoveBeforePushHook()\n\t// or\n\t// router.removeBeforePush(testHookID)\n})\n</script>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Global Before-Push Hook\n\nThe global before push hook is a persistent hook, which can't be removed.\nIt's defined right in the router config.\nHere's a simple example:\n\n```ts\nimport SvelteRouter from '@danielsharkov/svelte-router'\nimport {get as get$} from 'svelte/store'\nimport {isValidUserSession} from 'user_session'\n// isValidSession could be any of your implementations - in this example it is\n// just a derived store returning false or true\n\nimport ViewLogin from './views/Login.svelte'\nimport ViewHome from './views/Home.svelte'\nimport ViewUser from './views/User.svelte'\n\nexport default new SvelteRouter({\n\twindow,\n\troutes: {\n\t\t'root': {\n\t\t\tpath: '/',\n\t\t},\n\t\t'login': {\n\t\t\tpath: '/login',\n\t\t\tcomponent: ViewLogin,\n\t\t},\n\t\t'home': {\n\t\t\tpath: '/home',\n\t\t\tcomponent: ViewHome,\n\t\t},\n\t\t'user': {\n\t\t\tpath: '/user/:uid',\n\t\t\tcomponent: ViewUser,\n\t\t},\n\t\t'very-secret': {\n\t\t\tpath: '/treasure',\n\t\t}\n\t},\n\tbeforePush({pendingRoute, location, resolve, reject}) {\n\t\tif (!get$(isValidUserSession)) {\n\t\t\treject({name: 'login'})\n\t\t} else if (pendingRoute.name === 'login') {\n\t\t\treject()\n\t\t}\n\n\t\tswitch (pendingRoute) {\n\t\tcase 'root':\n\t\t\treject({name: 'home'})\n\t\t\tbreak\n\t\tcase 'user':\n\t\t\tif (params.uid === 'a') {\n\t\t\t\treject({\n\t\t\t\t\tname: pendingRoute.name,\n\t\t\t\t\tparams: {uid: 'b'},\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'very-secret':\n\t\t\treject()\n\t\t}\n\t\tresolve()\n\t},\n})\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Programmatic History Navigation\n\nTo programmatically go back or forward in history just use the [browser history API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) or the built-in aliases:\n\n\n```svelte\n<script lang='ts'>\nimport type SvelteRouter from '@danielsharkov/svelte-router'\nexport let router: SvelteRouter\n</script>\n\n<button on:click={router.back}>Back</button>\n<button on:click={router.forward}>Forward</button>\n```\n\nTo navigate to a new route use the built-in `push` API of the router, which\nrequires the route name as the first parameter and if needed a `key:value` object\nwith the parameter values:\n\n```svelte\n<script lang='ts'>\nimport type SvelteRouter from '@danielsharkov/svelte-router'\nexport let router: SvelteRouter\n</script>\n\n<button on:click={()=> router.push('home')}>\n\tHome\n</button>\n<button on:click={()=> router.push('user', {uid: 'ndkh2oj2'})}>\n\tDennis\n</button>\n<button on:click={()=> router.push('user', {uid: 'sz92fnkk'})}>\n\tErik\n</button>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Route Updated Event Listener\n\nThe `routeUpdated` event listener if fired right after the route has been updated.\nThe payload in the event is the current location.\n\n```svelte\n<script lang='ts'>\nexport let params;\n\nfunction routeUpdated(event) {\n\tconsole.log('Route params changed!', event.detail.params)\n\tconsole.log(parms, 'is equal to the event payload')\n}\n</script>\n\n<svelte:window on:routeUpdated={routeUpdated}/>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# RouteLink Component\nA `<RouteLink>` can only be used inside a `<Viewport>` instance or by\npassing it the router instance. You may pass HTML tag attributes like `class`,\n`id` and etc. directly to the component - as you'll see in the example below.\n\n<sub>**router.ts**</sub>\n```ts\nimport SvelteRouter from '@danielsharkov/svelte-router'\nimport ViewHome from './views/Home.svelte'\nimport ViewAbout from './views/About.svelte'\nimport ViewUser from './views/User.svelte'\n\nexport default new SvelteRouter({\n\twindow,\n\troutes: {\n\t\t'root': {\n\t\t\tpath: '/',\n\t\t},\n\t\t'home': {\n\t\t\tpath: '/home',\n\t\t\tcomponent: ViewHome,\n\t\t\tprops: {\n\t\t\t\tnav: {\n\t\t\t\t\ttitle: 'Home',\n\t\t\t\t\ticon: 'fas fa-home',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t'about': {\n\t\t\tpath: '/about',\n\t\t\tcomponent: ViewAbout,\n\t\t\tprops: {\n\t\t\t\tnav: {\n\t\t\t\t\ttitle: 'About me',\n\t\t\t\t\ticon: 'fas fa-address-card',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t'user': {\n\t\t\tpath: '/about/:userName/:userNumber',\n\t\t\tcomponent: ViewUser,\n\t\t},\n\t},\n})\n```\n\n<sub>**components/Nav.svelte**</sub>\n```svelte\n<script>\nimport RouteLink from '@danielsharkov/svelte-router/RouteLink'\nimport router from '../router'\n</script>\n\n<nav>\n\t{#each $router.routes as route}\n\t\t{#if route.props?.nav}\n\t\t\t<RouteLink to={route.name} class='nav-btn'>\n\t\t\t\t<i class=\"{route.props.nav.icon}\"/>\n\t\t\t\t<span>{route.props.nav.title}</span>\n\t\t\t</RouteLink>\n\t\t{/if}\n\t{/each}\n</nav>\n\n<!-- The only disadvantage is that you have to define the styles globally -->\n<style>\n:global(.nav-btn) {\n\tcolor: #ff3e00;\n}\n</style>\n```\n\n#### RouteLink with parameters\n\n```svelte\n<RouteLink to='user' params={{userName: 'john_doe', userNumber: 0397}}>\n\tI'm a router link\n</RouteLink>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Svelte Action `use:link`\nThe use action can only be used inside a `<Viewport>` instance or by\npassing it the router instance. When you're using it inside a `<Viewport>`,\nthen leave the parameter `router` blank.\n\n##### Inside a `<Viewport>`\n```svelte\n<script>\nimport {link} from '@danielsharkov/svelte-router'\n</script>\n\n<a href='/home' use:link class:active={$router.location === 'home'}>\n\tHome\n</a>\n<a href='/about' use:link class:active={$router.location === 'about'}>\n\tAbout\n</a>\n<a href='/user/lauren/8953' use:link class:active={$router.location === 'home'}>\n\tLauren#8953 <!-- matches /user/:userName/:userNumber -->\n</a>\n\n<style>\na.active {\n\tcolor: #ff3e00;\n}\n</style>\n```\n\n##### Outside a `<Viewport>`\n```svelte\n<script>\nimport {link} from '@danielsharkov/svelte-router'\nimport Viewport from '@danielsharkov/svelte-router/Viewport'\nimport router from './router'\n</script>\n\n<a href='/home' use:link={router}>Home</a>\n<a href='/about' use:link={router}>About</a>\n<a href='/user/lauren/8953' use:link={router}>Lauren</a>\n\n<Viewport {router}/>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# Route Transitions\nRoute transitions can't be just applied and used on a route easily. If you\nwould just add some transitions into the route component and navigate through\nthe routes, it will show unexpected behavior (\n\tsee Svelte Issues:\n\t[#6779](https://github.com/sveltejs/svelte/issues/6779),\n\t[#6763](https://github.com/sveltejs/svelte/issues/6763),\n\t[and even including my simple REPL](https://svelte.dev/repl/a5122281148c4c458f40e317fc4be11e?version=3.44.2)\n).\n\n**But! Dirty hacks to the rescue:** 😎💡\n\nTo tell the viewport that a route has a transition you must dispatch the event\n`hasOutro` inside the `onMount` handler. Now that the viewport is aware of the\noutro transition, it's going to await the route to finish its transition,\nbefore switching to the next route.\nNow that the router is awaiting the outro, at the end of the transition we have\nto tell the viewport that it may switch further to the next route.\nThis is done by dispatching the another event called `outroDone`.\nThat's the trick!\n\n| ℹ Info |\n|:--|\nAny mistaken dispatched event `outroDone` will be ignored by the viewport, as it only listens for the event after the routers location has changed. Meaning you may just dispatch this event on every outro transition without worring.\n\n| ℹ Info |\n|:--|\nInside the route component be sure to call the `outroDone` event on the longest outro transition on any element inside the component, as they have to finish as well. For better understanding see the second example below 👇\n\n| ⚠ Warning ⚠ |\n|:--|\nBe sure to fire the event `outroDone` after telling the viewport to await the outro transition, otherwise the viewport will wait a indefinitely.\n\n```svelte\n<script lang='ts'>\nimport {onMount, createEventDispatcher} from 'svelte'\nimport {fade} from 'svelte/transition'\nconst dispatch = createEventDispatcher()\n\nonMount(()=> {\n\tdispatch('hasOutro')\n})\n</script>\n\n<div class='page'\ntransition:fade={{duration: 400}}\non:outroend={()=> dispatch('outroDone')}>\n\t<h1>Some content</h1>\n\n\t<p>Lorem Impsum...</p>\n</div>\n```\n\n##### A route containing a child transition\n```svelte\n<script lang='ts'>\nimport {onMount, createEventDispatcher} from 'svelte'\nimport {fade, fly} from 'svelte/transition'\nconst dispatch = createEventDispatcher()\n\nonMount(()=> {\n\tdispatch('hasOutro')\n})\n\nconst custom =()=> ({\n\tduration: 1000,\n\tcss: (t)=> (\n\t\t`opacity: ${t};` +\n\t\t`transform: rotate(${360 - 360 * t}deg);`\n\t)\n})\n</script>\n\n<!-- You may delay the actual route transition, otherwise it will already\nfade out and the user will see a blank screen, where it's actually is still\nprocessing a child outro. I set it to 600ms, because 1000ms of the longest\nchild transition (the heading) minus the 400ms route transition is a delay of 600ms. -->\n\n<div class='page'\ntransition:fade={{duration: 400, delay: 600}}\non:outroend={()=> dispatch('outroDone')}>\n\t<h1 transition:custom>\n\t\tSome content\n\t</h1>\n\n\t<p style='display: inline-block;' transition:fly={{duration: 700}}>\n\t\tLorem Impsum...\n\t</p>\n</div>\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# 🥱 Lazy loading\nTo lazy load components you would need to set the field `lazyComponent` instead\nof `component`. The router will panic when using both, as it makes no sense.\nYou may even provide a `loading` and `fallback` component, which act like a\nregular route component, meaning they [can be smoothly transitioned](#route-transitions) as well.\n\n```ts\nimport SvelteRouter from '@danielsharkov/svelte-router'\nimport RouteLoading from './components/RouteLoading.svelte'\nimport RouteLoadFailedFallback from './components/RouteLoadFailedFallback.svelte'\n\nimport ViewHome from './views/Home.svelte'\nimport ViewNotFound from './views/NotFound.svelte'\n\nexport default new SvelteRouter({\n\twindow: window,\n\tscrollingElement: window.document.scrollingElement,\n\troutes: {\n\t\t'home': {\n\t\t\tpath: '/',\n\t\t\tcomponent: ViewHome,\n\t\t},\n\t\t'users.user': {\n\t\t\tpath: '/users/:uid',\n\t\t\tlazyComponent: {\n\t\t\t\t// lazy load and show this component:\n\t\t\t\tcomponent: async ()=> (await import('./views/User.svelte')).default,\n\t\t\t\t// when the actual route component is loading show:\n\t\t\t\tloading: RouteLoading,\n\t\t\t\t// in case it fails loading the component show:\n\t\t\t\tfallback: RouteLoadFailedFallback,\n\t\t\t},\n\t\t},\n\t\t'user.album': {\n\t\t\tpath: '/users/:uid/albums/:aid',\n\t\t\tlazyComponent: {\n\t\t\t\tcomponent: async ()=> (await import('./views/Album.svelte')).default,\n\t\t\t\tloading: RouteLoading,\n\t\t\t\tfallback: RouteLoadFailedFallback,\n\t\t\t},\n\t\t},\n\t\t// this route below will never load, it would always first show the\n\t\t// loading and then the fallback component after 2 seconds\n\t\t'will-never-load': {\n\t\t\tpath: '/users/:uid/albums/:aid',\n\t\t\tlazyComponent: {\n\t\t\t\tcomponent: async ()=> new Promise((_, reject)=> setTimeout(reject, 2e3)),\n\t\t\t\tloading: RouteLoading,\n\t\t\t\tfallback: RouteLoadFailedFallback,\n\t\t\t},\n\t\t},\n\t\t'404': {\n\t\t\tpath: '/404',\n\t\t\t// This component mustn't be lazy loaded, as it makes no sense.\n\t\t\t// Still though it's possible.\n\t\t\tcomponent: ViewNotFound,\n\t\t},\n\t},\n\tfallback: {name: '404'},\n})\n```\n\n\n<br>\n\n--------------------------------------------------------------------------------\n<br>\n\n\n# 🧩 Router Examples\nYou can find full router examples in [danielsharkov/svelte-router-examples](https://github.com/DanielSharkov/svelte-router-examples)\n<br><br><br><br>\n\n\n\n# ✨ Thanks for contribution goes to:\n[@romshark](https://github.com/romshark)\n[@madebyfabian](https://github.com/madebyfabian)\n<br><br><br><br>\n\n\n\n# ⚖️ License\nSvelte Router is a open source software [licensed as MIT](LICENSE).\n<br><br><br><br>\n\n\n\n# ⚖️ Additional notices\nYou may feel free to use the [Logo](https://github.com/DanielSharkov/svelte-router/blob/master/logo.svg), [Animated Logo](https://github.com/DanielSharkov/svelte-router/blob/master/logo-animated.svg) and [Banner](https://github.com/DanielSharkov/svelte-router/blob/master/readme-banner.svg) for non-commercial usage only, but first please ask me kindly. Contact me by email on `scharktv[at]gmail.com`.\n","readmeFilename":"README.md"}