{"_id":"@aofl/router","_rev":"157-44767753a7845d4a19b2bc32da2cff77","name":"@aofl/router","dist-tags":{"next":"2.1.0-alpha.9","next-alpha":"3.0.0-alpha.12","beta":"3.5.0-beta.22","alpha":"4.0.0-alpha.45","latest":"3.14.1"},"versions":{"1.0.0-beta.20":{"name":"@aofl/router","version":"1.0.0-beta.20","author":{"name":"Micah Blu"},"license":"ISC","_id":"@aofl/router@1.0.0-beta.20","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"dist":{"shasum":"a8f6b256488184c6c569321b446ba157a466bcc1","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.20.tgz","fileCount":17,"integrity":"sha512-RRW10imIyAkatp6iFvT5GK6k7Qt75zVAHOL1K6cI2jmFUlwemrVXyA9e8kLKytPgKa/uwTTcG6/YtCOEg3zlIg==","signatures":[{"sig":"MEUCIQCymYfYtav+BJipVkjrHovSrHfakB4fWWfTWM5Ad4BchgIgV2kh90Og/4a6Cj20hB9ULEb8ryyYCl5OpwRqE5e5yD0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30698,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV8HVCRA9TVsSAnZWagAAURkP/izeSVy0ZeqC01AQlqYS\nXOAVUBy0keDe+Q/X7llNg0NvC0bkSuhWjXZOrng2DOxZQv+FEhCez/LOV2Is\nLltk397q3UOqCCeI0fH0KJ7ZX3nJxKkvYtLvMxwmV4O+LpWSUxSfwekPLa+i\nKwglomQgrM8zCWXhJ6r9HW8c2g56WnVozJH94EiPnCRNIXHG6Ck9dxyZqQHx\nKDHCppIEpflNecuDBUmeONo38RFgVxE0dum5UTWKK5e4heSV47U4rB9Zm34S\n7E7oPTdqKLQRdsOZdEEnSZzrRan608MrqiprO6HZvfcSEmqAx9Gdn/6u2JjW\n64QGIHAJRdNlsiJk7/Nhoh54jMcGqQMJ4baquKd6pEByYMaXn+SoaGOeDhUp\no744tozfinbFc8XlcV4WweZmnzKNxxhB7IlIDrn905UrapkSs9DIY0OuYQ2U\nfm7s0MiMiFGE3WoHCw0O5pPVeYhoEO6StnAzVb0n7wkL6SxpGHiz360WjgD9\nPkiOcZnR6j+XOwjRTzrdUonbn2b/lq9OtNM9sSMOMlLjipq8jvba1mwHooeg\nzRnK1cirS7AwDaVvvpS/fm2klWr9166ZkSuO+wSYuC26ixFy9fHv3r7aiFbT\nMLf00TnjNnmJTS0LVjuAaqUshWVklg5jp+ZrytRhtsSwOIYcxmP5sfkVJ0wU\nKRxA\r\n=dTHH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"src/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"_npmVersion":"6.2.0","description":"AofL Router","directories":{},"_nodeVersion":"8.11.3","dependencies":{"path-to-regexp":"^2.2.1","@aofl/middleware":"^1.0.0-beta.20"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.20_1532477909675_0.2772020147810801","host":"s3://npm-registry-packages"}},"1.0.0-beta.21":{"name":"@aofl/router","version":"1.0.0-beta.21","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.21","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"dist":{"shasum":"95fc31e6ff335e52b6450ea44d50e0ce8945909c","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.21.tgz","fileCount":22,"integrity":"sha512-L6Kh6d5l1hS5Ys/gpdfaCEVulJWn+xjNBBtuitOaJCpI4qQq6e20MQnysO2LYLV9lWhEUGnHRKZTa8m9NJXZrw==","signatures":[{"sig":"MEYCIQCbMht1TyPC/1taWkxuTiOizFYRYZYOeAq+8F+VKNa/mwIhALRH6zmKkMzHxRgzSl2JoqUWedj/dYqDLTjwdVPxrm3h","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZqoUCRA9TVsSAnZWagAACcIQAKJjwXUtifDdHTW1cJS+\nbp+U0wp7y2aqsncQSYvtryfuAMA9gf5AweLJkbie/1ZCMWxfvXa7zMY61m+x\nArl1UuuEVgG4JfrJ9rvW/7NBx6VBj3oYcd1HCvubniY51fQNVsjACgu8Kulv\nmxzVXswbp0oOY40Zv3HIcJd+zEui4AEWgQWo6vTQNOvnML8wUIH75LtoDDbt\nLAz+iH3dhv3tT2tMlcYuy7v3FYcQ3iLXshsXTDJOGMHC6oi8XoMQ/UqKScA1\n8V3fvgs3qc8F1m9usD5MU36Pv8jo9WLsuYOZ5TvUrvMrtAJTMUp6HCwPH/n0\nTmVxe5N5ML6obQl2+flw8N3lhnvFj/P6vKui1Jk9KsP5MXb47qie0erSVVjw\nT19vTak9K0LJrzMA85UfNZHX4eaYVwO2j69Io0F3NHq3rzeg0dr/nE1oGidP\ns1wgjbtbqzI1pKPyiiHaoPrC4A5gd93/07H0XQv6r/Dq/bqT7qKl3HF9zQRE\ndmQu42xMqFJszAS6hO+gZ/tYcSUtmIux8kX9pKnjPo/VLK+M4DLWvl2EcLTO\naZUfuwobfWIPJKT6hYOg6IyWwuJ62tluQxooAMl0Q+vzo5USL4lqCSOXm8rf\nm/DBCPxZEyDB35Z7IbHIc8Bv3Ev1KY/M6NkBTIJbPyGfRsrN/MrKr5Sszb4y\nlL6Q\r\n=8Ae8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# AOFL ROUTER\n\n## Getting started\n\n`npm i @aofl/aofl-router`\n\n### Basic usage\n\n_Sample route config and router instantiation \"my-router.js\"_\n\n```js\nimport Router from '@aofl/router';\n\nconst config = [\n  {\n    url : '/',\n    resolve: () => import('./pages/home.html'),\n    default: true,\n  },\n  {\n    url: '/about/:person',\n    resolve: () => import('./pages/about.html')\n  },\n  {\n    url: '/about/:person/:occupation',\n    resolve: () => import('./pages/occupation.html')\n  }\n];\n\nconst myRouter = new Router(config);\n\nexport default myRouter;\n```\n\n_Create a Link to component_\n\n```js\n\nimport {LitElement, html} from '@polymer/lit-element';\nimport myRouter from 'my-router';\n\nclass LinkTo extends LitElement {\n  constructor() {\n    super();\n  }\n  __onClick() {\n    myRouter.navigate(this.href);\n  }\n\n  static get properties() {\n    return {\n      href: String\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('click', (e) => {\n      e.stopPropegation();\n    }, true);\n\n  }\n  _render() {\n    return html`<slot></slot>`;\n  }\n}\ncustomElements.define('link-to', LinkTo);\n```\n\n__Usage__\n```html\n  <nav>\n    <link-to href=\"/\"><a href=\"/\">Go Home</a></link-to>\n    <link-to href=\"/about/bob\"><a href=\"/about/bob\">About Bob</a></link-to>\n    <link-to href=\"/about/bob/plumber\"><a href=\"/about/bob/plumber\">About Bob the Plumber</a></link-to>\n  </nav>\n```\n\n## Adding middleware\n\nMiddlewares of each type (before, beforeEach, afterEach, after) are called in the order in which they were registered within their group.\n\n__Middleware callback signature__\n```js\nrouter[before|beforeEach|afterEach|after].(function(request, response, next) {})\n```\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Middleware hooks\n\n__Router.before(fn)__\n\nExecutes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point.\n\n__Router.beforeEach(fn)__\n\nExectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here.\n\n__Router.afterEach(fn)__\n\nExectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored.\n\n__Router.after(fn)__\n\nMiddleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve()` method on the `matchedRoute` object so that the view's component can be fetched and the view updated.","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git@gitlab.aofl.com:CoreJS/aofl-os.git","type":"git"},"_npmVersion":"6.2.0","description":"AofL Router","directories":{},"_nodeVersion":"8.9.0","dependencies":{"@aofl/middleware":"^1.0.0-beta.21"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.21_1533454867817_0.9859292005825149","host":"s3://npm-registry-packages"}},"1.0.0-beta.22":{"name":"@aofl/router","version":"1.0.0-beta.22","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.22","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"dist":{"shasum":"0b982c2424fe3dbc8b2fb2fc23e65656492ac848","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.22.tgz","fileCount":22,"integrity":"sha512-ZK02ovtpX65rKqDjQ4Dr3bA/8aL7qOFRzr5dE51Hz/Adyo0B0WHjpuK8klKj+w1om+AorBW+04hdguIM2AkMMg==","signatures":[{"sig":"MEUCIQCB3MFCqcqqPfMp7fpZVRQet5UdmYUqaa46/YyRLCW65AIgH1ZyKUoP1jH5FBvceDtXfHQIQWk+sDAeenB4qglLZ3c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbeeLCRA9TVsSAnZWagAAJtMP/3hwhKIFaQBHaPUbTyNS\niNbhHXMHu4I2k9Liw/kIv4h7QeW7qO+ZFqZcJ9S4bcekXhWkgDGU6Iiy3nmN\n4lF6ag23hlBbkRx/7+mFwLoN+BpmXoUNgIU5a/GHltlJIDBxqLGmXalc0Afc\nrg2MDTpOOex0HysDFBcb7GhQMw9wVzyLaVg0Z0/MouliLetd5xIzxQijlz4A\nbbTx2PNHEmQhOQ7/K0A8yei9K8f7coGw4ubv9Vt6Grm7zZLMm/wyRNbiwK1N\nPBexiChf2gf2bFzGwx9U4Vujrh74yo16TbcKMTXqBoViYj0cpxH5ROIl1e9/\nvdTH5WuWF6s4J/xUVyikf1glJBolNxYY9U3CcOYcgtSukKwFl9fxLZhBJNwE\nd1KydI9vEPsEhe6uBoPsVEeTQultkIDkBXAO1aqMeNEnzOTMtTrBNgjOGwp2\nmEpfFwljHR99IEOv3rc9MD9VICSR/9s7R1kB8oVt0ZEnKgmhSRi/Vbi8QIEB\nR9w1BKGmZBa87mgm9tdO1hgMf9INUq9RQu31ZWymmztURn3R1f46SM8AtTTP\nEX3WdvP7vJW/gn4OxSt0wTc8sHz/cg02y2g1L8Q+xJTW3ZllUnIzAEzXnYe2\nxgAUiZbZhEGA8cW16FJ9ie9psmFlqPsj4oTAuqOOOsB25K9D4VOZJWThUjaz\nY3PB\r\n=jS9/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# AOFL ROUTER\n\n## Getting started\n\n`npm i @aofl/aofl-router`\n\n### Basic usage\n\n_Sample route config and router instantiation \"my-router.js\"_\n\n```js\nimport Router from '@aofl/router';\n\nconst config = [\n  {\n    url : '/',\n    resolve: () => import('./pages/home.html'),\n    default: true,\n  },\n  {\n    url: '/about/:person',\n    resolve: () => import('./pages/about.html')\n  },\n  {\n    url: '/about/:person/:occupation',\n    resolve: () => import('./pages/occupation.html')\n  }\n];\n\nconst myRouter = new Router(config);\n\nexport default myRouter;\n```\n\n_Create a Link to component_\n\n```js\n\nimport {LitElement, html} from '@polymer/lit-element';\nimport myRouter from 'my-router';\n\nclass LinkTo extends LitElement {\n  constructor() {\n    super();\n  }\n  __onClick() {\n    myRouter.navigate(this.href);\n  }\n\n  static get properties() {\n    return {\n      href: String\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('click', (e) => {\n      e.stopPropegation();\n    }, true);\n\n  }\n  _render() {\n    return html`<slot></slot>`;\n  }\n}\ncustomElements.define('link-to', LinkTo);\n```\n\n__Usage__\n```html\n  <nav>\n    <link-to href=\"/\"><a href=\"/\">Go Home</a></link-to>\n    <link-to href=\"/about/bob\"><a href=\"/about/bob\">About Bob</a></link-to>\n    <link-to href=\"/about/bob/plumber\"><a href=\"/about/bob/plumber\">About Bob the Plumber</a></link-to>\n  </nav>\n```\n\n## Adding middleware\n\nMiddlewares of each type (before, beforeEach, afterEach, after) are called in the order in which they were registered within their group.\n\n__Middleware callback signature__\n```js\nrouter[before|beforeEach|afterEach|after].(function(request, response, next) {})\n```\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Middleware hooks\n\n__Router.before(fn)__\n\nExecutes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point.\n\n__Router.beforeEach(fn)__\n\nExectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here.\n\n__Router.afterEach(fn)__\n\nExectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored.\n\n__Router.after(fn)__\n\nMiddleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve()` method on the `matchedRoute` object so that the view's component can be fetched and the view updated.","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git@gitlab.aofl.com:CoreJS/aofl-os.git","type":"git"},"_npmVersion":"6.2.0","description":"AofL Router","directories":{},"_nodeVersion":"8.9.0","dependencies":{"@aofl/middleware":"^1.0.0-beta.22"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.22_1533929354734_0.39471231327447787","host":"s3://npm-registry-packages"}},"1.0.0-beta.23":{"name":"@aofl/router","version":"1.0.0-beta.23","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.23","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"dist":{"shasum":"b69d078bdab493ceefd46573b030bd2b109b10ce","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.23.tgz","fileCount":22,"integrity":"sha512-1aw9FQ9kKmlVexVpc1tpAq44R6Wmge4mnk+YmBITCVwGyvu5opAFCdNker+l4KuCLNZ0FATw/hsfFy/OKTRjqA==","signatures":[{"sig":"MEYCIQCrLs5fRHOngEKNeenClcjNjMiDk2pbpW8mBq/VfkFvBgIhALwk96HYPUvXcQNBP2QWweszJ3xHsSwp9NRG6MeeNANN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdfAyCRA9TVsSAnZWagAAGF4P/iZAv211ltGdDYpJFGJc\nbBEqt1dQBfvwUz13kAWTq7hFTZ3GDP43t4NQg9kXuPzPfEqMt8JFfzR7yB/2\nOg5+3GgS6hEgl54nxDPti232uhfDIZK69hnnSPU0PjQeMYwbJSTqnpJysjcc\nO466QnlZKcI3oFaqqb7zANuBu0TdA0lU5cfx47frcOg2leuYPDJBgrboiEPk\nNsHWGt4RhOlg6aeQNbsAu7m+aZ6fuI9Y0OUF5f6m/SXki2w5222ajS24uOZ3\nrOE2roaujz4J6aJ8TNES3+Kd0YNwc2Mb+RnZS9T4TO81/GtBm9ojNCovjFx3\naHqgCGBcBDKeB6FYKODy0f+StBTS1GtXj74hiuvDAg0A6hQPN95cFhjlVjOt\nwkYMLjW670sfzLMgfr+nhxq27V6UvxZjy7GECNLKQ2uqYrahtiB0FL2qeRsc\nIawldT6zDUutLNy8g8IAmWrzRhoLHN77FQl5WWhfdYlOfS6fDvuoMHRyrgZs\nJoTx0S57ffbNtAFZgA/vhpSNGudWegxnFq/ICFiksBKSbo1CnlkKri8be8Lj\nkHI6+SEywHLJqC4gLitWrflLni8xAUCGlPULNmWNHWSUbh+piamgZuGu+Y7Q\ne9YIdFQi37ZMZGWJDanEb7Wt5kRSgIvsqxufppmbrr0+9hUwtobi/waOgJHh\nTPOg\r\n=vc0N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# AOFL ROUTER\n\n## Getting started\n\n`npm i @aofl/aofl-router`\n\n### Basic usage\n\n_Sample route config and router instantiation \"my-router.js\"_\n\n```js\nimport Router from '@aofl/router';\n\nconst config = [\n  {\n    url : '/',\n    resolve: () => import('./pages/home.html'),\n    default: true,\n  },\n  {\n    url: '/about/:person',\n    resolve: () => import('./pages/about.html')\n  },\n  {\n    url: '/about/:person/:occupation',\n    resolve: () => import('./pages/occupation.html')\n  }\n];\n\nconst myRouter = new Router(config);\n\nexport default myRouter;\n```\n\n_Create a Link to component_\n\n```js\n\nimport {LitElement, html} from '@polymer/lit-element';\nimport myRouter from 'my-router';\n\nclass LinkTo extends LitElement {\n  constructor() {\n    super();\n  }\n  __onClick() {\n    myRouter.navigate(this.href);\n  }\n\n  static get properties() {\n    return {\n      href: String\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('click', (e) => {\n      e.stopPropegation();\n    }, true);\n\n  }\n  _render() {\n    return html`<slot></slot>`;\n  }\n}\ncustomElements.define('link-to', LinkTo);\n```\n\n__Usage__\n```html\n  <nav>\n    <link-to href=\"/\"><a href=\"/\">Go Home</a></link-to>\n    <link-to href=\"/about/bob\"><a href=\"/about/bob\">About Bob</a></link-to>\n    <link-to href=\"/about/bob/plumber\"><a href=\"/about/bob/plumber\">About Bob the Plumber</a></link-to>\n  </nav>\n```\n\n## Adding middleware\n\nMiddlewares of each type (before, beforeEach, afterEach, after) are called in the order in which they were registered within their group.\n\n__Middleware callback signature__\n```js\nrouter[before|beforeEach|afterEach|after].(function(request, response, next) {})\n```\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Middleware hooks\n\n__Router.before(fn)__\n\nExecutes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point.\n\n__Router.beforeEach(fn)__\n\nExectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here.\n\n__Router.afterEach(fn)__\n\nExectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored.\n\n__Router.after(fn)__\n\nMiddleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve()` method on the `matchedRoute` object so that the view's component can be fetched and the view updated.","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git@gitlab.aofl.com:CoreJS/aofl-os.git","type":"git"},"_npmVersion":"6.2.0","description":"AofL Router","directories":{},"_nodeVersion":"8.11.3","dependencies":{"@aofl/middleware":"^1.0.0-beta.23"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.23_1534455857375_0.47720785779224983","host":"s3://npm-registry-packages"}},"1.0.0-beta.24":{"name":"@aofl/router","version":"1.0.0-beta.24","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.24","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"dist":{"shasum":"9dc9141575021cb91eb1feb2011a118e0a1da1ba","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.24.tgz","fileCount":22,"integrity":"sha512-fQm+by38TnaTLPfCF1mpeohLVSM9HVphzbUwu73qT1rWUYPfiEr8ZJa22GkLvamOAhgujxB1XYCOk7iHdHebbg==","signatures":[{"sig":"MEQCIB1TFig1XW+/nNeQcaFxjOcMjH2x4RnamGBrinXS3eQTAiBU7tNcW0V590//A8iLDRETNwZUCo9Nz6/9S2IHPB7XUA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfeU8CRA9TVsSAnZWagAAprEQAItN1HV0hkiclMEJeTVQ\nEumkvbS4ddB6dTCLLM46rAbrxviFgs9XERaTeewa8y+s342uHIGRHgenSti4\n3vIKIsz3swQ2N7hCGAVdJvgTwKTHnOaS2YcuZ59ag+sH4HEDcP/blCcJ/7Kv\nVArZVSJ2bh5J08xDoG/AVM0XshsJlgvLJWgSGOapdFD6Qwc8tbuAHj9OgzuN\n2jhggWokQkzvUJ48alqR0mBdBpxblCZPAxcb12a+SiI1WEsVF7qI7/Mvmu3Q\np13BNEe8E0TS6EHlM9ohegRb6jdUrF0lDNAu9Tg8ceRIvvabEV27texhoArd\nndiYNEbOCoP+NtufnNZPxid9p5U7wuj1L+l38/6NWARXK/8fcw/lgQRNJDt9\nrfeM9mhBtQwnI3pbhrWxooMsSVjvX5OdaPV8vFBNtfmv3mLmZEt37Yy2Ckjw\nXj7++l5RnPYNpdQCzQyzgAW/z36XUtmGMojkiEl8BcVQbWEt21/WwbSVb2fb\nKLjRAITuOHq/qy4dbWwNqVAoUMrEoyop1g619csbH8Tr9W808OOs5dhQOATE\npFN3pRmFz1P9cQiN+RfIKyXGuJ13BiFr2Td7fUeo/XF7cy6CFHT/H6+gf/kQ\nqAc85UvNuWBadd4dk0Ktgm8wT0YgAJ449CNssLQvwBEYYIjjZ582fzm6pYHS\ngLrh\r\n=ozKH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# AOFL ROUTER\n\n## Getting started\n\n`npm i @aofl/aofl-router`\n\n### Basic usage\n\n_Sample route config and router instantiation \"my-router.js\"_\n\n```js\nimport Router from '@aofl/router';\n\nconst config = [\n  {\n    url : '/',\n    resolve: () => import('./pages/home.html'),\n    default: true,\n  },\n  {\n    url: '/about/:person',\n    resolve: () => import('./pages/about.html')\n  },\n  {\n    url: '/about/:person/:occupation',\n    resolve: () => import('./pages/occupation.html')\n  }\n];\n\nconst myRouter = new Router(config);\n\nexport default myRouter;\n```\n\n_Create a Link to component_\n\n```js\n\nimport {LitElement, html} from '@polymer/lit-element';\nimport myRouter from 'my-router';\n\nclass LinkTo extends LitElement {\n  constructor() {\n    super();\n  }\n  __onClick() {\n    myRouter.navigate(this.href);\n  }\n\n  static get properties() {\n    return {\n      href: String\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('click', (e) => {\n      e.stopPropegation();\n    }, true);\n\n  }\n  _render() {\n    return html`<slot></slot>`;\n  }\n}\ncustomElements.define('link-to', LinkTo);\n```\n\n__Usage__\n```html\n  <nav>\n    <link-to href=\"/\"><a href=\"/\">Go Home</a></link-to>\n    <link-to href=\"/about/bob\"><a href=\"/about/bob\">About Bob</a></link-to>\n    <link-to href=\"/about/bob/plumber\"><a href=\"/about/bob/plumber\">About Bob the Plumber</a></link-to>\n  </nav>\n```\n\n## Adding middleware\n\nMiddlewares of each type (before, beforeEach, afterEach, after) are called in the order in which they were registered within their group.\n\n__Middleware callback signature__\n```js\nrouter[before|beforeEach|afterEach|after].(function(request, response, next) {})\n```\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Middleware hooks\n\n__Router.before(fn)__\n\nExecutes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point.\n\n__Router.beforeEach(fn)__\n\nExectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here.\n\n__Router.afterEach(fn)__\n\nExectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored.\n\n__Router.after(fn)__\n\nMiddleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve()` method on the `matchedRoute` object so that the view's component can be fetched and the view updated.","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git@gitlab.aofl.com:CoreJS/aofl-os.git","type":"git"},"_npmVersion":"6.4.0","description":"AofL Router","directories":{},"_nodeVersion":"8.11.3","dependencies":{"@aofl/middleware":"^1.0.0-beta.24"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.24_1534977339578_0.5295320940907899","host":"s3://npm-registry-packages"}},"1.0.0-beta.25":{"name":"@aofl/router","version":"1.0.0-beta.25","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.25","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"dist":{"shasum":"f99bc844e45775456980d8b325ad80a7b7f01987","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.25.tgz","fileCount":22,"integrity":"sha512-A4qxd/d7HWhcZ4laLpxKDGMG9MtjGQ+3kb0W4J68LRFt6ASE2vcX7gr4xOm31o56Z9S+UFtbBCRefj3mBBKBIA==","signatures":[{"sig":"MEYCIQCRHtcaJrclYIJL9xsTDyGPaM0dZPCeUgUHIDditq0WXQIhAJb68D/9jgd6gCL6UtjhYtcloLYc0wc4Iscpdc56zpH5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfwshCRA9TVsSAnZWagAARxkP/2JlNSLr8dySh3mfQanf\n+82LkQRG4Wp7WbYy+kLVCZQb3greFS35/NbKIn2lopFa7UNTq7CC3AeA67Sm\np/k62vYf209fE25RJl71m+drDnZvfQaZVPBuHpnc6yuvqh3Cq7zldtcuXs82\ntDPFxjiP5x7CNSBoaAIXiiHxI2eRkqlsnoGAFX3kPUbBLHl7OPy2FO/6QKAW\n81sMs7LygY0MypDS8gjQCye+zlpt5ielRG1LPCtSCR3xbp/NHsLf2u7WIv2O\nSrT7abfETp589QR93NHlsMyupj4mzQQaxRMHIgUwZbVaDiHVUiErTnlCjcSO\nLnlA12P1NcO62lpo5XAl2ZvZo3nEXMK00D1bXxUFVUdxIn9zSg2xzDO++BWX\nFflDT3NhK/CQbGaa/PBATTqPntNnuXkOBMEqBEFbas7ps1wicoepOa1wlS50\nfg7vj1jdUxBW7ZiooCNLN5xEA5SHHbNITCBYPTtz/D+FgjAuj/CIp3DFZGDb\nNUJmCh3u+RIVqAStZ8JldnFBVZiJlIZomzb+YPWrr2HO5cMoHOLVqQshqsHA\nyo5wi3qnv66a7r2LatJmUphgkgndb/heUIhC+qvABNT4uSojwHuGBdd21jB3\nfWGeRSLuu7H1Jug1lAvjtY9NpLRIXxQQ461pTw7Qfb7Iqw0d/HBscLhvKRaO\ncBph\r\n=Zlz2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# AOFL ROUTER\n\n## Getting started\n\n`npm i @aofl/aofl-router`\n\n### Basic usage\n\n_Sample route config and router instantiation \"my-router.js\"_\n\n```js\nimport Router from '@aofl/router';\n\nconst config = [\n  {\n    url : '/',\n    resolve: () => import('./pages/home.html'),\n    default: true,\n  },\n  {\n    url: '/about/:person',\n    resolve: () => import('./pages/about.html')\n  },\n  {\n    url: '/about/:person/:occupation',\n    resolve: () => import('./pages/occupation.html')\n  }\n];\n\nconst myRouter = new Router(config);\n\nexport default myRouter;\n```\n\n_Create a Link to component_\n\n```js\n\nimport {LitElement, html} from '@polymer/lit-element';\nimport myRouter from 'my-router';\n\nclass LinkTo extends LitElement {\n  constructor() {\n    super();\n  }\n  __onClick() {\n    myRouter.navigate(this.href);\n  }\n\n  static get properties() {\n    return {\n      href: String\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('click', (e) => {\n      e.stopPropegation();\n    }, true);\n\n  }\n  _render() {\n    return html`<slot></slot>`;\n  }\n}\ncustomElements.define('link-to', LinkTo);\n```\n\n__Usage__\n```html\n  <nav>\n    <link-to href=\"/\"><a href=\"/\">Go Home</a></link-to>\n    <link-to href=\"/about/bob\"><a href=\"/about/bob\">About Bob</a></link-to>\n    <link-to href=\"/about/bob/plumber\"><a href=\"/about/bob/plumber\">About Bob the Plumber</a></link-to>\n  </nav>\n```\n\n## Adding middleware\n\nMiddlewares of each type (before, beforeEach, afterEach, after) are called in the order in which they were registered within their group.\n\n__Middleware callback signature__\n```js\nrouter[before|beforeEach|afterEach|after].(function(request, response, next) {})\n```\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Middleware hooks\n\n__Router.before(fn)__\n\nExecutes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point.\n\n__Router.beforeEach(fn)__\n\nExectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here.\n\n__Router.afterEach(fn)__\n\nExectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored.\n\n__Router.after(fn)__\n\nMiddleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve()` method on the `matchedRoute` object so that the view's component can be fetched and the view updated.","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git@gitlab.aofl.com:CoreJS/aofl-os.git","type":"git"},"_npmVersion":"6.4.0","description":"AofL Router","directories":{},"_nodeVersion":"8.11.3","dependencies":{"@aofl/middleware":"^1.0.0-beta.25"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.25_1535052576742_0.7415995406067462","host":"s3://npm-registry-packages"}},"1.0.0-beta.26":{"name":"@aofl/router","version":"1.0.0-beta.26","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.26","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0f0fd8ae7c3044441f94d396371f74337f5bd18c","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.26.tgz","fileCount":22,"integrity":"sha512-+k7I5ZB1BgVTEj0DAZ7+pDRrA3KC+om3ND9lOnHVgZAXLdKc2LVcAYmAPYlfAHsBVfVjc+15USwmUpBBBAk+tg==","signatures":[{"sig":"MEUCIBmGayoBtSA4wrkhEt1gTamLnhE5VU8xL5+WSdKLoX/DAiEAi24ZkGGrgD+L7FQNm2VIkE1/Yz29VKNadr12IztMhns=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31788,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhEItCRA9TVsSAnZWagAACPAP/3uWzpTIMVG8U+c0pCj0\n1xLu4FYIjxx1pg8jNgR6apDTCZez1F5eIVmAMwIjFcz0ZB2Y38PvSNXcsION\nDkaqvhSAb2AhKcLlhEx5CLjgnOyP6pDDpbmeKzk+cuLzGVB6Choz7ioii0Kg\ntWryRDzcfMHBdZTU38dIeaE0WTUPWHE7+G84BFaMK8hEspUZp7hsngeHFz7v\ne1gaOqyA6aah0Px9njyeU5tpt0P5KaGlH7OJB2MdVGi9GLtL+YS/e6LyDZHo\nfQ/yxTJQc8Y68wmm+ZMrra6QHnIK3zgn8PqQ1BIPqsvUKJfXqCPEetAfDMhp\n/zW2lQqqiBM2yW9XzrkMHjyOlQ0fJKset3GQN7lZP0iBCmyci75yBdZurbNR\n1qJn9wzOdfwEZYeLLxHhDRWLJWPjItw7bloBCxIGcdHD+dwAZ3woNoeqCeVE\nLaBRD7iLuoGo5Fq5rc5M8mBvtsjwfT/CTVemrf+LUo2/+nsLpjyEUEHnQsTG\nG8OccdLjMWZwHoZ+yrcBLko6IVLJXRA5p1uS5C9XW2GzhlsAUS2RXdpNVOv8\nywSomror9vcpjjUy3iNnV439FYv30cytjK125Os0froKruwd25b10PNFC9c0\nCQG7jun8gvt5mAm2AeNytrAQuG+3nZfargEXj/uuPmCelXYeahWYoVP7HFnQ\nIKNo\r\n=wzEG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# AOFL ROUTER\n\n## Getting started\n\n`npm i @aofl/aofl-router`\n\n### Basic usage\n\n_Sample route config and router instantiation \"my-router.js\"_\n\n```js\nimport Router from '@aofl/router';\n\nconst config = [\n  {\n    url : '/',\n    resolve: () => import('./pages/home.html'),\n    default: true,\n  },\n  {\n    url: '/about/:person',\n    resolve: () => import('./pages/about.html')\n  },\n  {\n    url: '/about/:person/:occupation',\n    resolve: () => import('./pages/occupation.html')\n  }\n];\n\nconst myRouter = new Router(config);\n\nexport default myRouter;\n```\n\n_Create a Link to component_\n\n```js\n\nimport {LitElement, html} from '@polymer/lit-element';\nimport myRouter from 'my-router';\n\nclass LinkTo extends LitElement {\n  constructor() {\n    super();\n  }\n  __onClick() {\n    myRouter.navigate(this.href);\n  }\n\n  static get properties() {\n    return {\n      href: String\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('click', (e) => {\n      e.stopPropegation();\n    }, true);\n\n  }\n  _render() {\n    return html`<slot></slot>`;\n  }\n}\ncustomElements.define('link-to', LinkTo);\n```\n\n__Usage__\n```html\n  <nav>\n    <link-to href=\"/\"><a href=\"/\">Go Home</a></link-to>\n    <link-to href=\"/about/bob\"><a href=\"/about/bob\">About Bob</a></link-to>\n    <link-to href=\"/about/bob/plumber\"><a href=\"/about/bob/plumber\">About Bob the Plumber</a></link-to>\n  </nav>\n```\n\n## Adding middleware\n\nMiddlewares of each type (before, beforeEach, afterEach, after) are called in the order in which they were registered within their group.\n\n__Middleware callback signature__\n```js\nrouter[before|beforeEach|afterEach|after].(function(request, response, next) {})\n```\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Middleware hooks\n\n__Router.before(fn)__\n\nExecutes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point.\n\n__Router.beforeEach(fn)__\n\nExectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here.\n\n__Router.afterEach(fn)__\n\nExectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored.\n\n__Router.after(fn)__\n\nMiddleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve()` method on the `matchedRoute` object so that the view's component can be fetched and the view updated.","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.0","description":"AofL Router","directories":{},"_nodeVersion":"8.11.3","dependencies":{"@aofl/middleware":"^1.0.0-beta.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.26_1535394348513_0.5932101326683388","host":"s3://npm-registry-packages"}},"1.0.0-beta.27":{"name":"@aofl/router","version":"1.0.0-beta.27","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.27","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"36b0207179678a4680e91599739dac80fa7e924b","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.27.tgz","fileCount":23,"integrity":"sha512-rIPx9Bl1kCp6IT7x13YAokUNyneC9FsdT9H5c8T3zGFzdDzyzfHHIDN8IyePilWOMSWeW7nUIT+WFg24kyxOrg==","signatures":[{"sig":"MEQCIC7cy/eZsHSBc3givF/82/f3lj07DiDzfHxiA7WdaIWhAiAIOx37w94v6/5CSmOhG3atWEjaCollt+WC06pVb+IeVQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhGuWCRA9TVsSAnZWagAAWN8P/3J71i/IySB4Kz55sPW8\nZ0epjB5JQp5dAuvGffYrlOSdhTl4p56z5H5uilSp/6bmph5iIyuhTRHdP+fX\nESb5poCcSwpN9w9cPLlZN3SZE0RxJWAuhcmQos71taFMe7nSCm/tUV/WbfJv\nHXVsfqa9K69/lTzpo+f1epHTf8mmjusfK04i97G7iCQ+OdCOQXmsVuALtMLx\nmdUTzkqMGTRH6nhR0aTV+wFEg0KwJ7MsqTyq5hH6xqydeheQ4vsVbSyhvDgo\nj9/kXqfvYGXN2P5/oWU/3Fgi++j+EdGS9RXtur8SZ5l8kXaDT0HogELNCcne\nMc/47/6X21g/3vAZm75rFAQEZZy3IuTkabPY9Ni8DYHO19ONc+7R9ZXuvbA5\nq+DZZeTVNhnbfiaeqgJ3arxw7s8u70Kfc3jz94J+aIcV0EdxvK5h+9vJxDEO\n0s6IlMDTV5lzLxlBeiM1S9SkyutnvNnQSM6I3CfP1o/mV9agsRnhnqu6Z5M4\nR5VESHovmneG68K2EwOElCgYJIV0CTOaQ2FVuvGwnoxC6LVILVwHoAavu03F\neruRPE3HPGquteEMreDpY91Q7MgxYKljLWlHTutrVv1xdUcMLI5n8Nv8FyZI\nzTZFhQROLf9gn48Vnp5aCoUDW2Hu1A/z8oJNm+5qD6oLrTC0rpJgHTutyJ5j\nj53F\r\n=5oA2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# AOFL ROUTER\n\n## Getting started\n\n`npm i @aofl/aofl-router`\n\n### Basic usage\n\n_Sample route config and router instantiation \"my-router.js\"_\n\n```js\nimport Router from '@aofl/router';\n\nconst config = [\n  {\n    url : '/',\n    resolve: () => import('./pages/home.html'),\n    default: true,\n  },\n  {\n    url: '/about/:person',\n    resolve: () => import('./pages/about.html')\n  },\n  {\n    url: '/about/:person/:occupation',\n    resolve: () => import('./pages/occupation.html')\n  }\n];\n\nconst myRouter = new Router(config);\n\nexport default myRouter;\n```\n\n_Create a Link to component_\n\n```js\n\nimport {LitElement, html} from '@polymer/lit-element';\nimport myRouter from 'my-router';\n\nclass LinkTo extends LitElement {\n  constructor() {\n    super();\n  }\n  __onClick() {\n    myRouter.navigate(this.href);\n  }\n\n  static get properties() {\n    return {\n      href: String\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('click', (e) => {\n      e.stopPropegation();\n    }, true);\n\n  }\n  _render() {\n    return html`<slot></slot>`;\n  }\n}\ncustomElements.define('link-to', LinkTo);\n```\n\n__Usage__\n```html\n  <nav>\n    <link-to href=\"/\"><a href=\"/\">Go Home</a></link-to>\n    <link-to href=\"/about/bob\"><a href=\"/about/bob\">About Bob</a></link-to>\n    <link-to href=\"/about/bob/plumber\"><a href=\"/about/bob/plumber\">About Bob the Plumber</a></link-to>\n  </nav>\n```\n\n## Adding middleware\n\nMiddlewares of each type (before, beforeEach, afterEach, after) are called in the order in which they were registered within their group.\n\n__Middleware callback signature__\n```js\nrouter[before|beforeEach|afterEach|after].(function(request, response, next) {})\n```\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Middleware hooks\n\n__Router.before(fn)__\n\nExecutes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point.\n\n__Router.beforeEach(fn)__\n\nExectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here.\n\n__Router.afterEach(fn)__\n\nExectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored.\n\n__Router.after(fn)__\n\nMiddleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve()` method on the `matchedRoute` object so that the view's component can be fetched and the view updated.","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.0","description":"AofL Router","directories":{},"_nodeVersion":"8.9.0","dependencies":{"@aofl/middleware":"^1.0.0-beta.26"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.27_1535404950069_0.5357864010021567","host":"s3://npm-registry-packages"}},"1.0.0-beta.27.1":{"name":"@aofl/router","version":"1.0.0-beta.27.1","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.27.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"fbb0e3589293044b4309e473fdb17bdd990895c1","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.27.1.tgz","fileCount":108,"integrity":"sha512-DLkYn0OPyRdobJp8GHjktLRbUabJ3x4DgYHHAXFKMGJCI9YG7t7Kyg9wImSizWI0NkMtURODGZE445IS7dFt1w==","signatures":[{"sig":"MEYCIQDc1HfoR4QggRHKYwNBKe6CDubSkBnw3/xhC5w3ykhMMwIhAPG9D8NkbZQpgVAMcRAHo0AUXF+O9Yida9KRpnW5S+7F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":439244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmBnICRA9TVsSAnZWagAAc6wP/iW7KAO1o5Hj86f1h3gp\nOKv0WRdmrjc/m0h/aZrEAf2ESUci3LkzkMeah2xr8Sgve7n+S4UsfFCSWwNl\ncno8VseSm8ol/Tb5eMHvZAKE66Yld/dxAZA+/Sj2fdIOYPZRAZatTtEVbiMg\nkhQc69H3gDVmsoMBAxqoM1DWCKOqzeZOh+5ppo/vVRiiDaRfFk7z7hJX4rZ+\n+bWG1tjku0//jlezh0CoryOxTi7u2VbmaWk/99llO7cdGlYfYDkOtcgGXHNp\n/JnOEXLS3wqwR7N+4WkqfhoEFblcvy36uycZvMHsAs7p+TXZ+icYkdN1BGVd\nQA9ixU9S66huqGCaV8PwiUQVjPrqBhXrGq5MbFkJ1kPeZiH6aWqfBL2xqoUX\nnBx1zLnFZ6Wkucr6riEpN9e/uCtJNqJ47wxL3IWHb5zYsvLMgGpT7dhldIcR\nZqM8oZCY4lW37ev/fbhNFblhc9dHQ+SwBAhJ8PrrXKkOaVY2trJ4fLI7kXmB\nR6+YGud9Iw1X9mMqfNd59k/gaVfiUaGTd/3kKGRCo7+xKUhNr7vNfQteXdXR\n6tNNByKhfbT2oDmI/Vv2Peb0in+VEGYMZDqD4HyUqnWu/f92gNZqLt86FZaz\nXaF/WtmYC7G09DE90DmQWrbfwr918uGV3ETvwCwTLXaE9exXbqyFrBKGnIE2\nAMxX\r\n=/+vA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Exectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Exectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`  | performs path match and applies middleware |\n\n\\*\\* See middelware hooks for middleware methods\n","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.0","description":"AofL Router","directories":{},"_nodeVersion":"8.11.3","dependencies":{"@aofl/middleware":"^1.0.0-beta.27"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.27.1_1536694727527_0.5123913153171469","host":"s3://npm-registry-packages"}},"1.0.0-beta.28":{"name":"@aofl/router","version":"1.0.0-beta.28","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0-beta.28","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"fd75bb976b9fed8208c5b21fdeacf098cb98f461","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0-beta.28.tgz","fileCount":108,"integrity":"sha512-WKnwEbKUJHKdG+3q9yDxpsxnoDkaB4h4EJIonw5HsPCZ0HHvhU59qubvO+bP2TUcBIPAbq5hJduflUaRjWKVIQ==","signatures":[{"sig":"MEYCIQC2d0+AKJxT8arHrUqhy5/ugrdPTFZUq3xt63fDdOru9gIhANLsHNJilrzSwT23CYmdhjQMGP/Mq0DHAkfEE4KpRGCv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":447722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrXa2CRA9TVsSAnZWagAAOWYQAJy01Gl/XMQtafWpLCOs\nCG3Rp8jLuhVrg0TuDwLPoqA72ieDGXBbGb6RiKRQNE2/LriVjeRwIiDX1iim\nwEtpTWRU6gG4k/PtbS0KCaDA3YgLg3nP6XN4jAiGsMl/jWdHza2GVpYjudFU\n0kDmYuNdiuwVD8jYBlxVv+fX4imvg7tsf74K3zzQLim1CUUQb7X1O7PyzDxn\nECo0oyOXy6c428IhmsbZyPEIxiuQ/Qusu1R/Z7ohi/x3iR5PDQ40tyYj50Ox\neV4z3it+m1e0z8MnSrApZRF3bqQqh7brP0AK0k+cKEPCWLliMqtWNTbL8CEG\nJdqCPeiLB0GSlvjenCb4zkYjJMbQycRH1sfZ0jw3AWRS0xtme2QNiPEuO9x5\nh5v2js8watJXtsLX6QGZZ5JoKVCPxEOzSooDujTgRYm0j2Dikuhkn/c4UYl+\n0J7ZNJ4AGyVrnBT8HWHY84sAZBOBBJfi44irN2grx8asH0b7RWHHPNdZM/l2\n/ZsJTxKhnfJuygZ16luHxPX7oa4EqxXjTeTFuyw4kcgJETewLX7ysDjOXVtj\nEBDEOYTRGW/HBbd1uVPntdMTtcZ999t17ggmH71qiAZ/mlBUNw7LyMYzHHMW\nvtOUWv5wT4PGqx6GBOYrYIDXgPtZE9I+zRV8P/nEZd8eZEBCBH1oEPDmwKXO\nV8fJ\r\n=oqCr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Exectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Exectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`  | performs path match and applies middleware |\n\n\\*\\* See middelware hooks for middleware methods\n","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AofL Router","directories":{},"_nodeVersion":"8.12.0","dependencies":{"@aofl/middleware":"^1.0.0-beta.28"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0-beta.28_1538094774164_0.18139953058754354","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@aofl/router","version":"1.0.0","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.0.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0a2fe2e08e3dcb9056a91b4dfbccd7ed6bda96a2","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.0.0.tgz","fileCount":108,"integrity":"sha512-UEyC0h6rozqjijjhpajpi4IukekXNL45aN0uKMtbWKcKJdJHNiDiBoZKaA4LFc9jw8I28HioAOw8h9J/RWXHsw==","signatures":[{"sig":"MEYCIQC28zUKq1XOGb5aIWx1wfVvfiyTJmZ0aEyHqaJJOF8hOwIhAIe/S2gL/4lXlIDKX0jEb3n7Hr5/39DNuplx0Ql+L8FN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":447703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsAUZCRA9TVsSAnZWagAAS0wP/jSWUQco+ophrL96+GMN\noXsnOUZMRScyn2Xtf1cb2VxpjphZFG+kUeJs4Gocxve5er+ZDOjgOUHzAX/7\nKwsaTOFCK8vrI6FUW3F/C4xh++KAuk3TkB/TESKSYm2hDqgDlmRcrRPrnPud\nOJM36+bHrUxv94UClPW08R2GH4D7Accaf7WUq7SpgWJYlDJEoVVKVTvuxHaM\njRpLovLB0Lv5GIJKzgGsybJy61H5CyP0XCNYqGSi2iil8/xLiMyjqVAYi7QG\ng3iFsAIYfBiit83c2g7IybXwDImpHxpXMoyYR/LUguiLm/hmlWKz1DZpKLRq\nhPYHODiqjowZUjgK5tlKkmZwxPO6ev4vVIeFUSMzkmzv5wGgolPDWEh4Cu3P\nPzVbKO6gWcbBSKDwhW/zijY5zm9s0E2BXfv7LU6w9PiU8OsudgVWbTyX545F\nisbi3XcU7u0/YfpQj9HBc5ihO0LjNGnNUK/s8GNAXR1bOem0K8VTtHFwtsgT\nKbpnsz3FXPsSAtXJGNWB9B71bd3dUqf3htUQnTpvupnjoqdQ1kwhdE2VcT59\n7ByZdfw/SCIe3QKkq5vfJ1mXcv67TQHWE+CAfk6MNK5jVlYPqFzRRiUKmd/s\n2vP4n2Dz15JUTusGCCC8IoI4Y+syKhgt05udMIrpxcQrO6jc0KdzhJYusSNr\nECdb\r\n=1VQe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AofL Router","directories":{},"_nodeVersion":"8.12.0","dependencies":{"@aofl/middleware":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0_1538262296423_0.8887255259021993","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@aofl/router","version":"1.1.0","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.1.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"54e38463e100f42b1de20e22a36a76c4728dd2b9","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.1.0.tgz","fileCount":24,"integrity":"sha512-jujJxsXbMUFGk4rmjkK1Ea52/kxi0MrdroU+a0Dq0ni2G68IG9hlHCC2MEnPZ4JjtvqNHNmwUef1mXjv3SK/KA==","signatures":[{"sig":"MEQCIErCVzlqqamuUGFbCMljp84mqZEXg2uUaUG2fXjVLtTpAiBDcNWvd/iyxxi1m34yj4SNsSTFWc+X/wgW330onlmEmQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbx7f4CRA9TVsSAnZWagAA6noQAIOtIsf05kBE2VeqVAbe\nmwGLUVhSrF286WjDT80kizuUuFRotwN8oo92aAcbFOC/kXFENm7eJhs1QO8W\nw9jKPzMICQrAD3dWCT8S9btKk+9rgR9BpiltkqctBEzFv7JrjzDAxvNh0OkN\nwkC5akdjEi6aJkPwBlNEeAzCaLMmnCZkrWW/KuFQkAhR1shdfviOU/Jwezx6\nr2BufhzJtD7mAfqiMY1RGaGLYYvUvDGQQ4dHGceizY0ZzVPm2B3+kL/tocGt\nKft6ZmfiSbUmEIRN7KsanPi50C8X/nylcmDZXrHsjQv/PdUfcSSccq/alygZ\no5cbI6ZMdTgw6/ueqg2RxNXumYeBldzmfpJnP1MK5VwcmB9T8H07GFtD3pFe\n317Cpk00DNe9LYRZsfgGKA3jeue9/I/wu8Fqs2ea8AplaZu3qd+fvwFTbRZT\nM4i5u2n+UslKQ7XvFiDeKW2j436GzFaTka/Dy6CT4X+0f3Ip68zQGmz2ypdx\n6/IoZzGEDQwHVK9fzbb3J/SD6SHIQRUS8SAwhBkrzr/t/jY8q+cvQupezrB/\nFQ1qDo3RDP7OsO+DHaL3IB0DBROkRZyCjfXjGPXVsNjTeDHxFPHIOLGvGN3D\nVgkedEKz1BHp9K3xENjI84SGpfCGcOkfGAesxRn1Mo24X8jLZHyyqvhr6NAN\nwnME\r\n=/IPl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AofL Router","directories":{},"_nodeVersion":"8.12.0","dependencies":{"@aofl/middleware":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.1.0_1539815416280_0.7104148831678623","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@aofl/router","version":"1.1.1","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.1.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"d0b836206332050763ce44e7fbbf8150ca025a18","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.1.1.tgz","fileCount":23,"integrity":"sha512-wayhQIIVtwAjlplagnvG2oAxyA7KJ90s7TJYWx5ugEEY9zJ2/mVwGzCU/uQFt2EiifyGnuA2EfSLqGvq1OE/xg==","signatures":[{"sig":"MEYCIQCOUmgtjfSl/EKAh1Q7zCyWUIXdQO34wmmitz17/jzIMwIhAJBdpGyxiVPXDSWKZ2+bAjHHGASgqokKj31OMLJxQp9M","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb12LUCRA9TVsSAnZWagAAIiYP/0aehN+Sj1iVScJ75hmD\n71v88vytkLUXQK3qUXiOoIqk9MV0grxad4fR1C3zyRtTBLmHDndp9wTiUC1C\nKz4PdC2Q22B6iyNtnob6OFbFp6MRLyv/rZgqxxfKPWwI6wXHZKJiheXnB6fL\n3aKc2+4Iekbfx0LNyIE2KFes2zA2yBJ5d/N4m1jxLK8qeSd/J20DI64nNB2N\nk9/LB52/maB7p5BpF5wxZ90DMhxC3aS5Rs4WHhFqEfVONFRbSDohsOl8LKV1\nXCLZhbUaT3ijBGYdC6ptUmhsmr8nTReGBRbSSYgrT4HDaardd7RMILr66g0E\nyXE9adJ1s7HrioO0p1NahNSCH8X+PFdsA7zPIWKACM1T7azoxtkhf2p3WLYJ\nIniuJuAUE6+CiFzE405wsyesqRN/yh/aKYJoIZ7h0j7xIH3WkLGfVK0M0VUQ\nZIB0Un91cw8qWvqnMFnMfeNhAFQvCULeJml8SpL/Jx15Se/ku9NOj7pS9PL+\nPr0XaHPuWTM91eFUsHhp0jFQA4EyhchwHm2QbEHZ/p3S1+m69kUmhejp4EGf\ngx7xUYzSIs1ifiKx1cZ02XPnlcfEYG0SHtFQ0kBTcGB/JpJqrUUPyFjeLNxX\nKsJKkCg46t8DvNytyPriA9I2p0jg38M7e/xgzWkhsJ12zX0iPnRTJ/3g/fSv\nJR72\r\n=CBli\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AofL Router","directories":{},"_nodeVersion":"8.12.0","dependencies":{"@aofl/middleware":"^1.1.2"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.1.1_1540842195071_0.8130451546774302","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"@aofl/router","version":"1.1.2","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.1.2","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ad11263d59429ce9320ef12e20b751806a9c10d7","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.1.2.tgz","fileCount":23,"integrity":"sha512-EWO/aBMVwNQQiFS6KjeAFl1s0c02HMBDHaMbiRqW4Q44ClhJE/iu5s7WplG1n6BzYUVWbLWqaYQ4BLizKFOiIA==","signatures":[{"sig":"MEQCIDzjCFMzInUVrFYiu3Ah8X/akFmGA+72k7gLnqPiazRDAiBGwkTgeUOTVywRIqUwdYI4uf2VikuBm8I8g+lDnjH/uA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb12LdCRA9TVsSAnZWagAADl8P/jdTyHUcFCNc2YlSaBzi\nxFmhrxJMc4pwGA3WvN5N+srzxT+cCDzF2SBEMD2pflTcWHk1E0RMbbiv8enG\nVH7ldhzGc/I11GV2K8v9Pt2DnqbZCTAOaFjXxITQsPObYGAghRLjp0fJscqG\nccCrIpfvC1SRhYWw2O9wyXO8QtMdQFAtBvCTVDKPSajtjNREd34W8x4RVoIj\n//uWZE0t3yK3D3aPGuQPS2wCqAn1R8DpP/EOQ1gaT/NvaNdQD2r3Ma+fM/J8\nrdBnlvd5kx9hrDPE2ZQJWwjv9D8E5dwbUwgVg8ysOMaTvW+iMGUT+SCh7lfp\nssxQG44bWGhL6YSb3GRv06puUssfqts+5n/M+Mxeqcndo3I5t0SEbPD4taaK\nynfylPJqTK/YpKuiEbb9ZNQK4M03QBkMhdqcUm/+yWEonTIJRz8PMFlBvkyT\nFNl4EFIhb8QQCXymvhJrScFl4QKWA3b1J1ubv98R+A6fXpoq68G6rf6YOEu6\nP2A+Xv8cFaKenf0vdvImASSbqz2RuLb/5eZH2cM4VgbGZZRJwGFPkqE5Aury\nhBFMydabmCUK1/TLT4dOv6C9ZQ9M1OpXa/h7rx+c4t+NhhHRznHqdhy6wQbC\nnoyoqR8RDqHHkCg57WP8qkBEYiRrXm0thc2f7kZ2CCfMQzVxR/jbSgKgK4I5\ngvqh\r\n=xVzy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AofL Router","directories":{},"_nodeVersion":"8.12.0","dependencies":{"@aofl/middleware":"^1.1.2"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.1.2_1540842205143_0.7322793835322379","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@aofl/router","version":"1.2.0","author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.2.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"2028c84b2e0deb0419e7deb578927e2164111d26","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.2.0.tgz","fileCount":23,"integrity":"sha512-mqzRIo2T3ug/dr5yr9mbeWvqYzYWI1OPIIsS1fU+bHgeaS4LCKdZQCrbkPdbOI2QIARz/yDWbtFma+lYqyR4Pw==","signatures":[{"sig":"MEQCIFe1nB+N0w871a3J78UsMPp7y/v9LXyXUBcDcrsHX+hDAiA58h4R3x15IpqYsOzD6Hstj+MBm8RfR+jTED9lGt0KwQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4f7dCRA9TVsSAnZWagAAw9MP/2xD5vaaBCf1S2zUnK7i\n/yskpCicufsOmtLQPjluBM8nSUR54bOjXgCMsFaSLapoSGIQiAJBHs3S9cVG\n/0SrJbDFlQ/dEehG9PfhLI+vyBbB4W4Ve9L5OCZwpE8+4INdP0QW/Iyz6oOg\nhlpy7Qukq+JNTRmPP7ySTllGZiE1iVRLP8Z8dc70sQlNbclwRgZ8595RunOF\nofnTjBssadi3t/yIgdhKPDpZkaG73YDbWWwUthjfkuDAMtGxmjJv/efQ9d69\nQSmDENioafJyycOTli5kzsX8ofsIw2QHxRqo/d0kDnRoP+AtewdCE1BSB52v\nrqqYuPHtFgQXeZ1+NHcdBE2SzqqjO5uogmhjKiaO/2wALyTBensoIrrHf0+P\nRiUJBa53sMRHYB5hE3+hhaSBDo576aVe1FJl+fZ0LcRG6sm0umFGkWUU+jHp\nUVQfxQ99IpvaqtVPDvXnq4ZhSBeoH0NmPdeuLcli2QjGrkAJGGMlgS2bNTcu\nrnhFMl9Ey4vaHy7O/rPDvbnxX+hBL5vPBOOpWzRntul8Xh44S1fk3ltmESzF\noyyzxu2I+e61knhlSmgyne3BgYQumIxkFn4DwwHy38tk5v+fcMdY7776gpeA\nLgbwCsvuN6/2VGYa9Zz5Dv/F8H13pkjGAeTu5oWbr4z7efpDY8miA6uFaJQ7\n6/7H\r\n=7tPM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AofL Router","directories":{},"_nodeVersion":"8.12.0","dependencies":{"@aofl/middleware":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.2.0_1541537500473_0.06499293958156982","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@aofl/router","version":"1.2.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.2.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"a6283f201395603397917933036d706c9958f8c4","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.2.1.tgz","fileCount":23,"integrity":"sha512-esKD1JIvkUDxw3lobh/w7tT/TpWaERw73xIHdV1u6KoUuYjs6MWYOfrW1y2ipRJb3MSjIkLhpDeOm7iek0XEEQ==","signatures":[{"sig":"MEUCIQDUUWvjnDLJbjH1dfBcw6RDJj5XX9mXZb5Fy88k7z5RHQIgWbCR5CWWhvQACRCj06tmTCE2AJGfgsHvbIk8lp79hFo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8dWwCRA9TVsSAnZWagAA08gP/3sRL0NYUCrEQUSnpDf+\nkZG587W9rtgG9AV3WjN5SnhY6jLOSUK2eqzhPC7+E32dZzMY2z9y00sRR8vb\nQMqEQbAvBiARrwJLnzDvz2ypgSWjoPCygRC0XguZiMMA0K/wjgxXs14kyd4R\neIDjdL7/EtBhDHsfcuLNmwp/n8mFpT5He2xdShtTxmTo8PVPhZNWFzr77JNL\noTXam//vlZX7vScZ3kKMxpQtLxMTXNYuVM8FRQwIZgEf/v2m+GAY3pmqOewU\nZI49qwXmZ6ERbxbgo5HoyWdA7N1BXHADqNRzspcvrEhec8Z/4+1Q+QBQxAt1\nJ/jZNcSdg1wBMZ6NWd1OWWZDvRv3Ye8o0/ogI9+pdjopJUUqnahwWol491ZZ\nmd+TYklCH+w2teQ+MoAogphBQ2X8vaO7yQjGXmyzq0Xn64JsXOcgSQwLQkD1\n61AQkccS9ARYgT0/kE9BLzc9OJrkIJXMl7WXpaPJeE+N0nQHpN9pKVowC0O1\nPDi7vsdFug3riqytC9PKn9oXkjaCjGsmz5+GuRhPQXxj0GiVG8Q3LM7JpITI\nJjhjWVugd5uQYITirddsLFnh22i2E4JDWGhiECqeuc40xjrrXR8kFPedCEp+\nCahuCTua1kgC2+D6Xwv1myLgaYy61SJn7AV/IyJxnm+Qhesa6m6mrJs8xbZL\ndpgj\r\n=wu7j\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^1.2.1"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.2.1_1542575535749_0.5427601735823524","host":"s3://npm-registry-packages"}},"1.2.3":{"name":"@aofl/router","version":"1.2.3","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.2.3","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"21fed7e69fc925e853efec6afdcc68b899958aa0","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.2.3.tgz","fileCount":23,"integrity":"sha512-b+cnSJrrFbY9mJDIWCZ/nwnFbFxjwardSPBEMp2dyz2HTSSRLHcEa6XSBYIF1iGwHi3UtKxzhRITixf/7dD50A==","signatures":[{"sig":"MEUCIBX//e9a5qDIvKrGXqI1G60lh4C+/6fcr615+jMY4m1aAiEA+Xq0kP5V85+6kRNo8zALdP/KAJu+l/z26G6HChq+M2I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9KN/CRA9TVsSAnZWagAArH4P/jIliha/y0IKJYWx3bsL\nEsSuz6aX6wvCiYzs0ls51f4EPfiJzu7DLzXj4OPYw5QBYocn8nFcWxiGli/J\naflhB8n6bBgmqWH+QVCeUpUgox4YWEDQf49hnmnVZlJWu50EMmKtG69RV9Yp\nLFvkPxOFRxC3KuPKUVe6o0UkGvYrxp+srs1qv/jUwld0wLw932lMinJk6rUB\nQodHrNs74cMgb9wr9c8UaM3lXQLMQMXUmKjpltbarWSkuMkNIS1CXrVRSYb8\nSzsGyxGspa4qUznnDOOUNoNe9F+v+fKTcWxCcwo5+/pehLaiOOjDv/3IpUdD\n8ShvopqTIbxkET5H40YtGKR6v/eW4bxpSE1QH38SXyzd2lpqeso4SvHcqQPg\no3uPq/HBCaZcA1ijRFDgczvQtmD57kWqOTdrwM9JsOIereN8ndbNtpLuC2u4\ncr1hRZMzIihDzv7naqR+iqpUvdyL9mzpwl81ogVJrMT1NCZosEqcAwz9m/mG\npTfUXgugLyMaqfZ1nysTDrOGmTVZsuMb5uao/a+pxfB6JknSL2bH8xa++vlb\nEnWd+Giq8JzcESPvoQm2H7G+crd5fgrs+3u0SX4k4dxcAcB4oJtcrjCB1w7D\nX/5OynzlF3x0zt6PusNn6kGgB9NuQq+hY+TOMMU0B43ZOP4sKp6zLQIyzOSs\n6zD4\r\n=zvMC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^1.2.3"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.2.3_1542759294635_0.8733150506890066","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@aofl/router","version":"1.3.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.3.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"860e02443e523feb92da5fbe0add4358d175d52d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.3.0.tgz","fileCount":22,"integrity":"sha512-k2wY+c6tcn2qmUKgwnjv6fKU9elEwtV9hjlrpd0WL/5T+LEFSQtqBiT6VRYrrRqyP6m15vo2V8pSG0o4b/71Ww==","signatures":[{"sig":"MEQCIH7LvtMbhB9Uzn3+0pHBQ4g0eQKW/NMs2hsl4bCuao/IAiBMpLG+ZguAwknrcy8PothGGLpVy+vkw5ooEuOM9XmnsA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCY50CRA9TVsSAnZWagAA7ygQAIwtju5T0aaIzrX4NvkK\neZYx0/iCUTF7nX59IxSBurv2LzQcyA4DR8UCwQMom3p1rvvlv4SfxHItJkcu\nZpq45QPbMG2XuKENEyw0f4p4njHXS5gBFBtcQPeFLo2euDLYCBWSj5lLTXBO\ntM0V1uS8uFt9oxYLkKDhm9ZzY6tnmw6Cfa7KqUIHYAJZ5iWfzxsATIu+pafA\nObxpdy0fpnDRo0PptNHO9tLwuhPSIjJ6nbV9oBU+3fKH5+GUnnb7cHUR5VQZ\nzWGiggdRr9O9gDdH4xLpj4SyMP4z/PB+FwvBWWXFZiwDa0XU7vZ66Pyex+0q\nvNAUm3Lsr+C6SX6yeOwDppwbkUyCy4IUNGtmLcAJn0bSLcF2TR741O7PzB1d\nMHJAKTH0VAQKJDc5z8/YHXwBmfNvr90iJKMpEFp6t/61UbtYTQ2lAZXobUE6\neH7UpwfLlV+xTyz8anHjej1KYTfYw0jwaHkdeXF//JD6w1tDfmRZwZlZvbXW\n6TfISJ/fwCpCM7m6xtMoezMKkIGVlfFomnLvh2z6pqL5aRaQ4UfZrCI9i5Um\n8cP6SliYuTc7HiyNhg9gdIVKp5woyt+jLb7cNR0UaBteR2G7/G8yMmSsZcBp\nObiV3UCubRIrBVySxWTZKYlTJHZwvb8+VgCfHJBQvhnElfztsyISr6hQQl0+\n8Yn3\r\n=DO75\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^1.3.0"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.3.0_1544130163334_0.019522036035141577","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"@aofl/router","version":"1.4.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.4.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"2aae48933496291fa393e7f91b764bc2d2262d91","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.4.0.tgz","fileCount":22,"integrity":"sha512-iM864eb3gBmSHluWaiQmsVuTcf3zADnyG4mudEdy6uHddLSVGRt1zRR2i6r1F47d6I7Sz3RyoVw1FAyc8vShBw==","signatures":[{"sig":"MEQCIGB+a1jWEogp4+e/TwaNMMM2SlQAZXDvVNwUxVdtatq9AiBbNqo+ZBE2lyVd8lnt1eTR93gsao2Lwy6bydO3L67Dtg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJY2aCRA9TVsSAnZWagAAiMUQAJqZ5+ltxPOFar1D5CiV\na7cs/3nJp9RApwVeic95SmjP40vl1eZ+yY5P0trbVuD5LzELATWh3Vv5yTjG\ngvZ7V0fmXk1uIal6GwAN0XxMVW8ivxtVFldzYjNpDbTBlWsjAmKNwzkT4+at\nI618EtYuHh4KjpLOV/VKP1ynEECe10eabi7o/JNl3waQAnLqtP0NNrfQvpH1\ntnjupVggaNCFpuNJmxK3AveuODmx7nrUm0FdGpuzGHYqhgnZuXydSoTbLJvR\nN5V+vpfseENvBt4U2IlFkzrhDcfnR/yk+3PSfBBWx5FYWI35n7uWSFXYgiFE\nEStE24mb1hZjdH31kL1lkKrzYIGgs3bPnvIJ/MtsAsThsPzj8IxD79jqJlUT\nl7ypuMiY5rClajCZ9Q63f3RuEcLQLLnissEorogtjj3WT8g8tj7RD2QndtNf\n2Z4GVno0VHQpKZshtSVF6TSvzKq9405/iywZJ9EOKyvlw0zPfwOyq2+r95Gb\n+wmzHoPA8Jkdae5i2eWUCM/9IcNQhFYImemfH0XbXm726AkjyMHh5JTkuoUg\nLjbiM75kE86X9nLHB2BrIVpbROJHQZkSUBycqs/Z5XIv83jzHYM8Hxqqs51Z\n5GQWLGc+xSi1sAoBPYG1fyytlFxLbgY7tUzUKDbe4w+lMSDHbE2vSwMCcwZb\nLlwj\r\n=yIvB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.4.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.4.0_1545964953255_0.35130228769808136","host":"s3://npm-registry-packages"}},"1.4.1":{"name":"@aofl/router","version":"1.4.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":"Micah Blu","license":"MIT","_id":"@aofl/router@1.4.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"contributors":["Daniel Belisle <daniel.belisle@aofl.com>","Arian Khosravi <arian.khosravi@aofl.com>"],"dist":{"shasum":"194161f173824bb0e8605ca76d39d0c7d1e45f69","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.4.1.tgz","fileCount":23,"integrity":"sha512-TiaUUGBGZuLSW4+8XCaWtOHSgRtLXJX35bmjk6IKvhFEP9+cAmT9cKeP92olwVaPey9kQuwe0YYcYFXYXo5m0g==","signatures":[{"sig":"MEUCIEmV0avwuCeU3xNoNMhByUrKUEBAGkyOphnc3jbBLJqmAiEA3fVuKPg8i2xKn2BHSUH5vsld0/YckcKKN9WmZyQJ++A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43699,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcM5t5CRA9TVsSAnZWagAAIEcQAI1+BqvCOhE1I3sHNbxv\nA5FCKvjyEnEjRGbNpunUMLzGuk7pcDWnN5YO2mFpw1TVQrIeU4+JVZdjRFmN\nRIm1mYiZCACe2wH5JmPbc5IwfHn6vJJNYllBtVRp4oHa5U8fXSw8OflFF7a8\nr25qKv8uOAzuDePwxwkIYZGcCsOGkmyaVwTTfAtwWcWufSlY7IS7lHGUdfbN\nphd+wxyCfBGm1hWPdfGUdPeNH5WZrti/FiPvVbkfZ+Fd+F+XLvgWXM0VW6v1\nrTdFRUeo+PzTcTJ7rnG7FRQCSYEhsRlZZyZv5FXXteokb18eg1mfvVDhZM+O\nB3JlBdHcANuFLJIYWPVda/vATuOvQUMvdDQkvpNEhVV/YduFldf7qpa6hjeP\nGnHH2x6xy74ELDb0b6PGVolQlNzzoDWoDa6JOogz67SYCzonsWLHYdG7jEUa\nneMPV4tAUlZkQ3t81IDs0K0v40gLcB+iLWBwRQRcQYsnM/kDvHG44vEIivKy\nkkTYYZPn7dqQAdnT3hulaurrNScJBX1K9gp9QXOYD5WRMhiEMUfx0VWB/o8F\nTpTJamz3g2wLgKP/+fcpV3xpn2d9wv2q0OOel+P6r/AOHtXKIuBPM2EiUtG7\nMJniygf71kF1h7d+rrhNdOuIUqWYKBxdg9oPZBVJ7PhxmJiujCcrmNPnjmDs\nTJk4\r\n=2Cw8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"60297b316858cd061ea1c221a7e04406b910ef38","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git@github.com:AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.8.0/node@v10.13.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^1.4.1"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.4.1_1546886008542_0.8796421559592864","host":"s3://npm-registry-packages"}},"1.5.0-alpha.0":{"name":"@aofl/router","version":"1.5.0-alpha.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@1.5.0-alpha.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"86359e4cdabad3d74509e66e506731b078eb9475","tarball":"https://registry.npmjs.org/@aofl/router/-/router-1.5.0-alpha.0.tgz","fileCount":23,"integrity":"sha512-FzUcx3YJmN1cc5Y8A2sti7gknMk2lFQ68OvwGOTOxsaoCnAwAvG6pvO/UdfFKlpNj3saQfA0uwKHhgdc/QrS6A==","signatures":[{"sig":"MEUCIC0HXkWVhoeU+LcJwcnrmpOr8QCaxhMgTMSdH8n847HOAiEArEW0wGrTYcrxfR/Cglnk/Ph24UvCQlAW3cs0vyfpoUQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNmAFCRA9TVsSAnZWagAAf+IQAIC0gayN4fQgEoGLADNS\nfqtR0ZWthsEVj7WB+z5P4Lg9qqjnemmuuqLoCGBp/vVYiDRKyS73cUGEmUPG\nJxMhRVbfbVe8mPr8iR6M9trDNE++Wo2r/JOuzS0+Ux4ma4TUZu23xC2T2z0X\nlhS2ABANVkHFK8b2KACQ1PUN+l73nOWCZZxnncqNBC5aVS3aGctoC3z+sNX3\nOjmw5vp8Riv+28CB7ACUgzk5s2GM6hwc0BY2bK/LF6C4R0++F6JCNJt2p6rg\nB0tRrerMTbV4KpcdK/EMjZzlqHh5ly9ds7rqFyEEPY9oPP2sRDydyRIkUou4\n4cVPjXcgPjp3vg1z6OYfp/2KBInnKVlspUWgi+jd2Db7oT23EDYJFXSuFNbP\ny7goQL8H/rPsx6qMkwETwf7xSNnZPwAWqTUI4B2/T/2ktNUsxs3KLZkrICD1\noiidmNaaySjkNXHFeIAbmmShFoJdXHk2xNBNFsHGZRdRyG5+eJIKrP+uJfu2\nmxfoF6I2+88r37Ck3iulutfFmtUuqsAhXYcw1WvuypI6bPJvndREWvcY1HYk\nQPKqKvJBhRpKLMJbhzDd02OcLtMZ19fTLrKcN8sFvjriTlh/0m+Q3RFokmc/\nq6aMM1xAZ/PMxalLoZtv0kLORQEr2wPgl0ZaYHxhF0/XeU7DHL9L3gG+XTo/\nJFh7\r\n=tQTj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Exectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Exectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`  | performs path match and applies middleware |\n\n\\*\\* See middelware hooks for middleware methods\n","gitHead":"952b744952928486fa9851af7b15ef16fdf6eb92","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.1/node@v10.13.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^1.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_1.5.0-alpha.0_1547067396303_0.5069457756501012","host":"s3://npm-registry-packages"}},"2.0.0-alpha.1":{"name":"@aofl/router","version":"2.0.0-alpha.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.0.0-alpha.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"},{"name":"bill.salak","email":"bill.salak@aofl.com"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ef6598c302af094f9b5ac94d86ffa1970fc75555","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.0.0-alpha.1.tgz","fileCount":23,"integrity":"sha512-nSnStKpWohotSHoJhAQMLq+/K2ofHjfiPg9GkqWDHg7iOAPvtTAm2twUB1WIh2D9P5azA+dymFiMzXXbx+Iy+w==","signatures":[{"sig":"MEQCIGvXxVv5HUpqTCus1BagR4W64KvY3ol3SchsNBM/zzewAiBOWI3XWvs4KM+UgPmDuRzHbl2n0/2M8FyxvZ7FFs4B5A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcT7I0CRA9TVsSAnZWagAAnL8P+QEuq3OkJ7DYY0i6M9VY\n334iQq9gMfGIl/x+cUbxRaG1aL1PxODD+pgorlEJj39nhOv/R/qsAa3lMjiD\nmKNrpFSLun85CsJh2zhGXcVpKqjBqo40nGOhC5581Ig3imTk+PROaLBBhgix\nAQS+GKzrj1jt5o9PWlB3pLHHniXmNAgZfAb+LKULaUFfUgn/LhEmz9ZG5Pxf\nseU7y8vFIaIDhqHco6E2tYKVL+idUf2tYOY5mWmL8kZCzGk5xEjRQMsa2DI3\nqX0xAzwSbnyLwp8bCjH4po83tgmTRKvqy2Y0lAagAVuz3ApSFeR2hAc6tVbN\nq+MSWOU4Jhr34rpb+K4H0V81emLPqFbKV3RiSRZCf8CJwmNcNSRzzoMR1tGn\n+mvgVuPP5rz1ygCUmQ+0MXGUixbPYLCKlzqsO+2lqmfRVFzZW/phsZ6IGI8d\nfMtCzYIR8gD8ZgccSgsJ20XRy4T844w4R+cFa+Jfxw6FX4vnB8/R4j6S6C5W\n5NX9XDs73vfFWVlNZzltXqLrdLsDZyOcKuht2kYoWIFlY5XLNeikXgrJEB++\nFwLu5wL+W6yczJmy9LGXw5CiYcmYA9funCUeKEtam7blBrDMyWujTSk9XzXA\n/YtCGCqTFTadNVCBzjkVRQHjh941f6m+f//q5d4yWd9Csz+Z0HNNCusZouD6\ndssF\r\n=KkhZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Exectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Exectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`  | performs path match and applies middleware |\n\n\\*\\* See middelware hooks for middleware methods\n","gitHead":"afeca11d48651d7710e6942de5fdad812d9d87f9","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.1/node@v10.13.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^1.4.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.0.0-alpha.1_1548726835776_0.9808413733779016","host":"s3://npm-registry-packages"}},"2.0.0-alpha.5":{"name":"@aofl/router","version":"2.0.0-alpha.5","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.0.0-alpha.5","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"855119423402764f000fda5a5f551c94fc359a3a","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.0.0-alpha.5.tgz","fileCount":23,"integrity":"sha512-njPWkKEOzUqFTVmpD2kjJl9100G+HxPIBs7dYo3bBIhUpvytMGbl5lFKrr9On+Idt1gTrL11STqmwschIUAa/Q==","signatures":[{"sig":"MEYCIQCn+HyN5EX7L5OmbxK/5jvh7SbAJdkgr2QTMSssJQ/86QIhAIur3NW73y/nORGCppaw33a/Mqvbr9DoIWflRQaWR1WL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdciTCRA9TVsSAnZWagAAfQ0P/301eoBxDewFgPtf1Q+j\n8NuyJsDlbcEcU5cIZsDd/4ngvUUyM615EToyt8ASJ/QJ0e1wu86P7g6kWo3X\nTIBoQ+ZftdHCZE3oeQEsiCVABzLhMv3eS0yNnjVuV4UzOJnatcQCW4I6afeD\nNr4yXHyN4+uzrDMdAQbvxkGfSTq+/6Iy8LDbgL7vdE9tdekMbS5E0V7gRTaU\nCCNfJ4T7yV3MfTgqavc05mKOXYvu6vscBwmmJSaxsyhqQtkEl5kkfaBf8Nxr\niTQ3QNcnmQDZNFdzcjd+6uWTiO8buKLrzs9ZTutiwFXx1HI3nS02Aaqa+ymk\nRKjeDdf0YOv05ILqOT6mOnomkfa8Xgoh6pydFEobvw51c/vGJ4vlibAZsoK0\nzCIu3mciV2pwrFQPjYFWstDD0rgnYFOBalidXCTK9+83hWGvQPAc6VB5zXom\nVoqfpSiPypUatlBvOIWDphY9oUX/82jHVtikWtGpE/AjqDVH20csEu9priRy\n3FWXT3AN9jFu0bytBp7os0vTHqLPPvNzmlRoqPDEWqAaUx4vM53wsA8BRQvi\nGcwOwLWY7HuXdmZsVCqEqJ+vRgFcVvomXo8fBHFRToYpk9oo3fBIQVcPomDc\n98lyeEI4rGnb7DouvDSwv/iNRJAj71+C+4qqGLMv8A77KgM72ML89xnNsCGA\nbfpp\r\n=/OB6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Exectues after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Exectues after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middeleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middelware hooks for middleware methods\n","gitHead":"00d91514e0c953e8cd998150ed5705b87db20b39","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.13.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^2.0.0-alpha.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.0.0-alpha.5_1551222931322_0.13986241074085837","host":"s3://npm-registry-packages"}},"2.0.0-alpha.16":{"name":"@aofl/router","version":"2.0.0-alpha.16","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.0.0-alpha.16","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"8ff9d828e3be946e6e885171763ee9a06d116d8a","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.0.0-alpha.16.tgz","fileCount":23,"integrity":"sha512-vQHCKKg8Tv/1pcu08X7uqa4YlhrioGwfZZsAlweU2mo/5atJb8Mbgsu4XCgIKChrIZxH+CFeOeJi+obYdHNL2Q==","signatures":[{"sig":"MEUCIEdPAZmWY4zS49rIyxSWrKZ6kSA4D28en6Run2hFty6tAiEAmyXoVbx0kpcy2koHCaqWD6s5zZWCkWuthlew53XtRvQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcwhE6CRA9TVsSAnZWagAAlm8P/iCNZcTqsLo4p5YplaSI\nXTLMohteVPbQHtiHWSR6tCa4D/VWEhbWqCXPDIlfU6Y0xUlK/PrcfCSP3pYS\nixGoLSHfrBVsFlZejwPA7+bZljNtBAOHVBSQ//4FFiklwJDPg2AShrzbjZdv\nG9c23g+CJumL2xZU6EuhRtK++WwApsGUiQWoYpwJBXjexni9vmXTSz+SL6l7\nkDEXm2IoDObRLpk6qQ6nOpDes6LNrmoRF7j5Z/D2jU427fgg2BTGRbXQyZ+X\n6Iv8z9bsc2KB3PHqG/dR9bkBFQsH/2r6p5R6Z6/VHqFPwY4wI5xBjvSpM/E/\ndM+NxAyQOW4ML/8oupuTDb5Db14IFM/KVuvyu+D7f9XXyAbQdorYtUAeYUTQ\nPXr17USr2UsG4uos/2LncNTCagzfpP0vmQEbCbQZYbytcBnnHaSAe/pWPrwU\nktbue/ka/piK3doPy1yRvG3n1gO/icgzGGcyAofPt/q3VkgUzmLEf2i4Lg1u\nZ1bFDCl/DyRpHhaRxOoBVBFHddgm55shHfhr5Rw/BLR0tnmkyIHT56tUl1pO\ngtHogigKJxKVlWd9f3WTamSH7vcZsl6Qul0/iZUEOT+Ej+O9yS9TGYp1rMi6\na2GR60MsSUTBO/Cl4Y1lOrb3PXBWLAfH4eqoebUUNHPnhzcWPE9MHAWlfNUI\nRVAD\r\n=Ao/k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"0b6aa717a40d408713b5b981754243de8a8aeb55","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.13.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^2.0.0-alpha.16"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.0.0-alpha.16_1556222266166_0.06377572552149524","host":"s3://npm-registry-packages"}},"2.0.0-alpha.17":{"name":"@aofl/router","version":"2.0.0-alpha.17","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.0.0-alpha.17","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"edfd591787101845430093bb26ad31f397408cba","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.0.0-alpha.17.tgz","fileCount":10,"integrity":"sha512-+dEszxJZ+M78ZQvTOw99wXPoPSwlSTE8Qw0Kk5IxR1T2SobEV5uWeDKsoI4S4hxeuZ6d8jpYIeWZDtUwDfNPfg==","signatures":[{"sig":"MEQCIFMhNDnBx8DFb/TuWBtajtFZGx7wTWv/33bQ6rTLD+bTAiAc/okkB8ku2rGrM/REeu5PPAboi4UFL2UFvYULKK4FqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcw0+SCRA9TVsSAnZWagAAXtMP/j0QisB47pk2ksjUaoyw\nXtNOIFB90jPPwFZQ6PkhkAqu2loW+p19ckj/7WeKpbK2/oswb9UB1PXd8aGD\nv18ophUctWHCiv3uhOT3ovLOlDRA76QiLBLtcugeJN6Ilk5b4Y8GdOQGnJzs\npgAv3FjBqLY44CnxzeJA47tbGx1XiSEC1kgVZAIVKQERtypfYRU4HZ9WqGAV\nZEXhd/klAqKeVoLl4seon/j17B8UdU4TGQBGzQ7Szyq13ZrexzrUfgEqayfk\nw9cq4xeZfS411+ut92fSzvF64xgaAku8FIKG4FLrCUEc97zf69f8gLUuZcYH\nHM9BHYseD0B3azmCNP5BF/N4UVUrWpMP1M59Ho5YilhsdsLdgIHHQL2mCxj4\nN4GdRI7xaMGhpGWVg1cgevGWGulCWEpmAy2/ip1j/yIiLmvTuidz0pUABv05\nej0NxIYLVfK8ZnoPfyMvhoka6ZZLAct+EBV+R0WqC2+2tkmUSBMDYXUQECs3\neP1tvuwsYhbqjjI5r5Bgvnf5WQ86WrxKiWuVPtPRRfo6/U5oqR4tbROsTA3n\nd7geGtcKiwVlTuIgauxUXYLSTjm9Hk46TDc3O8Il0DG3B176oybYgkv7WjTV\nENHTPwKXH5JK2ihv76T6zapkY3MM/Vb6AkUF3oA8uYaWA2jwq2Og00Z4O5s4\nqAFo\r\n=VX7Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"6a396437dcb380ba2269ac50a5b3b88e54f99027","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.13.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^2.0.0-alpha.17"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.0.0-alpha.17_1556303762050_0.32553077020576104","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@aofl/router","version":"2.0.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.0.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"65c85ce5ea10b98cf087b58574bc7ca393e49e85","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.0.0.tgz","fileCount":10,"integrity":"sha512-ezZJMbfiLPbGfcCpjZ7I9e1X9angUX9FntscvStU2Exu3/I3oUqeyOi+jxy1ziX5kDLevAGTa4QbDGGSQtOTjg==","signatures":[{"sig":"MEQCIBPIIL8Rc4h/2XYPZJAipawX+RbJmrL9Rx6t/mffBAATAiBCAxrdn/MkQNIDDke+RsthreIecb3mBAikXTOLT5b9Cw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyKKtCRA9TVsSAnZWagAArqwP/0mLCXmOHHnicji8O4bq\naniWvavPAs8r0ZYKr+31WkUx1CWwgGsNDYZ9Y2NU5TtmrW3kSiGAK74p5t3O\nlNlTZiCgMq6d6HuysayRwdxI3DmiMyKmcR8U3LOS+Q3kO+SIBmNu0v1oyWDs\nELtFAaTJ1zeV/E3PTsoIwwsMB1P7hhtoS0u70xXVA55GPZb0EQOoSHkSbwVD\ni98RxPo1C8klcOJZdmNBs+NN98PgTSvIljrT/qmezGmETnM1sPKbXPHCp/aJ\nFiUvwK6hlQzFnzO62uBd1FQkNzvTOwpvrkwX2s3eGr9VAkMAsMhnQ6zyVFft\n3aeBL7pTKQKFsS/1UarvrrUULXViDBdC3UCWcQ8V1OEaHP3gY3mG121rbNpl\nHiYZegH9LlrXdwkdHCwVpyWC0QabqQTEwpxyTX/M6FVQPlyRnX6jSXNBRwfQ\nJmRl9k0xzNfYHVHRKzojux5Pj2tXiTbsy8EwxMnqz7nv8sPfDi/1OiNfP/kj\nUhtA+/iGxNGIjhshczTz/VR2buAYtD+S8F1RNo+BrflUDeA/7t5KZFErx/SN\n/Ukdc9Q3RjdMmwXvWdr8dstKUA/5ONlLywutmcsof57cBg4EdjyZ16PfgzcQ\n4EbixNliruFiodFuCu1At6C1I+Op/gr2rbc+KP3B6Lo4m8jgXxA7K3gEqpbk\n8yDE\r\n=bU6t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"91b9b3074f7031a51ce7afa9b542ff5dcfd64997","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.13.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.13.0","dependencies":{"@aofl/middleware":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.0.0_1556652716710_0.7070892868752015","host":"s3://npm-registry-packages"}},"2.1.0-alpha.4":{"name":"@aofl/router","version":"2.1.0-alpha.4","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.1.0-alpha.4","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"fcb4b4aa1e6504957cfa2407aaf87cd9c05ed2a9","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.1.0-alpha.4.tgz","fileCount":10,"integrity":"sha512-1lGYeJQEjxeP1HrVyAtywU0gBpXhyQ7VSXJoTpWPV2/vKlIByRIicUII+R/PPLEXOoonUZMXewbHuqHMn8kVSQ==","signatures":[{"sig":"MEYCIQDjsk1kUoEaA5Ww6ryNaz0fenR8YegfpEGOny6BsVuobgIhAOI3AYR/FWUhVMEmm5SJjJPQfwYFj49MSJnK1AUiLVuj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdN5PkCRA9TVsSAnZWagAAVL4QAJcZ5KS47X2D+fYn79/y\nLODTqHE9xTeTZj8YkUfSNVIa4MpwQK0zswCS9ue00G05t7vNdUbopaPW/FYL\nXfpJJ75bxuF6qMwG07JFWRoWHfD0kiaBML6FsZFMOkm1hbQudG0R5IQkNbXZ\nl0kXilu61KlqglWlgfXCt8UI0h2zb2iN/gp0ITSnHxBYjm3h1PgyTqu6s4wy\nCAya+o6sXcNiPK0dzOelTnc8cN78v0Fb0MX+f/3WVaDEMeQPwY1jqxRsRH0R\nP9+wDrVeag6IcReR7Pn9BdJSY1mA58NPTEh/l26PuZ8zZnpcvKHuGZuhm0dX\nySnggA4hifGORS4mmZZJjawDnq+7SL6EAzsiQX9KYBglKB+L7St67ZZPJz26\ngmSbz65XdDg0/0jOGq3/pVoGqSeIh5F/M3HF+HeueFEDTNTdAhpe9GEJ8uUj\nFUj5l1FV587/7f0yQfojV0dM38K7XdlTXQX6iAxMS1Eq4CTEHjA4opQ4Bljb\nYwjH48lrL4HwTRTGHSkB8cbYuLpAnbnqtXDl95I/ZyU+G9cvwHJ2Z6LH5Db0\nXIRXcMQwfR6SsYTH7hWCYVrL6gVaTvkihjAQuc8SEqIkQv7bM1vBSHuVXBN7\ntQIxNTnJiOdLYEz8hXOTMzo2mjh1kbFO2vomXQV20d0x4ZQ80LjJ2PAA7u/2\n+TEO\r\n=aEbW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"7c4ae57824ce8cec4984c32b93011f7fef10e1b8","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","dependencies":{"@aofl/middleware":"^2.1.0-alpha.4"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.1.0-alpha.4_1563923427374_0.0069137918116477515","host":"s3://npm-registry-packages"}},"2.1.0-alpha.5":{"name":"@aofl/router","version":"2.1.0-alpha.5","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.1.0-alpha.5","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"190b7f0c3483ad1c6751cce58f9351b4d6b9e42e","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.1.0-alpha.5.tgz","fileCount":10,"integrity":"sha512-04VV/FYsqHV8uZj+DuJNsb0002M+Helaa1HXqzfKR9oXgKubgogsjBqHEBADsDCG0+F695NRDKRz6csWGsFpOA==","signatures":[{"sig":"MEYCIQDa0xd4kYogGwgYIGRrYxGvxty5HzTVFrk1oiRLWZcbUwIhAKoqlDHWR8qqfA5Sj/cv1OMao72syai32DLi9n2NMoki","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQcfZCRA9TVsSAnZWagAAPl0P/3w3Ny3v8//shV0f8oNz\n9/FmuNgC2zVcwN8pvuZkWXfq6q0Jhlz83bRGWc5Dwjntavk0QpQOfe1VaZTj\nFCRUifpBVwfSnPMiAcGsBlD/VhH/hvk50pZGu2UKV0W9O5DfoMmK51fQJGXe\npbBW1TEz90FSYhcT3q6g/vQ01lK/UxkTB5vAtMtxEu65BhVjPsp4cleO1x55\nWIYC2OBe914ZGVe6Ojp01Z/EJJaGsy9T2XzHldn+svJpY1wJb4nV6oOl0Tma\njn9z6oaaW//otUL2vuij+3Zh/AUtWMN1yjmwJWChyhI2qsKpzwew8QQ3PGWZ\nRR8lUjQIFOejkLQ4shD02MDEjzIYLh9vPQpC8Z6bTc7nJfrIR3tqJA0MUwsw\npMzqmMGmeuHEo/AN5FFBTqFjCJUpQmXySEnT+T4p2bMvugbZe8eZeBhJOcYb\n8lrPWoslUEhfeKA5faxhxe8pzb8/6orSgP9hQ29MT01T8nt4gh0Be6ZuIBpZ\ne2SxMY2gix2iqqBgskIBQprefIetzZxRDvO9RUbaOe2H4fWPtVIuUhar5yPu\nS/UFQ/Yj+Zf/25lHlo6REuZta18x1FjHHkR4o9KNtncUGe9StmsaSVJUekCX\n0wuM7Iiz1KF+a3C6IvVqOnYpOLxJVdGkQ9PlgXFLFMG/0pphfzz/Km8EUOiX\nN8wM\r\n=briA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"b30cfefb6593b1cde5c0c6d413ce0ecf1e1f12cb","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","dependencies":{"@aofl/middleware":"^2.1.0-alpha.4"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.1.0-alpha.5_1564592088569_0.9943745786823168","host":"s3://npm-registry-packages"}},"2.1.0-alpha.6":{"name":"@aofl/router","version":"2.1.0-alpha.6","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.1.0-alpha.6","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"c5686fcd26d90efe184288a9dd064098166277c5","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.1.0-alpha.6.tgz","fileCount":10,"integrity":"sha512-XMH3khr61drT11P8xjCY8IR6mykLX0SD9cgE3UUfm/Lgt6wHqCOYw9S16hUGWWadiAQvobveUPVxCqfuhUVmVg==","signatures":[{"sig":"MEQCIDqYhr25S9wcUxdIpzy4DNPZb2vk8Gvh0fkGLj1YnVB/AiBYj5YUpAie9tX4Lx2pyPXooOvX04QglzVRF5xWqLAKDA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVzSVCRA9TVsSAnZWagAAu5oQAJMA0rFNmX6zj39Frssv\n7H9VEkT4w+jJlNnqmvmWuYfveC6EyzTW7dveGek9fxHhmOUE9HofCJ83Evam\nUsxJLxqHwYvzHRciCok+enQu88HYZuGT8QvyvDUdqoBhcUarEPjeDo45Blwk\nGbUUJWrZQdbK/rPAHexACn0uJ6pr5txkLUJ84mP+yS5s8K0eXYKAGvjLoxrQ\n8CqmJ4jl8ZxyJAWnu4cYgkDc9nlySt0Ln20bbl3uQO8t+zMIMaYANOy0oeRR\nQRHYRz5gQsJlPyFPDRLBhjenbnYWVVmmBO74wAOFwzC0D/AyZh/lhm/2JNcA\nFp4QGTzz6A6z3TLEil8bUciQqnrzyKM4zn9PO2SHtiYZ6/k3ZGQ7EpINEgJX\nuWt1dQyP6M8wBcJAj3y9kJrjhVoIOPtobc7s7Yq6I0v4AOfC/aQn7UAQrEPI\np0MJQ8L6/jBOcnz+bm79q070aqzcOrtemIf2HhzVwluOcrwz6bH3/SSIBxGd\nQ+9DJED07/5p2yrD2v/cZEtVr7iXzqPHRuTbuKC/yIawno8FTTSQL6FBE83W\n9GEVxybstTypOnVGm0ye5wtJqLBVftU8ZfiyVKyPAJRhJV5j10bgR5wK7Dr2\nRBcbzwcvcMxcO8bR2HXI8xIa8HOIJu3RrdE7ORjtmYSQMQrWUZj35A7S/3Vx\nZYe1\r\n=Rs1f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"080076f804c29d48592a199c4b2c53e9a7f52def","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","dependencies":{"@aofl/middleware":"^2.1.0-alpha.4"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.1.0-alpha.6_1565996180862_0.337230336642828","host":"s3://npm-registry-packages"}},"2.1.0-alpha.9":{"name":"@aofl/router","version":"2.1.0-alpha.9","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@2.1.0-alpha.9","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0710e779922042b4862640434bee389d79101a77","tarball":"https://registry.npmjs.org/@aofl/router/-/router-2.1.0-alpha.9.tgz","fileCount":10,"integrity":"sha512-VXPW1MpESgDB74B7R5fZLp598uYEZMeHlRd+cYz2W0hxVGDRY87+poy81KDRKqBxZGYqq0HRseMOl3UE/lUuMQ==","signatures":[{"sig":"MEYCIQC7o9dusYwhrjboOEyYMzaUetdxqkX51qHaNjrlJY/wYAIhAMkoeWufRiUzDWh0Im8W8TfF0jmrTDS0BpU2rZdE4oPt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWO2ECRA9TVsSAnZWagAA52AP/3f1bRKed1m0soy/plBV\nBOA7vv0dJ4GBohXEyVz6wMOJ677MAmUQ1RmQuzhbGhce0UYKlnA1Y5UGGiNV\nWtGv8C+8nU/tolSrEw6Ng2IgdYTB8m1NpXoTdBF4OPlK+wyh0Q3+w7IeCd4w\nav/DBLwLXiwqHFZvy+2Nv9IwoYukPuMKy3mlAzZI9vXtHI6xWlqyplUnlitp\nmzuICgiNTXOkgxtImURtJiZJJ3RwuIyFkY7ORgOnD3IJbHQLoO7R/C+MyoLW\nZj3nGkbmaagyXBQeFI1RgUPO5FJG43t4wwuTXlaAd8dcH5g/b54OTTxbpy1/\n3amPHFbzoCpb6t5X3MKEA5otnZJAgk4Vmjaj8wn3LXJYkgZg9YyLNCe9HTir\nq7ymHM0Ar0nzTvkGVA+WLOBnbg8KUk0TzSntxP5yMv0hdr0I2AhqdS+BqiDH\naajN1XplK5wARqNC0hSO3XA9w4Hja9cA94i/u52mQXakDyrWvqjo9lv5ljEW\nRCxJPc+ARFG2HxEmYu7/93xzIjyFobv/0hKvbUM1406t1+ul+fWiooPU6geJ\niFwfWoA346lJGW/TsPx0hc6SS34KX33sbfjkCwJ8cgY4Ipg0BiWVwYMz2elQ\nM7bOIhbX97/4n7hwWr6ccBHMwT5ldUobjscgF2YKx6ev5NxX+3pxgaiTnazp\nB7go\r\n=uSzs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"9dda0de8d96eadea8f7eb7f19f4eab08fbe611b5","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.10.7/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","dependencies":{"@aofl/middleware":"^2.1.0-alpha.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_2.1.0-alpha.9_1566109059792_0.3064681050671354","host":"s3://npm-registry-packages"}},"3.0.0-0":{"name":"@aofl/router","version":"3.0.0-0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"4bca96db7ac60ba98aaa201de74a2b0e734d446a","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-0.tgz","fileCount":10,"integrity":"sha512-MCpcN0Ooc7ugabIFCaC9wjUhEPEJ9B7B7vXRb+7Cd3jhLp+Bz25418emLCD/BAEVeAKWUIDF1j2DCB6R47qgOw==","signatures":[{"sig":"MEQCIHDsDgZJt9r+/JhXAOVJddQi6edWqaB2J1KHXa24WunFAiAmttxic+jqsFWpkoAbMIGUPmaBNcEoYCvvDAJUy5OyyQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgG1+CRA9TVsSAnZWagAAm3sQAJrwjR2lKRJRr4mSgUQ9\neAPsi00MJkrEyBtKMPXCHzheWVsckfV4RMs3Szce+CvGF/xA/V7BHuBbuj9f\nyNZ2JlaDMP4E/5g9c/l2Gzd5M77aEgxAu5GaGZX7IcB8DWj00tqeEdr5a7i6\nHke9UqVZesqotbrHzNk1adhxV9Xxak5pmygfYidlAeg2WPaosFAi1ugHPXm+\nwzQkEAROJyfjIxkLrK75183cS9IO4tqOK/glGVaKM9vMZrcJHk0+QqQPBdpB\nfK7/4AcrLeCgofxRTiC8UTiO4urhM1mJnranPtJQ2rMZTjV8ZhwDLEcRjpkk\n1k4TKAC9FA/G2Yl9zSyQ8hCx3dm/d0bzlIMKz5yRHVev6RObAHs5jNU2kZdq\n8EIxnxe+5trRCA5oOp3iV6urrj3DuGj5DF3p4rpU3WwchII6mX/ctksqITK/\n1cR5mgTjabeS6BbzkUokoeWNFJiFD3Cx13S2OhhAEDJ5G3UQE+sjrKaWZwWo\n7ep/wjzmMpn1CweZmRa7l572WPOMfCNwQu8j2wpkL21t1HN4HC2SualCDfe0\nt2o6stCuSCr+LzLTQ5ntYye4OrleJKrikxFOFhEWSo8JEMBLbCsfu9CCU2j5\n4qNDNiPMZFMEBcqnnp5geCK0nUAwaRKjDHBVg0KQn6R1ZNKuh1oeo9r2iqL9\nxyrk\r\n=Deh2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"68ed707a605f1a3cb02ab70ff9ed8a188867028c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.15.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.15.3","dependencies":{"@aofl/middleware":"^3.0.0-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-0_1568697726184_0.08878551382951372","host":"s3://npm-registry-packages"}},"3.0.0-alpha.0":{"name":"@aofl/router","version":"3.0.0-alpha.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-alpha.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"bc4849968efa0c8945a28f30b84cc9558b36ca5d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-alpha.0.tgz","fileCount":10,"integrity":"sha512-43HClDLaoDM73FAbX/lQdwfZoDTT8hzdGSph1syyuIqIVYPcL6B9kgh7YXIINn462/DTvhUi1sMOcy7elT48wQ==","signatures":[{"sig":"MEUCIEg8lDLK3BC+NNLTgRCJ97UwPFCy5QmFQpPtIPRIwiMHAiEAjVTHR0AtoFCVZAtiTPKW38SmHme5wvdTpJnXmmBbo+c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgG35CRA9TVsSAnZWagAAgycQAKQYz89O3YHXwLPezxVB\nZ/NYz9axWFSUpdCnLRLXzzNYwUxe2Fgxj8POZmfUMwzve45OgWRcvmeseW/p\n8qoIleR40rmpVOGf7dCsPeVrAKZxSB8AD+wqLXreVCXT/G4kSfZy7/0WhIOh\n5i44gJb1UDxN7GEsXAb221WHbLw3pfQ9+5h4J5lTXP+1VH1KnqxA1cWvHyIV\nj3jt4hmqSlbPNyrv3S5e1z6LSycw0YzZV1erOoVUh3eraLUdF5WkTsxKtpr8\nShamE1fe22MeI7d0yMpBKC2dTGVCKG0jMwiDv9GRVritF0NNHBwC/uDsRlyZ\nuD46nBivDf9hKUeNAS/3pG7ZfjuzvK2LfDzp+DUJXF8qCmWf1CmOrzpi/isd\nIMtcmWJ5p2MgDkmkGHQ34glVWGibAlHgPS0YdrK2RO67pjGnE3nkA84YA0DS\nUUMSIiRgISF6UAk3zFNWEBvzLwIa12MLH7b9aP1SlfRx2FNTNMmdp1Y8yTgS\n2/p5owLBQ7pGA/vvTOW6K3PrCIzT3dfCYgJMgmrarI+UTvSpFFMr7/dI3kLQ\nS9PZhSBCyUELcWp2AskqkW5cz5pwtkZ/bY7dG6hGYgPfNYEg4OtDHSUzBOOb\nTncofJhChg8/h77Z1YUmVpDKll8rT7YEMmD16hgkcLC4ApimSH0/rRhsTI6v\npGMl\r\n=CAXY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"c6c4d16f33cbd321585e3e7c86b1aaaeeccd3627","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.15.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.15.3","dependencies":{"@aofl/middleware":"^3.0.0-alpha.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-alpha.0_1568697848505_0.21205040123563257","host":"s3://npm-registry-packages"}},"3.0.0-alpha.5":{"name":"@aofl/router","version":"3.0.0-alpha.5","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-alpha.5","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"10d8f593cd75126ccf880755023f69664842d420","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-alpha.5.tgz","fileCount":10,"integrity":"sha512-SJ8iWFGbL3BFYyAIokKNZ4Lo0yRuPs5PqQtCOj7rUBlgCAwpdDHr3eGHtwI1b06C1hNMaELr8mm4elNDF2FwGg==","signatures":[{"sig":"MEUCIFhvhLe9i/QlY9+Gfq0eHCpupjJjw97OnpmV7OcfvTO6AiEAkZSWbVUfqdB/3yimLObxiL4ItGDEWGWu0PyjOjPsj8E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdhHKRCRA9TVsSAnZWagAAkcUP/iqPBNdA91izGD35z7NM\nNc7va8iX9+okC/AVURXPKdXvNDyKe4RAqfvz+5PO/hy1REKIJARzas8lmKA2\nnbrfR58STaUG3lLAV19AK38X5DrkGRnuAtkPXQObvCmAbQVribmO+7EmYloR\nk494jvhJoPciqOY4oQgV3qCm68mFPxB3LjNsVIE9s4xF9mItJNVmnip0G/T2\nf1DVi9ZACvukgUVm4v/u11FWriiWADqOtP6YOI9euY1yTrRJTiiSI3Im+G8G\nJLOt7rtth8SGJ6bLKCY3Jo7TqtKMqf+MS+fAEE4t/J69OGEY9JqD/h3L99L7\nCsXrz2G3DdjKVOXA8GF4lwRfJfJz0d43HxE+YwrsRI0kQjwZ7FkUfhJfKpVN\nxkUIeyES83C+lxHlSn8folsdNGmdPB+jqX7tieD/JGImq/08KkGtTOO4MgAq\nEQk+kCt2Byto2eGmlbnzKvPv9vZbjeNHxjVi6r1FdS9YOp3ckKoa2GyjDtXL\nFBUGgz+BzPQe8Dw/I/iz+Mqr1ZKoZ0cnQAHy+6/lWmGXQCLzFLpLk6peP/5K\n64FHhDniyRX5cJRnmGeEWHsMZt6xIXYbt3G/autr/iVrjzahDvgyWC0D144F\n9qM7u/0BehoZAW+U82fw1Fw43oaMcwK2CjSSwfdBtXNcMYRkVnzuq77ZelmD\n3uDc\r\n=jMHw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"09f43882b317744481f4b6845b1cfae0461775d6","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","dependencies":{"@aofl/middleware":"^3.0.0-alpha.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-alpha.5_1568961169309_0.7692509579261115","host":"s3://npm-registry-packages"}},"3.0.0-alpha.11":{"name":"@aofl/router","version":"3.0.0-alpha.11","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-alpha.11","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"c3e326544b02ecb9edefc782f24182132c8db834","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-alpha.11.tgz","fileCount":10,"integrity":"sha512-C7ZaHSBBpasWcpdPLwk3AeWkpzw3X216coJsNzYnRxycMq7+gsutVeJOfov9Kyus+qd8Utyxf6PXQwzoUmRBFQ==","signatures":[{"sig":"MEYCIQDVa0D8ZwjT9LXlcmwzFiRaiiSA8z0xlJWxThKCnw1sIAIhAJJ4QwHOfGmRj77rjjnVui5cbitCCZA3UhMBZgEHgsoX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjbD5CRA9TVsSAnZWagAAmIYP/2+mC67KK3DdJjU2WDUt\n0RC7ajyqYEcm/L2iPiJ3cZWLclqnAoht4JzmkjV4EGCLoew+skPKYOxW9PTA\nvrFfWq090ufI+2hwUZqn+A2oIntfCH18U7297uzQOTEc+w3grheynmsS6Jw5\nJUimsa5OE+7hIw7xXaFwOwc+Aea8cDHQZa9uLAJgqFDu2MeE0NSgCvBJGRc3\n+V8GeqkticgluIsC+1CDxO4hBiilRtg8ZrKT9oK+c8sy7yEdkbrw47LIfu8F\naNBIEHn+FzsPQESiO7wOtEgnjYgl7s6V9h8HMS3SYUXEVdoNi/nCFGv4QdQy\nUFcXljbXaucsoiw6EPhE98x2cAOT3hGAwqwVOAlQ7CVPWszyidIukhyoXV1l\n5fO8mDGE6/E+EffP6yArpRF6yVZlxrmpyQb3Ra6GrIWwb6QqQcWRQ/28dUUG\nRGq5pUPr0IMK7bwNvkwVsv+pudEIkMSwceHWO5zHtwTB6J372WLJmbQeCKAI\nLYuBahM2MsS2oBZqs7lkaSM+Mdk4WKYL40XNA7q6F9MDmKNCtlw3Ld2ZFcbY\n82+IcWTG5M8UWmzPvGCEDr5g2XG41egkFBajJB1mj4/3svuMqxot9SJcLcTc\n6l9DV2QMbUZW5gIOuMGTVN3w+pzQiKOg9Q9D/yU8RthmVt9UeWu0L1waNqoH\nHkeC\r\n=+6GD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"ecdfe7e68c95cd3ce9eca2c86626275d1d4559fe","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","dependencies":{"@aofl/middleware":"^3.0.0-alpha.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-alpha.11_1569566969351_0.018355806913425754","host":"s3://npm-registry-packages"}},"3.0.0-beta.5":{"name":"@aofl/router","version":"3.0.0-beta.5","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.5","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"aec194f1fd2f3aa7116e24591fd5f3acaf81e8ce","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.5.tgz","fileCount":10,"integrity":"sha512-hJrlX/YHO0lCqSXxoUaJ6icGPtr6a2Zd5XOztx4agspM4mxHPwreygw7c1Acd9Zdt2drE6qlcSdx2QaP/MdGuw==","signatures":[{"sig":"MEYCIQDc6+E0FiLVvN7o4P8PyVqLXskvDDkDN0kssX4d5T8TXAIhANbAcYXrsF0Swwgh2/t7iKMUmyUDag5Al1e+unuWpKm6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmbxfCRA9TVsSAnZWagAAQ1cP/1gwGpF4RcydzLcflciF\nlTJ7pr7+PurZa2whr2/vWfjxMmDr6PdxZzr1cP6Q0+qGQtCQ0kBfidGg9ZdN\nnWqUUoxJgrm2shQiSKcXw4FPcLvUf6wxCqb9+rDoIR/KJLcHiT4gIA7+l/nN\nwhTYU++SJp08uL9xXXcv/TiNywCb6CvQyBHpmy+Y019OvKefKYwKaqYvuSpz\nxpHPgqGyuZ75VNM3S56kJdx2l69In3VB5Qu0cdALf99/AWDRwrmIUkzivQzI\nRPefRQowRURzJvAMZ97F5sphaareenLX9TJHpQx9NsVMmliRMy6EAbqBHrev\nsoWoJT2bvUccUHAWzkooGCGrvaNJeporvbkW5A2FBfvhvXkK42XmLOfuLoBV\nUelLDjgMi9Pecm04NYv9PSWCyvWnjbxaOwJGwu2LRfx5H+oabaa4FtRzZpEw\nDKwKpPi557T2Ky4pHhy2U+u7M5E0Vtb1mPpztk+d8eyQp6nJmsAOvCZKMEjs\nKftO/r0jDj9thNVWUKojpMjy1Fw+VIIADj8na5cvaNobHm61vnoAMgfJQ27C\n+jTyip1GIi11PCtkKt6799y1lVdKjCnIvTXuC4t42BPA5qI+YslAgsJXWU4R\nE6yfnj/wO0eRDVMKjCTYxxyjFRah4iPU4DIU1AC0EIWe8wbpPWHAc4/LMCuc\n5Mwq\r\n=65yG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"6eab96d111f1ebe9e5c5cff00cf108d46ac4ee19","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","dependencies":{"@aofl/middleware":"^3.0.0-beta.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.5_1570356318643_0.9169433249220487","host":"s3://npm-registry-packages"}},"3.0.0-beta.6":{"name":"@aofl/router","version":"3.0.0-beta.6","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.6","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"4afbd57ebec1254c32e087df4a41e76800990939","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.6.tgz","fileCount":13,"integrity":"sha512-vSq8E4n1IGZd9zHBuF+NGRK4IZdcOkBEn1jp1ra198cjU4ruyKNWO7nMuC2KEx+mBLA36d/AoM74WqwX5AKamg==","signatures":[{"sig":"MEUCIE2Vc5ueHQytZFAlUII+vFqdUnEO3QrcFgBtlTGu6BIvAiEAup1TTJmLnsDnazowfuT7cLsHm92y+Z578rf7mMDTUBU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnBVsCRA9TVsSAnZWagAASRIP/idjqy6YlNMROP2mufWI\nP4PrSnRc6axMMaG49FpnT4Qfdd3xrdxLwqmV1QsQXts92Lt3E8zTFZubOrDO\nTu++k3hLKrdxYTxo0hBTVYlqeQaJPJIDReJxozJZjZTLGQhjo/Otb5McI1jM\nHonPsPbdk1EwSsr+9nJIAEJaukPVH6f5GLdp5MN6OKxf+xtYtabq4bC7H96+\nBHSoTnyqmX4K3IeVsfdM7SyUajTR20U3mX5NAJ0RSB/gQQZfiArX4P+BnTFY\noGjjno7aeEPbGJS//hc2lXFFveveSvE74SFanDksE7Lm4Z/lKIje8fabuU9Y\nRSUipuuw8y3NIsT2PyixCNseAyb///ULvOrZ0gDwqWQDlFHMaqwtY+WaQgtV\nf7FltkHMVcuhSD/eRyAVIgKAUHw9ScWbhULktHkzhNda7CcEbhPvopxbjjcj\n5pcKwpSBfmC0rrMNeJ3YsMms/P/pbCmeBqIdnKCSxTIPuZjgszDYkVdqWAVm\n/DrE0jghIqzXAYhad4gzd0IcYi40g1+PerZUg3T8pQ7qraszqHIFGj18fkVU\nx5ICTR2Ar7E/rAH201VX49gHdML+B8tYITrRE4ppP0zvI3pGw2SPBqYt2Pyv\nJ+h3gFUtWWv9fX98F3Bsi3Hh0RCqZjwCHKfWVen2YCwSpnnXMxlSdYcVIcJD\nKpyO\r\n=vBCs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"23e8e9dd00e515c9305baf320436e43f51d7edd3","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@aofl/cli":"^3.0.0-beta.6","cross-env":"^6.0.3","@aofl/middleware":"^3.0.0-beta.6"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.6_1570510188094_0.7467569225247135","host":"s3://npm-registry-packages"}},"3.0.0-beta.8":{"name":"@aofl/router","version":"3.0.0-beta.8","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.8","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"52edd0270ce338c82042e0ec35411571bd968fae","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.8.tgz","fileCount":13,"integrity":"sha512-GDdEBggO98A/nrlX93HKgyCqdohMl4ERJPQULtWMw8FVsJw8wsRs1OQwM70JuBFOfBiPBB6hRWy4ikX9JRwjYw==","signatures":[{"sig":"MEQCIEUR8gwGJSm0IVIhVtKxSw0uBGH6MBMFstC6PgOj+XgTAiBKHTuWyJnavEsmiZmM+NGG/cNiln4sB4A0rtcz6wsMNA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnCMlCRA9TVsSAnZWagAAMToP/RUpm+J/4uJ8In6Q5wB0\nX4JBuqE3uar39TlP69WAV9la6Bu3nEKwDlWA0IEdZIIGo5pKfgmUTT7IpvRa\nO0zdpbTwx0VQxiMUmBrm0LMSI0Qz42TRytq1R/rxPrirIPHtG7rbtKMAX2G9\noWeIj9Iu3F1VheLmZY8ppTajlz9MRXKQtrhcPsga8Z2A1KTtO1rjunHUC9Uk\nIMITmB3MxCLp7G8SpyvMXqYWy6dPz4qqPL/UDfHCQACAEfXmHuvulHs7ZQY5\n/c28BmG2KPcWzJX1BD8k0MOXC0PZ7NhO0akYfU0uOjHamspbw9ts2cBgU5xS\nlYIWlIkfe4BfKZBTgwb5bkWnEau1YBIJT4r++Mdb+pr5jt0qSsATndtuDic1\nBGg6F1HwUDC+O1/Nnwc4ps51ASS3NDCRQVWyQuETEKlfi3XfpQ0A5H2cTskH\nytRvJNzcmUBncQErQyiEK+zU9z7l1n5xqt+sPCs4jry3M9d6TT0zjOQ0HQSt\nF8ROfCKIccKpvBGjVpAgMETwdHEpRgVEktpkEH79mLhoQFNhobXkhatsGxiY\nrQOfE31o9rN9oj5K04Fa+6aY9sCUCU35Jj7smDyeqztU+4l8sKrnRjmDFFSn\nAFG1lkwPtdNS5QP0vhnOLti+0UOQ2Va2Q2PJh8vNgexfmJ9QAaTPIMWyJm2t\nv32p\r\n=5Pcr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"31f766f3cf621147bfa1530b863757cb08e5fc10","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@aofl/cli":"^3.0.0-beta.6","cross-env":"^6.0.3","@aofl/middleware":"^3.0.0-beta.8"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.8_1570513700914_0.3011758705267402","host":"s3://npm-registry-packages"}},"3.0.0-beta.9":{"name":"@aofl/router","version":"3.0.0-beta.9","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.9","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ed95785847075c6f4208f301b24d8403b5891ece","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.9.tgz","fileCount":13,"integrity":"sha512-bjjoOFbPZjAGs6mu18kqc1hFvUMsIHBa/JeFnWgqpyTFQoK4JtrOJtfwdHaK3WbtWlD7vf5OoURgxQyXmc73EQ==","signatures":[{"sig":"MEQCIHX4OR2J1gbRfjrRdsYuBJpFNugEAr/7A/hnbOTssaksAiA2a4ii4oUwe1CVI3gAe9X1+P3UNIptg22bJqE0SigmOQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnCimCRA9TVsSAnZWagAAINMP/3LQhFWC0mASqEgCOku3\naRfFiSUVZEq02Gh3liVshoa10yKfFSFZyfmA3hDnhctJD8eJXn7V1xZ9lVmX\ne4FW9ShMeJGrBeoX9lmUDOD9WvCWshut7Pwt4rpsy61f3JSMyqMAQgAzxGPr\nBXrBUyMQKI0wCuCV8HaDdTIbjxZ4URJ21MbjEqOPoOTEBmFMqziEOIGApbQD\n/GBinybzuHsDWb1iWbtf4CwouESsnE2O8e5Ttyh0C1N1UFCFLFzNlcsAQetp\nbcLsfZ24G4kD9OilSmgrLjZ4UA/K/QDfh33vFVruxp3p4hZ1/BY2HnZXwUNt\nZDvymkee9Wp5CyqeGpYUCEt3yfT/eMtxXxvLO59vCPGOeMyGNiSaoLvsz2OC\nC++lNv9wsvUR7bc9zgJ11IVe4wRuOI6z3R9wDFCPYsvDIvVA2Y4yKEm/aimg\nyWzO/Bax54d54fkCQTgK40jiapyt2zjajNZhFAEslMT+TL5WCbN2mXA/ZTTG\nlH+PsQ53EHMlI4E2R/DbFX6i8YjkRRiGxj8zpXqf7dHmFhx8Fc6+QCPJHVwP\nHx4Kr1UxJeAMqeIDZSt0jICoXNK8xYgCOhyCq7SB+L2OFOHNPRr7J8tdgHLj\nyZNMQ3BZlPX0YpH589wDjg1Ouwaz+nM1/+gMWPckGo/xgHmxwQgbWGx9h1o6\nErsW\r\n=X5ce\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"e9e6bf24a51611b9b997dc99e770d43466ba063d","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@aofl/cli":"^3.0.0-beta.6","cross-env":"^6.0.3","@aofl/middleware":"^3.0.0-beta.9"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.9_1570515110016_0.6943298613509963","host":"s3://npm-registry-packages"}},"3.0.0-beta.11":{"name":"@aofl/router","version":"3.0.0-beta.11","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.11","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"23aa4b358b98f8a65401e3e04b5f6a8fefb6604a","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.11.tgz","fileCount":15,"integrity":"sha512-CgIORySQ81qwpf2iqRVYJTsea9IlwwYNLJNeHiIuraeV+RQ0sx7aK6o66ufsQh2P17Bm54+POlUTmIN8rqE5Fg==","signatures":[{"sig":"MEYCIQDQIJrorfH47Eh532XmSDGgs/OTIRo8SnD3l6O/IikUygIhAPC7DVaV/XojhombBylKsbqrGRorsQq4o4ufkxHLgrMa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFokCRA9TVsSAnZWagAANGYP/Ak7FO0fLsDL8yQ7EUYT\n1A269aepuzDfygf37LMRwba6cVSlf+ixHGPKK2KGcnR6hWwCt4KB4c85fU5a\nVxn5gYMPmrqTEllsLFgLzMrsYcDSaO5EkH6IOLGMtz/pr6+dIUxR/Qt+/Tqr\n2fRI/Pjf8VggWMPAyad/olE7u0e8q4S3DmyG+EwHMxGeD5OPGWZO3zn9QV2m\neA6FVVziRSGcxnMWMQZPbzTMkbiayOCqrM7c4R6jckQucG7dcy5sE7hQUAn7\ns6ha22EYmrM7fzHytvyci22pbkvPYPnKQXgKQ52fo2T2GPKMNO6uTSoLGJ6X\nr+6MWwvbp2BiaPTsRpcc2bR9MnMB2k/b+aYYZho/+dzfXGHiviaqX+jfDDqO\na3F/2Zk9okfCQhhMSA06nAzsrMvDFeOfCJov2YeR2DkJ58kl8zovXksmX3Rk\nEhEVK6GxOEUi1wl9j/FH8VqxpFVAojyG6CkgY5Ez5823V4BOzcSziH2ITWA7\ncgZbSftst2ayKO4Ne+OY8JHUEGOsZPvfnlnUyz4vxbEGIs/7aaJhbCUh3eHM\nMid+1obfM7GDzkvHb9Cb7VZ4Y8uYUKTPyAM0OxPamS6yj53PjtwFlLrPteEa\nrTXaVK1dO/FVvNzpL5/9Dn1BLUXvzhb7dVEMzYh090v7i9Cg99sx7dK82Dy6\n1KDK\r\n=Lp9N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"ad7cdc30523ea031f8d1bf5c62440f80f75a7308","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.10","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.11"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.11_1570527780126_0.7331498299724104","host":"s3://npm-registry-packages"}},"3.0.0-beta.12":{"name":"@aofl/router","version":"3.0.0-beta.12","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.12","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ba1e8492ef8c709b7b0567f9a352df759349dd69","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.12.tgz","fileCount":15,"integrity":"sha512-HFr4ddvK5Cw8MUq8J6xWn+lu2UfwCP6/Qz3QXtebxbKfaKIVUA++f+5Vvvr+dfW35LHR/dq3t9UhITOlmsBJEA==","signatures":[{"sig":"MEYCIQDUFla21Qt0E5WcuaF5TKpiJSbcoSlAy2FH4w2f+sFmDAIhAPqwhGl6JY6g2v0U+JhIDVDSxw3Je37h/qMEZPox5fJ/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFy1CRA9TVsSAnZWagAAamAP/3hVnZ8VgkYqZXa8Mg73\naYPWmpbx12KehgtDbE2s9lVka40Nf/+jTXkC8TJyvzPekkFryfk4am/g/KsA\n9Zpa4HfvcLVnGhVWhJDN0wc5jhiUKY8gh87CNkL8J3PkQzFjT4FN9P6KUstH\nAO5f+GkvyNTzlzbHB9lJ3Y2MKxRIA96vLu/QT3YXECEfpgQkjCGtutWHmplB\nue0EIX3BfHa9P3tP9Aa1jpN0bi6ew/szZuyRP9BeIlqp9OK+4J3WJU31y67C\nmHhu+wr0uh0o7Wti2uyn0oSh+Tgs8r0TShoT9RtdslnL2rKrvUaF7nJ6O+vP\ndCMOXQ9aSQ+eFxYomth1/+WMVXlST/q52dnUpG/tMaUBxpLGIawpfKHMPMQD\nuPo6PnN7BbONY7HQzeaPrmSXFSknFRZ8AwWmgkLZg5K5qVceOg5QfsA65N1G\ncYC7D4eBFdCnX0Wn0SUhLY4BmnLS63kqWgjwLlnP+1bvlZUu9obP2tBmgccv\n2KX8/HO2G7SLTk0jFLR2fbDFuNem9E0P8dRzAiF+3t88e9caqrv3wAQo09J0\n6UYXKf6vWXDNMMWhVgk6cvQejbfP+vNp9Djroc5vws+73N17p1lKHpZp9EED\nizfPc/L+BOZw/t+L9XqJdmoi2RcbhUIZ8PvH6NxdSVJXVGJBZInfgPjZCPQk\nAPYu\r\n=3wSC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"7fefe74af1885e7b807b6ed3522d9ae661e52645","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.10","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.12"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.12_1570528430423_0.7773127564731681","host":"s3://npm-registry-packages"}},"3.0.0-beta.13":{"name":"@aofl/router","version":"3.0.0-beta.13","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.13","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"f576ebafa82387a9149cc5af66ff14782071c1df","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.13.tgz","fileCount":15,"integrity":"sha512-PRqEIuZPJaukqUHgJ3ftuffIq/AxgEcRsHrBM2HJHDkulbjcfbHoC2x/k6cECTS0PEHQ/q/TjLjRPcyFim8V3Q==","signatures":[{"sig":"MEQCIFFOTL4G4Z4ItRPs8UzMlgKgPo7R/fDcxUchK37l9zjgAiAyzuH28653miE9Vns0nqt2JU2Q0g3UzD1NpUL4scJ1Kw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnV5qCRA9TVsSAnZWagAABk8P/jkT3dPlKi0g531yzkUw\nYdGb8FWt/1ah/KSfU8Wm7KcxU+E4iI+NmMWJ3qIvY2VCE0/BRz+w/DkSTC3y\nUpTl98/8QiL1StThO7+4rYokYK+zxumyk7aA4ubChgwbFep3J0xOWNmEp40d\nWJwEbA/9Ec14AVK/1WkP5/YLCcdBduMHszk4dgsnQgFoJSjHnQ8tXPIcJnnP\nnVKSUArSCj+rbBOGRApAdr0tGy1JFToI+qKfWIgj1x1NxT2Q2OS6yU8w+r82\nV0OCiPZcpR+HNYD1LwmEmxmW2/QlUqSPg/MsefO3/SGM9o4Hb/O1bJ65JhaO\neE/rG0PkAd8BYviCgJwBXt70zjxKPMlPTaB2dj6as76XOzS7ui60UM4owg0V\netJCwSg5NcwYhYzK0zyjsLrCrlW7iU10ePFm6poHDinurWDSFM2C7k0zUoc9\n+IZhkbJETpcL2CFrndMll3smjfXJjf2gqckkIsY35rolKd6Cpgm6r8qWeNMS\nyhHdq7KjtgKV4NVt5DYKTzBluG8d2dusQgbnio46dluB/wFmzLctopZufMte\nalKseRBnPAByf2hb3tX1ZNfegtO6/Xp0Xi7tTtmLJGYNx++ezkivRQ5c7Gcu\n0Nf7ITcZob8cekjUWY+bORg7JPoXAI0kffFG0uWGdanZ7fWvyOvdqN6DtGN1\nsFQB\r\n=CFSg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"aa2e52c46ae9451fde097de4734398430f2127a7","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.13","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.13"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.13_1570594410212_0.2095513856872091","host":"s3://npm-registry-packages"}},"3.0.0-beta.14":{"name":"@aofl/router","version":"3.0.0-beta.14","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.14","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"087bfca249cdae35dfa616fac287c707a3f290ed","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.14.tgz","fileCount":15,"integrity":"sha512-dqTVh1pVk8ftKP2QDhNw0Iw+k0RYQYtSoLn89t4JrP1B4Ji9POmp8ojoV0S3kme2yG3DSBJv8rKhakKgdi7xfw==","signatures":[{"sig":"MEUCICbAWPID9Q3EDjMuSU9YdPIxcAnGfseEzT5vH7oRcSIzAiEAppL/I/YEth+bG9FGOYAnomsCWjb4tiIoQ/dMxIiCD1I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnWMNCRA9TVsSAnZWagAAFkYP/3qzvKbDqJcW+409ug4E\nfsOZIRkRfUxWqheS0LIw9BTC48MYqF85U2HgfAzbJVZbNFFhtsBNFZCz9uWI\nw+FUtpvsH+btx+ofMv5iCXMzBBs2QgDgOYSfAyLfqeo7lU0Uw4JaWWNpjupI\n+3ATjJBL+V5mbNxg293U3VdnImfJg2rbp7VZwGTh1V9zq/bCUnD75bMXhZqn\nVPJi/5JKq3F0Tk/NFXbioPWLONbCxS/ZDXisAD4XjcD0c7+2MDkiaKl6hV/J\nNPHmYYjyKnZ4hp7iC2qhZN5+QagafciAlrTEnnz+V+zd+PeTX9/1zhl++OQE\nO62VLATJuv+I5V8JjV06i7p3mYnX8CNEewB4fXR6e5HNxPyFNNZP4ah+6dEN\n8TX3oxtaXqkeVYCHKnygq2oB0N1EVqFfppICEfWvaimKaOAhhoqbOhkzgOrq\ngY+xF1G42jDlLK7aG3Qkodq+vy97ACcANc/RxbafkvIi/lxVGP4C6zE2bMuB\ng13fYr2jSC3ik3cs1QAoviamiQso8HhTS3YGeJgjrNVa15npLDvPxDcVdnCM\nU1VecSAxdxpn/yjTUgIvuBgkdDn2FNx3k3f7KFjSuKR3SWYKzRao9XIsMLxE\n5DR+ZME1e8+gjSMgSfVZZ5WOmDMv7BrlhDScygdkGDlXKIaLD78yRjwVgkl7\nXVPq\r\n=W2/e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"80c0c882f3af67f4584dc8d38de8a62ca5632c94","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.14","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.14"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.14_1570595596368_0.025435418280771227","host":"s3://npm-registry-packages"}},"3.0.0-beta.15":{"name":"@aofl/router","version":"3.0.0-beta.15","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.15","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"f8b0a8a3f9585108de6788b4491ba913860bc97f","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.15.tgz","fileCount":15,"integrity":"sha512-ZqSNNCQnizGodcNJHYO63kdDSpE7LD6LgEWPiWO8al/izCDf1TRY1yxXsjC5aZdCSmZxkNGyFJLDQ4wnL0lSDw==","signatures":[{"sig":"MEUCIQDPTWyvK1gdBr/6a+5UHJHQ69HpjOucU7wrPMjVOE1IUgIgdj6gMZSJaNMnA+SUKVAl6blq9c3Q+s/yqKXyXD6+bvw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnWcrCRA9TVsSAnZWagAA1X8P+wSO8p+gyyB3aCusRXtG\npejGGHlp1GKKdU4iRYSN8kbEFr65vdO3Bmf6XH1uHy61SuZzEGAEfJdXSPHn\nJL2nsx1zvVZmQVvLxFUIdovxHo0WzXbQQjuNZE78BFbQEzJBCzGxLQNyQwRM\nWXEJXuQDc9CVsF9BdJJjtnwhPG8TlxE3tTk7jTcR99OcjZfzn26X9XFapmLC\nlh3MxZYECVkgB0zy+cwrUgq22Kd7KWNKUGugWiuO/fSpO7VS/yVIMB4Trcvr\ne4vHgjhRQ+3Xp8AfT9PZMN+kxfl/do+MFVzNVjuRIexWcKUHI9ynUNs1Go5o\ni7Kjjv54wF+cTalAn1x6a4NrkU2FIQadW8KCxp+CsfKf529PQfP53owtIkKj\nZz7wE5+VwEjzTBprOl70l6MaKMSm5r1UlkRu1F3FcDt22gV9NtgJZNzN5mBT\njO2Z7NSJTFdvi2+PmY0A+D27dU6CDQsbbspGgMJIhwQZaJ9R95jmh3wDWgBc\nmFqNlrn4Mlp7lCXblAp6Vcd6+JAUfJqGMGeATvQpDIa+vpUjKp9Jlx3Ml2jq\ni3CWspcADhMy85JITMX5SADVx+LL5K+iQ0gANRGrc+y7lZ8Nd61lzn7UDxFz\nI2WlOuy0AJhNX7Yp5x3OwyRWwuPA2rvZ1DS2+RRNO3txU0+ORc+rLO74UC5C\n/KDc\r\n=kyb+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"0fab45fd3f4a1789a3683dbaece87d579e9de597","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.15","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.15"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.15_1570596651343_0.30714789703070644","host":"s3://npm-registry-packages"}},"3.0.0-beta.16":{"name":"@aofl/router","version":"3.0.0-beta.16","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.16","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"833fc6b6ca7636dc98d858fe139c0b9fb6f77945","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.16.tgz","fileCount":16,"integrity":"sha512-SNRhZy2rRGPgKdQcpK6NNqip5jpM0TT/gda1C2AEHPrjzmpKxYfckvLg1azgiptJlngFA0zayS6JqyYq2X8sjg==","signatures":[{"sig":"MEUCIQDDSPZ6zgKj0sw/mu4Ex9rM+j/9wIW75BA0cF8byivgLwIgRocWyJeQn2nM44wL38ZNSRSfBh1UqUSNMmS0gO6wQeA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnWrCCRA9TVsSAnZWagAAKlQQAJplMHsKtHS6lRdq1/Tl\nOzYPQ8ggh4G0QV1c5u/P0qBigP4zlRQ1iR61/wwwQ/aPuDU9zb6UShQh5UyB\nHbFCOkOwgOp4Vaqw9wU3XqTYGxqV46XtSeE8VX/5WrB01Xtf/qR5TWrGEi1w\nYteVZrQWdV19mWBdvHAR2t+iKZhdJxse6M+jcgf6rbUB/v/Z9/QgwJe5TUYH\nz4pqEhtMzmbUCKveDWEu5LAlYj8kx5s81ACfRz1Tb1Nv7W7dRDED2U8vuQfQ\nyaO6QqUb26HxKs1gjxygfQkEMJd0Ip4OLwoFBOa5f1ggo7/gcD9apz2KZjLK\n49VegYmFmDzN2KCXu5wOfwEC6aVuMWBYm80GhB4PjYz5QLb/X/m5iBPGtvQK\nPnErNrHnLLBxDfOitC6LmudYlntMxyzVvFPJjiXmarmldgEGJ4h7P7zjeZpG\npYsneyVFVqO7F7xIcDSZbb2j9ZMnBNl/JtdRwXp8ZwzNpqYWligikWkmJ/VF\n81IKMWNlbgOEjozIqniisQ73tcKshB1CsEqyOys8ErEnWTMfN19/BUjvVdNa\njV1PnIAAI+0dqzm4zd+kod/6X5cdF8FpoPERLhQFNjeZmUJ2NZAm9KfwNF+O\nj1AphPv5NhYqUz7M6KCTv90mARrKXuODGyS0ItkV885XKRVkjCwYrezhZFp+\nhWep\r\n=2DUR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"32c2f889b64c30fba2458f8704f7c135b47c5b95","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.15","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.16"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.16_1570597570417_0.2056417112824629","host":"s3://npm-registry-packages"}},"3.0.0-beta.17":{"name":"@aofl/router","version":"3.0.0-beta.17","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.17","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0be2e57eda35175e1f48a7b159b6cae1f2c7f4a3","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.17.tgz","fileCount":16,"integrity":"sha512-xi1KqrweFONj1cyzv99wEH6cGfXaPI9DqCiFE//LYD7kgB305w0HO06gqflGYjpI/hv1syzl7klmgadVh1fDqQ==","signatures":[{"sig":"MEUCIQDi8Sw2aEZRjU8SowLRtfZeebeSRjrTLmgi6U+OBSbHpAIgRD4+YW3gQz3D/MCo46GdFj4t4FIm21tSD23QqVT9ZcY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnW85CRA9TVsSAnZWagAA4S0QAJ9bv080tHEigb1KMV7P\nwUXHTrCC7mS5fSWCs//4vJxh3EQkbeWwa7i288gRET9VH3ilK9XqLPYpUQMD\n+92Rvh7ni6qY1ZYlQPMnV25WLKhffprBzwqmRNRCLbqvqhnms1qikm/X+xzR\nhXRtsqRK8n1R+TiCMGAgYmZwbYZiltT+6oSHjQC9LvMzD/Nf4RJnutEc+F9O\nL7/7jnEiCqyn0uaaB+E60uAOyRP4u35YPjdZVNZv1tnYvEJPJwDRptHOvaNL\nE3gigW1ahl2NULWRzUK+gAUpUukDVfDSJkiXdYMcb/FOSuw0p/Y7xw1Rh1tM\nMuXgZGrzcNh7Le8FLwHozpwCO4ulB1gVx9ALsdDyAHQ58FLoYYkFPxkf74v9\n/K+4GwxHs3trZ3TpU0ejG+Eu0SLJa5HT+KiKy4zZuXJIyPaEGdQKNOeJ2Wsi\ncOd+KarmfIG3M0DnAsmmOLhOUVqt1mQSid2zYmJlGJxK8BmbH54YszUoXL3r\njT41oWv7pDvgteVn4GzV44MKbIydTuFM79ejrjQSHf6LXKNWDO3ctG8hoMJc\nEYSQap0Bt3UHfzMey/BvEbmujCvz2AuLEjodTVwcskEio7RPwQyqovdP4qt7\n6QGLWJvm1m6xRMocBS3lndWdYPFHeGoM18v+LyrsM0yktoppFWQ2dJHefKrc\nbtEm\r\n=O9yg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"1a9a0010d531b8a6ab7287dee07687c312379976","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.15","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.17"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.17_1570598712907_0.7498012499038627","host":"s3://npm-registry-packages"}},"3.0.0-beta.22":{"name":"@aofl/router","version":"3.0.0-beta.22","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.22","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"b4a7676d3c6df3ca7db332ee2be152c1c63bd971","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.22.tgz","fileCount":16,"integrity":"sha512-etg1DhBKrzlDdCh0CUN2lnGZ7cW267N51FB1mf4xEmUmq5/pFCPH3pNgPpoRN6LzMVcORoYF9NXx8gh1GtHVEw==","signatures":[{"sig":"MEUCIHELmiV1eVPDQkgzAidvgnhmhDIYyxhc/B0/JRd02U+dAiEAniBlzlLdx+dZF5ssZGqSU5g9hvI25QOV3iM4W3CIwOc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoAfaCRA9TVsSAnZWagAAg5QP/jqH/cc1iH6lC5GfZCEu\nZB+m7Gd/wSG+X2vaLkJ8J/ANQolras0JAMwEVzLSEQBSG9QM3SXqwcEanVUj\ngG23QL13mZDKZpOFFBEXCu2rqutt/S/Peuw5z+quvXUMInJyUtvljF5aJRv8\n8o5yqFjOsH1XWXEOgN/JrBoMCdEkuTkLOHjB92/E9/S6raMuckWAFkWk+zYV\nc1n/tKDfIrOmA9I0fULvwMKF7V5tXSjyQSHPkPPAVqIBD+M6QSOEwN1cNjI7\nE6TnQNYbEjLhg05ErYq10zLNWlMmpgnQdqj5WLNHwsqPqHSQVEn1k0bnnXWS\nc3yDuU5qkS4Zaz90U6a5/BiBW8PIX3N2sboQlzCJEASfiL92EA2m3uc6HNqv\nL6xleFtGp83OfeQh4+R+vpJgHM1f0UzMyxwT6fuTFHql/ZsJD79wGKWJfEmx\nZnaW5sjzMM+XLp39xxRVML6JFH3MdXA33t5ENsWCXhXu5TvxbfRLAYIhlz1A\nOUo/B2I2tg7G9m6FoCCw4pd13XmT8Wx+Vsyzey9zgUBozmhfkFe56SAqjktc\nj85sbJgoc55hkHDuMSWK8cUTiny+3xVM/XgcYENaZh1Tqv2Hps1SV+7lIUpY\neMTXlM0dUxDthSgI0C+Q07ItdwA1cAR3Cv8pYFJ4AANVLr/k66vZcAJd6TpD\nYRok\r\n=tOC2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"6009b3c38f31f159b65265ddbc3653c0087909be","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.15","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.22"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.22_1570768857702_0.25793434571605567","host":"s3://npm-registry-packages"}},"3.0.0-beta.23":{"name":"@aofl/router","version":"3.0.0-beta.23","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.23","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"87bab08cc6426a566187579aa7344b1940bf6fd5","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.23.tgz","fileCount":16,"integrity":"sha512-qJHelZPbs1v6i2ujXHMRpw5utprQb2E9KfgC8apgO1SWN4oVCQGiOckqAGlFgjrsTxIcUyYQR5bAis0gTbA0gg==","signatures":[{"sig":"MEYCIQDo4hzlewlVlK3WHUB9ban9oTlveqRbCG0e+4X2YdzGkAIhANH6tyN7xBwTn2FZr8NwbM3z/ldqw205eSBSS9R7OoQl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoBW4CRA9TVsSAnZWagAASi0P/A9FUc+rLk3S2A+TOFlm\nZBSO5OoC3cH9rOARcNG8fpq4ECmxxbFB2CFxSnF7Dy1/KbCNazHxKcfzbKue\n/Y5EBxoU0oI+rP8MjQSgxHS4y//ntGe+rJT0cl6MkCIjToKwElslJHrj9Fdx\nG14hnfdAzkX+CHDaaMLq5nj72OSfH/PlAcf9dC6QE5nVBGuvvcpmQdSB1+nE\nRwbKR+nQ/QVCPUWisNKrOp25xpPzNcDMXisedz1k0AbBGnB7E1j2NKFVNajO\nLxfjmnOGVEZY3FR3qykvgtROTnaRVt7HYtXh4D5HMntV95JCaE5S3NpctRMw\nKVQt4PMVvEbMX7UvNPwTwqFBlhSq7N7KXNDPq5NGuJEQAf+C8ZXC6Ub52C3X\nhgYhvkptK7G+OIW7sjOCgRGBgCxTfGU98O8JJOPuRSr8RjFBbzqvDQIyne9V\naywNT8ThNQLyE7svg6wF2CQfibGqRlQhe3LuhufpRtFIdO+AQzWoFRcDG9lo\n0YxkpL5pcg4lFX0WxlxZINN3n3IpxM/Zj18snA5K9G2gzynvs68+f+PK8J9/\n5MCiv93FYQADM1swTW1mlzxyQrK17Tv8G9lJePUSXv944X5P/HiZUEBENMLv\nzLaMHL5FSmCWwzUm8TiOnE+1W/txgpXTb7oYHTRELrOfvOBs0J8cgPSL+lD3\nmSGR\r\n=twr1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"35327a525c0190a3c1ee36be061e25eeab73ed33","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.23","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.23"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.23_1570772408161_0.6811897421823849","host":"s3://npm-registry-packages"}},"3.0.0-beta.24":{"name":"@aofl/router","version":"3.0.0-beta.24","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.24","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"399453793f67dc1f5694a7f6262a388fc7f61679","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.24.tgz","fileCount":16,"integrity":"sha512-S/ZqBivgCCl2sMBKZdtwQo9MyzqoLylDxAhiRtwMah9eYFWDr2rAK9P72hLKIRsV6/l/FnVBj9TI9MBLgPgt8Q==","signatures":[{"sig":"MEQCIDlEzGRxkcpL9sN+259pwz0xtIn5daanNESlmOGGQG6LAiBQOZyjLdbe+cW9tYuG7w23b6+kXaNZXdbmyYTmU6JHDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoCKLCRA9TVsSAnZWagAA6UIP/ivK4+eKuNm6Mtka1rx2\nj08HFXq00kecR/6c7XrpzeS7OozT2nyqbKFMKeiTMT2kBqqbJgz0iCigt2ur\nnTJEAiJnzbTzDjz8T3JYfHidVVE7qkStosAaaZkY5dYLoZbopQAmsSjHowqa\ncB7197Qb/qfgD4/imOlt86bNKPj1jNzY4YBUfg2ruaOR6oFJ5BqvC5GAL9pJ\nYGntAigK05EkQWIJzsWbs+LcPcACbNUFN4wOfjSjG5U19o41W8ss6hCpRD+6\nUvFjDsG9XY1S5HjE4OFMJpzoQgnJWgZwdhqbzG32iuFqCmra+hjU8zn8wv18\nfn7slymeQI18jzUg5aY4DYm2uTU+NT2wWM1y/7Zokdt2HYJuRRL0+LwhtSyb\nJYnikOqaYO331vQhJmIOWX0LIju43V8DIcDGSCCyNSg7AsOSUBRvGgs+OOlI\nsh3e+x07LazfLmcCArmtGJmjWOcFhO4/a18LVsJMWvljIZxjNBblAc725Vsr\nsAVI1oUdIJHbhpji3bcnnAmaHShvswxJUgc21KWHH0rTnKjfOAobtFhbbmEl\nxXC9epW8RR6VotHffiNi0Pbfzj7H7LHfzq6vv0Twy1GPNRJUC7rXcSqpY1d/\nJtC6tMUwNFxk4pCK1C8BIwisscD5ajrh8Y0bZiEuQmmrm8WnS4h4goLiNZX9\nAQXY\r\n=Yf0D\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"be81016959caf66748582258c92f8c73471a9f67","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.24","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.24"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.24_1570775690677_0.4170918116036879","host":"s3://npm-registry-packages"}},"3.0.0-beta.25":{"name":"@aofl/router","version":"3.0.0-beta.25","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.25","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"73615b9d5678d8c33638d37300bfdfe6df9c1337","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.25.tgz","fileCount":16,"integrity":"sha512-nfdmeewLHzj8oK08IA5IwP1H1/CsI56DvkCocGYm364tMFGwl7DjWiNWbvDjYnkCj98DPHy9GncX4f1wLC84bA==","signatures":[{"sig":"MEYCIQCjpyXOxajamzbhL5be3VTjClxe2GLWDkWfmnt7FdLeeAIhALGC1aywUtFBIctmcm7FemNCIgNhxNy/JUtZUOmHSlxV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoDCdCRA9TVsSAnZWagAAcfMP/jNpKQ9NWDr4GaytWmH+\nxhSVN5KsekN1aTMYy0jD944jA1WsJFY1MqMA4bGIqZkDKf2+otFKUXZ72GYY\nlmozrNiV8kykkqNOpG9AW9MFhe847R1AgrNl0G7Zy/pjKXBqtAo5mB7TmbL0\nPfxea0zVRI/M9LpDU0I1Uju80nw16d/bo47TM2W5SECSBChPER8nbEzA2MOw\n869h/0NS6+M/a/SG6445XlwmrG37NeeLPg2wr4uihgM+4CUQPYC1bmUqdwgh\nNWQUQbmf1iU8jrN8HW6mNuhMpCSXcWQ8NLSqjrBPeFHhAqioe6f6rLsA9ja5\nxueBr4nR25qNumgb/tPRd3P7rnFgMlvAbju/4mgAdV0YKlXQud8xh6hhXlaI\ngtoML3cySGvfsNc4jI+DR0J2IZMWb0S/nUHdgTTXJluUAdZsAyYTVnVdJKy2\nbGz1lBd7SNddi9NKuUbM9BkoBs5P0RaVK8pSFpq1i5gMkGhnbwOCyEiScPEt\nrkzT31YUsf5OQmvRoB0RxIaOa7QfJdyXFJOP+O7PJFqRsrlnibs4NC0DeKgZ\nwBjG4s/KwvoMn9bC+9vRfNejgHCn0qX2QAT2xWcectoujW1RIe7jQ0auBA9c\nVgdt8shn1pZUO3NNDcljIMeB21IJfQ5M9N7wV1g5hOpr5VxGTKC4+pEs0A/L\nVJm1\r\n=Cnps\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"658a5f60a694ddcc2ddc62e8db80688cc6b71c68","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.25","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.25"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.25_1570779293040_0.689713343884335","host":"s3://npm-registry-packages"}},"3.0.0-beta.26":{"name":"@aofl/router","version":"3.0.0-beta.26","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.26","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"72af129a431c8ad8b9ecf6ed34acbeef121c8e71","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.26.tgz","fileCount":16,"integrity":"sha512-QI5oGxLU6NHXHNlkQ/jVLzuL7GwDvMcrUVP8RpOLBksQpSGvId+BAbPyCAvCDv2H6Nm3zyED5wDYgMjW2GAYrw==","signatures":[{"sig":"MEUCIEllqlITA1tivte5QeguYJwj/+nTRH79uEh2KclHdJd0AiEA70XabHpLg8axH5X666fX0N8+1Lu1PsVd1RBZwyBSqz0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoDP9CRA9TVsSAnZWagAAkWYP/jXR4T0/8fbDbhMlYAVq\n/Us9dAIMRI0Awl2oLTdoos+5tx84xySELTO/XOpv1yKM5hx/D27RC63GwrWV\n1CSUSlQ2UcxO5L27LPUa6zlxJAUG4NzUm0UpQnT/QLpi8D+nZpn8x+Im1SCv\nOJgH0ZKV/Y4qu39xJUTfT2mPlytfsmrqXMiaIHZV/E3KAGSDK5XYYiTOPeUL\nDUmnJKors6PTiRVNwJQjzLDv3FYXnEQQRxfUTpn/hmDnuqmgU3gRN0IKUdL5\nc/kX6w0rGWYnZLXhiU2Sqycl7iaJ2pLuTeQYLVTOtgVR1ViUeJzC1KharQXK\njK3X2MU3PplCn0njARcT8qZ+8FD7QcuBatUju131JEjI1RY83cnLtZZcf9Qi\nLzCtZGVkLU0xOHhQlJxCnOoN+fbkJKx+lJN1fk8ejY6QaJIaIE9LcomntXMM\n7u1DbwFWwm+UUMKxFRDWWjZxcPGa9WRYNcXt0P0pFnpS3pUFllVRsn1kQRYK\n0yRvMWPTkJsZQg5kRZx3sP5k0649/O3Zn2hN0XL9k1ra76fwl/3nrorBP+De\naJPr0eIt5xM1pcBjfpXBFPlf3LpNcXc8gW7cuL09aHgx0ep7aO/+5nrxihWe\nfFpzvj4ZNEJ//fzKKVdjkcCGme4es7XG0sCHvA2ssPuQQmbTU46S9HXmih1K\nDbvA\r\n=r6Rf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"12fa62b6d27f95d1517f1ec4707c284b865a7081","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.26","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.26"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.26_1570780156942_0.8714987365045677","host":"s3://npm-registry-packages"}},"3.0.0-beta.27":{"name":"@aofl/router","version":"3.0.0-beta.27","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.27","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"bbe10f3d28a0f991f242115c15d52257828e6172","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.27.tgz","fileCount":16,"integrity":"sha512-S1hry66VU917e621G/8Jk+z5VQqDF3qlJyvsFJZeNfGUZ4utiTNQCfjhuEwBUQn6mxdb86XCGFOm/aKDRK7rlA==","signatures":[{"sig":"MEUCIQCyNH6echMi+I4nmNbpJNiYoxTkyG0q790qdwvOr9NFFgIgfWqkObpmMITXAwJ8p+iHPXAzvXL2fgO73Y8Ev4+X0i4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoDUfCRA9TVsSAnZWagAA54UQAJxSDl3GE96TmdIdjvyr\nKrIoILDW2LI5cdNPyd6lR2vZTFCD0YNz4tAAi3Oeyf5c2vaVFqPdijvk/b6Z\nsZBDaPbOHZlEMlOSzimJrpadTRtZmJaEnj8xlkZCUYIdmycAlMVQK+RK7KU2\nBtjTa9grG6yqI1/NAQW2Hv+umRDgP1Z+uqZJ4G3/Lxj6qgNy6w3ewSE6I7l1\nDuozGqIOpA/84pUlk1OqaDo9hjfZ9BZYUrUlH8ZiQ/AjpSlb1ZefUAvHZz6A\nCkgjM7J8Gu5+o5RGI9K4yMvKE5kkx6+0EWDjyY9Frr2Z6SQLrnI1utruG+VK\nugoPWcrTHK9PzK/Sm2mmPoGhfLeS015VlZXz622GBq/a83+KhG7wATpF3OvP\nJaOakCpaP1d+1vX2cZPVa/UMjCJtUiUvcb0kHlVUJGYSH2CZau27GM6Sx3ha\nitwOlzQru0djT0YUI7vtQ7iqXm6+JjsmIsoIsDjvnqW2ZCesh7Igk22azoy5\nhwPJBrft0QUrzj1h/qyQ34zLJoF9XmfzGwtrfDCKuyuOJgKnWF/qgQi2xAL7\n0iU54nNGvwatiIUow0hd9YgKKMG2pOs7v12aQRwbQjeOu5eT5kJtvscPDOg3\nsZyIWeVBDmIEBB66bRGwTXNp0Yb3Hq0BBf8kLnsgbbBX9jd+6oS2U4AI4zZq\nbRE0\r\n=j2h4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"de2f0be87aaadfa43212214d4f491d68930b2495","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.27","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.27"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.27_1570780446695_0.9490144466201462","host":"s3://npm-registry-packages"}},"3.0.0-beta.28":{"name":"@aofl/router","version":"3.0.0-beta.28","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.28","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"693816f38b2d4a121145bfa705346c955364fc00","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.28.tgz","fileCount":16,"integrity":"sha512-QMAnFljTogpOerMQuNq1zPamNcEgNK2kk6b6VYO3wM1Q5+cnE/69wATdFa2mP4CNPg9OWWGyFOGNhVL6Szuhhw==","signatures":[{"sig":"MEUCIQDNPIRHeOH5pgGwPrgj/E5E83ZXxzqMRQJO7+zoiQLKkQIgHkUA4v7lRlZFkJt2RaXKFIpPOtvZoQ/dSO74PwUyBH0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoDbGCRA9TVsSAnZWagAAL40QAKE9lM6GYtEoMvWGZHlE\nkJV9Et0FSn31fP+dRxTOT34jWP//4h2EvaCpH41na8+LJH6Z9ym8dxEH6uPN\nxeS3UhYlmwFrK6V80qNMs9bFueli9xHF3RvScGo0JeeQ8ZImg3sij0UiyEaL\nz7grCZ2IsckJZQC+S9pnTApffiVBSltnzNU3hqX4mOPvC011mtUl2xPewqBj\nKwyk/w7MiyDxetAkDlE3QBt5p0GbTG3izVMwhbB84NLwfoOeV/JkgN45V2Gj\nzOifPaNphrnjzXaNims8VWeg8FAnbEC+hfkk8Lb2BTT1s+2fmNbArZf9kxB1\no7eUaL9GhPirr7/sgg++2v/TT9Q8oxK3LahOuBm+R1L9r8lePGoY5CsKHhTm\nsXoiQjbkRJiJEsXm2L5+74Rd/wWz6Decg/v88xt9wReXTuQ8eEfW9bZOU+Zt\nMmIge7Z1VzKeTYODcVqcdNz1rz603gN2ZLJruidsAWB3Fk1EMU9do3H04S7q\nYOa41ZIrk5bqNyFpK6OeY9/zLy2W6YQ25abocUDdzOQmIKyIxaCCSIU3avbk\nDEvw/lqYTt3LZ2NLPa95ul4O3xKi1fEHGQIV29WiyDQ2l83tjtVqqk3uzrZt\n3Eh0YUGEM9DEApxZypt8pg2ZPPM9wCi6dVMHI/vFyOxISheUnUcNpA+doiwT\nd2I4\r\n=zJAf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"dbd14b0bd931ea76999d514d051dcd0a3ef6a8c0","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.28","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.28"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.28_1570780869781_0.09611883737348359","host":"s3://npm-registry-packages"}},"3.0.0-beta.30":{"name":"@aofl/router","version":"3.0.0-beta.30","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.30","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"bb7c1c34c4b23e895a8ec2345d84542f6e8283fd","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.30.tgz","fileCount":16,"integrity":"sha512-UeoKzbMcRdOPcw3QeE0WEzLwuVu+zW4RmNmrjb2hQOGQn/mUDsdNcbDMSfk0FkYFgXDwr9outIeRjOzsYoSSlA==","signatures":[{"sig":"MEUCIFibpsciFIt7TSd57F3oqNNN1ClPFpxOzL3dfELDoXumAiEAjbs20itFM+pYUMb1R7EDcRJ8QBmUyL1ieQW07kipfgg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoQkqCRA9TVsSAnZWagAAGk8QAKL2n3X/CWiE71GmZXA0\nXdi+td6RWXS3xdojGu+X2CjHsZnAJoZ+BER8KMosyLX/2Ka3GEDCNr0XRTeT\nrt+rvOxAhtkHmSJYGeR5SW21kUFcfSy1UIpQaYeId4OQRP2PPt0+nfCW4ouY\n/6JdUd8w/yrHycsWslvLXJz0qPz2RcmxhxzoWGXdU7PWJ6oe0VsvdZgYzI+i\nL3NtpG5VxM9nabTa+dwRj4oio66i8gBEAM5xOLEUbuqvGf5LGsg/NYy6/9Kl\nwFayzMpx2iDuXXaV/o/n3YE5aVPAn4QZslYSEb5qM1z319BylLhHmBMFk3qB\nDlf7S81dFyWnmhjRGUj6+x8x5JHDriP8ZY9hSSJ5plgwTX5D/b7+uuZKkVA4\nKIc80mhEvSib95ZuxgxeeSm1OtpsJVVCHT/sGYz/nWD78hPkMUpyd/ID52fC\nlKWHm5gSGfy+R3N0hln8aoJPCgZnhuGYb85dkZUBzpekFJl9Cbe8ZidSoowp\n3Lo3j6F6/shoLX12ucVCX3z9H/STtdIOknw8Z5IXh+lfFnZ83EJz9fafjEvS\nRrHz4Rz02zY6A04Gd4hircXj+C+TB2aR8DrK0LnJ10XHuXht4FgcFIMajJX3\nkXoasq6jZVC+L+W11zCNQLybTRBqQZubwBxiKIjIw0bfWx29jgsHkFt2vxJh\nh9bo\r\n=GKN0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"7bb6b9b6e2c1d77cf7e65680aeb6a4c60e0300f4","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.17.0/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.30","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.30"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.30_1570834730374_0.4655260907645242","host":"s3://npm-registry-packages"}},"3.0.0-beta.32":{"name":"@aofl/router","version":"3.0.0-beta.32","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.32","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"bf13c7dc87fcc8ffddbeda9dc5ad3312d712783a","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.32.tgz","fileCount":16,"integrity":"sha512-jhe/X9Byu16/JanYYyfDkyjBGFiJPvNCC4uAhu+Rrk+wUO8JBB/x4q3fUKE6bPLYeUM7dq3YO1+UavP4AOLFcA==","signatures":[{"sig":"MEUCIQDS5B0ypCJgGoCDsh4bOGuo8lKqlRTz9Y5KbqpHMPVgHgIgV7ijot9jlQirHoD3XsExfNK5EIiHPCkjEhppEN2LS/k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdo8rOCRA9TVsSAnZWagAAVCcP/j1YNudOlfseSSDA+dEX\nT/NUgxEnDV0q/qjCkM8ZTWeSciFjhms5myHxSf/s/+PR0xLmw8DPMc7bf8nz\nvRHje92nkTSW8VBob1WV/YusF3qX3Woospck4wBhWhVwD64gYm7bjDpWNEV6\nWkuPtQf5dyf7NSpJ9/8d7mQy00e8DPp45r/F8l2hNhSpEHKovHE24zntexpM\nH4B+RQzma1IHbhTpodOIg3PYyvbZwnEB+rCCW9C6wpbgFrJ1VUucuVP5kqee\nRUD5ECGJDQBmUQN3rIEJL4mts21w5c2ojxM3PrahdvrrsKAZ1BmtH+i6tVfZ\nJULbGg6E10xkBcF6u7eSNdKuzi6NCngevQ2MOhRNG/zmShAqFn3tmbEy3cw3\nY9B9RRvPZBQ2m+G49IF6SxXdGrhO/UfPaUjdjMmMpoFk2jod2pumQ89YUDU0\nRmud3d531ovogvJwipQ4/7CASV6KRHNIDyW6l69yIZjAJTQobsMxPzsaaxd2\nstAvH5Vnjr2iCKiR5jFvsqFdIDf71tucoqK4UsnC/vIPeNJMZqud4v0hYpJt\npFzugXCH5IlDViAqGDqxlo83YlCuvEpi6qHgwpsy/psWPnn+5wOB1ZF95l8z\n0Dd3nSt7u+mOGcGJUmKDm0GpWRAVPR7Bkhnfhb0BuEhq12tdseRA0c1cbr1N\nn0eX\r\n=GwGG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.11.3","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.32","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.32"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.32_1571015374257_0.826053351402066","host":"s3://npm-registry-packages"}},"3.0.0-beta.34":{"name":"@aofl/router","version":"3.0.0-beta.34","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.34","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"8ec636a72731bb4d3bc43941fbecceafc6f2241c","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.34.tgz","fileCount":17,"integrity":"sha512-h20Bi1KB0IMrgWLg9Dn3lnB2AM7fkc7sWkbHCvhA5XOT3ESXwch/OCEbbBmLsTqQlox6xqxT4Bgv5PmXFeQcSg==","signatures":[{"sig":"MEYCIQDJ75C0LNTdOZzLNUr9mjiZ3JTXesArHTvZdStA21c88QIhAIw/WU7Sfvb1W32mDqAByp8ZZLn0vQxmDk3sOhwl4fFg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpCWgCRA9TVsSAnZWagAA7TwQAIRPXsjWEeJQdx88mt8v\nuPaAmQq8xPFWVOJsVAQZuJbpAMF4ILNQkrekLQL4Mz8SqaEbks7zAHNc9I8d\nw4TVgtJ+jEGtmqzy43wXytasS/n9JmQHw1Va8/gZygXOJ9tvfaYJXE+GFg6C\nXmxuALQg5lE9yWWdAQ545qvBaV6Us3VOvm/pLn31i5R9BeonlPRH6r1b4yE2\nNXNsLD7Er+yWZNfyn3ikeAaFe5T2qOVVQDwG1JpmvL/FnI2w0Bj9AAdKGPsv\njHwDUNea8VwIztC0Pb4co2iz6aTpIaVp7WoIoZdiANL4CdXW9IFNIfTUFafm\n/QuiTZdqe3RW4pmMigecu7nSA91BvDUmczqBKijHEpSJH5c+toJeo/oP74D2\nqGwq6sf0SHf0R5BGDH1hzjEhiRpG0CgRi/lizf0s7IVBi7ophN5jli1M2Tc5\nj3lkyfsDIbrU5lFW7eFLngzkoLHB2hwfpLTp/kQ3BhVwMUtPgCS1GY8Chf3Y\nhhaF4j3Wd5+o4tdU58ut8ZCsfXbAgj2m/KOukSbeiaBasY+iwTM1Aqx7UV90\nD7P5QcLcq+mFsQx9EfdCMRm3tDqPq/J+L4TsixuyQy55uqKGzbh6P+vNp3WX\nUi8gLzXOow5tcbOuIrm67nK9ON9xOCxiWTEBwLN3wiJEN6z6VEzgenVUAXE4\nfnKV\r\n=3dmS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"4cb990815f59483bc2ba6051e55cb593245567e2","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.17.0/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.32","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.32"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.34_1571038623910_0.21783356284590538","host":"s3://npm-registry-packages"}},"3.0.0-beta.35":{"name":"@aofl/router","version":"3.0.0-beta.35","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.35","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"1d71028b813d064503d3bd43d6f69cd4c2f4296d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.35.tgz","fileCount":17,"integrity":"sha512-vY4qRfx26qwWUbt4kgy/99jSVdGmIsfvxYH5ENcwidhTpoIpN4OX5F5bX1wQuBGZ7a43hzLZwDBRRG9e9YU6xg==","signatures":[{"sig":"MEYCIQDk4pUnuSvbyCLUrBRiJBz08zqvTohpOyBqe9sBQpyZVAIhAKAD8Fl2H4asIl7XXI80I9qK1DWpYzOvs6qzsY8F30cx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqWLHCRA9TVsSAnZWagAA138P/j2X/Z89gcouZBHGjKLJ\nkkVSoAD1soPcQkNQEtE0nz+PJVtb4KpHmLO8zTC9tXzGyzjQxVeulUWVShAr\njK1sH8OIE6AINBUu1nzJKugxVM+Yy36dTcogiqRgTe10O4mDMA5VP+IDE3KD\n6Hy+RJT/tekOKlPs3xvr7UQnDau8a3Dhxii4RgYNX9K6WQT6tG+JiQLqiyer\n47gKoVAYixHZIzDbNrwW9S39aasr4ASp0StJw2Og3lqhQTBVLWMxoAgTao0D\nyNsw8VPRv+QV2w0F+t2vnxdR//utKfSvvdZQwuh4UNZSSzZlIxN/mGjphTuN\nhPJEVvn5S17dliDXSq3LaDPKeksv0D25S71ilSwzATuVvTniCbfdXESWHIel\nxdB46aumZ1v/n+Zw0jvSjhAOYhrWehSUvbZJ1aIWDBAD34E0P1YKC38kJ/8b\niJFN8vpAjVbDVRET48T6c5kRuxWyTW9hVLfZrVngyxnQnzWzYcPv5UgP+cZh\ncKvbY7bILobPKNutwAgv74lxHWuRoxVI3nf6TlDUHrsY8hP+NA7gLyPFohLI\n5uk1ZDrpEmk//ILRlxfBa6IhiftbE6yvGOpIFL/PtSxC5aRqnImAqEbNEjdw\nwxUHQWhuwl3otmTv9CupniF//ChGZ3UKwhEV55hptbxWLNddOFsJ1EBLcWsp\nauxf\r\n=/Dx8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"6506e91bedeb6cd9a30c22f437603e14e02a3ca3","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.1/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.35","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.35"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.35_1571381958968_0.7505241661789512","host":"s3://npm-registry-packages"}},"3.0.0-beta.36":{"name":"@aofl/router","version":"3.0.0-beta.36","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.36","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"11e44c3a7406f38e3232e0055d6bb06005f65e37","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.36.tgz","fileCount":17,"integrity":"sha512-bjV1ayD0NOjU+qgs+L+66K7j3+anjUE6yNcWSOg/v48TKlS1MTzPw+I6aowOW1xQWeJCgKEfgAKSe4jhE2jsKg==","signatures":[{"sig":"MEYCIQDidcx3S4fWbkneveRZe/BHinkNM/YeWbfnRB6IDdRTegIhAIKwc18FS8APRJBwQqb6p1X569XjrMy2P4I1Q4Bq8muj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqulpCRA9TVsSAnZWagAAWy8QAJjEqO85BxgMT1AMRQN+\nhgacXidWah2D2r/1YSt7kJxJRVQf6slbMKNIf+FsSeN795eGOjKQJF5EEZzZ\nKjY4CvGzzJbQQOE8afaEhx9xDjHxCm7jiSEOL0HIag/4mQXfNVdWGk1zJkOi\nb/TX4Ja3h532oEId/x9A9N4839djwXHx+Z8fyGW0k/rUzKw1xLjzTUfsBsDV\nM+4QOJ5OUdXEtGeH58My9/LweOsNcEacL9MsIIQx7utbtc8+UMYOgp6zE6AW\nw9NoObHABYbsWKy0k6MUEye5uphG7OzQqiTvI5+JaWFfo2cUnWMkJnUglIgB\nUaEeL3t5HOxk+gYirBib/ujLDLc6owGQVg78PQRwcDWMvLLXoB65IfTqsEiI\nuP4sVEQZRfM9oEKRp6sGj4ITFns1PxfDJgra7B+l4WzkbbFfXDG4v5V1GakB\nI6ESAPMwGNU1T3JEKKE9wts0MNyGYVt7Ax0gZ6ZbsS0d8LTYOwDOuOK/UB8c\nr0f5wOpzQMmkMFj/dxaf6N7wmbcsTJLL7zN/2+0T9QJNLvgBVMpfdEmcZ2X9\nQR8K7zt08tya4XjfuV88sExDYpJrBRqz3cWVpCBejdqQl78Y6oM9Y3AKabRR\nVtkvgkxJA1XKrwFFbcwz/8WY1jM+UTUBwE9H/8nfS1xzAJ0jB7EYSNYUVSVH\nQcwo\r\n=wWCG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"9eae9fc87437b61f0019ffedccbc3df7c8e02a78","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.1/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.36","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.36"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.36_1571481960845_0.8020801342958146","host":"s3://npm-registry-packages"}},"3.0.0-beta.37":{"name":"@aofl/router","version":"3.0.0-beta.37","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.37","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"885cdf44e7053b80da746710bacb76c4ef8b61c1","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.37.tgz","fileCount":17,"integrity":"sha512-sYR+rsVgFqyIDu9yVpnXs8TNL5O7IpQNny5wAcBJx5n/Gn5U8Oi8rvggejHMjQQMlicCutBD6H3ty3oIYkiPIA==","signatures":[{"sig":"MEYCIQC774BDscmATdNQvzYCk5OkzufsASf8XZjuEjB+dYu1wgIhAJPlW/Sg9FE+bGMGfcBhJkZ+PYqSQ3EPj/2VJ2FzVhkr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsT/DCRA9TVsSAnZWagAANR4P/iHmL+MuHYf9Wd2JFa6I\nxt8GV6k3HnmqBupO08g40xyfhliallvMhc2NZIN4CXfAh2RcjxVRuW3/iLIh\nroEAKKlr4cqaJGQFVIFRjLcPJ5pBuomyVLCVvdN4kWKa9c+k1qbEWcwCJei+\nk690MNjdwekP3JcefY+fXTRI4OoahPP52qE3YrGPoDMmOGiriw3bC2CGLE1f\nOsHX4g3pYz8yWw7843LMMCY2mVIEf0dK5A4vburRbY/DQcrSHXjKCpBBbCD+\n+8o5stuuCy98hQyP9Fb9EPiJ8TNygxVW2fGpJNAkzovEn9r0E2fvx1WtzT/j\n18UnmXwRSduhc8gruP4+FVUr0lbgidEvJbQ1sO+V2mX4WuHvxEbCD9e7X+oE\nz+9wqCA0n1Op5OYxqSJW8ohcpv8/XkyQELwHbIOARvPlKGKd5Wfga8bIu87N\njy7TGUGVsDRnI9qWSJy/r2a8QV9Im3RxG9narVb40Z8S40LNI2TiIHFqO8oP\nPu0g3IhdG2y7yemKL1NXajMgUUO/BpPJZXRra1fi+g8bujXP7NHgPTUYiYlO\nxc2QwgXiTBp78eJO7YZiuIGSaPVeEJBeuk9vD5sKnJ+y6dQBG6WIPfXssMDA\nwCvHC8i3rqx5uS+Mu7QiY4gwDJrRxapN65RlG52hLMto2j+qQWYHldgazVRz\naOd2\r\n=HlvU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"90abdfa3f72b91bd0c98e09afbd59c21621fe846","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.17.0/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.37","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.37"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.37_1571897282668_0.018319679387059917","host":"s3://npm-registry-packages"}},"3.0.0-beta.38":{"name":"@aofl/router","version":"3.0.0-beta.38","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.38","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"043a1a7a5195468f9de2247a5445965b508c250d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.38.tgz","fileCount":17,"integrity":"sha512-+pBsgx53HWOKnJTExk9Uyf1KEVx1NAo8G1Ckge8ASpcPtFGhkht1XyktObQnSR/v3xYYtejlU+pJ4QitOWYlUQ==","signatures":[{"sig":"MEQCIEXTBo6js0ZXpLzcAcKk4zS7dR7FRbq6L9bYU4ZY98GYAiAzf8uC+pVWkeiL2ej4QZuQo5VyM+EDALazQl40nFOxIw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduhQwCRA9TVsSAnZWagAAmHsP+QAwcz4/ljHL9CTajcqa\nzz661rQfwDOtMhB/LG9UnrxIOPKhM+o8nC+/NJH+hIGrjJ4aB0N4pyYrCQaH\nQDmaeUnr5Ke2yeKVKxuWsHKkg07wU30dgy5R0kHLfrdkVjPY8xslNPp9IvZA\nQOM4YxWnfD6RnXV0kniC3j5E2nC39G39svFdHOgeXvdIkM/7L6YbRW3V+yFx\n6B3DXcHtn/E7JpXkWXL0PtJfbgLX5HmNQokLTTMs05ACjajZpQGrlKxFWxYB\n9p4I8n07qRUdY8CX6xYUrGs1UWmWUqvXQsKIWNizqvwxpdhu4OR9BZIx4pzX\nQfZleVuE9tri7J/NuOYOc4LV59I8Hw2tz0n/FrfcyGgYj60IwThrS6WjB5jO\nWeLM0RVIDrEgp5GbXWuXwexPp4Ry+GZ9KP6aXJkApPSFfXDFTT1ZVg4ZcWac\nAG/04Utc4ZpbY3Q1/Dg5pqF0nIX3KTXsEDWt8DezHGKa6h2HuNJVokBocf/9\nUHI4vU5O/ChM5028lw7kpWs4Uvi1wDsXJXTS2O45rGqxb8se5lbr/UcqZF1y\nB39yZo5R5eGY/+s3JzY8+ih0bizZkobQk/ap5V7XXz+ezWrSuc30ySHFi4lh\ndVQTdbNeiaX0KMjVJ4Y6fGio9AbZ1eqwo5YF6Hn8F5zlmrbmiQxu098fswrs\nwj55\r\n=9aPG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"9fff03a99453d439b551d48a69e5d642b9957854","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.17.0/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.38","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.38"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.38_1572475952284_0.6677871151560957","host":"s3://npm-registry-packages"}},"3.0.0-alpha.12":{"name":"@aofl/router","version":"3.0.0-alpha.12","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-alpha.12","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"4c33ff8e6d061e2c873ebcb8844b1d5914f17de7","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-alpha.12.tgz","fileCount":10,"integrity":"sha512-93SNfwz3koJWigHlGFPdSccL4gT6vyJ15CJoDB6K6LUK7/afYonRAJoAYQVT2YKhwUGaTCyLMBlHLxsdS/Q3tw==","signatures":[{"sig":"MEYCIQC0l0du6nEEtHl9Abqg0FR3t80Gp+jIpHkoxmCLoX6d3QIhAPHs/ARfqgaCYLFszaPzMyjfrECDTEfTST0SwHvKU0tR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvNfVCRA9TVsSAnZWagAAF4oP/11LXuvdjW0DjblNn2uI\nEVtijFJWGjuG5Zk51j8t0TxCJH4+qlDPeLLaQP7XP18CadHvvI3eLUrpidzI\n40x5SNsCHG+34AqzL3BzaflVw5SEkt8wES6WOQShqyZELpkGZENGcfomTWuJ\nBP5dLLDK22u0/GpuNUy+BmeVWG0aF7F+MBFZ+E7ssjavvux5LhXrK2zeuyr7\nrrxOruBm+lCh10+kEmbqjY2dE41T9xavWJmEsoSI3wnLYAOnUOsrbLU207CB\nbUqnM2oBQMarN4i02v0N/z16lQ3+LBJfBNZ2XHWv8va0eaGWNn9ZiC3A9n0+\niv5J5iuzvkvfaR+QDzUSGKv7whrbWHBso400gYd1vP12y0y0XZ8vzyWDUlUy\nUW3oiRqyhz6AhdVFMt+iv6rKRJI8bT/E5b3mQn0xp6b/B74fY6fa6ByRdrXx\nSLYNK2v1BkndL1jlmgwI20n0ug4IEU5RSTcE+OIXmcaFR2e+/rXZX1g2HpJl\npEP4bUJyBvJU5r0sao43OZbZd8bByloz4u9xHXOmNKoAh+cD3uFpC6/SHhW8\nx/BqnUlljw/+WiD3+K+MBBWA0hwkC6gGL7t5YKPmtU9P7Wj4fadSAyaf3Duf\nOqsRNKOweMvlfhFfn5muiVMYZn/JmWHFfxm0UOmPsqWdMbibJGIIn+GqSRx8\nE9V1\r\n=HVnI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","gitHead":"e76c3cfc8d75ca087492088254c9ef0e4010c0c9","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.3/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","dependencies":{"@aofl/middleware":"^3.0.0-alpha.12"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.16.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-alpha.12_1572657109107_0.6208133240545128","host":"s3://npm-registry-packages"}},"3.0.0-beta.40":{"name":"@aofl/router","version":"3.0.0-beta.40","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.40","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"71ed017693936ebb454d74416f76b651a3ec92ee","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.40.tgz","fileCount":17,"integrity":"sha512-y6rJUsjYA6zab0dzQcHs1g10QX3hv+krowddTxoMrT1aLBQB4xKRmXGOo7h7Z+8GCQzKGKJaeJJBqIDnaQRNuQ==","signatures":[{"sig":"MEYCIQC3c1FMVEmmSvq//gC8kndF27+PN9OZp5Xo0dFvWGVD0gIhAKKYQOckdIr92jJVn5wT5zE7V2SNqlP3TRlmorwumnUb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyeE+CRA9TVsSAnZWagAA+RYP/j8jG3ngjMrDTnAFRYQg\nWfp49uq53vcdYh3/7wFeKSGYVwi8iL1fLq58j1a46modt5L4gRIkS1A9AnlF\nJj78R0MDmx8UR5AIiGqyafxOZnuyr/EvERBz+6xmFXLLXsYGV1ECgVuTZt+2\nb/Qi37kfQzwOKWImccqpjklwqjyAiLPuyrAVM0O59EoAcCSnJJmOS+DmdkE7\nXo1ysv1n8aDrTx04pcbmZFELHRIWBuihM7Q+oYHFgIXWpfF34YJBsVFHmdf2\niNHrFETJ63ezkt2BqV90ILSBu104C68cZczHASL5RLn3O18rnULSX1kV8Lzo\nN9FxqGriAPTt8Z6nQaJSpjsIrwsvzoYCwwidmDoni043zctO7vXxjde0n817\ndDGVQ5ck4bj3Tu4Dwc+hW4OXYOhpFsPyoP8ztLUffA2pcapKUyuZvUxf8B7W\nndTnv0LSmNsM/6tintrtTMOLEOFaekeB6M0B4IUhZogioa69VCjRGNsLoLki\nHsQV31tb9Zxy6Qxpd7fs2W3f27y70beTjRYooYQczqVc6HeNdKyGaNliHS9i\nn/QEEmDoS92vOnRKlpYeoHqgT8UVQsdJYslNaDsZSC42yPxgsQ4AWJ1Nfi0A\n/TYHuQigXixr1G4FZuzrOilGdMfpJbmU8oV9K8f1KVkJ3PRo7G2CEYi37Omw\ngXaQ\r\n=TqA7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"0bfdc05f0d4406219d0b432a55fe53ab1726f4c0","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.3/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.40","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.40"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.40_1573511485967_0.8144317184595005","host":"s3://npm-registry-packages"}},"3.0.0-beta.41":{"name":"@aofl/router","version":"3.0.0-beta.41","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.41","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"cdbe84377254a1af06f37f5293c54890e251ad12","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.41.tgz","fileCount":17,"integrity":"sha512-UyWY5w5UiCAuXFPPIRM9hBnwGm9ktl3ZyOb66W1vTRYyv2G+j8cqaqABJHuTmF+Eo2G6jmtdhqdyPLJ2bhxnjA==","signatures":[{"sig":"MEUCIDpGwCrok1C6DqdzngbP+EaTZVV7bMw/P+cHl1CiIvjCAiEAtp/ffb/t1n1RSkuZQ2lKc4P6QIetnpp2xKnE3tlnCMY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyjtQCRA9TVsSAnZWagAA+wYQAJmboVxDWlJ97z7cmLhN\nTXlukDEUoGAgtBZpro7yQkUU3+CLlU76scCinRmlkLokxTb55Vdf6NQUrt+3\n4qzi5jxZgnhi1kS62aNnR3tW4aQBK1mAiocBXkU0QPdV8bOU2Pp4HcmWHhq5\n99dk0P7pEjvgeTuFQeLc/N9xI2HlHn4mO8YbRwtoSueRY7ruMYTXZL+DdGsz\nyyNEYuqHjwj0y8oWR42jGZ8/VnQJOjYzCMfA6kJnfbJWYM1tCY5HN5hGU0o0\nrcUMuggR2a8ci5fvKlAgF1mSUEGcuKLd0BeK+tD0L648B3fFuz4Tfw2IIrkR\nyjdnXf70Ij+pU6VC4YtrAhHrZvZKiTVEJwj6OVW0NXazm3imxE40DEtoG0lN\ny8t5xVydWy6PeMjZ6wd1ezv95oJds/tq3R1XuB3J8/P11shHTfF2UfAVw6KT\n4R/CD8xTuM64xQ+sRCSPGsfccnW+mjDjSaGV2SbRIktFyLWr6q64nzCKEjib\nIp2/P2ofxmwl4SbhEXvYBcsNnvNS2u4MI1qhclp7+Qoy+ro0llhMsfUVsXMK\nPbcnPpmEnb0ZoyiaQR55Sl4xBLSFeG+WNvFwpl6wczi82SRGAhLYmAohTNal\nhmU1twfDjcXZBDgrehBX6cTXFeN/G8vNgH8DLVvEXv0huVFH9qh/gDnn7sjr\niGjD\r\n=Wx1u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"212bc663acbda22a9679fadb2aa64484e35dc068","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.41","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.41"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.41_1573534543738_0.06543181119495833","host":"s3://npm-registry-packages"}},"3.0.0-beta.42":{"name":"@aofl/router","version":"3.0.0-beta.42","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.42","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"89dc31ebb02eeccedf04aeeec724eddf570f139a","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.42.tgz","fileCount":17,"integrity":"sha512-Zc9hJiFSw5zixRHZncgSR004wfU63TjFxuMtfxTnHcDjLcpoEpsMcpmw2QTeDNS4S/UWRoDnCx5GOS5C59KQAw==","signatures":[{"sig":"MEUCIFfVsZwEE5SI9CaLvo0OeIh3WvjgZbgJkDmUys0UQNs/AiEAoxqIwVcVsU0f0eAwax/AprOJX5fvWKtv1HvQ5cXvCSg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdykjxCRA9TVsSAnZWagAAMDkP/A65NNZmUaJVrHEk/o78\nj8irbKyJgA7WPomEYc5biJp9YdBQWI9JxLsQSwjy2YMkxnwUs1xor2MxlpXu\nenfTatssf3vI3b4d+UiuWQWSe6BM3/ZXNH5pyJr9Lzv+Va+2NVp61xKuXMmp\nq69IQ0tT4w8QV/ec6RJVz2anzWPBgKhBag9uWRMOE0tKDUsSEhIBeeLIfEX9\nLBr/vtDbReO13oJHPAzL+V6Jtbgty7J5axXjA4MKhrPHn+NsAQTBSrwe2ZBh\n5ULrDGgYJp+Tmv0PIqJDogcnHnE/cipYCevWy0Fhvlvcuhv04DwP0P7A2RCp\nPglcYQVeyMDpO5U3iO29oGg4paoP5yZ8pEG/ah40gweNm8wB83Sy5ve2tPxO\nzKypY7FP+jfuEAmidTDwpp/Mr7C03GxGY/dcqc3AR163whttwCwPNDyf7Gcq\ncDAjSqo3IgLOOpbRc1pnW7/nMYDMI+/azMWFT7Qr7Ib0/RAz7+fzv8cy1FN4\nmrS58NNE+e2CV45qj3uzDquiHt4FilPhV/cpZrhRW/1ViOPW2g9HbUYXuklx\n5TMpx9DCusrhWHjwlFaxRrZOM+Ght4/YvpRej1ZTmAvAoSnscLkqkGefsGr2\nPL5mJVYOPEcNdyP9TziWHOzlBF25UGYcBrDV/5hWqOnQC0EpTgqkqi502GoP\nAG9c\r\n=7qjV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"699b13b7bf651fa15a25ee2873b72d9fa1ef14a1","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.42","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.42"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.42_1573538032571_0.8345987344391894","host":"s3://npm-registry-packages"}},"3.0.0-beta.46":{"name":"@aofl/router","version":"3.0.0-beta.46","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.46","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"89291e4564ba9e1db850ad94f960ac673f8c239b","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.46.tgz","fileCount":17,"integrity":"sha512-uv4cn0vmtGWJ0rjV5sr0gm7yvFVyTJt6W2zuypabli0w7Zk9lF9t5tJtIe8QH36NmNVHL3fvL2Rz6YEYYXrqkQ==","signatures":[{"sig":"MEYCIQD4ok/5nfImVvUE4mFLVZ86KAud0jtZo+UJdHpzExkOlgIhAJX0BVoqsaJUTRA1E72E5B1uDmVqAnpfM9I7CBlvCIGr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzc4ACRA9TVsSAnZWagAA9TYP/jeWtqJ40xYTwFp9l/hB\numN0CypGH36Ly5unWCFwJXwLxywZpHTot7dhPNECjCmYFdQ6zCQrE6AEHwTN\nw20rjtKjk/JwZPvhKZDjcb+HzKHRdgP+v+s3FzYB3YzvXwZRFbeo000MVSqR\nIUDaJIb0X16P4cKIsZGWnLbuiGUtKgWMES9HI6HZeWRgT5P+90tdkIV+Xnyl\nUIdMY3zYnp8tKZ0SG6uSaf+dZzQs44uPKV/zMHr2I0nwcX21kq9+wxKvEAoT\n1euQmcMR4gYXN4OqDRG6K+pYg+3BQr0INL3qZ5tHmQ3ZONw5rbxqyw8DBQ7h\nxGP47cmmgzX/cspcuOS8cCN0/TLHcaUnZfIr3hIr7wMw5/d5haiCcpkn/rX1\nLNituKuvGZdSvs8Bmqb1uoSIo2MiMJcO0LovmFBiwKGLAVn8iO9j/lamzH6P\nrgDmclTu/IN6sEepV3cF8gEqT3ge6NoEIUDbVJaJ9eEnmY9ppC9IlW+SVkHP\nvduxAoaQnvDZ724rWciCyg4Qdx37lORY4gRvQXdzzCYzk/D3c4kDlAQwNRMs\nrwyv35Hi2QPVqvfHD1p3UI8E0FM1pl6OVzx50CHjh5eyqpCrftrsCK1aiZg/\nDMfht7PX/dqRNjGKb6qPwgIlQksoMOUgJ7ce2X6ylfQp6MjA5dj2zeizy2nr\nv3Ee\r\n=HrN+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"4d18597a6b3e63324cc8b2f401d986dff832a62f","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.46","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.46"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.46_1573768703629_0.18337431256077918","host":"s3://npm-registry-packages"}},"3.0.0-beta.47":{"name":"@aofl/router","version":"3.0.0-beta.47","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.47","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"e2a3a7438f3e43e3c9ceabaf390228795e05b133","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.47.tgz","fileCount":15,"integrity":"sha512-hj5759gORqLH1dfWVg8m6gDOV06qwRorP2S//JW25GbQ+dbF8imbaf5bgB95gsZJ9pPie8NTLtvyzKXi/KBq4A==","signatures":[{"sig":"MEQCIAQIDWlb6CQL1tAZA9IBKrxwZM6Hkniqv75W4SxmyL2aAiBoZjEi9YhwFtmViffBrTb20JnTJp0IM4I6dklrX4dIDQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzfX2CRA9TVsSAnZWagAAANoQAJQ6SjNTJLRMDAm3hLDJ\ne8etbCM4txzHJ30I9h2lG1RjIukBhwjORkJnAz73trYl1cIzvWLLG9yGlkc7\n19uHrX6qQR126oVYERTRfwtehrTqN7zGa2BfF9yUJAv82Qh1328a9p+2BxEj\n74P6VofZtTIfruZ0RttNnZG2Cncr2jWR6wceoeb/vFI1vPwUQK8diGPatJ5A\n1IdIV9vvIe6r3P/vlz0a7WkAqGzTikstT1Q4kOfiPa0vEra/WBJmKB5AymAV\ngo3xflRD2xSMTV7J6YFHxovijyLd05AF+DOI91s6o0bv7MimK0q+XFjWFHQR\nUBVtxTZxgj28n+IU3CadNGWSV3t1ElUKBzFrwNjtfJCb9zTdsDhNqQMR3mmT\nHFj1OEZtSD4paKuDUXdFmZIP1oNgBhDpYy5kx3nzseJ34F8FeCHzv+SdlcBk\ncjJ3HtzHk720l6A6g4yQWT73gw3oBASPONnndpmxl4d6hODp1ErX4pg2/aOw\nEk/oz5+LT/WiBaVQ9rEZhqT7mooFcvAfoYyGMIXYehmCBtFOTVtCrQ3sSyQC\n+PkbWIywYDyU3qmzNj8RK5p1HnC1nKVh+24fMcomadPXP7kpIwlXH4OCkWPH\nCaCqBaVyaO4a+kw49W81zqaNg+57Jx3UFtaIo9XBfP007WhNMISsjHMKOyHA\nxV0a\r\n=fKLJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"11344382e361206a6f67f05f4904149ead37c1ed","scripts":{"docs":"jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.46","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.47"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.47_1573778934204_0.9395997331168431","host":"s3://npm-registry-packages"}},"3.0.0-beta.48":{"name":"@aofl/router","version":"3.0.0-beta.48","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.48","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"c0397812125f4447ad304a6017eefc89d8e3717f","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.48.tgz","fileCount":15,"integrity":"sha512-3sgnaohlZhBnY7u806my6/YXiMiDBxLheoOnZpzdTPYefMkvRATj6BGGaMM+8H/hIa5x3AISVCFi/7xbRbE1MQ==","signatures":[{"sig":"MEUCIHB+lErvWmqtFZuOVIjs1w2HRCi7tEWGlnPSymjFoQXkAiEAgpyT9+1qWCUHSAQyaOsHnLFRU05hjYl/dqYP1sIaaOI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0IfqCRA9TVsSAnZWagAAWzQP/2hFiRPwh2A5qC2WDdbc\nefPxt68hZ1aITek28PgFlljUydGBLfhLdiYsbTKANCWWDga0t0qcyZqRpWh9\nMqyux3xfRkgUsa5vySQtoDjpZCERpcJKcHgtNbWwSyIZ0z4NaNtB7+TomzYC\n4cOsLK2h2S41MIm8jkSO8K7jBOd/apFOKLL+DKAl/LBkhvs06a0mbD/LZ0c8\n2hT3TgFOdHDUDHHR6Gd+Qs23fxxH6tf8BljJCCF2d7DcbQNDSbflZnaILgPE\n9STui3e+39f5dQ25UerUJUs3xQpa5O5eAi2gosWcLpPIpwqvanKCDW91GLXM\nrCNIWjCo83S8kx4KLrLiJAnZ5sJ6TyOfywZ8HawtRR5r6T20hxPF9LO0joHJ\nHq/yQ/GGz8e1nPx/AIzrCnjBtX7Ycr/A32cAbhcut5QBYP4GgCXPxTKxt1Z9\nhPx1KL8Zp9AoHeekU1k2XFZ5Q7RwyMa8yHTPWGRN7L8BaNAQjwBgUQyKVs7x\nd0feTe2a+Jq1tJ4v4eF3HZkaD1AoB1WqGMUTAh8rv5RSAXzpzCPB+kUa3OW3\nok+kAWo8HKiryj3VfDwK+W8rXhZ+WACfUoyH4Vj1w9Pxut7LzxlKRtUUFU1p\n0Gnt0hEEePd3VEw6BL/0/eCxRiyWj2ZJHIf+IJz78Bh9ljJ/aMDTXGRh13j8\nsijL\r\n=u626\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"d77a51a21b591d1ac0032de47395878116e8566a","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.48","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","jsdoc-babel":"^0.5.0","@aofl/middleware":"^3.0.0-beta.48"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.48_1573947369685_0.7382340094085982","host":"s3://npm-registry-packages"}},"3.0.0-beta.49":{"name":"@aofl/router","version":"3.0.0-beta.49","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.49","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"b485d7eb2e361c2607f70574cbf6e630fe10c37d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.49.tgz","fileCount":15,"integrity":"sha512-pBofpU2IzK6R/0ffe58B/E2zmmJsN8ktcfCdOArNi3Vxby2ll9cEJTgLXhmSWajiXd5x3CuojZWcXx7/Hp0J/g==","signatures":[{"sig":"MEYCIQDUZNBHhBd4M9LpgGlFZglL4RIfyIUl3XFRfjeDiNCWXwIhAKlxma3FbpXa619AipMtJlyu1fOe7bpMl3JtTD2AOnJO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0MCaCRA9TVsSAnZWagAAcD8QAJIu03GQRm6OiaAo/Z5v\ndP0F88L89z76aX7ME86bWKBG4+6TCm+uG3w6DZBve7kRns07xxZdcPmQkQIj\nZRe4xVxNxoMQIWgjM8Fm4fFnWq+eQd9stA7N381swi+qK0p92ym+qvMNzbfi\nbLOsOihenwq/mhMeCDU9ldVSjVexB/UjUA0dRJMi58ZGv9xr4cX1ABj5RebV\ncASbjrnoYs/RGZG6TE5TXlkHbXf1JFKcKIEyqMTO78a3ADZ+PSIQJnKpp88o\n+8tpKFwUmeqAXgwlzQSJNhpHYRq0zwwaJ8N2JTWJmbC1eJmT8BjsT8NiFVLp\nb9FMDAQn/im+ZqQT/2Yp7AiBYzwbbvRi4dBLp70rgbtmHPVrXc/cmxH+vklx\nhXe+JOdrqrHeOs924KjPLvi937zV6KeJ8tKgTHYaUjZMGlzNDr4lnIP6jF4X\nWcxuZCnRrTolKD6JBYVd19k1AN72Y5rk9MbNK7ziPW5sws9XTBXdZSQyORaG\npNSrYIaeypNU6TY+6s9XZVPhdFU3SI8QyrP2VgfMKEEE2WKYzUtUFznfwrJe\nSJzigr805Vx5CWD/T2Q5fPDPCnPcKHbgkNvHrbPfVKmW99VPyzb4OSP/CH7g\nTFyrgHO7H7k+d9IBmZmtP/vR+RcD2igPWQDFoCph71iqyQhbnLXjAYuJwFYx\n20aJ\r\n=O29e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"a2642ff8dd100adac8db3d609f63e2bc6a2247f5","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.49","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.0.0-beta.49"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.49_1573961881645_0.3448050903333122","host":"s3://npm-registry-packages"}},"3.0.0-beta.50":{"name":"@aofl/router","version":"3.0.0-beta.50","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0-beta.50","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0854f922b2d27aa511abae060fca6182e7b456df","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0-beta.50.tgz","fileCount":15,"integrity":"sha512-gfa1PSUhcFLlCtrwORqefdOtLTbIypp51IvFhlfxuJmF/E+neiJxaPzAywkhmP5qjs/envMzLqp36GpgsXm4nA==","signatures":[{"sig":"MEYCIQDTEM59hVrwk59ksqZDOli73dd8kba2Xm9kz2VEVIn9nAIhAK5yX0+gzWW3SHZ+aEVtQffr22T1ycPB69VRC2X2ydat","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0My9CRA9TVsSAnZWagAAhiIP/iV5h0vqDHeISVc/sNb/\nOZnigknmGBlJwgifmVSWhIcdTm+T5jGnqIsEz9p8Bce/h3mLxAyQ/+qyFWJ4\nqz65Btc5cflH4giDnkjcSX7oGiYg5axWTGe8b6XqMWlU9GetmIR+kcwg0Y0i\nND2tJcxqVf/yJPl+QMvHr8SKnJ9ELHnSkfb8A1SxKVDuFhTyOZV9s9ilqZeH\nqrhLbbtcGrg285Y9dootgkJQKz6WQPwq+wtF3sSbEohuUMIdRgMbwHDVSAM9\nxHFAuBtCf8SxZRnQBDbFR69PWmlhkRsMqKn9T/d/e2aqxyUo4WHgxPssU0IF\not/wt2hKqsGRzzDEbkk/55rUcn+WEvr7ozNeO9uRHD8o7RtCpB9oxAgTF5xS\nlBkcpQLFBlMJp8bz9bh8b06kphlNPiFbXWvMCqxqQlwIgWgWl8G5P3D3Eo7z\n6LnX8keXT0Rus7W3MxLA52NHBWTFvts0qHRD9Ga7wVQRjaNsEk+Te0fu7yQQ\nu4yk3O0DDTZKUiYeVNuRPAlcE99lUCJz4ufuEiUxlesZCrLI1cIeATxiL+0v\nPy0DgQkYxuN6Cn1FbxXzdmOp+zfaeUkzMk+Rm9NVamtyxW+upvQGR0ixpjOG\ns/lk9EOp5VuVxEkJWfsTV91pPNAGxBDR8qJpXRtzM1FtRglBgtXp5LtwbAG6\nSTsJ\r\n=UlsB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"f3c86ff8b83edba5201899544a54572c2814106b","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0-beta.49","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.0.0-beta.49"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0-beta.50_1573964989547_0.6148764522119392","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"@aofl/router","version":"3.0.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.0.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"b3b2b02c4edec0aefb47b1d9fa9b4bd9561109af","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.0.0.tgz","fileCount":15,"integrity":"sha512-E/h0ViUL5yLPQ7YFMJqj/UbteCvqFppy8R1VyFcTyCBpGNRbI8eu1lQX/a7MJaO+tBzFTDzALnSW3HsIYQNl0w==","signatures":[{"sig":"MEYCIQCi7cSo+ZTCGW0zQPN0sKaJzKJW3JBkfJojFuXMVC7jEgIhAJdi35d8P6i2xZ3zFUc0mZ68kCfCjguwNd/ba7HyLUmS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0PFnCRA9TVsSAnZWagAAaH4P/0SZszS2fF48dEdU4PYM\nEOUwjfDhSuwfAKH9yFByTJZX0YLJUKc2rP/0c6LE1tQH9zrxEKpMQxZ8Pr6G\nhjbQPOyjZK7WagiymO8fLtfMeTDLXJDeus2EtPRxi/Mtily6Ghr/0AdPWRnE\nO3NP5Kw4KdymYu7SS05YlKUauufaRX5He4ORuVEB6kjOz8qLV3pQBto4uBSE\nEeBXx8WXTKbU1rZVVefOkksAR8DDc6vqstrO5J/ux0z2uIaV/kpoX+jD5pPu\nOB2INaJPqGYv/lCmU9whXBdN3JyhBov+/+B7+n2+uNLZOcWmlLO6zIgOwHHT\nz0h6PNEdi0p5G3meN8yWsf4oy34azzqpi3KHYvQnDMpvTHOttYuX7SzzTliH\nF+qFxxY2aH2eHhqz/T+Iel2QFki9s2Q48J4RC7eGv8isDTmB2ejnj6zN7bll\nL9L7pDrbT3FJlnsP6pwb0YuAuHQSU4EAi/StIO7W7vVaschR1iXUCiCeNQEn\nRKya9w+AqFi28qOtvIvzaoESBBEqJ+xfTRLXHKmAUcinLhYBsAVFPyi55LQX\n/FdYinwA1FF5w86xt2MPUnrsbtsY+7kELZDw6JrKEqg97UhkuHSDLZzbIqub\nS6lriEfGOUsMa7OvWbpq4XuoKl2BrK8BM2vmBayVyOYLQCII6MGv98DyhHW7\nVEag\r\n=XXzD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","gitHead":"bd783440a25a2c579fbb506b92d90bf4fb7e0289","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.3+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.3","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.0.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.0.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.0.0_1573974375329_0.3173160809662017","host":"s3://npm-registry-packages"}},"3.1.0":{"name":"@aofl/router","version":"3.1.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Micah Blu"},"license":"MIT","_id":"@aofl/router@3.1.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"6fa806a6043fd9331087e69dc6cc989f296acc3b","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.1.0.tgz","fileCount":15,"integrity":"sha512-q5ojwl3uHgtiOyN4ejj9OcA/Sp4ZftGf4Q1AZHMexhjH2N0EXNU+hNhjca/fWx2s5JwL0z1EKeXClJKvmRFQdA==","signatures":[{"sig":"MEQCIE5U5XwN95ZmgVnIPxnZoc34ga07YW2OMUh+wTIEdb27AiAOG9D6OXhm/EnNe0GWpsc63NkZtbU/fwBxPSTAkDuHpw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd11XhCRA9TVsSAnZWagAAdxQP/RlVHT3q9Cy4EKowXtNJ\ndZPyF3pI+cxBQZ27+LS6kQOalL9x3cpUG3Nvh5mS8XWxLzO7gLJOMnNVfcvx\nYfHoh0yafmw1+NEvGz9zMO9yddsYrKuLuzmR0e9hu0Czy8dUfKF4Q9flnVcU\ncHN6fIOFKitQmN1xXUfkAsVLS8Mhna1f/JXgS0ILC62t5o4M90FH+3o499l7\n5vTvssB+zqXbTsdmMta0DIy0AhPERzr4EGUfKJizh0P521c1kfcLy3nJp54V\nuSDP0OCASeKulR3tarM6TwbmDP/2I2mBQp3BLtPKoTSKEknNrIc4ehbFS2c1\n95dDC8Je6RgvHJjMr9Uw3xIGaWrWSwiPLRwIrqObe6KkmgT5MdN3/ckSZ9n4\nlax5Pu/wMo0ttwi6rxRYQ5N++tLkhHSqP5jGnWQB16+fYKYBU5+y5G6IIOqd\nLzBFEIZCddLyrJDuZBea/a+DEBoCvO6lvUGTmerkQFqRyVnUfENhMFpnXoYF\n+LmTXbsGeGlWAoQCO0pJCrjz/K8Xxsxn4Mw82+/o5gWUrDLNNM5cy83xVa0F\njGKn8rYiABPjXIQPdOj7KZuEPgEkGyTuMvDb0VaLkZDrM58DK4W50MkrRfuc\nXaptV+iY192IimbPcgdIeLcLzLh1Z3kNEOmY716lu/SmCpYKkOwbssGJuX7z\n+iqw\r\n=6W45\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","gitHead":"cb7c610ce117e6fe41168dcb3e2758d12900b277","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.1.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.1.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.1.0_1574393312768_0.4387937186851154","host":"s3://npm-registry-packages"}},"3.2.0":{"name":"@aofl/router","version":"3.2.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.2.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"878d8b9d384140c06928d6f7dcc0b4e32da06fd2","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.2.0.tgz","fileCount":15,"integrity":"sha512-U6iecKcc0Wl7k1wsEZbqod9vCW25Fx5XHz+t1RqIvFqlv+geMqKJIlafD9P3M+vONxGiFVWOEuhnAPCLl2NhFg==","signatures":[{"sig":"MEQCIHRh9y7vg2HKsvAvs1z6jbu/rrhqUiva20G+D+Rg/xujAiBXXp6XrftDEcVbQ68S16OzhqTxIY32b4CK8EHR5ii6wA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd2jKrCRA9TVsSAnZWagAALAMQAJw79U5RqaK+SkWeSJZl\nEER+4+Sg5fmlbhPQQUfohWkaEXqZA9sHIrLm9S4YKFip3ZbpzFcYbs6lJ95t\n/J1YoI+AqYYSPkpilA2OBuGZcwyH/FOrwE48Pq0hmm9ZmvAL2YwMX8XfpFkS\nTkNKH8Fifylx2qnNRf04dy8VtCNwNT6tEd6D3pHGWXgBnXQhWVpPfPI/nXEq\nAEnlFlWsgukoPd5Dfbpw4P76tFB5kaNhP9zFEGjSvIHWOZBl7M0mHrrHObI4\nzW2aHWGUAoMAVjf4vhgmbnpmQa8190fFWZi5v3tMgIv806wStpLzExMc6LEh\nxVE4G8DlA5AZA4XvlOFJJUSnsypkOIkKNWHM2zlKAOG0T7hXu+IPzyDNrRbh\n7UXJ3bOUtLNAa3p4WjYNGBABc/G1MDWAmi0azBADMWU7IZppRryyWfILTOOR\nHRjZM8ZLMLQtrJqLEawnedBZIJACAGP+ILTJI4l600NUBpzurPhPDZEMtHsc\n+5wG9GvcM+puJLDrTvHxNK+U/GAHIg4pc29ALe49wFeWgMQzlZ/jWJInpUCQ\nzj9kG9fON1OQf7JP3u5ucsz8aLbax5kbXT/k7u2bMYkxR496tBicsdXemoNa\nMOnTnzLzFnNKlVrDMkbxutZLNT98qZ6ZOND2DXihohvDQOMh18UnJ4iBxHB8\neAHh\r\n=onSa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","gitHead":"8275111725390a8f797467a12e045c905a78623b","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.2.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.2.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.2.0_1574580907456_0.4877259078125582","host":"s3://npm-registry-packages"}},"3.2.1":{"name":"@aofl/router","version":"3.2.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.2.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"4d600c96371f99fe9e0df7d80ca904d0d1d5533f","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.2.1.tgz","fileCount":15,"integrity":"sha512-0AuHDygqpdk/W4KYd6k1qjlq6xthxX0ndO75aPElVotA0HPhz8J1QSR4MOHSyw5vVImGUmic8TuzszSDx0CvkQ==","signatures":[{"sig":"MEUCIQD0jxJ8J479+LE19LkVDI2WiujFo3dy9hTO5Z7RWOR0MwIgamcKxE2tY2fDhQC5CrmcOOlZhAlb3kru58wldTmitFM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd2jlsCRA9TVsSAnZWagAAOMgP/3Zx85DhmlaR7izyeBus\n420ty9PbLY7zzjYbOvv4jmwSuRmbRW3RhBIdHFASXSSUjSqXyyScAlldAlu4\n/do6okCQue33mdO5p4Lt/DLD11QGELAooCtrw9xCn/11OrJfsQvwqwdR4lL0\n917WvyAKBTjABAizoJ8gxfGfedV+tSwc0mCjpO8dkaCm/trH+7VEtWSCc5bK\nvL5rWnacmSKE6hLEMS6sKkzTBLKplfaAzdS7TN1TsRhhZFtaXc5BhhYMIiYT\nV2DvMd3zhqpsRW8hFQvj3iLIK5eQfQfm/f6c2s2BQ0QqG6zBAf0NRCmUTaXh\nPJOTtX/Vu03u94BEXSSmFCXO1hL0EGAlnujqWRRenqR3N+O7h0wZPkZK0Hdh\n6TZ8zNgRhBwdhs3YA2ibkIQOBWl+Cg6g+CwyVsE+QxdV2JlSS7cR4N/VfWbb\n25s/mUtwdN86MdUVqAhwbSz1l2EJwDlHiTFOIowSLB4zFBdF452yDUkrERKX\nZKoEfP/WLbDnys5IIOtRksUGzIRGpqewKlIxstYgNJXHqPsknEiRKwtWq/gt\nWIeOuq8af8YJbSdhlgnvbhXlSw8vIV4p89XB9fyd1gb/DOxTFN7Tr13ieLUZ\niymWhSNB9ffRnSum8+n+1hnHnad+FTtIt5Syek0lobKVP2BddOIq8jVpKXTY\nTTWK\r\n=kZKr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","gitHead":"a3a91753b98e4423d9fa5bc05d8cc8f8754fd040","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.18.4/node@v10.16.0+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"10.16.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.2.1","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.2.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.2.1_1574582635573_0.8436817138646289","host":"s3://npm-registry-packages"}},"3.2.2-alpha.2":{"name":"@aofl/router","version":"3.2.2-alpha.2","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.2.2-alpha.2","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"5c21bd9ee6fecf8956a6b8e2b7a090c276516b07","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.2.2-alpha.2.tgz","fileCount":14,"integrity":"sha512-rRVXVbY5hWXB3mL8YRtJOxo7uHVvT8e8nvTDs68IMfSLa90N9x4yH5MjcE37x0wnubd8ox8PPGwLrNeER7QCMQ==","signatures":[{"sig":"MEUCIESmkkU/oKtiQ2kyQkCVAKLXBD3wynsFgNI40sMGiZgrAiEAgkH6t7xCuTDWs1p7ELp+SLwB175rguXFVv8DFV4yGHY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeHiQ6CRA9TVsSAnZWagAA/bkP/0YIeQGDS3SUROyLET47\nGPYIpuQDsDM8w1Pgh8T2gVvpH4fksg5IymWf+p/upBzeC33c5vjj+tXUIBPT\nEF7Bug48Up3j9nFbrxSc1hJUhk26d8fVQc0DXO+5fAmG4yP00K7KRsSOjFpM\nBm+cgAnVTAOwYRohzWQ8SyBGEl6c5jSNwOmOLrEKY1AnZK3yGbOmt+CqTBOQ\nsBjTgxOfkMzTXlH67k4Z8C57Uun/NjgQc/YZNvXZe4YFpYbs9o5bPfqkqA7O\nOdlO0aTG/jsHa7OjsRnVw4tAk5z1O6mjGNiFqLUeGrHByUPJUUGUgjEOJ3Ey\nlCdBEzWeEvIixVqe5OjPLERpJvplF4qro/7Ch8oTMPlmQzBb48aCK81XIZTe\nfw3+pVMO3eZsouV+ou9zO18XIozF9OZCepZs0D9SHtTCQGrDOiQB2RZA+nqW\nmeWgQAQoSqOR5VodLr2tox9XBdVdmiuLJjIVn4pNJmBFVnfhZNoC+a4KnBG3\nGsB9mz0gtqaf24uWicg6rmchNxDHFPDRbjZZJoIWAk4SYqMI3baBHAj2lF+O\nmAHsmvEx4WzTi2G6Mg6QDB221Tu9PLPEvTaImgO4/zBgWj+t3JHze2/Oybya\nZlG9D5LsTqO9tORmCWw8FEpfYrvjz/7nPvpUw9fwYzr44cV62mK3Iyiq2sJu\nKpB6\r\n=BdXX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.2.2-alpha.2","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.2.2-alpha.2"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.2.2-alpha.2_1579033658527_0.9537598535403395","host":"s3://npm-registry-packages"}},"3.2.2-alpha.3":{"name":"@aofl/router","version":"3.2.2-alpha.3","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.2.2-alpha.3","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0de51e474cd5e78c13f264b59ef65ce84233e56c","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.2.2-alpha.3.tgz","fileCount":14,"integrity":"sha512-+QTRyV0tMEFIU1IXeqVFb4aDvGtBIiUpIECLYyc3E/VdjNpbtwN8OeeO53ENvwFYeoZhPhRU9OkrX+dnb/SM/Q==","signatures":[{"sig":"MEYCIQC8AN6aMi9uFRdEJyJ5H003lEBmXuWA/FuNibRN+3qWbAIhAMdMzWuOJJ0wZNE5/hBnylQsysw8zWb4cObfycbkhA49","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeHi7aCRA9TVsSAnZWagAATDAP/3rtQ5tFV5iMG1DHrsHQ\nq/Tflqi8mKoRXcTDNTBaLyYcTwMrtWZE9euK0Zbui+sQn6bABDALULUoYxF+\nuc4OrpdbO/MJCaGHXmwCsuMIYcVAsCOIRdrCDloCrIlSGwK2FDuzqBKB1m54\nis+lpa1vndhdgrmmwdMDZjSHmP2aXTWaqk4Etsu31PK7HU6xVscKMo8AV4OC\nWhH/Pk0XSYr5ZB+i0Fjn89ab2sf8fody+/Z3QM6vF32rjBGgBoDbNdHXnamK\nNzP9RqmgRSsEtWAo0ysjVe+grhUxsZJmCLCQ0sdbsjZTkHQW0n00RRv1W11j\nKm+mtHHIv1N0IzBJfGu6nZ2KL6PnUoJI70LRXx6dS3g3byHBDZ7HlsWJZQss\n3tx10SQw4WyxupVlYKToxYQQRqPLZmr7LuyIeGYmUntFUmDOZCNY+UxRmKg7\nGjMeKWmzXdMX/lpusdQh/D769aR72wr2s83yX98MvDYoaPxgOCuqdiwJTZgy\nXYX9cuLVq+TqvvXidSIOxh6NoArdmRysHb3dfvZwOZk2HOFKjowZb/NP8Hi3\nd/Q5shfkW/y5wn2RD3aL601W2vAD4d7YRMvAP/T/Ct+OKfI1CjerkWIniqSK\nVb9Z3elul0HO23YUGwU66G0w/LHts/d0UcLyF/epmYZI6r9iy4FOAeWCAsUY\nkHCo\r\n=xQ3/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.2.2-alpha.3","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.2.2-alpha.3"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.2.2-alpha.3_1579036377872_0.02840681854693261","host":"s3://npm-registry-packages"}},"3.3.0":{"name":"@aofl/router","version":"3.3.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.3.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"7d2a408e3ee335a2e1d4046f6bf5df8f3655897e","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.3.0.tgz","fileCount":14,"integrity":"sha512-IcjmupNRj79scbxfxK3EMdyS3MG38RVfRRT8cz1OtzI6hCTV+h3TrBdSFD0zRRDOiHVCRICJBcUIg40MjTLAjw==","signatures":[{"sig":"MEUCIQCXM81+8aX+EeLhjcEHtrdQd4oyjEUpdm4A0TUwJXNhtwIgFrWi0v2SVE0dD6q7e6xpHvRm+gUv7kLkCfcYWgCUCXY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKNtFCRA9TVsSAnZWagAAFa0P/ArGg2fRI4tdIC4OdQ3u\nShjgM6VqYcB4+b2s2gqlS8tL4C9MCk7d+dGwz07jFRQ5fQbphoGfU2FOx5Rt\njUaOXSu5FDhqmWtpEWs126FEWpfbRggNKMgS0/RVun9Cp41/CdGDTwFwnICc\n7kOaxHodAi2FGivgOdMLZ0QJENuOCQoxnlQyY+ZPGU9vI28RbLAIQwVSdxBQ\nWBAO9sbb7hHR2/KQeCwrgZ1BFulr2TuyycYAqfuy/SuMPElFcZa7MlaV9oIL\nFHRC1bkH2vH3zK+JjLpff53afnr9oAKgVRtGmliQUZ/v+zJIzdSkjRlRw3xX\nWH4XWf7NvyrEBPzarORzluudfrV8L1K9DrkT/959eXG4fTubGB9+OlYr/R3+\ncH0PmpUMLiCRh3gdXk7u2p57+t6oojktvNc1cPo6+3g2ncgLujRw08smnXEu\nhdl4JUaWMAKzrmknKiAQx011YFlajclj3Kmue33ZRVlca9QSZ7aEZOU5pj+A\n+ggdMKg57W7ImYbmApTCRZ12goAdxVqw/6EOPozwDKlRYTxQIrhlVrwqvtYh\nv3vI2+zZ06on4iuWbg1/H3IQ52Ep/PxWxVTU9e8BeDynx7CVmwRvRul/OB2B\nXq2NRgq0GtZaFPzcg/ohI41zQsC1AkxjS/5L6T1q+0ue8a0d09UFTiWu4NrJ\n20zT\r\n=g4FL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.3.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.3.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.3.0_1579735877408_0.8276980605968818","host":"s3://npm-registry-packages"}},"3.4.0-alpha.0":{"name":"@aofl/router","version":"3.4.0-alpha.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.4.0-alpha.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"00170b8f18be204606b2a9d9270265b7f8f36f60","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.4.0-alpha.0.tgz","fileCount":15,"integrity":"sha512-TYt7YXgt0bCr5lHdqzLk224isl7myNxick6FUFA+T6gJa11PUTS52S1FQUmA8x1nieHLIX/UEGQDFMXKo/Bx7g==","signatures":[{"sig":"MEYCIQDaGbtZcVPHSU7R+1W0IrI9T9u9nSuas5C8wWeOxqzRBQIhAPFuLCAmhq2wlfkWR4sIMvjBzsZaJ3wseXWw0NQMRQ2g","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeL3T4CRA9TVsSAnZWagAApJ4P/026GVu+ALzt4FxD0x4J\nMh0yjYaNHBfD/FB+xRDAVxXO1NtVdm8xUOJhTqrxCAjkd4OyWWVko0la2hFR\nhxhJgr96xWdZOiMdePU83YzSQyL0K7jNpfEqHxVLmwYCRZr1gbkZCoOlxdhJ\nYjU6Nxpjg9dIw+JGzPYokkbHs4Psu2NFavSZq2Dgvqx5D9mYCBDhWYSpmADn\n1BQFvmGh331OjE/Qyvse2Sl4amKyrerYjPN4nkNMoj78qySQw/zvYgp5wR35\nivJVVvle5LiR+Ol72+7w14mLe9EWVPrTl3+dmrLXdRP1I60plIYdhyxhcRem\nx5fS49sooCqMNkqSqeFyXYMCNyj7AXJ0yis2VL4YpKNLLNyiju+xIgR5YvyM\njds0fO49r+E2p+2k2iJ8+EDvGO89mmm2HpgsppHRcjWa8GbPVU2mxRfttBhB\nU0EcsTbVNXFCM0VBszslhVH/Z70cpcJ0acbIWe0pGjf2H/tmTnXnxkbLcz76\ngRbQs700WAT2SMJ/HtgMwsCvmTqzK91T9tDWomEpDHCn+C0LHFOBMyEMC6x9\nSV0X5KqufI7ZaZZxvlOZowGHcwvM9fsuSYFFIGR1ERnPOFO4PGKD6EtuoABa\ny7zK50PvBRnCa8HzENXImiLV/seYj6NxkGuXospWMbyfQvmnKUUVckB+tTYi\nADS8\r\n=6pK3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.3.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.3.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.4.0-alpha.0_1580168440437_0.4345912458421921","host":"s3://npm-registry-packages"}},"3.4.0-alpha.1":{"name":"@aofl/router","version":"3.4.0-alpha.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.4.0-alpha.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ed1cb79662f7d57e3370d3f0a5330cf6215a4520","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.4.0-alpha.1.tgz","fileCount":15,"integrity":"sha512-eXpp/HzP4i57VIGAONlljP6grRxcreP0jsy0sZgcmFBLu+XbfEVeFjDiznNUaONHNEAR2l1fJWgmRDAbvq2NqA==","signatures":[{"sig":"MEQCIBNBvMTpPNnxk66M9a+uGVtFJIsEFJn/LVVZ41R0hBM4AiB0valOy3koHIg5lVj/e4I2wW2J29PEQRRPN5zPMNmNLg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeL3e/CRA9TVsSAnZWagAAbM4P/2PPVuKQt2RcZ47ZJYil\nMbhGRX/5PbrHrg7579s6MgW4VtusZiFR4tGNdpBZM8Iez4be6YBkis+IVoXj\nOVNE3ucYGICXKVtwATHbSc39a8m7J40JB/2pq/RtX7py2YvYYRf3/eVQFVeJ\nWxZ8vmvGCi5njLYZi66tHhi9nAsqpe37zHNy2j84nx4n8w3qALd+PEcdxIcB\nsJJSArgQlp5+jXtSyaGpgHT61Jdt4N3TW8yoogZ4ninDEnZZj2W6PtaDa4ek\ntpBmYYwGGbP6UNU+tbz9Bl50kv/OKQSGdWrsLgEi9tL9GEPDObP7wOYPUfRU\nkjVjELx7E5rzkBDBPaG9zrCv2BXQsFZaGCwOpZMV8hqY0Hf/IlEDjUB9gsOs\n7pijZjH4Xv3kHpvSg82U5HHiuFrA9XQwH44mmRTZNKNbWKuBy9HMqz4vi9Ly\nVRQUBIFcsJ9zW8uVDNtnmkYRCLpohG+0CwsSJ1IhQB82i+AceknnB52Z0Uoj\nTaTsJZnslspDZPIVF5cm7abyiY2B56B8Z5iz3eK7a87vB5mqsMZDs+cqXnuf\nj39thMnOon87IniMqLw0ww87c0hruLyoY/bDYxOxKT0eQy70HZkSFQLxiBN9\ngMn6uOVZbh14rPXRmbsenJRvOgRIKmV/b3+Of3u+qrHh+TLz3C1C6Qn+hPfw\nNEM1\r\n=jnRT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.3.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.3.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.4.0-alpha.1_1580169150607_0.546887842984793","host":"s3://npm-registry-packages"}},"3.4.0":{"name":"@aofl/router","version":"3.4.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.4.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"7a7a8b0852de01f47d353723f862fe2befc280ba","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.4.0.tgz","fileCount":15,"integrity":"sha512-y9tZIefHn4RBcbIoQJ+zDUvukf794DK3SLs3mBla6SYQzxdbCeV41xSydg7wC/uaSZiifJHvYGigF9fsxOwErw==","signatures":[{"sig":"MEQCIGTBsAOiZi5VBPkfYBg5sXGtJwZ8z0ekPr3SVRVRDKb7AiAJ7EmghBNWZ9t5TIjemlFgvllekFLSZazN40QWotVkVg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeL3nsCRA9TVsSAnZWagAA1owQAIW+D70uIbp2b/MiIAcq\n7ouNeG8EGIhpzJFPJsdMbSNXEHr5GUnyzbWNrMxCnZSIgucE7QegM/E2fL1s\nlhRECb6ZM1vJNhVVRTB8OOXSdkEZBmHcKZGdaoYwM0OaedU8RWTvPE+wwxyM\nZAVW+cBQxypcXo2TzBieI64eWtEzN+83IwN1r9zPhc+NbVcXq8wY7Q5oyyvt\n2zcI8Itb/5a1LYqbYk/V7Wgv5VvhTvEABGgedU/HpJ0BXR0e94d8L+Hsfw6C\n+aP163lYvCrE4jMJw07EcEXkBqAp+yLNfhnq/fijGZbBuk72b8Ht+sCxbFnD\nyRHmRzZcUTgZoz8mO/Z3oc6kE+0JW5rg1n6c31cVFGsh+yFx+GQA8etCgg8A\n9PXPPTGdnY/RxndnLJxGY++RcVYhsmGK/fDdm1UXyBUGaxmU2NEWKCXzyWzg\n48lmZlxyKzWeLNbC+0deUKD/gDWyYEAiw7Ji4FktBCA8VqMANdGqL443+ruF\nLvF79BAbFffZgUSGzk+2U1jTJE+kTe06DTqZoALc7Bcv9KLPC5KPBMRtsqzI\n405A9hePgJYSKR4gZXss2163mfo9zmh3vxmYiBiCt3fwaquJxsbXwYoSUu1e\nfpEMLyHknpV9FgMIwXuElmNIepILJz1Z/DiyURP7T7614jYaCM1jtFgSknDa\nxdhB\r\n=hY1V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.3.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.3.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.4.0_1580169708106_0.976016206670359","host":"s3://npm-registry-packages"}},"3.5.0-beta.1":{"name":"@aofl/router","version":"3.5.0-beta.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"c08998d16af1b95c4233d55f255fdd3503418feb","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.1.tgz","fileCount":12,"integrity":"sha512-VoX3oItMoKuYYneqGtoba8cVf/pywglC1clli+z45l+pRXwcqanPJ8fk+eLZR7CK5TsAXKtP0Gk9tb4dw9QbWQ==","signatures":[{"sig":"MEUCIQCrf2g3GSyDUaOhxV54xDZRzEHTfAUZL2qgAi6WW3WlgAIgROo632TvKmhtkusle3FXMbI3QiaqNSwq7A0GYLWKZYg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUbixCRA9TVsSAnZWagAAVOYP/3sDKLBv55dAEG3eElHi\nuMwhTgxgi2Kt6aJhrR6px86kgFFCbo5QqZwZ0LDfQ09CkM8Jo086IdzwzfyK\nzDw0U13lh3fa7x8/5esHBcmTkpzWUemKwa3t56aTlZRlYPkoBtDALe8ems28\nZoGLb8WTGajIdAQgTWoAI+PWwdtvVdh8iBb3HJUCQH888Zrc6LY0ampdzTLP\nrxp/SgzI1vJrhWC1pW/k/eLPgkTEpsjOUvaUDaHJUjIOM+6hf7nA4Gq+nbTn\ngHb0PwVkz1A87n0NcyoTbgbrA1k6zwvUMtBToZVDlWZk1rn2B3TK0zqhFhXF\nemJXIVgrNdOkWXXPUe9m1X+J5TI4Viay65yUpuNne7aMRAAFBcST2MlmshrH\nDwKl9d7+r+4jez/NsK3fFVVoWOf7ISOvcJ0MNf6CvLfroVneNxKnV4BTGoeO\nnX9WLVk/qNf83ByTBJJ5QqI+3lrYXO7tZ/3cevos10cXHyar89zneBhxcsYK\nkS1ZSh1RKI33TS1inVJgk7AuZTHVJxB5vQz/6R9uSh/EQQfireP2baEwJHDC\n0u+nLXbvOo0tR6mze3srsITlDL7GrJcsAjtHqsldI90AQAUkkUyDieq9bhY1\n6CBpzQ0mkr6kI20YqhwQfMZSK/b+fMOTDFps3tCCjPmUuOlRJK1xGMu3W5q3\nDqfh\r\n=ZmC3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.1","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.1_1582414001331_0.2480110869878387","host":"s3://npm-registry-packages"}},"3.5.0-beta.2":{"name":"@aofl/router","version":"3.5.0-beta.2","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.2","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"600cbcacd0ddf5c103d29faefd3a8fbf1ad248dd","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.2.tgz","fileCount":12,"integrity":"sha512-eo5358X0cyUngtSMb1gN9nnEKNG86ti+fuSAdhI4JOmNzPaXXHePMeEfo1/P8D0K8rAyJ1FyjhPRx+j0r3oSfw==","signatures":[{"sig":"MEQCICMMwG10QExzJ6Elkkk3lO5sWkl5w9Ow36fj2bvV/SOkAiBxOLyN7FPnZ0OH8W7ycLNfLK2t7Qzsyk5mKudKp+I0IA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUb7NCRA9TVsSAnZWagAAHLAQAJLQ70ZO8Y7QeryhryqZ\n1ycPDyx6nWfHM+nOfXobWJdJdkT0zN73wf54aWw4Tfg22BPRddGMquFvvMyj\nO9Xo3rztznRx7BO8TCjouQuTsDs+xRDFSDgqdNGNcyYdeZi/HB7s9kVNY8Od\nTXOm/3Kzkcc0sYl9Aee1+J6RU090VzgwFFdkAjGmystBUZXIJqxG8CPo1r+n\nZeyWBmA8yf/PLckR7IpnWT5Zhx5QJl4D+YpSml3VduNDMlTnl3aXESnGtRyw\nh9nnsHQ6KC9Nltl9bIhhMWFxcPjSY43rkNPXtr3IQaYgMxnHPn8t+0Bbxk/0\nvLgK24XdoRTrNvVnNrAjoOmwYhOLYsxpp4T78Bw10YDh9mN4cRwVWDgq+jMj\novMh8+5DruuX0mHsY5rpBp4Z8Wr82lHQNha7wmn/l3fhF8F2lxhb/jmG9j7d\n8O3QLeEotij3lJxYyejbNHRLsrdt+YmBE9n+rCMqYZwKm/UU1+KrL5mgKZoH\nbaWPVtS0ShzPUxY5L7SFy9dtaO/iIBjsnZ8Pdtn/cAbSb4UEgi+Hah3jm77z\ne0O33RurZcmioVhas4Vuq77LG1sPkrxVuK6UPaTCP+NBWIW5Idsa5M19HwFV\n9pwwP0IOe/TwJirr7X28nEdP6t7EP53v8ruUjCPjoi/qLzKjtoC5RtwNe+N4\nJwzM\r\n=UxgM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.2","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.2"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.2_1582415564441_0.3993200554978895","host":"s3://npm-registry-packages"}},"3.5.0-beta.3":{"name":"@aofl/router","version":"3.5.0-beta.3","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.3","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ff90355d9729bf1e2b158287bbef0c48bbeb173c","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.3.tgz","fileCount":12,"integrity":"sha512-K3OZpj076fL4V6XR6U8ETReiNwD/Apvj9HOrDDMNQ6oAoWiC9DYWKhhuN1Kb1mwXttik5sv/cCwxlICLG+pLGA==","signatures":[{"sig":"MEUCIEBlP94tnvxEZ8rJSo9sUmoJbr+mmoLjXTeoHjo0zqp4AiEAhmG44JXQ2akKqAWlrEq7Mh2WvnkLQvFyFEBejNU1SaI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUcI+CRA9TVsSAnZWagAACmwP/1njOjXDlyZZCCKD51kG\nqwX44qYKsJkt2NpkXMk4U/C/Ntxk41YYfxgK08J8+lPbqWQT7usJMDjNBPC2\nE75vJ18r3oGT5zedfyi/g2buKryoCIqaGz+tgHO7uWCYyobTceltILdOJWwZ\nncTCmPkrJS6dH8aovHvb3V/G9XbtO12eIH3PTBp3nZfNSuOL4EXxZWEmnnHu\n7Tucxzw7mLtE69Jp1PbhyV6Vd9y1viyW7AxfrLTxr9LP2YNzojVEe4EahT52\nhEcsTvdJgqzI3bzuYoPBEbcVApGlTUP/LZtFen/nB7evicYoaGPEiKiDj0Le\ng2SYU3yokgdlqP3GS1dRdCqh/79rBUkxo8jGVuJw0dfjaKbf2SsPQlSoFkL0\nyW9aPdKmBJBjwYG03pLAq2ofjtYWmMHK1MttZAK6w2cyN4+a2hNiTGw4FNao\nf/INY392wVBSEMHZwfjjr+HBbqYEWwLJkhHl8dRnmlDzMH8w/03ICWQHxkD9\niFDBN0k3gDeTUDhtk7dHb9aVx95ETjhBH0z+C2lqN/PO2GZIXyA7qTjCMZoD\nuXqIQ1Mh2xl/QIp9ARUVbB1ewv8ChSgJ59ZtuOt2Z71HwKnLRBiOyAle68GR\n8B0nAUcUNSTIki+T4MjjJyWQmJOaPfb+ysNawnKT8qkIxrD6WV4aLvAE8BT3\ngprB\r\n=HYbr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.3","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.3"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.3_1582416446566_0.34780358671794187","host":"s3://npm-registry-packages"}},"3.5.0-beta.4":{"name":"@aofl/router","version":"3.5.0-beta.4","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.4","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"d8e9b27c433cccb17ce147ecd6dde9ea355dc029","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.4.tgz","fileCount":12,"integrity":"sha512-7G2p0ech56cgGuNoumRKg8xAkn6hWZ0TFRc6w+J4wx5NLyR0j/MXp2/IR+UgC7HZSnCQEkU3tNeOlblUzjj94w==","signatures":[{"sig":"MEYCIQDKQ4wKmqwLggLWInObJlm6Mh7aGgBWK5BG2OJcgCvZuwIhAPCJIj3zcJEAfFA9f9MbwutgiO7YNID5dG/Ypz61yyXT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUdwKCRA9TVsSAnZWagAAqaYP/1v+MVDYSK7RiYbuYY4Z\nKJMrnUKSObSF0MIwEcaFGbRFkx7wtSKshr7ylnA0D1mP/hq6W7kyQ3nS8PDr\ndAGob8LWKrghax7Px9x+qQlqCBMH1te5Orv6OVlxrcls0bbpzJYuCV2+TJfx\nK9pd31OV8Jl45yfEMync04HQbrWOvofPc2r34kKyKzWrDCkJ+uMaEJdutJXQ\n9KeroEal0286AldpNex8luFOA4tQ0uw3/BM0l/BuM6HiJ05fcvUxX5hvrGXD\nHUfimayxXjzp9g0s+LSIq+zjCCGmNRIlycfM+X1v/8Ye7GpHGsYnSICPNTpI\nv56k9nS9S2wqhLnc78z7cuXxYHhepVU8MmP1uiWpfqNR5n1G0A1eCC7CiJwu\n1mACAhPxJ5b0jHta7QHVdvObDkEHUBmZmZKU5A5rosaFJSyPgcTRMOpJwLvo\nATvq41Nm5TwwhO1cBKrPPjJhUPVRPzk/IcW9MdTiThf2UmcDGe1q7uumTrVG\nisuR5+aRq5WcUCkcC3h3dVcSrVZH1Z+RRs1VVQWdf+B8zHbooDGOyM9/GeZ6\nkq2Rimhu8o876ELqGxSB8yZVpII2JtoC82/XqnlNRMEia1Vth3lu95Z/fMQp\npq7PRTBBiRAiIU0VXqO+iHUx+BOzwdRX4VVTBrgIjKrFpUyHNK0yRQxvXCoG\nNO9I\r\n=+k/n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.4","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.4"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.4_1582423050233_0.6155976925501185","host":"s3://npm-registry-packages"}},"3.5.0-beta.5":{"name":"@aofl/router","version":"3.5.0-beta.5","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.5","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"f72639a5432bacd90017be8a1fcc28550be1ca23","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.5.tgz","fileCount":12,"integrity":"sha512-p4VQWWfzgC61VnBqMaXAzt5SQu7IxC0Ag+tFtc+jlrpuaIm7rcl+1f5uyXEZ0v1Ax8o4ETwTauCqjOktvAUBkw==","signatures":[{"sig":"MEUCIQCEmNkaNsPsbo68MJ3/WULET2zvw3BiZ79OhlLbkVZNRQIgQNMAJIpYUDVqNJf5AQddi0xUI6tpFRZbjfpzpfvLvkY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUe0VCRA9TVsSAnZWagAA8TkQAJL3OVZeRhtI38JVVHKL\nHnx4lFlazivFGU0v3DvTnpkkCMc80uM86B8mAfelhTgrmRaRDtxGL1PgDD8c\nLAgW4HQPdRrfb4clzvGj+/M+s1JfbhMS5izpeTwlw+9ZhzbynVh61QB15d5f\nCAbBx9xCDZtpZs0aJ3ZMeQ4tpuvDuA4q+8XVr5YAGT0wu/nKY3H/wYHNG8Wf\nQvCEnPTcLboQauHpv05raZkIwMvIGaZvfqHJpW5o18gButLjisXZomhHvj9j\ntMmn8txEnnNzZrijmjZRLtTJF9q+ofZuOKeB+WkLTbEl5neSr8PnmDn0HrwE\nhsdbHnP76yOYKn7HVvXmRGB6M+lZ+DpkZUrt7K2iF0+Snlw5U+GmFLswmUat\nudkW724VSPp6kgfKEKzFoV9gSNal330qcYxcbBN+oZKM7iSOH4jrHrBygyAF\nSk6wi+JZBEXYl5L8JTAV/O/I1zhmo6YJPjYVIzkdcYTibhLnUnjjuB1D1cZd\njJzvDbYanbtk48afgs6jG/vKFNCllHxcbsuz8q+x8pRvpfCzlcs6l0sro5jx\nZWRewNCIbJ/6dDsrBK3mPmHbJViKaCKd/scd0us9rinB8Zvu5aShBROc2u0Z\nUvzjpMolDLUZZcUDTf7H4f/v+O7qEJ3CgUos6iABWkUBCKNqVzYy/w6ejj3l\n0fzb\r\n=H0EW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.5","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.5"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.5_1582427413198_0.48823869200441594","host":"s3://npm-registry-packages"}},"3.5.0-beta.6":{"name":"@aofl/router","version":"3.5.0-beta.6","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.6","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"8b6dabb81c427eaea545b7fb4f16cee5ca6ee7c8","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.6.tgz","fileCount":12,"integrity":"sha512-O/9jxyHYOVWM3XrrSVQqZ3NpJmik3pJXPd9+/McJgYfdcT5JsdYqbqKb9eDlyGr7uaymntOJQEgTbT9cmNoiZA==","signatures":[{"sig":"MEUCIEsHkskqzh0DFyZuvrX8wul35YI7o5Eg89UlOnFYUJ1VAiEAjTmAQlBRTWM1XrctxYTAqBczyEGaVgtWACqo1d9KqxE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUe7dCRA9TVsSAnZWagAAb5sP/1OJZafa4OFDJQkdjMfw\nGe5lkfgssJ84mcVRfpCMKjDaAwIM3wuw2PRVZm1vs/AHKJqgEG6oK1yjGp1L\nZvykz49MZI/ESiA/3AzzlIrE6NXBsI7HVuQKK5uBtIOBcZK75lyjhjdHfQUr\nc5XCFUcVus2C72vHzxLtrk4zvyNTRXOjvjPlYjnsTFHjSFVHtJnWzvZ7igy8\nsbY9M24B5Ag9U+2KAHoKb1UdZZYV9a9RGOJnzZV9zCWSC7KQvNLpSkk0Kcf3\njENnneJgv3Z7Too4PvV6y05NW4+9Gd62OFqRvYBqxWXbCSq1n0t8vuc2koLN\ntLArtPFIJzwk98fTsra0nNyI9eDe1J6uDdcT3bRfV1W0dwO/MsWuX+xMQfrD\nh0Bn1WujZm2Tj+NXffRI4aLDzDPy6Lq9IB3e68/pDkTQG8WaN/41Yx8pXOSZ\nBUKt0p+wFMoEIWEPkvwIncW2ObPuWoNkOBlDct6H8QmcxzVCibtTXBpXIRJH\n7LAispNCYPdE2QtPDKFhU4nKxELnmq8ZiJ8ybs+JJuhNjfcD+t06ZEMqizR7\nPVTHhQI/LOwJtPDXL+6dfv9+Y1/pRDKRMir9b7dg8vWSsy54u0TDIKmqTuJN\nJU9cwc19IRPWyyVsWa2KvPKfiPJYMvRauN+Z0pPqevzOf4wAsFBu/sbnG+Af\nBywZ\r\n=p8ac\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.6","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.6"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.6_1582427868997_0.9110698089013745","host":"s3://npm-registry-packages"}},"3.5.0-beta.7":{"name":"@aofl/router","version":"3.5.0-beta.7","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.7","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"d60b283ae9151b75158b0ce0003ba6d247d68143","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.7.tgz","fileCount":12,"integrity":"sha512-FTvsfBHJ0fo/DDTuBlDPII3wy4pg28f6gfQuyjWN0ek3plckDJueN7BDV5qpQgopYIjjHwxH0JioHoMJcbFTlA==","signatures":[{"sig":"MEUCIALdQLWkKpZRuIgx0IeA/j1PiLEdMWxBvZrqWxb0b7B9AiEArnuJvOArYljoHkuOPo0nN1uFU4Q+3tYIbcLN/8WcQ7o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUgggCRA9TVsSAnZWagAA2UIP/2Q83pOh9S6O2W3aebX/\nxsFwQ7tTaXyUyQYGafyuCJprtqkwcF3tR8jUN2XyIzkuiRmJtl5YLS9+K9Ys\n/xu1Gyy2dVvbrbkBZz6ggJoB7THeeOIJFFJrkST1k0LQpbbJl02stiE75WLK\nh0vRhE9aGRZCSc7OHYVinmTex5I0dXuo7hYBqsHSHrAaVVk2AM0lQhp8X2hw\nUbqfPBVk50gaBRZ+YX/o/sht+KI+lxG5t5Rf4xW78e6x/gBmSx6Hk1/jkilc\nWeOXQeawLTL7F3SzZyZ0sWguK/1AsFEiqj+rRBdk2kKZKKBM7yZmUVIsJv+T\nSnM4KL0cC1oIY7/2bWZbVn8rhzRtN7VXk/W4wYB8NC+1E2KJzi/7UhEukQqq\nEkbuECJvuc2AZlA6aRO1gBvCEjlAPEszyrzq/csq5FIqpkY0shWplCqU1szY\nGVDf2uOMEavFz+B5ljHORB/FqkVjzFPGN1jCTnv+etZ57pirv7KgUewzV+hm\nPYMk6+dCLkz+klvOeHSnnYsG47s0AhjoBfGU34ysaGyLRgGpRzIKFkIti/jQ\nzN171k7b4FLJroHW6pLZlYhL1zsTmjToYY6iz9UuVYDBkpyikdC/j8f+kWaM\nenvECpWOEQFgmq+LyxlLr1JGtH2RB7ebvgpeIxjsOqOKaTxIM1Ud9EqZ1cmi\nTMgp\r\n=F+h4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.7","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.7"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.7_1582434335772_0.14590178301255974","host":"s3://npm-registry-packages"}},"3.5.0-beta.8":{"name":"@aofl/router","version":"3.5.0-beta.8","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.8","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"260f69deeabe91bff133778d20b92f647128797e","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.8.tgz","fileCount":12,"integrity":"sha512-ietbrI4T3YVDuqZ0gpIK7qgd0iPnLWw0LdjJ2lgz45YzET/p3mr2Q7n754RELuVe4RV9avi+k8bR6yRYVk1RqA==","signatures":[{"sig":"MEUCIEgPLZY3hWsFRsVYfAVxnq8KCEdWMb9JsxR6HktvRlFVAiEAxCnDDSXGWcR5/5lIPkzySy4flZS0OlTlTDJolxKB7tk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUgjcCRA9TVsSAnZWagAAwsUP/jOd5uy8uzjWOWlCXa0p\nCDFaffqp87nj72DLs7ZBdcVUj4+T2lxxk9f6xdDEljwfYNvFVq1O53SlTr4i\n4d2lfl4L/LUyzfH1FGKWDAMXY6tRWKuoygy9fI380YE995W/ewUqegjMAglr\nIV8XYUi6TqBuVZMvP3DD4kf+BIxBwB7aZwJf+Q3B9l+OeSjRz97Xl45fXEEF\nUsc30FSnxKPRVn/z5xyBeC7L9Sq+PH7yzH6XnAsu24QiA8fifVZIJYc5qn9p\nWJCLvd/J3fjEkoiSTQZt2XrZNQ1Ts4IwL86kHQYCtiUP0NMGL+5VOJSt56Dy\nEDsvGdChdaLOZIija+3/nFEtpW6AJpQfaioO+q8d/tRGY6fT2xNAygzsODc0\n1jxNvRHTYSbqtsiFe1edbJf4DpVn/SuOTZaRio3KDTOMZhGaMECycVKF9oag\ndnEIop95nGdlTbbd6DuGayeGSFE6E6x6TS3Cv4OLr1fL5NKkPovtonP/pQj1\n1lBNq0Mj0fXamQ/bh7vbNGIYC8knMPiCl+3dnVz5ZV7tjvtBwTyfOzj0EOFG\nYCfwqZlghzlaadiMiyHh1o+qGUeTvYuKcU0oh1WuNSM993IHO3Iyam2qP2HU\nNr+hvzMHGHktlMVXF6rp9Pbr2saKYDFa0qWaxv/lUhbb9vi9QTZmVDM4AbJ0\np/ux\r\n=FLtl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.8","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.8"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.8_1582434523722_0.36669088455613563","host":"s3://npm-registry-packages"}},"3.5.0-beta.9":{"name":"@aofl/router","version":"3.5.0-beta.9","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.9","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"330389d2bda4aef8a2243246668c4d4e25ac8bc4","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.9.tgz","fileCount":12,"integrity":"sha512-z2WRnuiFSkB15N4IVqw8UVGZ/Ty2eEeGzXKJiA4VUwu6q/MJBoj/ZEIBOI9ALJ2LDaerCWt1fB8z9+rua3eZ5w==","signatures":[{"sig":"MEUCIQCLKXHQ7FvsdUhDEWi0iq27OFLBzUDbks18w0XZGJXauwIgY3Z17j4KRCGmUIgZqNcwUTNxFQPvQz+Dh2VN7Yf05yg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34085,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUg6WCRA9TVsSAnZWagAAHmwP/RJGQn5IWQCOcBgz0+Pg\n5FRQM+Ntg7rFigmPp+haWMGh8ss7CGtAqUR0CdZzO5mVub9m8WuLTGSdIggp\n2usnHMbyfUEODk6N4iuy8WmbbiFlw6f2YbDcubMyp9FvEvhpL/vKzZlWEahL\nuBK3BEBB2FXUDSbACyOvHGbYPs9eBLVnxafmgoeWFODKaQ/8+bsyUVJPeq0E\nWv/hb87MvPLo5pkr+5tyuNONfKCdfavCAgJO7/69HWL5Etbbge/lS2PzvRg6\nIEkpV+RyIfTvFXYegGXFsHCs/ZvFs8/hx5OiZUZFf+mLbCfPjj+JyDaycZLK\n3fzDr4NY28GbsnDR4Fgg4jUFeiom/anX6BbpMEffPKvwqfsAuhJhyfOnsU88\nnfAHpM7GJmDcgsPQRueofoQAzLFkKuOEFTernxcrbE0/70kBD9HoMzzOKQ62\nFhei+bDtUoqvp+QrbyU8rc3ikVpKCtRBn5l92GzdXdNIaVvEKojmsS9qAOc2\n2W6G7PiBblSIwpibz6TZQngkhgyc5YGZzIlZiqS1wdYthE2pTV12Y8bc25mu\nMFFhSr1NeItx44g25/jdatdMkFXr8bWwlxXtE4hIDaG0bqERL2EAfdb6aLpe\nUcSldnMEtyrihQcfoOGUM4tK6yEk2UUzSVkgIcQqeWxJTxbL7D5HfQGj3YD7\nrmjf\r\n=Ct+m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.9","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.9"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.9_1582435989695_0.9899154000905539","host":"s3://npm-registry-packages"}},"3.5.0-beta.10":{"name":"@aofl/router","version":"3.5.0-beta.10","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.10","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"e93812c8e2e4d9ed5808394266602ff59544912e","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.10.tgz","fileCount":12,"integrity":"sha512-NvbqJH46YvR+t28sk3bLhq6QXlEXlTJtZQvQwXkUZQwJfKSclNMjE5EgW/rB/BKVlpjZD7wmEYOG6oXv/wNDbA==","signatures":[{"sig":"MEQCIBcfQylRxy4oI+RylrBveClr7619dlDHGFseI51ZIfs0AiBHqaZ27BJg5HmAJ9IDw2li61LLoH+Iy0AIipLThWD9hA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUhKmCRA9TVsSAnZWagAAvmYP/0ssnNHJi2sp1uh4OU8f\ndH07jJQQYnr6VDoCziFkYG8uyq+CsqtPpeHzHRNeQIoCrQTcGOB2UMAxGrD/\nndr7uK5QGQF0By4Jw8pr6uYWJcP6IQBwwWlDC7c4GXYg//8C77Kd5051isG1\n7tJle3C8w++9DuteaNOqKeEZkWv4RgRR3w7SG7+4/94tddW9qpmXfjKJfdCQ\nL2yxRJl872LyVMVuj6Kc32XyvE3Y8LmvBbDlFrj7D6jkUhiVwclsiyv1MrUh\noYlXGrLAMAAmt4MU6F+GxJHfLYNI75tMSZws+GNyMW7mPfpra5Cos/5EDbG0\ngC/T1xDydDH2NeeOoQovEahQczbOmrZ+kdqiJbvanCvr1tTYblkSeZpQcpx2\nzR0SNqjUj3QaUM5ev27bVspNPBRBImLEfHv1MjTFJXIkuos4/kQMoAYGv47U\nIKlM+pT8qK4pNXqFsW0FjLgg2UBX1xI02CY6AhHLs5VcsUcy4GB4rLcH1iW7\nxK9Ic9YDmCmkhQhO+hUKkSMOiXuvHj41/KagnlY3B9BxKSMFYifMzmPXC5Ny\nBSmnxP9GyNkriwKiyU6RAjN0eXN+CJXJMZ7RDyhMKgg6fgp2oZ3wyISumBIR\nvJSzBGD27ampzT6yMG3+whtDpGl28cWm65j1kyoH9gz0EJ4hUUk5iiMmgp8r\n5a6u\r\n=4YAS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.10","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.10"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.10_1582437030171_0.982455422455935","host":"s3://npm-registry-packages"}},"3.5.0-beta.11":{"name":"@aofl/router","version":"3.5.0-beta.11","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.11","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"81078f5efc0996fe695f406c609fc392f85852e9","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.11.tgz","fileCount":12,"integrity":"sha512-xmK91nWOUu1SCrUhqbXtMsA2OP3aYIRZQBHCbSFOtqwAUppouRVyqKGkbIcYo0Bbeg6+uIy5Es8/e5SZCzuzMQ==","signatures":[{"sig":"MEUCIQDiJGkW6nZL59Qe6ICEToa1Gvz/aaYWRqyA7tuwgp6rggIgP31Si0+1Cz3ttTYCp/PBLQhMggRvRtzCT28HuT0LJB4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUiusCRA9TVsSAnZWagAAuJ8P/A4nycJGXsfBN5ue0XOj\nRVq8/AWyYQ063UP4kMXdW7RRB48tK3gjgfgyAWr9dFqgq9TAAJw+2FixN7Pz\nyRqH/tBMQcRwU6b9uM2C2B1zwMMw9RD2RpFtWVCxZBQ/sYfYxShMD6pbGo+w\nqqW29K0LEKTWxTk2Uz/DboFENTLpc/ZKYbk6tes2rEVVePfZ6U1W5X1n7yEZ\n9VPiCWlvgb2TEHCYBHZftkLPhU86qBE6P5KM2HafMH5HhLDqkSQMsjSlwtNt\nk53AgW0bOTJHjmpViOdQ4eaefEpipYMhPvP7wxkvu6X7oP3o1t88Y7Rx1+t3\ny/yc5/ZXeCT3HLRr7szckL+XgPbnXEk3i/N46tAq66jg5+9odH6hyNmMPAWO\nQqOFY+u2N2USxTNyhzR3aPFDt/d2ahizlpsQPQiNJHUTNbVqMt2JNv0NaKlb\nAvHD5Mgog/ojaiSJzQ8gwkb5dpbSZpk9E0m8f6pSO0pnj2wR/Up9jh+XLjwI\n5lXD14bH4jDjaBmdLAr0LQrAmC2eKYtYQn3OlGA5kbxzCXcRz8xZRHha+y7t\ntb1YHN3e+7lqgP4lbC/ZmHWonW+h2t51P7v0qiHIQ8Ogj52bgjd5QMl39iWs\nsRTOyMYpS91Q9cGoMV8LkELS/UOxr5uZx6hzpDw1tCQ3eClYVFJIxwx2o7Mw\nIdTr\r\n=UHzB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.11","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.11"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.11_1582443436269_0.6701817257115013","host":"s3://npm-registry-packages"}},"3.5.0-beta.12":{"name":"@aofl/router","version":"3.5.0-beta.12","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.12","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"2e05b93a94f7828512121a2c19fdabab6546612e","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.12.tgz","fileCount":12,"integrity":"sha512-tvvjIwUL9/vXBBbj9p4MFgrLeu0kpoaxYrnztWBnMXdMwRcxas8wUDzx8aVZJ0Y6Ery8KdGp/51aAfQyI59dvQ==","signatures":[{"sig":"MEUCIGwFkVSmkFvQeN21NZZgnwDHFrLo7LAiSGfJ5zYGTNdgAiEA4sFQBTI2RW5GeiZz4KkzGNmKtHVeC2fxGiY2TY15gfw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUj8dCRA9TVsSAnZWagAAYisQAIvONZaMt37p4T/qvsHc\nIRGv5sTihwXfmnTfxLz0mC57/E+IfAzDfuKA2NiS4X1d83D/DyizQ+CBrXAC\nwylH6StArr25MvkQGoMt+HnqE8761T1k9aYGIp5pHOh3UHgItomb9nRuO4Hv\npIYGtLCHnNVMdB2rDVkycohUr1Tq7AcT7eSVHVJoU6CAj0RN4dGzbiuwC1eW\nV16KKErUPWB2bNMSrukgrBoVNeAqOTKuNhKbVJZjk/EQzkeCyZV/tMFJwRzX\nb+QQdVEPTVjQPYv5c8RPwnwr9a2p+qL+m3PrIcU8mVhfSB09xdQOpgMKkb05\nEuwoDwHALJd2ZbtkJCpiK4SWvxHnLVj6CAUjb384+3E3RzpPEYUT95TYTfdO\nyoQpB4M6pEBMbRUB2ht0Ovo/t8MPYzbHt8TbX+miBg8YvAXagZWJt9xNx5fy\nexJcBB+B93CjdoXP/cfs34ztKq9B45059979owLA4PNlgS9YnzW9RMv1nB8N\ngFwY2ekuoC3orTb34AMcm0A5aCmhjvkM/nxUSFw6FxC9OWbIr7e097oaLOQ6\npvNt6AdFBOZOmers9fwSGjfzo6Y/hImCH1h6yIJJZ/+bwass3QylK1EaO/Y9\nOersrlFbYOSUFszTa94aNEW4SKoAvq8Jb9hK4gdwIfNS6Znh/UkE1W5GCN3w\nnX6u\r\n=8N+E\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.12","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.12"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.12_1582448412718_0.38355971729967364","host":"s3://npm-registry-packages"}},"3.5.0-beta.13":{"name":"@aofl/router","version":"3.5.0-beta.13","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.13","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"7e557f9f64831e34c0ac03db3a501891ffb383dc","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.13.tgz","fileCount":12,"integrity":"sha512-NjRWaaE8XVd3A0NVYyd53tCU1VF0ugRafFmk1xQa7OKeK6yeyhLbCSxGOLMDXfrUJHH0isUTXTxRxz/6/TUMQA==","signatures":[{"sig":"MEUCICGCrnj5fz7pNkUChlDWrtu84eovpkGUq1OnX5Gt3SPVAiEAnXg9T8VxFsylMsoib1meNby/sSj0EfEsvhdFbQnxyak=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUj+RCRA9TVsSAnZWagAApNUP/1KiATrM64fjFXTKNlx2\njr/127xNdmESG3seBGo2bg2zl9j8yiw4Mym8auIeBwtxpdjIftZFhtr9vvdi\ntCLGZgv/uMumGRfaBn3gwwcaI61eaEXHvrawXnLIi+EFkQIjv+aqveR6Tk/d\n1G8P3DwZl0Q8bY/IViMuBfef41BAgfat1LmeXaB96xptALultTl8GxQzXTJj\nqI0S4WBGepOrw9XxAjXdxEhsXN8yeE80Tf08VTS5H7FJphHFbTSHW7YJT2wa\nSvogHDe0h8eUFD8zKjG4blbks/UoVZtPYlwnVJUFjVmLm6c2JFindCATkfus\nCpVOTBivw6shHtiFvZ4njqWtBSGvbMep6y/3Na+ApEVDDxlmfoL3unZvhzr7\nnalyWdOPy0pLqGBQYB8SFz6s2KemNYcRWIfb7GpUOyJgzBVupRxkw+VkCdG0\nEeat6BPP7M5qwOizlOGllB10K+TxcY58ZXKO0JRrt96WeEwN6KtS9Q/uIDif\nGLnKthLL9vOBj/gjjM4cQy0jzzsV070JN+IevJAtFQdM1Qa0hyC6u/WY37IN\nGIveHh/qMun75/13p8HiqrLtTIDSK09ZreErOaEhL+FFJyUUcQxIFDaWk27K\nUm5iUi4Frz98fVx96gZ6xuS/g9M/mn0gWOHzsS0lTFNQdILeFRhn8SqN3Onh\noJjl\r\n=Cqc/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.13","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.13"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.13_1582448528751_0.9248111036118309","host":"s3://npm-registry-packages"}},"3.5.0-beta.14":{"name":"@aofl/router","version":"3.5.0-beta.14","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.14","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"fb558bbdb06261a378e3e432beba48cbacdf89d2","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.14.tgz","fileCount":12,"integrity":"sha512-oA226xJZ3wFBJb3eNyUVgFehhlR7V7iNAzkJoIdljTsvNe5wEsNW2Ac6j0/nb54FLBBfjrT0oH3GcWQJHk5aNA==","signatures":[{"sig":"MEQCIGZSkiPq1jV1z8ixrfL07B1Z55JUWVKzGa+7rwD8NkoDAiAAxKZFXSK/KRqs2FvMxsHeYXjJhQ1EcLOO/jpHVvDa4Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUk0wCRA9TVsSAnZWagAA6j8P/2ZBkSLpEMv8CRaanBof\ni7IDEZPNZGFd4pwJXYY2QS29M3/aqaJqeFja0mykL5ckivbaceM0PfRrAGzV\nBoK5eAsoGbJfLNdn0hPr1ZPSLR3P2L4OmuPoXT7drzblcngJI3Qo0qxbnDRK\n/vArNu6EXZ4+XYCDi1G3rNEMlO4aH6HQQATXILwLg2r6pPFuPxkvyqO2Tpur\nvKfV+AeGWS+433UFRf9YpQZGD+JOVl4m0ICQv1lbLK07wmaG0RYPx6q5gpbU\nPC1EOEorKC0PJDtdtBHagxRaZ5CIEyKjtSV436z4zbwP/uu9K3NiM1U+rPpi\nIa2cqAsbmJTkWdYbAdpVlxhTi0Kzr5dSbk31At7kRjr1jFtVcLJF6CbmCJc3\nhYQtQbiiBM+NWnsHlwuQ7U2zSNrVy7jpyPJIaFu6EKnP+0DEGHzWt9VeSVTi\nx6XVDKHc8JUGXbh5qRSWJRODIe1Z8U2Q4kETCf9amCmELFgB7mlCO3Z4WlrE\nL1/V5EZpZ5xqkPVWCFYRD/oiF/eBwVdyLmRnLbFh6R2ovNivtdBEl+aW/MC9\nNbUYwoVoz5PyEQ6W1MAo+v0a3yHbAvcNwwmoqAgAlHi93kSTFe6ym8wxruEs\n79Qbf9Yt2v1ZU5u5tcO9tUkN6IWMCsROdEwQG+LCdTKymsxn3NWUtVGG8ouT\nSqhy\r\n=6fjD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.14","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.14"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.14_1582452015989_0.27801443171213425","host":"s3://npm-registry-packages"}},"3.5.0-beta.15":{"name":"@aofl/router","version":"3.5.0-beta.15","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.15","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"3e2bd3b71f86a32b3c5c19ca2e712e2bf8cd18b9","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.15.tgz","fileCount":12,"integrity":"sha512-325d6EE6cO78W7f5thEZUfAX48hZZlqVnxzxCMRp6GuYT/BWTgc1eXhLERccpUpnCbb4833PZSN+qaTgwc8IKg==","signatures":[{"sig":"MEYCIQCSkn755USI/MyHtIoOBVXbxC9RNv1nYj9Crql9tmyHoAIhAKSy6yFBa2FKYFKidsO3lKXwNLjjp/l3TRtUBivJdNIe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUma/CRA9TVsSAnZWagAAIqIP/R/omVDTnRrEwd1JLODE\n0JE8YnwOB69iWR1w3uODUrr6LfNUsma7sPwxMSyADUWG3rV/SE593pzsmyMr\nmKCQc+J9zWFa+RB6KpPpxfnAI9X6lyVyV2SdJDSStc5feCwVyAv0AkhzVxAp\nlPezQuZBq6at1VcBCiVgwNw+c3YRLUSMMiVuyWTFaVL7bmuxvvqgFS+obZXC\nmrXb/yuM0HFcJhbSbO7yoNgMorqVoywDBlFkvtVNCaizWMn/h09X9IFtA0xM\nkHzAKdDaI9vyuE2svLCgp6UGo7qLyl4RhkohvFWUufhOpZZ8n6IZgRFGRNY+\n9Zit9Z4TRS7zPBuZDib2kzYqj1U6LpxLG+wN81ywYvAC8DZjlVgUZJ12DeWB\nPD3fBL16D3diM5KfAHX3qsuF5o/J92BWpf6U4g8Kxfe5ZrbEJNSTJ5ZCk2cP\ncO9HIB7BTf5WHatsfV4eQexjwofgWgRhlc/0rTr4paITNC3EevuNhhPiDd44\nENbJmK81wZJ2LQx+ZCJinO3TVX6DJnDQ28caRMqcu8sUX8eRXijfVns23j2t\n5ORTrbsS+PEtu5I+1zHsgCWTvJpX6CV+kxo38P/n7mwxnKyBR6pa6eEIw774\n1FpqN9uvj18dVZegZULBBSbFVk0cv4+ZMouJfUda5l7KBe7Ezd8+P4i8ZDL7\n3bVQ\r\n=Fq+H\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.15","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.15"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.15_1582458558973_0.14765080435815636","host":"s3://npm-registry-packages"}},"3.5.0-beta.16":{"name":"@aofl/router","version":"3.5.0-beta.16","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.16","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"758e447c81380764ac5270b9038ddf0a7d63da88","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.16.tgz","fileCount":12,"integrity":"sha512-FGx+WUCfSkG8FPm5xrCtIfv07gpEM12AHyr8fO04UdwVXToaNnXc4VJjjUDV8fww7STO7NTfkxDynJhQlS8eOg==","signatures":[{"sig":"MEYCIQDf15Dgti5ayuCjoepwBrucXz1HPhD2jPddzMAs9AV0YAIhAOG767pYtiaAjGxpUV0nu9ClmxG7TYtoOcYLD6yhtC3d","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUmjsCRA9TVsSAnZWagAAAvYQAIos0QJXTx50HEKfLh3M\nxCl76SAzlzdlPnYR5SSLDrnqtAuypbYzauC8Dz5qJkoPZU1w1XkYqtfWUg8s\nFnGHSd4Ce+v6uJKvafe87qEjXI7X6H2X1YEzVJw3sWGrLgxe11wcNDP7kjyM\nT0INxvM+auoUSeCddYAt+F9hn3z6qJ/GrncYHhjfuVM2spfLfo218KoL2Aqt\nBkdijxxjJBOsYKfJt0TKxBjr15hX5VVl4nDxXYiyiMBrFVyz9xF9eHRnroBy\nNoK/qKoAiT4+zpDVV0P2uuG3IL83rMCZ4EX+LyOB8tMABiANLyy8T8whMwgB\n5zb7N3ehRdhtDGSXOyRvNbDc4XZfJyIYBWX5IP3UEn9c1nLuZ38ywwEmUP2M\n72B2hFKyiFoGuq3Fd+Mtu/0sOZmI7EPVgY+thoXoT6SbEA1G05TulCsPxIKZ\nyo7xVowi/++XNAgQbTqm+AUUKE8rjUm07FYeAoCPt9b0mtHwMjlbPatzmocr\n2nv8Q/d5FCdwAnmtmxEM+h/kxbiMyOoWaE60C46e1nxL9qe94PH10VNzG5VD\n9KXRMTHiFxs2Jd77nmOtmvsmE3MfYmUE0KfEMlIWZzYFtVJiFnEdFti3EQB4\ngqYP6pGAjthh5Epn/BzJ4V00jJJTDHMN+LX2XegUSl6ygVQK0Rv/QxNqVyr6\nCVd1\r\n=F2zG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.16","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.16"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.16_1582459116261_0.5417439868368399","host":"s3://npm-registry-packages"}},"3.5.0-beta.17":{"name":"@aofl/router","version":"3.5.0-beta.17","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.17","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"bee555c076be0b04f7d941cb23e4a2ccaed9e316","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.17.tgz","fileCount":12,"integrity":"sha512-C4rpU7NdbXOtDsvqMNcdDzyiSCjaNNONbD5skHCXkS8/vW1eTWgxHWal3Xfg/Lt6V8KS87JH0yxzZccKk0fC5g==","signatures":[{"sig":"MEUCIAEmyehN2esOAcM5IU7HyfAD1ZgGfx5/jAFOnKaz5qBSAiEAjwi54h1hh4/edZi0I/WFD0HMHOOKHDoEqyOW4ktgawk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUmypCRA9TVsSAnZWagAAY7sP+wbcgputbtFmkZlvFtkJ\nln2eiiIcnNR1hU/nT+cSc6PD6fN3mWYWcR73zyrEOl9fiRw1NsJhak1YQF21\nfjsBvyFmLKXRtJfU5aDM64lanDPWEixdw3j0+VqCAmZwjUdQWyV+Q2Y2e3OZ\ne85WkaWO6cy3x9OM4sU/xY1NE3RuD6PTdItM7RBBcrhobfiDMMC0/yMtSffk\nK+3WkxIMA/GAgs518KPTgvqY7TmIxgWdhk9ehvd4syPMUg5ZY27Wn9VhGdnG\nIi/C0QAxkb4MeJxlQPL3tOg9bfImA0FlUdZmqU8sA+OH4S4o+OnQ26Q6F2Vs\n4rCiPL41+CtGL5/7fWpKLzDVRKaaEjmP4aAf3JWBKDQjOcTwqs58A/KSF16s\nU6sGrgZIXHgcqJbogRmw0iVtb3kRYwlDmyVhTF5si1h4Al9ZvP8OiIY/PWHb\nNefMWE81DIW8zSKds+M6CVPKVNcyWG5UEpAaiK6r2UenVCuiwPwWSVwGmKKn\nZVwQ29Xr1yW6v2tYieJmxluGBEM2guDFiVX4ifoYnoL0RPdtmu6NBSEJ7E6a\nKxgQJDivYtPqX06pmGyNjy4x/Mp6Ap7U+2qhRfWhwFG6QKtmnnlFnUNtH+AI\nNRoRLaMix/ACLhVLiaaepDt9KuygwRB/R0CTJYsELwt27JsDnCRjc5eke72Z\nGazs\r\n=xrK7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.17","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.17"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.17_1582460072672_0.9718049975932479","host":"s3://npm-registry-packages"}},"3.5.0-beta.18":{"name":"@aofl/router","version":"3.5.0-beta.18","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.18","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"1f6fa573cf06f07e29c14aa67a3c4ad956861d02","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.18.tgz","fileCount":12,"integrity":"sha512-juByzIwHdy8Pn1wpqD/v04+75rKr060X/CEyPM2vUlKibTVbSggCTdFXJhMt/oyaIiESli0hZAFmTd4l94mt9g==","signatures":[{"sig":"MEUCIQCC6cI+ykQ9xZlIFRX2XAhzAI1yTioUPSIagapdmRUXtAIgIBoTrNJsd3LZr2Xv+mr2089OlT+Rf3nWgl8RPVTFt/0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVJuoCRA9TVsSAnZWagAAXLQP/RHyaGl8PwtTPIXvMLV8\nr8ROyMmwy0QFY3ZGNid2+u2nHu9QmTFDlnJZzh15ivn+EEHUcBqd9okpfVth\nN+8P7wv7wR42aMLlKEnsfULyHLCV7R81oLpaNPHFKHAoM9Ni2dE4KEhj1kB+\nLW/ohrc9AOvF3HugmMplcRVY7Vz2f9Bt6X+LnB4S6j0iJQpG8oxbonKY3yK/\n18pAbR7dtOzSsF8VHVE6yI4KI5Ld+TLWQrOdSiBuejQXaUug0AJDQQ4pDo0j\nnrtLwvg4FdyBsMH4pcUY0XwsY+B/Pk1cTH2UNbsA+JvW0oRmV8u6R9aom0RH\nnJF67ploGeah0WuklyWGNzypJUIZCr/8poxXUS8AGY11/qrPRTeQiCwiwrr/\newGsDMnSXGOu9Z3CnAhJGfiJdF+tlTfo07LCKk9woC/Tw8hbJIqwBbXagek+\nH84qKG4nnhtwkbcr/wFckSZG5ydiY6gQiq9snQ700maGxn9oeN/DvbRzi+DY\nIcKfhD5fflgZCi200sXDMfhbbiCTstTF1y4sbg+I5pxGtWddL0TpTSKW8hH8\n+8ass1wSY5iPJfQNL+aNwaJYduhdAw/qo0Pw1maih+PO9cLcqkM4hwtgy2xt\nzvxX6hcH6Nsy3q7IUAK9dCuXj/Sq+EiE4hu9d0LrRR8o1D/uslwubO/5vzGD\nGtwG\r\n=9BJj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.18","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.18"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.18_1582603176044_0.8508432113877267","host":"s3://npm-registry-packages"}},"3.5.0-beta.19":{"name":"@aofl/router","version":"3.5.0-beta.19","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.19","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"522861dab37b99f5a5966bf087e9655110d67379","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.19.tgz","fileCount":12,"integrity":"sha512-+NZXVARslwII98aTR9GUSNq39+X3RjsJfw0lH3q+POd2PcMPbFpj7l8m4i6ArCDmDPbWXT6iaoUo2D5P2s1Ltg==","signatures":[{"sig":"MEQCIALe3LTgNNlCQ+ZeF4UtiRIKFVgh5BVI4utkGRgqQaVBAiBGlHY5zc7pFLEduPn7Uv65MA1DhvJRtBu9U5Hylj+BnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVbRZCRA9TVsSAnZWagAAAiIP/3KpSF1dxhhL7xUOVVTT\ng8uYa2Hieao3+voDBOXP5CON9vbXE9WZJipQDdtwQqWFaxoWZA+MD8/F0fI/\nLoaFXbaAZeQDYWFZ3yMRdnkPdAbM4+7jXQWdEI+x6DMDaks+u5ZKv50jOoS1\nvimvpVaW3IfTs1MKw6gcSOfaADVpYDwRG30TvSOAU8jO/ggPj3lyYum/67yj\nfWio8H8OktoX8BpkAtjPqTBL04KTpP8hovtQaXrZfe0mXHmfl5qbIPF4vwDh\n+ek2FUYVmsJ5mRb0CNsO4g1LBqDFLIrXp1N520PkBCUwDUQRue947UVJvTtH\n39B8zMYC1DQJM/JSbGWm1csFIsOlX0+dnRh2nZQcES9+HYJChriJmNye5GKQ\nKCZURIjkd7l9TVI1synJDVgxhxqzpyZM3cFR+mL0GGxtskq+QSuTunmLuC0N\nqDEbgSwNoltbJerDPUzvK1BEmGmN84dFP2yZtVX8CN1E+jcUXcNa/zdfJeL4\nCoYAIC2R+kNWjlc41YhkXTSxlDt7QLmC1Vuu4ugF/Hqktgt8FYWTXYkDsYMB\nvuZ65mYL5z/bgNSCe8ajOkescYNJ9lg3UplTqVsxFZ0+R+H2S2Q+HzDvNeYY\n6rL+57QXHAc7OfQ6pQoFtfXG7tv+IB5FnIoNuZRjUVM3X7wo8tI/Z/1Q5xIb\n74Hi\r\n=nVHh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.19","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.19"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.19_1582675033075_0.06256186061896596","host":"s3://npm-registry-packages"}},"3.5.0-beta.20":{"name":"@aofl/router","version":"3.5.0-beta.20","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.20","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"80b43fdcc4861d83f3db5e672abe25cb400c6d3d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.20.tgz","fileCount":12,"integrity":"sha512-gMaKe6G4m91nPq+Tqipyp6WOEHXDGnIksx/bGFj7yVfxkhRCmYLDJvZlCYxf60Qm3UeM07QoLQ01Gft7H1HNEg==","signatures":[{"sig":"MEUCICPwI4f0rX27YXMXqogZHW6o2kSyiH3dTDfaPzgynWANAiEAoR5U+noBgKaLA64toCQWL0QEohmiIywmHRlx7xjINCI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXZVECRA9TVsSAnZWagAAGbUP/0SaEuNFs0DuvDqRPROg\nZiNtL1iX2VdCv2TSOTYUHNYLg0CrQ6BhonGist94c2pfQincdv/cdczvESaX\n8/Z5o+kzZKAqedIZOutelpQNWh/Fd2hhMiG08ZpsOJDZPEVJYySf35uAGPF+\n//jFUZ8dLH5MJk0xdtEtrCIxKS+9TQ09TVH+JL8jhhkeEbvGwk0MAtGKVFpK\n87ypM6livt8Qq7Az0LGqwfFFmrlvgeUtDwt0DEC+FuKb/4vhtfC+02sWT1Bh\nNav3z6RDeINRkuNCvCGX6plSv/GWsOGlYdTxaUvwkkvvkxgZKLCAhS+LGctQ\nco3OJTrucUw28dGpuvyjsxBPoKJQCu7e4BD7DdSIgDCZLqZNBr6lsIobwjgB\ndyYWCxLTYErHcKm1yO7/RHFHii/VdbIWXuAiI+r/3+NjL/vBDgcvYXjVv+8C\nB00rewqiRUfIj+HovRClRaYZgJxYNy8mvdzuRfar1tZQiDe+sR013Lg8NQ35\nLSmB0wUSoB+MjMaJAmcKcLDG4eVUEPbQBBI8yn3bsLXFhxxeZf4sYHWr8fEu\n8vwIWiJN1Scp07cGSHiPGAXiqP9uFZGJA3BHJd/LvEFmtSMYZRN7po5cn8HY\nNFfECqgrguqGVpFOWJp4RVQxlPWa6/4tbcX1Tt3U/JeiO629eVkHZkrVDg9e\nrhuB\r\n=P7QG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.20","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.20"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.20_1583191364437_0.03906340909364947","host":"s3://npm-registry-packages"}},"3.5.0-beta.21":{"name":"@aofl/router","version":"3.5.0-beta.21","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.21","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ea08351e44e7e2060847772eed81de273ad9cf67","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.21.tgz","fileCount":12,"integrity":"sha512-r8NyFS2hJj9KjipdzHyHLstr62ZzICTHnR0BBD8oN1pcifvGm7IUprh5BFfeeBpgW/eikV1ZoFaUKZvClRwG4w==","signatures":[{"sig":"MEUCIQDPUXVh/wyZultwg9O6P9w6r9ILP3lf7tuU+Nc9C3z81QIgHlzv+pKJz+1cs/l8RTF8SLmpmtrxoJ43BCktmHSr9Ok=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXZZJCRA9TVsSAnZWagAA8oMP/REYa+g3ONBO8mq9KJ5A\ncZwA9MRvQWixHeVWBSz7+ouRxRR58o2liIjlHfwGO9Rf/ByA5beXi+czdrEU\ndtHCSMQGvj3kiyoKJP92JhfqKFUaVP0vJNsNlFpgWXGiwn+wrjnK0cZtjmxs\n8xXlksMn9j7AdVNKHh6M5OV1zWM2Pw1yiyRgAh4bl/lY8H4bI8LBZGKn/I22\nW7r/nCRdc+V137FIzBUkfSQ9SCFVdQzCS2OVabK4kdfAOz/245M2Cn0CiNWA\nKt9kBai04TeR2bh7zYM1abwefn23TtLTSn0s2frAemT0krFkPXHYZPTM0+hU\nJBXoVaxWDyykv/66qOAmb8vRfRy8Z5pCb4lQRrt2X4yeoaEkdh7m+x4qsbyg\nnY9XczblJ9H3v+skmmviR7K5SMWaIDV3CMcE066EVOTuc1TY2M1EfUGkZQCm\nfcBPIg0D3Y9c9zED1oFphA+ESRRCwN9BJV3UDCqcJgbzCo6mFoJmNWVICEyZ\nMYhmaWZoV6Sdpj3DcYwGFnD6r7adlGUGbKgcB4A2naQP6n7a6LsOdrLH0GbA\nq6o2wsyiVyc8n0eLiK7oqz2IuP7aEzTrmhq0n7ATuPUHcxqlp+Y8MsMcR/OL\n3KxjBhnjQQARvRK2tZk0coQi6Q4wGvTzE+e/XNo2WpFYGMLDnvZLQhkY0o5u\nGjDa\r\n=cjbb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.21","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.21"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.21_1583191625156_0.46649338730460155","host":"s3://npm-registry-packages"}},"3.5.0-beta.22":{"name":"@aofl/router","version":"3.5.0-beta.22","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0-beta.22","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"afffb519a930e9e671282cff9c904f2ed5c03f76","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0-beta.22.tgz","fileCount":12,"integrity":"sha512-7o3AtDYGBtmPgMnlHKVcxEnUDx/DdYfFRshfJhgLjv0bvNm/T1sY/v+R6eU1LKmFo5VdoTFZd6ps5JvV8U9Ptg==","signatures":[{"sig":"MEUCIHZSckaRUfUjVq/W1nFFcEAoJu9GH3sjA9LfN5vPTHScAiEA/8ek0k9R4EyhyAstG8ieYV4L2anArx+r2+c0B0HiFec=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXZndCRA9TVsSAnZWagAAemQP/3BdRspXgcORolTqvZQH\nrBjGtDQuRd1ncfEBbT4zlO02BlKr/k4nC7SAif04TfQ/G1Z0hthzv+SYd8Yy\np9LFuMrtsneAPLSHEg+1Y7baSuffMb6VKh4AuCmUk0BPAYPumA/XgbRy2UzS\nDHZom/Wj68q2fdYMlt/aFxB+JLedS83ifXArLIKSnz8uZo8K/WJx4PVpjRJo\nzVWsbwXfYtmMuj+mcE2GJBRJLyLJwLJG4eaWy4N5xVda0qWMiZOJ+YPRpR9W\n04/Ydlt284oXAPGx9nSEPaJLkyHUMGNpFCJYOeo8BELeu3Ld/BcaqWbiXwhr\nBq6HDBwDeM6+rCqFYqHjwZiYXtHh8uDbJjSydzg3InVPxQUXCxS3DXxx8fAq\n6yzFp7JnFKOeIPkMzyuRHgkkrvT6+n3NrmHt115RfOmIXfsbmHWFXxyVYUd8\n/ff3thb1OU5c6SDfBC6rqIHLZpNtm7d4bEBa0eIq4ezeypx5JmO+M1fdRN8U\nEaTcxMzim4nDAw0m1UWYbIZjQxAoXfqtJ3kqqwHpGmz5rONzm7/iJKbPw0p+\n+52B2qmlCDGppGJ8UsBj9j86/46tCW7sb6V9RkEaHomQO6tICO8AMVkdTuHY\nXEc45+ZL1aN1sxmz4YzQeaawJ1/9FmTnp5yzZbcqYaquUChu2K/1rxXkGpLe\nBULW\r\n=4Skj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0-beta.22","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0-beta.22"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0-beta.22_1583192541576_0.14856149321168655","host":"s3://npm-registry-packages"}},"3.5.0":{"name":"@aofl/router","version":"3.5.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.5.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"202ab920eeaa6a3644b6e74c383c6e9c345d6f91","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.5.0.tgz","fileCount":12,"integrity":"sha512-hTfPQQeVX08kyc+B0z+6ULZpTcvoSx48t8ESF10jRgmDyBI80mPMGEK9hKQRJyC3XnXKSYM2gArdCWI3Of7snQ==","signatures":[{"sig":"MEQCIHF8XoryC5rBIeSkFjIgLNbLBPwcVnkjqIBfiVuf2zuGAiAbaztB2XTCpqNA1KDI1so1K94mxvsXOe7VKGFdJhmelw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49916,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXZ69CRA9TVsSAnZWagAAVgwQAIWWuIx8bZtOjTVVBzMT\nh8i3gUoFovu54VovMfxkqUTylEaec+YmQXaPvEqqmx5gv7g12fgkeTdND2bE\nOeqZX1w4ap7ZzMEIZgMEqgUtbb9gjWalQZJEKiAUbu5cd1lZUWQbOkZ9DWR+\nznKoedfRe0FRc6NJ5i1GMuouoUW9K7GCIggIXM+aCOjRa3664iTrSLwwDQpM\negGY3z7P4PWfNA3IzqNMnJZPPRBs3Lt/ra/xl2bQIlZNrkq06fSdkSNjnBqX\nUoRBWHByDFEPioclDde20Mv5Cp4mHoxGEe56XqwHpU2PZcXMHt7yY6hBfbxl\n/WOXB1ofpbyTHXa5cBo61rEVwFZnrjrM/OH2MHNqMayyjp30yGzhTLCd/+yS\ne8U8Td7qw+OZBH5pXbqTHaCH9BI1OCTvp/FAN0cRf85S6sHfcNaO+Fzcf1dn\nR31v8couGYADAlnso405ysqC5d93cb44VcRY4bgKXk1bBeJezGGjtBI4ROM1\nVqMjeILkvfCLVc00huOTH9arUcF8euW+dY5Kb0eaoxWypIaTE2VjXSLE3M2t\nJ38dGmcAAvUACtKKVdnFz1HpKuzpyuC9h6dNQYNqx51NuCsDdf6t57luLRiU\nDy0Aw3D6MeHJrbIwgVKHsQ0hsESvfVp78A1HGmbK1efnt93jF4Q0WPSFeSXK\ninX8\r\n=2L7e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.5.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.5.0_1583193789027_0.8150205360310612","host":"s3://npm-registry-packages"}},"3.6.0-alpha.0":{"name":"@aofl/router","version":"3.6.0-alpha.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.6.0-alpha.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"387ab8a4470f11a86504e9ffdee94ddc06720e35","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.6.0-alpha.0.tgz","fileCount":11,"integrity":"sha512-e4c7zmA++jsfvoz/wCQpkgfTXZLqugGC4UQ1G4BpOiMC59bEi+vrbT9uS0PrkIU9s5RtGBdLe+Yg17yO1PCnpg==","signatures":[{"sig":"MEUCIQDcTZYB2DWZflR3bgqqxWOIFh8szsOKZMF2FfzgWHgyjgIgVTcVqlqzGtwOnl4XFTwYBlsIL4+Qb0t50JBEfIkjYSg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZTh+CRA9TVsSAnZWagAAXIAQAJwib0PRPN3gTwwQH49I\nrx5mPb9heXEr0XYuYnhN4/n6Or8TqM+Eo9bPTksM7DK6PxoPAmv6lykWpw/i\no8g3TDnk6CSnS2pp4DQ9AisvsD05INDAMwb+uaFzcG9mrCim7F4/f1WH6k6X\nOYNMcub359+zxCR7b3pzK5WBWk/2BjRRYZnbL6IOVgc0Tc+1fQmhcfmVDiV/\nxEPumd39qgIb/EtR4q3PfIV2hSr6f24sqT+pgIX0z/0xv4ple6/879bxfl3O\n5P/Fj+/q+HmuJDvpfnIDPl/oiWDY/A/o8gIxMXf8cmsGV5rrTCEzwTdtl1T8\noEytWZyfRUyW2w7pUFlQsotpCesAEbuxZeR4mcQmiVfXUA5ubCzJSe2WHWQl\n8is+sEFw0QxH9q+yxIplF4qkjhLhdXVooPXU11Pz0Ou+cezwWRK+8dqYb9Ki\n2rh04wx3KMFqhESFB9dUzq5AriWaDBpo8M2/KC6HacmOGJ2oXRUdRO6YWTRg\njgg1/3yJv6tLNBR4B0n8mDl5+EgDeNBEPMB4PzCpDSxEdonT9fV/2B8tOrhC\nr9cwrky1H1ro7eR1QVYPOXD0m2UxCvkGtFw2Yy+/Kx/JmUpZclPR5uK5DSdq\nOl0ma7mA2ga/z1WOisWEgXyfdrVZavnYmybDOQzYjSvPcqZFOIjbYrD4UFSS\nK6zU\r\n=Zv2x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.6.0-alpha.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.6.0-alpha.0_1583691901541_0.9732968090601533","host":"s3://npm-registry-packages"}},"3.6.0-alpha.1":{"name":"@aofl/router","version":"3.6.0-alpha.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.6.0-alpha.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ce102fb32636b34c55c0c9ba5ba4d6b14473040c","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.6.0-alpha.1.tgz","fileCount":12,"integrity":"sha512-wozwpOHMaKnml8DBhYeseIzm31YcBuFpMTlgcIM7Asu8yukaOZtn5THMzxcgFseJzzJuxEAd2Y5Avi2tCM9SPQ==","signatures":[{"sig":"MEUCIF7LYBq4CFNhwF3IwOuCVrq6dlI5GNKtKbD3tsBpiObpAiEAjGF+UmuFqxqMcPjGS5IGd5BIoQPVGMAupyCBjbuTZNk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50375,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZTrkCRA9TVsSAnZWagAAF9sP/RsyFjKOHfsLy2S7XGcy\nSHkLi9nIy44KiOS11aSSZ0RSxYXB8OS9kAnISdyzXGBY1798Qr4nJ0i2cYFa\nsD959zrKCCS8J6wK2VBa+XzLoB7cRP4+BOkDCreWuOHlvNSwq+ao1RnSjI+k\nN9efY2bKwHq8RnocOpZJSp+f8Q/O7B6mq8EG89qG9dYyJieAz51XZ9o/ohVN\nQyZDHrK3W/PBEHQmipqGt2YoU45BBbDPxpvLv6ByFv/Rq7aKTTB28MLYmW/e\nr14Pa7aIc3UDj0nOXU03vz6YG3ShGpTM1fXVr9zGUdbno36WynuTsgfvS1k5\n99CqVHAiddDHfmq2Rim9u7eiQBqXArcwUdUCluMEf7m3fiOa0iFQTYiZUCKz\nfvMa8Y/TK9eA6dG6TRcmfG31ulj5W2wYP84xM6qzPDWpLjfC4mR35neQQRUh\nd3nOEHR55i38VsK6SMrzJn9lliDGZ4x6tg44DmGluC+g+T20GaQdX46K4nxn\n7X6tepDqEg98JAiAMHF5MCCLpR9kBbS38+9XXkm111/D8XsHH0fPM8Vl4JJY\nTiSECyrBlnq65RyK9pLfUrYAY/wNdlXVdACqXHnLPeUwPxvT2kHXQ85O8ui3\nhop3pAC61sNtsOWHy1/WoEv3QvNtphJiomSbDd8xhT0qaun81NFSDtfPKuWG\nrnlv\r\n=NMKk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.6.0-alpha.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.6.0-alpha.1_1583692515686_0.6591594771593194","host":"s3://npm-registry-packages"}},"3.6.0":{"name":"@aofl/router","version":"3.6.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.6.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"460eb349dab747cd0f1362e37b0d3e2a66115293","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.6.0.tgz","fileCount":12,"integrity":"sha512-CrDiHUJ58DJJrVMcGBgyjKHFhDny2U1qfVk4vuINsC1FcHxuMb1wxteRoknQvvbQzijf3gFAZGdYq+5/9dwm4w==","signatures":[{"sig":"MEQCIHrjYgZmZcBjNT7dWBypUISg6AebdAoK9MlDAiqoF/hqAiBX6P23StqLC5W7wHOrDKKHs+xJiTfLUi8Tdwkyl3kqYA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZUILCRA9TVsSAnZWagAAgWUP/igIa1Rhwa1eWYRwvYwU\n9grPlImIZfWwM/F3fL3Mkz8rUqXoNsokRHJakJA/0cdfS5n2Jz9/nlyuVqQU\nVvG1QFzWfmjvEUB5jrqfhapFzzwJEI2393m5pESSOeno/gsF/rlxP6jmuciw\ntozfVGplVsHEdRH395y1/tqcEQSl2NMlwE1T5SRzYaip6v41DSWNhev2wUx5\niWJkdhQ+BkpTlbRWSkF6OoEYwcZJjqaojmU4La3D5eStwuRJ9mvplpAfyd3n\nDUpmmT7IXI/PbZ5wQm2nAhl8UGMM2iwZ1+4ilmJpT644nL2XkmDmrrtG4YG/\ngs0ozVCIw1wG1e42SIQ+TwSsMYj77TfC51L6W8KAwc2DPsXrbXS49+9Ji42W\nraN+wXSN4r/E9GYSuEz3oOW9bvMogA73w8Qg9j/l4gQrM6BgwKulnk3FP587\nzFUBNoqGw3tJmA9Wazq/AN3/XKPRaGylD3lN7Ji5xem1EVmRB61fvBGQATZh\n8E/CLGu5e5LUBmwuqCsUMeQR5zR3AIJpnj/WTem1HUXEq1LKrVwdbe3niu5B\nIV8N7O9ceyFV6mbuLOHAr5rxzxsn8EVfKMDTKvMBbgcEOchE78igi87xVxob\neQ8vIKV+lEIeqVnkjBEGw6X9ukOdyZY1iWghBleoHyQ59n35s64azpGe3Yq+\nfnWP\r\n=auXq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.5.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.6.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.6.0_1583694347202_0.28127847845752374","host":"s3://npm-registry-packages"}},"3.6.1":{"name":"@aofl/router","version":"3.6.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.6.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"034f7c03640aed5c35ec8c3c93982fcd2ef333b4","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.6.1.tgz","fileCount":12,"integrity":"sha512-nJBWETAqPkQJ6dB9IutNp5bKmH84e+uc9es46Winci8fBI125SxiK4EqQPtuVTLwhl3DVTKoWxVl12i9QJJF7Q==","signatures":[{"sig":"MEYCIQCmzeCZ1RD2yIDQiPXMRCOFMmWM6rZus7buOJTT6vb+6QIhAJ4MA8t8UZvR7PXYGbqPHhFR/0+0az/cYrfEMqITHuf2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZ9+xCRA9TVsSAnZWagAAE1cP/RxcSQ4OEct24ATPMgUD\n/dBYFtIdWCINK56TKJziWSwvFJ0QlmXdbgzdfStWOkekHDqX/Xwf/efyMbpg\nRcsjzKW70pW8ZK3A6uYC33GrUqIRSJ6nGs54iOWsNJdBYnXspTb+ognrUHFl\noBUOtX/tBxLMa19aawgivMad/dINcbkUhLpH9cTzduWOy3t/YgFlgV5Fmy6R\nbeFc5nblYuJU4PQhN402DzS7FyFszfQf9/0QrE/MmkzcNREuSIF0MTLY0DGd\nNAQKbGQOz1e0E7u8nT0KSAfycVk1bz32fSTpEb0+d37rkaWmnBWqQrYWByFV\nB+g95GjW1B1G3s/JONCffaEUqbfVTKLhilQC6Xpd9P2ypm4Z43aYqZI7wUMz\n1cwcHG3MChzKbO6YAXR5HS3v4iBiVvh4CKjbSB/3gc7mASIKmgf7mfwgNFou\n3A6clNMwNd3crLbrl0d3KeaYi8jfLOuiAelYY6nFT7UHwxGoq/aUnASju5Pp\nt/u/n5D0yTd8IWc18BOSP41/SNJrw3ALwo5Y9QXZHaX9YxNBG3g/XyngDXH6\ncKRDLXx15KGp/kismehGKtWMi/12idtrYPc501DvziDV+qrxqizXy2HPUAP2\nToAcJ4UOZ2Osh4gmPcWDGAufuPmJQO6orgIIkuz4Kchirrlzs6Ng40U1mSoL\nOHaT\r\n=pnBC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.12.1","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.13.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.6.1","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.6.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.6.1_1583865776915_0.04139746949777612","host":"s3://npm-registry-packages"}},"3.8.0":{"name":"@aofl/router","version":"3.8.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.8.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ee10ab619e1dea54a0539556a9a23fac125c3952","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.8.0.tgz","fileCount":12,"integrity":"sha512-Kw/gzjYzDSXa7JblRUbcbnjF5VyQHgDkKdOrnZMXxKzpEabLJBYLjoqYBahLV8G8zpGk7XjRSqKj2p/J5hGwfQ==","signatures":[{"sig":"MEQCIEJO8pIFA3MKENtnuII69DAoDlVOK/o5ayo4ADi5hoBWAiAppu8UG5vXfhRB/6Y4KXL9KA1fvphm8kvh0KyZOIqHUg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuvbGCRA9TVsSAnZWagAAOSMP/0V86ebaBcdB1c7J241a\nmIrA1widUWjPZW5mQ4wsOuRUIyK0U7zHVlwsfCzxjfBtcFYP2EUPsKPhcwad\nzDiaNpNpNyjjvRy4k0Q47vxoHT8K93O/mK0yX47ZI1CWVsvCWb93KtH+3guE\n3HCt0pOsE5hh0rn4GocSFCf+p8hQR6YLhfmTPDQMbgWL3cv7ZUqovfC5cToD\nd773LdmK2mGxnn8MtqVLSrG32fI/Dzfqjs1y0Cx2+FbmM8THc4pwvWQ94s/P\nwxXrQ0YOKLsdNsFP+neuQmJZ3tUG7YuBLd+Qv9DWw8gBcFo6jaKHD9/Xt3Or\nUvZ8z6592qYYqoo54bTyX6DREFsTgAm74x/VPy0GTCgGr0e9O/guRgnPy4Ik\nM158/zgmPuMj3osldyTau4yHkZkg1e0CA5nHewjFSkK0iAjsm1aTwXrGau4M\nA0iDX7HI3FM9tO67cJqTQTSVZG1M9G2uSVew4j3IXZg+CowJbYCLD2lZeFd/\nTvIZlkEPItwrjOWc70SG4a58wsuld+sWB2VYC5d/LkBZkzJ5OFvaBGUNzqet\nTVF2/xZKUVdHbMAUWkvgSBDahs9s69P1CnKzEt+cNb5IcW4wrIDF47qGgjvk\nfIUBsTTmj3DpLuWzmwMLFdznIWtkoHg0cMJCcy8A5SmWfHIJDlrU9TjaiG0Q\nyVS1\r\n=yWQx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.5","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.8.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.8.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.8.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.8.0_1589311173653_0.4119388940244655","host":"s3://npm-registry-packages"}},"3.9.0-alpha.0":{"name":"@aofl/router","version":"3.9.0-alpha.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.9.0-alpha.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"6244e253ca66291ebd7983ba76cef8c50dcb0acc","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.9.0-alpha.0.tgz","fileCount":12,"integrity":"sha512-NqIMmfeCffsg39XTwWz3s8MgI3QgvX8Syl2N9Kg6p733Kl1ApWOGlOTbmopI5lZW4W+NLoG8miNhic7Svol4yg==","signatures":[{"sig":"MEUCIB45Y+Q95EqsxtAFMZgnbhzobV4OZONeTEToIwDs0Oq+AiEAycM78s7TcWxDVOxqaIskA5Ok9SC/F9+id+FsRQsKJis=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51062,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuvktCRA9TVsSAnZWagAAwPsQAJH01pVZm32b8V3Z5EYi\nCSSPkbDfPsOlDJyIMYt+cEA64Q6YW10Do0r2QWaoGuKBqSlxRXnzFuS2qY7X\nVJH2Tx+4vNkRyXVp1YxuBc+MNCpt3/LydIarM0cOuF9gLzKSrC5R1EKmXbgo\n/szf97dZv+koabWKdSDKu6NE3Zk4x5yjAUdNamsJZJDYtwtUUpQf2T19OZrC\nmaQ2bSiH5UVlB6KNCAWzQgv+WBdM8PazEMmGCoz7bi2II0LELs/Wl3vv9cGF\nCv+/dkQYfjYrcwPVDqsJ+Ckm5sP0FQ7n1z4m9vNEXka4hI9nPbViP7ZJwB/z\nc+tBnJnyLTQoYqKNs9BWKCn//cPKrPrGqwToPVjWBllrbN0FrZ45wD5WlCsJ\nf0O0UPm+qcO4yPLgaDuaSvd3s3FtQd7/CxHkEuGphxotP2kfSzfDkdRVI9QT\nKVnoreAUtPxMUv67BoDSUbgAz4gO0Q3iN7Og8/QzXIq49/dYTwLNHfwr/Hz0\nYxQvqKTBu1vTvPIXjFh62EOAIXC3oRHw4heiiv8lCavkZDD26Os4hn8vczvg\nVH79drbjvQbFMJTGQLX+Dq66ITUHddi8ph6m1UQ1bWOZt9l6GpYU6jJF5qO5\nvFkADzfs5JOvqzGKqsLTyxUTqZXPYudfLk/rLHI0OHuvTX23AITxvN+pLlii\narMy\r\n=wWA6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.5","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.8.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.9.0-alpha.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.9.0-alpha.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.9.0-alpha.0_1589311789546_0.9401531146859374","host":"s3://npm-registry-packages"}},"3.8.1":{"name":"@aofl/router","version":"3.8.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.8.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0af57551ffde86b9b88c1c3fc4aa10a67b441e86","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.8.1.tgz","fileCount":12,"integrity":"sha512-Qoe4cAHynMhjFXdLVZwhaUvqtShpXNUtLnRBCttydBQQUkHIBz+CtqWGJF5xfH2cdwYDa+NYE5CG09OIYSwHew==","signatures":[{"sig":"MEQCIA7O2xSxftWwONghvYbWSRNBJ5aoRn/rNHhl7pgkn8dDAiAKUQUbXeS2IEB9aYRV/JbAZ790WVWF12PLcAmdYygptg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuvu8CRA9TVsSAnZWagAAZxEP/0l9+G5TASGlKZk3LPQ9\n6WPQ1yrdnaBVYtV0w/SaYjY90FFaJqspvVxm3qaV8npW/d3oSenoc/3aDADw\nLZjrG4R9xRtTjzBG2yTz2AliOnpU/FjWqfvRNjak7bLfwEECvcCpbsJ/75k/\nNeAb9eoO/urVMKikNMduKXFDUXy5Eyw9qP6j/+FJLLkWc5zHyyUGS/Q3ckKd\nJv1HCm03PLk3kqTr/vpAz0dmIjtISwjqD69QLcflQYS/rb61NrKGpMSAsyij\nPD12OYx+3THxnTfA//U3uwsOILDROGaa2W99JKwaKQTYR6/RC30kSUxeyIZf\nt9LvCJq7kpsNj5V1wkoF7+bb34WVsQS9VZi9AjX41UIfqrsePIGAUK5fDJ5o\n0+fhiSNK23bzzTOAGJfRmeQyIwVrVSEFqkk2rg2ifGOr2RBbSIPsUyogxXXn\n5S9/7dVLq9EVQDSmcdShy2a9IDk6tQLqZFGKR2FRS4Nm0edSNQtt3WAOhS2i\njSXW8m82NBUYdsgjvgj1xFvQvn2RHUWTGH1ve8bOwYsXG3wSLk6c/VNucm2c\n/8QtGSA6T6YIQ0ZcXNQDIjaJhR6l9c/tObifc+9wgmJjjuh4Lbgev6zxO+U/\nhW07c5VLC/bWegQENVp1yI5bTWHJAKPAmpMgDQRiETz71uJUn8QucFChg7hr\neHIB\r\n=8YKM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.5","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.8.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.8.1","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.8.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.8.1_1589312443852_0.040510836877808876","host":"s3://npm-registry-packages"}},"3.9.0":{"name":"@aofl/router","version":"3.9.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.9.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"b57d3e91c2f805cd241b99f975ee5afe313b8b3e","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.9.0.tgz","fileCount":12,"integrity":"sha512-0T0IZ0Uvm8ZWdK25wcFJrligGEC0hPdDrcJzzTVLB4bf40ZINwQHAna6I6tRIlhyl2ubxKfU4XcVEl/y4NAllQ==","signatures":[{"sig":"MEUCIQDCOl1Pdap7AKNSIb2rw/B6bSjcAhA6TEmb2AQ/bsp6+gIgN7L9LqGteAnbnuUEKrwS44yaKg0ErT05xk9NEV/HfZM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevtg0CRA9TVsSAnZWagAA6egP/3aFjk5ep3XzR2jYzbjT\nqLqaVOg5xQvHJbrAWzGqDjmCbQbv8xlhTIioPS+DAM54oWWh1ni5dOIK6SGe\nIlC5MDgZRv/Q5JrDNezJmPlY/jKYkvknj+5qR4d1kA575IcjtHM37OkyN2r/\nRQyxt/HteFj200pZfIGqUk6OaXHCn2F3wWKibcLVjL/oqE6Bmh4xu4XRv6pB\nMjjqyLYFHVCIzWLPBH5cvNWCCt7bwIj8xjS+Vb+9pWMKS6ozebyqbNZ3HQTl\nTj5Do5bTDPMYHewgJc+7gqy6SDLp3r9LBNax3CjtgnXME9YZvoh2mpPyDi3q\nVf9xnxBBpNl0TbDYjpJRvo58cQBfdK4DnrPTQnN8YxoEs4ZNG3aMJZ5u6osn\n4mjhwK72Ko0+U3l3D7p4Ju8AXSoJdA7x7ts1lnYZIqdP+F5YJ0ZZ4mIxCCIh\n4R8kR03R0wwNp0IjnPP1jmrAflcZ4HSNDsPQeA0/B0BbePTK8RHpMS1AQNpQ\n1aHD3HhXrRxXPzPRGsRycKcd12cixLJoL0tWUBKu2RMfoSNoeyGEiVu8FpwN\ndlXF42CYov+ltdcp7fp9JL2I/5d2SRQmSKpTMvXzz79xKaTWBygIXNC9f1x3\nV4g5YLw5HEEvwIAqjI8L0LuXOQPg8LmC+9LcNf+MP6Hkq/dJ8MEEaKcv/w70\n0mWO\r\n=4bP5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.5","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.8.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.9.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.9.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.9.0_1589565492133_0.756364336342471","host":"s3://npm-registry-packages"}},"3.10.0":{"name":"@aofl/router","version":"3.10.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.10.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"deec90a911fd66e9b3f3d0fb7337642c1c90e602","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.10.0.tgz","fileCount":12,"integrity":"sha512-klhUZyiFVEiSjTmf73KZW3266a2EZ5bNWo+H8ETOfWln3NMpVoyTGMNTea3bMqf0DlB3/Acel0XCXY043yVNSw==","signatures":[{"sig":"MEQCICpo9FfHlu7qE3jnk0Cgx6xuEGhlbEUMTcSIO+96mGShAiAvx72vAYHUED9ieLP9d5f1msTuh58GuFKUELl9GOVpIw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevwZzCRA9TVsSAnZWagAAdk0P/2DtQh1wWHkS1HRHfhmk\nkEDPWT/A7mlkJT6eVgqZZZ0W0PcnHhd1ks8hJEskWNExLUl11DYOMYJqx2Fc\n3d3Mg0JFyGfnCD+KkAbVtqTBGfOiuyi1LJLat/ZLuKFJTKcz5zvmcDb5/qKL\ndPEFN3+LQtD/llXCJ/0tHxJjWJsJoa82ibnVpDVrd5G+c8nBVUjrPhGCBU4q\n8EK1/YS8IfI5CRpnjqT8ttVskO+LPUNA8pvg/qyVJKTZzWN1SUmZA2eE0r0Y\n6VoBUoFVdTz5+vgzC3jushuoXTblKYp1kZdAZ+WFNiueSqYcpGwfqb2236cn\nreofKFG3lo088UjLXi/sAafP9wVOvj3vTDe4r4AZpIvNUSY2dTFdYG9L3zKp\nBrAZ9llQ2HQBOTDqGb4Z/LFlBqnhCEJdKrHXPoFvGhNYJrUUE9K1+zA82KMI\nbt8r0egT9ToezPC/7izOxt9q8hOtfP1XcFWVP0SlvxaX7c8K2cnpwnpdDLb+\nf+2BcbOVCthDu4P7xCLqwWwbe4LKUu3rCPWa6mtI9UOZk2dQau1SvgkjHX3O\nXKaiETVC2SVoDIvQX2MGKm8QEcXiO7DyKviRzKe69Q3xtmSOsp6uH/OztrXO\niV7LlmqM7ydFewINonR/tLCur2epFJugeO4HqJgPYakpic56djogiBMV4uDp\npehP\r\n=kGxO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.5","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.8.0","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.10.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.10.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.10.0_1589577331437_0.41370262176326955","host":"s3://npm-registry-packages"}},"3.12.0":{"name":"@aofl/router","version":"3.12.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.12.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"1102eeee7ab970c66e321692d93d05560647f510","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.12.0.tgz","fileCount":12,"integrity":"sha512-VAKsX9fkuJwOWMmQ0jF8gxMu7nviOJPTAPB2p+mc/lpmssygr6sU19AdCGF74tt5oA4IlIXeX22QGM1bvYVnWQ==","signatures":[{"sig":"MEUCIQCzWbqAygxawqc3yCNvjYYV94nA3gCYxkVziJwKcr40vQIgRpETIVddQcT8SJHtPz+9NPamATV8Baz8Qn/XThc6MyM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgB3LtCRA9TVsSAnZWagAARmYP/iiYpLFO3Uk6Lvt8UIJq\nX6OFwQiVuMftamtUa9uZhDHxABR4dXOgvGdlOejDvYM3Wdaao5FN6huEX/mD\nQw04tY4ju2+ixFJanluwqjXJ19dFsUMIVDLVgSX22lKqs5s0oQ13e4qwQq9G\neqEcenQ2gvTmN4afuuyWWcuPqUjMdz/vj016RGRXHatBWeLbBWj02xf0gnh5\n2e352Ayk7JhTzKjAtprzcHuBYAUXFE3D/7DcgX8JyXZIJ2cenzN0LymqfCTy\nZavE0mhtl+ucx1Z/vC5EIy2jvoh1SqZ7posRHptSMrZBLKe1MghoAAQZ769H\nU/Jnwy8SA1Tqou0lvVXclsR7+Gu2MqieN1xvoqdcF7kDpa9Xtobdll0i1KgO\nlA4spyhYKEBLd3sGqp9QKVuxt7x2yN9kn+lE8YeXIE6nc86zng3RR6K8SKeF\n6fRTQJkxF8IueUOTUKRf2kUmCIe9zxBqh7+cy62KCTl5Oq0RWkcT7y4n23Th\ngyf0yx6d6MHjB9xryT1U5wutEKL47WJXYsWWYWlKHitrOLjHKqiZwJhHB15f\n1NXTvCtOmRzFToDGnai/1jiJIjwDEXqUMuufGHWIO9QpITyh+7DkaxpQ198Q\nKlg0EjbMc1rhZrVBamc+DU7CFLhGQrNFltYsnVkCDwlNGEXNFML792C9LkqL\nnpbd\r\n=Vyr4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.4","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.16.3","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.12.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.12.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.12.0_1611100908691_0.4328797675011946","host":"s3://npm-registry-packages"}},"3.12.1":{"name":"@aofl/router","version":"3.12.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.12.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"b0234a55e11b4d77dadbeb1d7bc70ca85398ccb0","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.12.1.tgz","fileCount":12,"integrity":"sha512-iOn3eHtip5yW/j1/LUNCAn5uQCiur7CqMrmGcjfiqpYQjNIUPxSIbCbmKv89sR6d9f7SHT8ZOBlotN8KGqSZ0g==","signatures":[{"sig":"MEUCIQC1/CGQEriVmlyPI5fk6poEYXnJi+L/yxvR663ohIwRDwIgIvbKOKK0p9vrVKTqttWrVwAP9QYLLZ2agHcBu5Xa+Yw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgB3V9CRA9TVsSAnZWagAAaDAP/390J/K0Gy2vo7OEy2hv\nTCC5Zh44Hi7PQqmEM2xCxCIbfuOobTBMCH1wMyNYgHn/0nIpFWVy69eb2jJe\nhMk1FXPHxHIfK9Q05K3PvTJRcqOQXhrAeResZfizPfWPwaby6q1KYSteqBKS\niehdPVdOzPm8G4MDEBvRf57tvhxYuztK6XXyfZHC2GzrOqfs43uyGgexR2Mh\n3TTqLm4UP/85vtMuNlsd4fzRBWqh3phNwpqKMUTyEE0MIzdlf/l9pHcqs3ha\nGlwQBs2AwDSmB2xVpej6S3j6vN+51Fv/ABRaV2OssljUa4/rfq+6fH9FwngL\nV6hqP0junmOOW8TqcDx0qlkGXh8EUDHFLyQSN7hc4mM0mcHoi/3HSnOZ0a+C\nCRogddIm5nPVzo7BhS/Qq9eekJPIwkTdfR1vePYY2YyG8yNUUwJhNfB4oLLW\nFp/E4GFHIymSKCtIIB9Hd+Vni+89gJ/s+TG9skMTT0btMEI2gAF7Q0puU20N\nfEqUsLCqAg+OGowowKHyPoY9LajzWj/BISsMzICXr25uq9lhK8CE3zj5J4Ry\nmW13ppkkzl9p+SXywdo9iYdVxPmGLp+1PaPPG0MQPmt3MB+qCWXZzefvLlW0\nFC9QjDS4vU4xGHP1gQKi036pcVaahJNDt3mt4t4MWTQLCprzzP4tnLvEhru4\n/6vx\r\n=ePQc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.4","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.16.3","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.12.1","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.12.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.12.1_1611101565126_0.06295243490190261","host":"s3://npm-registry-packages"}},"4.0.0-alpha.9":{"name":"@aofl/router","version":"4.0.0-alpha.9","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.9","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"4af0c198bd145be0b9421b4351463cd99cbdfce5","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.9.tgz","fileCount":12,"integrity":"sha512-K+FVO3kBE+SUf4rlHbhKxTX5nxktEINbEuUg+2hdQ9rqSUFUFcBBOXZDDhCKQv6nqEtR+Pq/Fm5e4yPsBSnHPA==","signatures":[{"sig":"MEUCIHH8j+EGGxZ6zrILywT4XQZ2GvpmHVkxMxg0o8X8lGDnAiEAwhfswCDdBwX4lWuXxG0TH6ZdLFKsXJQhSXVeBBcxF/o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGgDXCRA9TVsSAnZWagAAlgkP+gMUd+a6DprOdd6yWn8L\nNAR8xA2RPMoDX4Uwcde3IlsRqsame1Expxm9M4+DXIJvLIP7he8fIebdRerM\nzbACeyWQLS1+7+rFPUcGzUKPdczflCXTTyxv8HwsVuAZcXQL3aLaM83bEhQQ\n6O1m5JKSAakEM6NqINT8O/qlHJe4zP1g9TQdAwF09wNhogUQj00JzBgQVf0p\nR6mjqR6ryIDC6KkVo5uO/zA7yzOOVgf7yOY4fdbxS4QcrKnoyl2AacZSgCwH\ntfijawqIwyQK8JMGcz2j9vb2e8ghz9B11EUxAV+HhFE7zHePdw4R49Qyk9Dt\n8ley1fh8IV32IK2flkj/aH6uRSqtaBU6RzI0wDRUMUgaqPzagWm4XAogew9e\nZ3Lo5n2spXueTTqe1BBUlAeAsxxkNPjhuRDo/EzdH2STQsoyO/m5k1+7Z1eK\n/G5oeWtL2WZW1HdCt/ZYjoZCzPHyIpH27COgJ8coxbfxcmGWyCT2GGmo2MrV\nv3nRiSZ1YD3bsg8okGHKvk3WSErOeRFaoTxdRmq9DvXEujgkTBSoOr6/7hwO\nSJRhHksH6JdQJxjYHTcWR1Wp8BXSDFC14HSSqKiGGv0wJierkCIofVVP3/Zk\n/U4pAVH8xjYgEExhZ5AKdww1rpAiKUWhmvW4yqgT/Ixy/tay42evZJGf3h46\nXGq5\r\n=PeSe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx @aofl/cli build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx @aofl/cli build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.5.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.15.4","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.9","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.9"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.9_1612316886575_0.253594525840549","host":"s3://npm-registry-packages"}},"4.0.0-alpha.10":{"name":"@aofl/router","version":"4.0.0-alpha.10","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.10","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"7526c72eea1ce8302168b30aa90452ccb68e8e5c","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.10.tgz","fileCount":12,"integrity":"sha512-ntD+/Kvwx3aifOEx7VCtr5+7puQpeHagGQsmyV1n1coYltHf6aPGNM8PFH28Yes5Lo7gcBGAKltE/aGv3cCTSQ==","signatures":[{"sig":"MEUCIQCxuQmnBZjpTKqjjHg8LFuOu4g3mbKwlZwgcAu5YjlltwIgGuyCphN3nN8DDM95Tc8BlVU5CiFhKzXAjsfD+iHuZaw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGgK8CRA9TVsSAnZWagAATRgP/Rqph+0DFkruzjdTgQL/\n8+HV95yJ2Y6J3UwRX8pVZLWP+nL4b7kTfWetO4OaYFVVdt4K0Q5eeOdHBHpF\nkHoVkMhGQCc4AEgnBibIaXTL0S3CpTbutB6jn27gs3UKhOVmPFQ4h9cA1Axr\nsQKzv/itDivKNQl0/T2SlmLrARSn1mTgL5ZKbJ5As51a+bduzSQAozYjztCC\nExXK9xYrSzMXtfjjF1xNXw5Z4uh6ZkKLyJaDeYTRl3uALj4BzbtqQqSVjWnC\nMzx4TRB+evTMqmEwh7iWjcNaNRJ+/cC4DydLW/CevttQssi+3NFyPZMWIJiZ\nuD3OAcLCDE68A0mE+FGgzGlsukEYRDqpktXz4/JQHQe/eZUEEnR83wN8I292\nCi/Mmst6dzo5gnkpq9YweNDJT+UMV9hXScUpkeN41T0C4AN1PPhe96uc8T91\nrupRDUga3lCOzu3YHgHtLj1MIPF5NqaQG3ABQQZhK/aAl2fRKtRSmC0Zvc6u\nrmZ3CsHcVPao7f7wZElnES1iDSK9fuP4C1sqCvpyXntKq/1nP9cftvhmbnT4\nFJr+qAIMDFd//jh3CoK8bCop9sVa9CTsft9o0zfrbnsFulqbGv4Se6IcpctU\nIe9FAar1zVqocwy1yLN5jkClfGlQBxuP7OjMyhq/DaggOw8uD2hmkNHZ8iS8\nFS9g\r\n=Rlrr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx @aofl/cli build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx @aofl/cli build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.5.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.15.4","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.10","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.10"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.10_1612317372224_0.20818104101859047","host":"s3://npm-registry-packages"}},"4.0.0-alpha.11":{"name":"@aofl/router","version":"4.0.0-alpha.11","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.11","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"4fb6c60f69502744e02888d2403efd20630cce1d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.11.tgz","fileCount":12,"integrity":"sha512-K9QTOsnOEmerptzHalobEeyv3NnZIq1TxkOYRt1HXyl9lR5wjwXJuPmKGcyfR+hkcTWr0YYOsTVZAH8He1OPuA==","signatures":[{"sig":"MEQCICjGN6nS/PKJy7vjk+jYPeXk4qF9oOESHMbttIsme3dsAiAO9yQ7udRLrfaSrl0l11LySxVAuJGk+WUA6K6wzVu2CA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGglTCRA9TVsSAnZWagAAykUP+gKAWq4a2Vb3aCSf7ZgO\nFKYCM+NaM9ZAVvYkz++THN6cmWOP8eAIZqcdQZG24WixiWge21/DwBvJCv+W\nNsyrd58GLS0PMdvSdsqyyCHK1UDYmCYlv+7SVHMq0agsaliSgEtW62bX+vKo\n0IzIgKrzXxAjqHyn4b/0COJVMISXfURH/rlPsPWMAuwCG3hB2iuR/KbxA9PD\nRhsDnlV/RIQQty6zMQHKuqh5d7NyQxkKCZxPAvKGX63PzRlMy8qNasGwofRt\nK7I7K+W1IxTIIM3ot1qPgyCNETUuTN+wKVd6ObfZcBoTMyRnRT0Fec4tINqQ\nPe9KZsmeFyeju2L3M1cWYlAht5Di2zrOxe+lJNXQztZ/bNixqc8qmNsazdse\nKNnOsfOhuJnKWMWtu+s6bwAIsXYd+tckBKGnaydEtGiQIsM7Zkl16YcxffnO\njU46VgY+Ree1qG4ZZ/3JL0ICwTZ2SHPzRmMMQkjCHEx6qC5bt9o67LUO9hUF\ni+YRY9rHkLgfkHagNNKdztE+968L1/MpL9AJc7MTsnKLevbZz4VhNAQHjlks\ncbufR9CUX7IXdlETMR2jo4WgEhwrPtqc9R+liMiklN3zFHsBxzP2OupnRJcj\nj4+SNyUtc6y/Gm+BXnyE0D1vCotxLFzojTbHP5tiAPrKIzOj38dywM/yfzVF\ninD8\r\n=ikUa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx @aofl/cli build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx @aofl/cli build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.5.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.15.4","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.11","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.11"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.11_1612319059124_0.7553697312579339","host":"s3://npm-registry-packages"}},"3.13.0":{"name":"@aofl/router","version":"3.13.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.13.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"1e5b79b6e4dd01e0ecc12b5647fb205b54c15256","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.13.0.tgz","fileCount":12,"integrity":"sha512-JwqCU3E+5nVFXzYcXkeXwVHx6pi/Zbgw6HFN6FCaaSEMbYgPn3M8iKzo+4NX0EVw7Wxjt9hTMf1B8cpB+4owow==","signatures":[{"sig":"MEUCIEsQd7QXedIhZ76V7rlnoOJVKCWhgAmCz3OqFjiKNwHfAiEAgkv0ojxPXupC95JwU5Fy5sESJfEyUMX4baLj4uoMkKY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgODYmCRA9TVsSAnZWagAAjEUP/3eMy0lrThGYi6/UhDCf\nra9yZKg+KzJS+/OQDwntvGJUHMgiVQEIaEy3t3e+j2lqynpg3ReWp8XQzTvn\nqqx4P/wEH0k1980jnKLN4iLLiEaHlNsbTmInaW59UZUjp+gWLGJOMJLlORR3\n93MH4AjTe7XP6qhmdiEFk1wvOt9j7lUsXtc/bAwgicHcwDqnLjn1NPC4nH7E\nG+9Rp2BSa5WereYuwd30+tIAzmnvRasccbWu4iJ1FqWLuzgQAR9rfZsEgwsg\nWRgecVhnRI5otzlCJqMNR830IBFdtA5mBsVUbDFusmNYwjoZXXRmm6iamVQB\nffVYMK8iYmA5L4oTS+t4pfTlKBpTcuceK0ZcA25O107hzqbNveBWRzWaqfmh\nKFcu9pz6pOkPZQekBfqMpfo5cYp6FuRpXld6zJ3ir8BhJnKZae8SEcHm9yGZ\nomiP69FpY1MB56h5XOEEGZx8ZPEqsR5aI1IiUojl7LyvC9yCZIVFBscFSpdR\nPk1NiqmgxrG06fNl5Rv2BNqh9ZgV13PQVCVdYWGYljgu8uVBg6CZf4mjNwe3\nYjUx4sfRGshQ2CvQJcMObuoPEAdXiPnyXDJqjve1A7XnA+JbnLBLaIcAlrGs\niy47oxwf6XMJg/NMy1HUM0wwCBSQ0l0Q9SYKFAfF/kYEhbTymTAfxE9hIQu1\n4YXh\r\n=FZti\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.11","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.20.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.13.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.13.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.13.0_1614296613509_0.9049377016965441","host":"s3://npm-registry-packages"}},"3.13.1":{"name":"@aofl/router","version":"3.13.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.13.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"eea33e22047575776260beb688ab07a2338d3a89","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.13.1.tgz","fileCount":12,"integrity":"sha512-+5PTEr16EcmS5WcyetRrw+wVg1ozBXchfYCGnaMgGfDyc0X8x+PPDCUAV0RJlCjnWUh1M0bO83qzISmjftYanQ==","signatures":[{"sig":"MEYCIQC8DZ7/CE74yGYtd2Hkaw5E5Bm5NqmqKTJu7RR7VOBAvAIhANgN1XNA8T7G6uljFV5xJE3y6TVT884TFXf6HFTpkYZn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyTxeCRA9TVsSAnZWagAAdHgP/iESbGOuKfZo4MluUvSH\n05bSyxsvtFRuprC634Tq7pv9AvYbuuh5k4fbpFtgcZaUb5RszK44jXXx9/16\nh/lsuafpY8mEJRFFeadEwFp81PDtcaNyLVQxSTvmwCfnSNwM6c4dKO6rWCKu\nzQQ5UVggEpVecnBuInGszzIGcYcntiSrhMlr+1K0Nh5P/Cfdg9GGbgiCXa2U\nkKPeAF9xfYh9Uxdyj3AFsIMgUKi2uqx9HiLFmllP0lycJbfDAoQFK27rEZT0\nJVDTI35ZLZ5nzc/akIR9bwUSa9VJQLuOIrNx+6Pl9UKG1iYrF5v2jfTN6k/N\nzuuPlzhw3iiv3VOe+mNPIOHKfqccOebaq1DmiNanZEuVM/X+3cEcKPBW80IT\nJfNCUQMezsDL8R6m6H2C0EMRV9jLAVikdb+gTIuzTEG+w0f/xyUwJrzcDuKc\nHKAAthZvYwZT3avRY/7I0KQFu3JBS8QMOI36/29s6iihSOi2lZiGkrDpY58G\nywX3HM04Aw6mjx+JWTmTSOG0HSoKsBAvSzOz78w1uaVIGiRkEgAUudb8JM2G\nT4EdjQ57aDOO9Lq/tbkGcJayjEe1CxeSvc4bOlDAaXj/vYAsTYYb7hIS8hkR\n1t0y7C95ArlWrAPPrZsLjYmB/dlc8J+gMsaXlZ33YIKXNI3LdmlemfIMhPJB\nSSeo\r\n=L91M\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.11","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.20.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.13.1","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.13.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.13.1_1623800926540_0.23851667292860346","host":"s3://npm-registry-packages"}},"4.0.0-alpha.13":{"name":"@aofl/router","version":"4.0.0-alpha.13","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.13","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"08fbd050779ac654d40b124e56f8ceae8dfd51e5","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.13.tgz","fileCount":12,"integrity":"sha512-fKIBTTTRPaxZGmagbEH5/n2tFRSPmAUzqnpJUmGRJwFZlfgi/zVWK4chwDt1VrRMmdRRC61/Pvp30FKIuz/yqA==","signatures":[{"sig":"MEUCIQClmFSm7yqGirs/HkOP9UpxUHeheBn25M0q7K/L0iG+AAIgT89rsrfV/Lu06X/Kukmgosco0zz5XNQuIfN3jEaP448=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45991},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.15","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.13","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.13"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.13_1632439929887_0.8018210943696724","host":"s3://npm-registry-packages"}},"4.0.0-alpha.15":{"name":"@aofl/router","version":"4.0.0-alpha.15","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.15","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"2c55a9ba24e6e4b85eb9b80052505925d962b96a","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.15.tgz","fileCount":11,"integrity":"sha512-nsXq+NtdCfqaYPaSc/TetAbFdwYr5PQ4+bn+ft2IaSTbhOPs5uJgSYCZtBsfhW3Lnei5g21hSbmVwWOl4Owrmw==","signatures":[{"sig":"MEUCIQDWy6P7jyMYFr3/pRrlmf7XidTuLtEhfEu9iaIvSDRCqQIgV6FSjbblZ2TCYsyb8lELvwiU9epKbJphnHnjEOl/PQw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45090},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"7b448cf64b30502883b3422662a9480ea25f2d60","scripts":{},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.15","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.15"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.15_1633539833356_0.07375848491951387","host":"s3://npm-registry-packages"}},"4.0.0-alpha.16":{"name":"@aofl/router","version":"4.0.0-alpha.16","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.16","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"f7efe4abecaf64be04d0fed0d0ef23e64935f717","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.16.tgz","fileCount":11,"integrity":"sha512-Z8DBcBcrQgPLllTZEtryeI4kn4EP8KHs19cTGPSYZ9Q0Rv68QpO2NBhsOhF7MAZYHt90tSBdP5G/JD25shaDag==","signatures":[{"sig":"MEYCIQD6PdUAhHz1HMCYvifeUkqbLk2Qrh9rWhn1Aw8NxeAQegIhAPP/C+4ZpV9Jxh54cEnxMPcNEOnIhldhGEKLa68XWS2R","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45087},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"7b448cf64b30502883b3422662a9480ea25f2d60","scripts":{},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.16","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.16"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.16_1633539908694_0.2992739138059526","host":"s3://npm-registry-packages"}},"4.0.0-alpha.17":{"name":"@aofl/router","version":"4.0.0-alpha.17","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.17","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"bcf82f1ae9663962e2cd9b8ecb8529583b6dbb25","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.17.tgz","fileCount":11,"integrity":"sha512-/Qkt0c86Sx2Zep4gMXXfmUGTNUs9eLBzF7Z7oIGlHKY0+pPMRoK9aLQJwTL+Jx9B9uUJ4MWYFm9gqFOCQnyLdw==","signatures":[{"sig":"MEYCIQCB1Mq02ry5Egcl+N8605ET5x0phPLC2DVh+mobS6KDCQIhAL/i+DDSi4H2x+Hw8PhdFGSItNLF5LkS3Ej2kF/7JHXf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45087},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"c7b3ad6feb17eaf3721a5528e86a31ddfb350ef3","scripts":{},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.17","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.17"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.17_1633546051420_0.8629871360398911","host":"s3://npm-registry-packages"}},"4.0.0-alpha.18":{"name":"@aofl/router","version":"4.0.0-alpha.18","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.18","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"e1d854e54425c0f48ca95ac90f336ffd3af0e8a4","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.18.tgz","fileCount":11,"integrity":"sha512-WTANj2/r2K5Rtkle6rqFQu50lF0XZ6tpBXraGRnkBocwUp7puoBe9hRzp0+qNFrep++xWRqnzZ3OqcTkCkReAw==","signatures":[{"sig":"MEUCIQCyb5vmhpClz0Yat+COOUa5TWKQySw/WSage1nIcWb1fAIgQqSGqO1HXlndHKJNrPlxHQEozNlYqG4Tq3J8AiI3WM8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45087},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"3971875a8be8fc1e4ed7f6c737cc9aa1653e049b","scripts":{},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.18","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.18"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.18_1633563633475_0.06803754147537844","host":"s3://npm-registry-packages"}},"4.0.0-alpha.19":{"name":"@aofl/router","version":"4.0.0-alpha.19","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.19","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"6e5894f4c0b975034d133cfb4abfaa1331206686","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.19.tgz","fileCount":11,"integrity":"sha512-yITJNx1yH4DcdPlJBfwq9UoRYd5aoh3VD57zB99GZO4jDd64WxmmbqTYSe/hFBweDYob7lZxe1yIF0Zs3FSJag==","signatures":[{"sig":"MEQCIAbk/Um6GjtXOckDfs8XA33iGvuUBfzn8fcSlxyUxmIvAiB8vNGWsRDosqs5K84G1FAbtxo3yunqnOmaJhizBDD8UQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45087},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"79369e766cd4fe78098059b93d1cbd7bb5dd8830","scripts":{},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.19","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.19"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.19_1633564049258_0.21320236565376027","host":"s3://npm-registry-packages"}},"4.0.0-alpha.20":{"name":"@aofl/router","version":"4.0.0-alpha.20","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.20","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"3b6da20386a252968323d6bb0046ed29b8108f60","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.20.tgz","fileCount":11,"integrity":"sha512-Uo7COeh//5tgSVXvXd1OEjU/5+bS8HF/AdRudtR1D5t0at95I0O8Ym2KFIFh+7aQNicM+qlPMpsWs/FKKhYKGg==","signatures":[{"sig":"MEYCIQCYtvOkjk0ks/Q2z1KeUpvl23javc0ZGprpCrhBDRopqQIhAMQg8CGIGBLfAntq5AHkyszYTDVGOdYD5AynnkSwkV+j","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45087},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"398f195bda4d61023d6d7889598f5688c276f1bf","scripts":{},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.20","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.20"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.20_1633564496843_0.5983039350261259","host":"s3://npm-registry-packages"}},"4.0.0-alpha.21":{"name":"@aofl/router","version":"4.0.0-alpha.21","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.21","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"cbd06dfefe75090e83c114ea97333d83a430486d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.21.tgz","fileCount":11,"integrity":"sha512-nRhPK9/N3V9yF7IC0CP6aU7ohuZZ/LZOWMPaXvMGfbVt7yFfrl46pPjoCy4jyHyS4cgTAGOyXcjvF+vaowqT5A==","signatures":[{"sig":"MEUCIQDFzr7+vmVDlDp5jVdoFw6RnmTLHkCjVNlmJrd0NQUp6QIgMdIFxuQNM0B/Pv1zdUgOVeN9uSZEWTCnI2SSc2tYk9k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45087},"main":"index.js","module":"index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","gitHead":"398f195bda4d61023d6d7889598f5688c276f1bf","scripts":{},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jsdoc":"^3.6.6","@aofl/cli":"^4.0.0-alpha.21","cross-env":"^7.0.3","tsd-jsdoc":"^2.5.0","@aofl/middleware":"^4.0.0-alpha.21"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.21_1633712760510_0.8552941291575564","host":"s3://npm-registry-packages"}},"4.0.0-alpha.22":{"name":"@aofl/router","version":"4.0.0-alpha.22","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.22","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"388a2134a16f10c639c8de9cb6d4a9118b62e529","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.22.tgz","fileCount":21,"integrity":"sha512-AzJNfi9WXZEYsTkwG4+YP+NlY65dPd503IM3GyflPbqzIvnXcFJXtRcFdRF7/WfZOWAonZEVeki3JlFK0vUdeg==","signatures":[{"sig":"MEUCIQCGtZqSesYwpj/Tso2yE3XwI0bOPyIHvuYRR8YLcenahAIgSRjMQRPh8TWHX/7aQzYQdaKM3P+0ndJWPmxwYNOG/gM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57449},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"289b7f60d1cd721d68cff783afc623c3f51cc2cf","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.22"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.22_1633984770291_0.5996598889373361","host":"s3://npm-registry-packages"}},"4.0.0-alpha.23":{"name":"@aofl/router","version":"4.0.0-alpha.23","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.23","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"c4e41543162481df0982f38711e7f44e1160c5cf","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.23.tgz","fileCount":21,"integrity":"sha512-7MlhQUD/CGp9OKgyqzkBBbgnrElpw/P42IY761v42SR+ELk/AYS0WHtsC07VRvWmDlNrFDf+yhL5U7x1ftNcjg==","signatures":[{"sig":"MEYCIQCoyyMWMdC3DmhDWQHnIEz50p7YO5FVgfqQ0Aoc5GehzgIhALIYbOKJlgir9Jwsndr6IsF4MEQSTQ/h/onjNi0DQTd6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57449},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"a2829d023883e5cc51126ee549f70629ceae8e8d","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.23"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.23_1633986447756_0.2425656957670348","host":"s3://npm-registry-packages"}},"4.0.0-alpha.24":{"name":"@aofl/router","version":"4.0.0-alpha.24","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.24","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"2e53fd37d03ac0171fafd50d462e011301b8bf63","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.24.tgz","fileCount":21,"integrity":"sha512-+u688ZdQod0NqD9YTpWl3wUzpZOJW5EXSoJbHsRJqUdi8AV27xx/lMkPfjxNWK5jMiauQeMqbjfwkD8nnI/bWg==","signatures":[{"sig":"MEYCIQDmoxNaccL6jHEJCH3HFkAX4HjYcwda2wyJWzq05jeXQwIhAPwH9J+yWne2wMMye8R0EQ9tLIx+92jv2qCVHySSD1La","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57449},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"a2829d023883e5cc51126ee549f70629ceae8e8d","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.24"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.24_1633988819526_0.09740981332495613","host":"s3://npm-registry-packages"}},"4.0.0-alpha.25":{"name":"@aofl/router","version":"4.0.0-alpha.25","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.25","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"c3fb20677fc7d80a3c9b4edc305a94fa711b446f","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.25.tgz","fileCount":21,"integrity":"sha512-o/vR3/iXahkRymfAWTFfDw3XbOD/RDGe+9a6bqDfQ12GfMkG7ufgdOahj8WSGrAQbq4sDh4Qj6s7G1NOEKzTLw==","signatures":[{"sig":"MEYCIQCqye/XOBZRL6PVG+hpCefVbgSyOm2rGwdfhXI22T/GRwIhAKIU5VubMvTBqM2HJYIcRQa3bqTI4wdJRmFtFegq3W9q","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57448},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"8e4d611be609be11acccb9135091aadd10134e8a","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.25"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.25_1634001647693_0.7451750992300625","host":"s3://npm-registry-packages"}},"4.0.0-alpha.26":{"name":"@aofl/router","version":"4.0.0-alpha.26","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.26","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"828aadc026cb752151171074e379786bbb73c6be","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.26.tgz","fileCount":21,"integrity":"sha512-A99Y8cG9AOu5Mdq6zFxc4w48Ady+kWPzveop2RZaC+g4xaaID8e7iAz+5O3yN8g+IwV50L1IIuytBtMhU7Rv4w==","signatures":[{"sig":"MEUCIQD667eZAjvbCyXq6SqdpbqEva9Dcdcurkd+rs0MYZZNEwIgJGFeE2xAFwVUV6eLGDJEiKHOt+vo8VqqIg2XT93PSJ4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":57448},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"bdd06521b3653befa1b4c07318cc120a700672b2","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.26"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.26_1634002478141_0.5832092975276806","host":"s3://npm-registry-packages"}},"4.0.0-alpha.27":{"name":"@aofl/router","version":"4.0.0-alpha.27","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.27","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"75d98745285d3b1746fd6d33f145d4643c2c4143","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.27.tgz","fileCount":21,"integrity":"sha512-1dzwOd8OE1doTXouIJH4OV6vO8gki/3PK9g9NtWJEoLl0ply0Q/Ys6K2gkwBii+2WzTrZmKW6Vm7kdIYezCSRw==","signatures":[{"sig":"MEUCIQC91l9E0kPvkNR16hDpDoCTtq4mr/4QcWCf4YgW5aPRDAIgBEyCwUamBaqJIE5SiDubG06oV0RGaHA1eL+nnPuoIAg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59314},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"bc755f21b39459dc3a8b57ab25075a22313bc107","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.27"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.27_1634151996878_0.8478572876432553","host":"s3://npm-registry-packages"}},"4.0.0-alpha.28":{"name":"@aofl/router","version":"4.0.0-alpha.28","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.28","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"82dc02a1adfb831f802fff997cc2bba7e82bf17b","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.28.tgz","fileCount":21,"integrity":"sha512-j1Kn/ra/rfDydjyQ8otBxOo1b3d8d3Mp2PMJtljKhHgyVavCbm77HJ74bebYKD5bnm8Bhq/uHRQfUvo4Y5IXUw==","signatures":[{"sig":"MEUCIBi2j+uaT/0MZUlk3PsPjyj/68n7FOqCKQ9MC7dXcRhYAiEA3QgF9wiPcPJXH1A8C3pbE4yCgslhbeCURFApDDKv06E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59314},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"7dceb248f691c3214f73ba1d048f26b2653bcac1","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.28"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.28_1634163507223_0.19132217476679925","host":"s3://npm-registry-packages"}},"4.0.0-alpha.29":{"name":"@aofl/router","version":"4.0.0-alpha.29","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.29","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"33426245d37bd4f7642b751e2edf0bd64a650a71","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.29.tgz","fileCount":21,"integrity":"sha512-8p8U/3HhTMS4kissTd1xkYcpOLahh+IEAqIfVsgZI4hnyY0Y5NPeCqFgPLBKaqiEO+z4iQwacP5XdY1wR8yb4A==","signatures":[{"sig":"MEUCIQDdbt54tPKnex50+OZmaIijR1ANDb92SXWJvi0TsKTv6gIgHRt+lUicSg8MNV81E7HjUr0mfKVgVCFhp05PGD1sU2c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.11","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.20.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.29"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.29_1634319359006_0.13429388445872292","host":"s3://npm-registry-packages"}},"4.0.0-alpha.30":{"name":"@aofl/router","version":"4.0.0-alpha.30","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.30","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"115de562bbc0a30767c3ac5eda33c120acc43a00","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.30.tgz","fileCount":21,"integrity":"sha512-hqDn+zqnUDmksiRy+sJIAxrUFExixURRD1ZPFZgll2MT1b1ycP5SsNnZBFywGWpn64cQQJhUXiVqCdsjCIqWkA==","signatures":[{"sig":"MEQCIF9LgTgEbMXvMI2UFfjQ3QxHzgTPGIq9DAGKph/kocleAiAq5EX62HTq/QYpze9//Q10FdFuwMH28sIwSV1We8Q8Dw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"13ed83fe4429533b22fd669328dd6c8829dffec0","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.30"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.30_1634323866048_0.7594226461027551","host":"s3://npm-registry-packages"}},"4.0.0-alpha.31":{"name":"@aofl/router","version":"4.0.0-alpha.31","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.31","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"2dd5cc3077578e8775019eb3f5866940d2d42f46","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.31.tgz","fileCount":21,"integrity":"sha512-8kdgm9Ulpce22RLrTyJtlRIlSFDe/uaYld5Y5AsnbjG3BkAChOGlpbrIAmATusSSI6x5aIAI96+FVT7Y6AFGcw==","signatures":[{"sig":"MEUCIQDlBomRAnrWoOG+OC1b2pWJzQ+aDPCZ/0F2dHL5db94EQIgON808yaNLICmiCYN85nw66Y/iHnrd6D4EAND9AH/a0w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"5bc1713dfbc60e5029713b6ad88a4a9fd46d3413","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.31"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.31_1634324129017_0.5276864891366162","host":"s3://npm-registry-packages"}},"4.0.0-alpha.32":{"name":"@aofl/router","version":"4.0.0-alpha.32","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.32","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"3376de499693a554f985e417ca02f82b963a0dd1","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.32.tgz","fileCount":21,"integrity":"sha512-ehktkwH2TTfjmwkpKvlLY1uwGcPAsX4TS0OejPlxcHOmEfFnlDUSCShQEoZoNz93cbW3RO52kRgfPbL5IQaYUA==","signatures":[{"sig":"MEYCIQCwelHu/wQor0P7U8VDLj0qactXSvGeCaQxRyckTF8AuAIhALqS8PfN3/9w2mnORx8hfKpuJZle1nUoWCkfgtaAJ/Nu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"77786a7e5219aff408e59d051e8380ca1a63021d","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.32"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.32_1634326791362_0.6588801870172734","host":"s3://npm-registry-packages"}},"4.0.0-alpha.33":{"name":"@aofl/router","version":"4.0.0-alpha.33","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.33","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"39e6d56aa951f6e06a2494de0cda19d3f19be780","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.33.tgz","fileCount":21,"integrity":"sha512-FLLZlQ3FdG9WDM5vJc6/R0IJ/81a025iiPLdgR9H2+IoW2FstRpsyyTBIh/eUjl5xjgUc2Z1OBvkBitytJI2TQ==","signatures":[{"sig":"MEUCIBIBsX5bkHYGr8GX16AGRCxLdSRgc6OLWn80wxKcNRI9AiEAtWW5ZJMCbxEM0+U+WHRyF11K83B41u8chYd5mypGBBI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"41b432602965620ce989f21e02748f53f69f7ea5","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.33"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.33_1634326990995_0.6979623523822156","host":"s3://npm-registry-packages"}},"4.0.0-alpha.34":{"name":"@aofl/router","version":"4.0.0-alpha.34","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.34","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"04de1765b25d4d504bfec87ddc7033f4d4def817","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.34.tgz","fileCount":21,"integrity":"sha512-K+fJK/MjEqShgbVZmqsUtu3ZWKslLXDv+VTZJ4a/k8KE0Br7Bs52nhNC8mzYR4YQtBSiBUSeLlIm3fIYYrtmpw==","signatures":[{"sig":"MEUCIQDlX3XogGwerYPh0kctPpAkPWa23FgcQseYuWzruZLB7QIgLWl5NKZy9RhVMNDlYMoUQ32kYR9LBEgDnUaEAWU+p40=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"1b993e65b04444692f40eaecfc3dfbb29d50d98b","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.34"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.34_1634327596971_0.7431349622372283","host":"s3://npm-registry-packages"}},"4.0.0-alpha.35":{"name":"@aofl/router","version":"4.0.0-alpha.35","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.35","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"62194e79335ed15295585c052c045fa23056ce0d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.35.tgz","fileCount":21,"integrity":"sha512-DYZeQ11QXLW5NxKYY3BM5gOHMFr4xFM7aCLiLz6mEQRZkjxHY1LGyJ7BM3QRfl7CU4khqJhNNZKgWVz8v0BciQ==","signatures":[{"sig":"MEUCIDxQkp0WPjKQXIe+JaYrQ/s/MYEyE9dhhW6h0Db+aGlTAiEAvPbqdl53NYD69ALgrQGKPNFT2IjJ/T3V3O+xDW1AGWw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"5a6a7f303fc21acc73b55413f38f534ed4bfb714","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.35"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.35_1634328019889_0.48257765531146046","host":"s3://npm-registry-packages"}},"4.0.0-alpha.36":{"name":"@aofl/router","version":"4.0.0-alpha.36","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.36","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"6e10c29216a33e22b84f620d05b4839fa64d7202","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.36.tgz","fileCount":21,"integrity":"sha512-mJkIggaoVZ8mvUJwY/yxfZwq75QV5owbBsa060ycRuB33lmQgmyNjHV8PQ2KDV/412DPFhXPzXFTdZj0cP1rfQ==","signatures":[{"sig":"MEUCIEyELPuK2JnxEXyBY1ri0GtxL00FGM5s9cvBvmQvfgN7AiEA+7rxAbw5wTtZ62mxjAI3/7VUc2ZvcOBlskVHKmmYHZs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"24aeaf86244b6f9f352b26d04fd9976f9430bfe7","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.36"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.36_1634328227853_0.19484305646545996","host":"s3://npm-registry-packages"}},"4.0.0-alpha.37":{"name":"@aofl/router","version":"4.0.0-alpha.37","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.37","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"7506ffe0973e1602c480df124c4bc41db11eb41d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.37.tgz","fileCount":21,"integrity":"sha512-mSLxP3B17WTh6mdbys8Bi98VZgpSC03zqutpjyg3R7Yeeb6p5O8+d9Hm3BPL94tgDriGEGGJnADdVzNL5p758g==","signatures":[{"sig":"MEYCIQDiH0Tcx9tkwbIZJ3GE3n9zL/PortW4iejf6QXPcZGAYwIhAM+EyGt/rf0fDQg2W598bJIFpsOCy4NH6o3Ir5af8hr/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"d5e9c5a7ef77e315b759fb5bee226aa3bd3aaffb","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.37"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.37_1634328393595_0.6875019331344119","host":"s3://npm-registry-packages"}},"4.0.0-alpha.38":{"name":"@aofl/router","version":"4.0.0-alpha.38","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.38","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"7985bbba9b6e8390721612ca1134ae21dcb8bae3","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.38.tgz","fileCount":21,"integrity":"sha512-Ht1Ppo8cknYtmLPhQ4rLY4uAXTSwV5jsffD52KpBkKMhQr42Xc/zzXvQptfEW2PgDsK2AZ+BUZe6DWerCeNlSQ==","signatures":[{"sig":"MEUCIQCRut8F/W8Bx3mb5ATi6fwrny54n7FLai2dcsVx9VsiwAIgGi6DoRrGhdy3YJAgF+m9HxJK9EeV/fi2DQZuQs99l5I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"91457836070b2b300b852a461787c56ec880a85d","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.38"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.38_1634330772456_0.887726001327442","host":"s3://npm-registry-packages"}},"4.0.0-alpha.39":{"name":"@aofl/router","version":"4.0.0-alpha.39","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.39","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"0a16ca5b3ff28f49c1db28455196257f491707b4","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.39.tgz","fileCount":21,"integrity":"sha512-N8ovNQQGPlpxzNJbGxR8N3+NBjYLeh9H33QDaa5L1v3wNIeeaEsN0Vww8drL3ARgjLmCSP6iGaEowHQLXUBGTA==","signatures":[{"sig":"MEYCIQDL/V6XrNLVR0GkeTC++EyV3izos1luiLYk0FCqB0cDcwIhANtfx/N4P/HG7+Jol1uZA6GwEdSMg7o3oa+gQ7UZ9WML","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59307},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"f4c22e986eb7eb2e564e469dedb36c65858bf5cc","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.39"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.39_1634332209581_0.7561950129202992","host":"s3://npm-registry-packages"}},"4.0.0-alpha.40":{"name":"@aofl/router","version":"4.0.0-alpha.40","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.40","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"f0c99da5817746a50cf143d6036cc469c402d015","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.40.tgz","fileCount":21,"integrity":"sha512-C5KGpGh8clRXR/I8XoCsMtMZxCsISuJjskRhPGbS5uplyVGI42S4RN2JNdj2K7gzoZB1vW+ZykGO+qDiR7qF0Q==","signatures":[{"sig":"MEUCIQCoUP+53Y4SU44guyN4TbwVZBCMsFY81VQUFeYLL5R12gIgM8NsIOzIvAIGgzmtPxRO16OeKj4BvpQkLxQ0QyCGSdQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59341},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"e93b1f585c2cd94383438abd74737a856ca68a77","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.40"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.40_1634332805301_0.16541482031783983","host":"s3://npm-registry-packages"}},"4.0.0-alpha.41":{"name":"@aofl/router","version":"4.0.0-alpha.41","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.41","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"4a75eff50cac5a893fff6209244432373831b820","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.41.tgz","fileCount":21,"integrity":"sha512-0u9L5+BOvjrl/huNv2pmbQkCI1VDnUi/gc1Ki2ouPuCsqfCCyN/kPsblsYH2xnjqoiZ3em9dsWDi64MJeSDpxQ==","signatures":[{"sig":"MEYCIQCLk8DkdiXMkQlA5Wp/XSiDxyIMU+rKXR4Ri0cDg7do7gIhAIW9uTryRhDyEVUdSkfla9NfDI/XKVZqLxiuqB/xBbWg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59341},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"cbd55bfa3cf5e87bf7b5f27b3d9b6efb34e3ad85","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.41"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.41_1634582070921_0.8531756483221471","host":"s3://npm-registry-packages"}},"4.0.0-alpha.42":{"name":"@aofl/router","version":"4.0.0-alpha.42","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.42","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"a774a49da8e8ed511a48b4db064f9f9de953b785","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.42.tgz","fileCount":21,"integrity":"sha512-+t/NzwCUsvuXdQu4z5RPAS6kQDQIRiB4QpJeRuSqcqKHVukNjd2th1rtQfZOOgIl1BUuoICv9x0mo61fE9O9XA==","signatures":[{"sig":"MEUCIQCxUXwNgQ6gpsFGwIF/bo2mvaACysle5tP8YGp51gG4qgIgRDpxVAsFCEO5zJnPKroxD6eVqGUfDjppe3lsMr1OJsc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59341},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"f64d10ec558694ce4c2d4e8b0562d4167f8e28d5","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.42"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.42_1634586038276_0.17152826775947805","host":"s3://npm-registry-packages"}},"4.0.0-alpha.43":{"name":"@aofl/router","version":"4.0.0-alpha.43","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.43","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"ad43a368ec53b9737a1b95675bd6959ac8175c61","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.43.tgz","fileCount":21,"integrity":"sha512-HGmGpTEQLIBTtLccgYKv6xooobWqmGt7Hs3TtZSFcVzJfVPxi63bdEvMyT8+vpvL4MacaQzlLIU5d3LxMTXzlQ==","signatures":[{"sig":"MEUCIQCUSYZggFI7rViC+W9IL+ZllTavubAs2oxvoIBZTgLNLQIgVTnCNvwCPeH/CX2UZaIPM66tt9MdoLdrODhHJ5XDgo4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59341},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"gitHead":"6763365b38cb5be764e669a3b568be9f1cc4cfed","scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"7.24.2","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.43"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.43_1634586291524_0.40394413619266745","host":"s3://npm-registry-packages"}},"4.0.0-alpha.44":{"name":"@aofl/router","version":"4.0.0-alpha.44","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.44","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"5e6b453eee5bb2757de8e0f818408d491695749d","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.44.tgz","fileCount":21,"integrity":"sha512-zNETEIHgXauS1fc/tuCCFEv8opGs0Y1gE4TtVhRDmfFm2O1f6xjIAUswRnNI1S8ClOAcaJayhyQMHUKXsTrjkg==","signatures":[{"sig":"MEYCIQDvjU1D2EYXbs25RL9w5baLazQLMyW2WQ+Cek+yiAiirwIhAJ/a1uEK/naS8ApV7QRUhDJfFVMnZKHCeSlstLqFMCrB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59341},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.11","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.20.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.44"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.44_1635874777021_0.6726494566028656","host":"s3://npm-registry-packages"}},"4.0.0-alpha.45":{"name":"@aofl/router","version":"4.0.0-alpha.45","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@4.0.0-alpha.45","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"dab01ab1d8661da313f5aa6d63676c27fc705e42","tarball":"https://registry.npmjs.org/@aofl/router/-/router-4.0.0-alpha.45.tgz","fileCount":21,"integrity":"sha512-oTtq+ut5/1hmgULJNXNrcOeQrQeIWFNJVYZvGV+kiwCUu7Kgg7hbcrEFA4rKCC5wbEPF6V30ZpcjQmOneyC8dg==","signatures":[{"sig":"MEUCIQD/EMAAXTsesvCuQetw+BnajH982Yv+gLDkQWfERed+KQIgU0HpJy9uUReY3QRFzVxyV44+xw7ZPz3YyBVal7YtfqM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59341},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","browser":"dist/index.js","exports":{".":{"default":"./lib/index.js"}},"scripts":{"tsc":"cross-env NODE_ENV=production tsc -p tsconfig.json","test":"echo \"Error: no test specified\" && exit 1","build":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --config .aofl.cjs","clean":"rm -rf dist lib","build-ci":"npm run clean && npm run tsc && cross-env NODE_ENV=production aofl build --debug --config .aofl.cjs","build:dev":"npm run tsc && cross-env NODE_ENV=development aofl build --config .aofl.cjs","prepublishOnly":"npm run build-ci"},"_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"6.14.11","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.20.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"cross-env":"^7.0.3","@aofl/middleware":"^4.0.0-alpha.45"},"peerDependencies":{"@aofl/middleware":"^4.0.0-alpha.9"},"_npmOperationalInternal":{"tmp":"tmp/router_4.0.0-alpha.45_1635876957240_0.07902490173932031","host":"s3://npm-registry-packages"}},"3.14.0":{"name":"@aofl/router","version":"3.14.0","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.14.0","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"13eef1770eab02d5d0b0c12eb81e7982d7df8311","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.14.0.tgz","fileCount":13,"integrity":"sha512-gJII4xR5wcGm3nj9GXWorzL1NJt8BdzOsL5cFarAKdaB7UCrRjlGrv002U9xS87hsk5M2jX8xs2aBgwdyaS7DA==","signatures":[{"sig":"MEQCIE+2xbvJCoDOcNj6Iz3TGUIKGFhGUK0TiwAeSSmZy105AiA1rtWfRUpLUDbCnPlYErZcojEHMSStWBllES9C6KqW/A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiM8/fACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr/1Q/+J6iPIxTIqRdTLkMNWAnDgfDS17qXECZKc0zWbd4PktE4kUUL\r\nSqNE6gBdVKQoNfHUxhqEEh2cOcnFYwa8s2iIffiAUQjClzRBJoB5MTRLMW0R\r\n5bJuZT4p698BHGsKxkopyKzcuNi91/VdIkjLYvGw0jqALjn0skN1IgUMZOpj\r\nDKgw2amDMoZ7jNl01HCucOaznwMVYtmfn9dwIZwR2QkKMGYsRyc+EUKykmwo\r\ndoCP9HWe+SYvJOp+OHhXtFRPF9tJwzhHjQLc+XP7x0DIZxd/M4ZngTTdcVvX\r\nBTFKUZgUGwR5Auifn5X7nLFBgXHYucP7oOthurau8pdcI4btnvDwrub/ctse\r\n9J/v1rN8RZ7dNb8QU3fbtTrx56BBrLajasqkFYh7PC+liO9cFwXeWeR/Cb2U\r\nYguZDBWzskEcuN/ZuoX3Z92CiJ/6P+xpHd2GTRNZwvmNHlaIzdpE2Y7h0/Ca\r\nXurNn2lO0D3rkHF8HKAIgtkYyfRFlkDnM6BOEdyeugQEWtneS4ogJmm8SAnR\r\nhIx8ynjuLeiv/gvHhMcLxdB+Qh2IzONjlgKV75ymO3JBgThNGimuFhmxvcjW\r\nlYNUCKoHZMXbsaJhXZavSwe++lqiW15ucHAvZxGmF510YTJXimjfNozU4UIe\r\nJ9wf4YRG/TjVb9yxCUs16cBmcXR1XicxtGU=\r\n=JpZ3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","gitHead":"01a200342c31c108d1ab1039ee4c972f2ee63fa9","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.20.1+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.20.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.14.0","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.14.0"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.14.0_1647562718839_0.7917203511559152","host":"s3://npm-registry-packages"}},"3.14.1":{"name":"@aofl/router","version":"3.14.1","keywords":["aofljs","@aofl/router","router","client side router"],"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","_id":"@aofl/router@3.14.1","maintainers":[{"name":"alexdinari","email":"alexdinari@me.com"},{"name":"ariankhosravi","email":"arian@arin.io"}],"contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"homepage":"https://github.com/AgeOfLearning/aofl#readme","bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"dist":{"shasum":"5f110cc0bc87f4ed6ce0fa2984c3bddc673f9022","tarball":"https://registry.npmjs.org/@aofl/router/-/router-3.14.1.tgz","fileCount":13,"integrity":"sha512-hHr36mLQ0NQcahYGxTFBaXAqqvswPpug45xkq/3xij4PVdJ7X4Rkf5po3QVhSXoXOLlzM8/Y+EYwY6C7OvbIjQ==","signatures":[{"sig":"MEUCIQCYpR+TJSn9NWL+vxBTPw1tQYRUcklar8eFjupvkxTVOQIgJ6a75sOAX4R1pvWyw6gcGM6QCa0LfX/pNtkW3Gina3c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiM9bTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2FRAAnur+83yVCucHQZbNDm5oPYjiik32Sx6JO4x0km6f7EczcxAo\r\n72QGkLFxXyJR7PAccJmlSAhoSnWlW/5WXO7J4j5rz+xIEbAZ8GFbnLeFjqnz\r\nmyiELmP4j6WTe4/RXKo0ox9gkx+AC6h9XCAMHG94eUxqpB7VVqq3QACI7Jt9\r\nmdPaUh1bhx1yV8i2RZXRB7ZnuRf56/NYAJsMKoJ0TX7ktMBHbqAv2s4cZUab\r\nvRr9FuR2rCLd/6Q5IDmpPVxwtkEpgZvzPRQh1JB5zT++LJQYPM0yt+nypV99\r\nRj1gVH8u2krfQcxRYFVhik/5EPbx+gY7/jlNQmj/wRtzVKsL4p7AoxBji1Ok\r\nX+vi8SePjD3B6rpZ+ycaXBGnzkTfz+8D6tSA+NSSvaQbpGdcw3lFGvdKvr/Q\r\npaaj9cZ5a07o/avR90wH10/lxoWaIDjIj5xVG3XCDZM95JsFC7P7hFRfoGYk\r\no2H1hgriRCUOVEt8G72nmTTfkgnhEEPAk7VtXrTbhiQcqr0nr76LW0mx461m\r\ntDKyMSgv6QIssX4vENj3wlf8zRbKWzFJF9K0TxgzqqB7l9fFG1SHbrdFqeOc\r\nI4TchneADzTqiZvVTQoDi8uhEfFNpz8jUW+8iGO/1HiAdT1o/MaclYAu3eFP\r\nnrFBUS8KA1hMhY7Ss5u90AX2hKn9wzn6dIs=\r\n=Fal/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","module":"index.js","browser":"dist/index.js","gitHead":"65857163479f835ec51cc1e23ec01c45eab43008","scripts":{"docs":"npx jsdoc -c .jsdocrc.json .","test":"echo \"Error: no test specified\" && exit 1","build":"cross-env NODE_ENV=production npx aofl build","watch":"npm run build -- -w","build-ci":"cross-env NODE_ENV=production aofl build --debug","build:dev":"cross-env NODE_ENV=development npx aofl build","prepublishOnly":"npm run build-ci && npm run docs"},"typings":"types.d.ts","_npmUser":{"name":"ariankhosravi","email":"arian@arin.io"},"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.20.1+x64 (darwin)","description":"AOFL Router is a simple client side router","directories":{},"_nodeVersion":"12.20.1","_hasShrinkwrap":false,"devDependencies":{"jsdoc":"^3.6.3","@aofl/cli":"^3.14.1","cross-env":"^6.0.3","tsd-jsdoc":"^2.4.0","@aofl/middleware":"^3.14.1"},"peerDependencies":{"@aofl/middleware":">= 3.0.0-beta.5 < 4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_3.14.1_1647564499642_0.38674598332347787","host":"s3://npm-registry-packages"}}},"time":{"created":"2018-07-25T00:18:29.674Z","modified":"2025-01-18T00:20:57.876Z","1.0.0-beta.20":"2018-07-25T00:18:29.742Z","1.0.0-beta.21":"2018-08-05T07:41:07.942Z","1.0.0-beta.22":"2018-08-10T19:29:14.849Z","1.0.0-beta.23":"2018-08-16T21:44:17.465Z","1.0.0-beta.24":"2018-08-22T22:35:39.696Z","1.0.0-beta.25":"2018-08-23T19:29:36.833Z","1.0.0-beta.26":"2018-08-27T18:25:48.668Z","1.0.0-beta.27":"2018-08-27T21:22:30.169Z","1.0.0-beta.27.1":"2018-09-11T19:38:47.766Z","1.0.0-beta.28":"2018-09-28T00:32:54.355Z","1.0.0":"2018-09-29T23:04:56.718Z","1.1.0":"2018-10-17T22:30:16.440Z","1.1.1":"2018-10-29T19:43:15.309Z","1.1.2":"2018-10-29T19:43:25.261Z","1.2.0":"2018-11-06T20:51:40.684Z","1.2.1":"2018-11-18T21:12:15.894Z","1.2.3":"2018-11-21T00:14:54.781Z","1.3.0":"2018-12-06T21:02:43.520Z","1.4.0":"2018-12-28T02:42:33.415Z","1.4.1":"2019-01-07T18:33:28.681Z","1.5.0-alpha.0":"2019-01-09T20:56:36.459Z","2.0.0-alpha.1":"2019-01-29T01:53:55.925Z","2.0.0-alpha.5":"2019-02-26T23:15:31.522Z","2.0.0-alpha.16":"2019-04-25T19:57:46.313Z","2.0.0-alpha.17":"2019-04-26T18:36:02.280Z","2.0.0":"2019-04-30T19:31:56.832Z","2.1.0-alpha.4":"2019-07-23T23:10:27.488Z","2.1.0-alpha.5":"2019-07-31T16:54:48.682Z","2.1.0-alpha.6":"2019-08-16T22:56:21.026Z","2.1.0-alpha.9":"2019-08-18T06:17:39.913Z","3.0.0-0":"2019-09-17T05:22:06.362Z","3.0.0-alpha.0":"2019-09-17T05:24:08.647Z","3.0.0-alpha.5":"2019-09-20T06:32:49.447Z","3.0.0-alpha.11":"2019-09-27T06:49:29.473Z","3.0.0-beta.5":"2019-10-06T10:05:18.758Z","3.0.0-beta.6":"2019-10-08T04:49:48.204Z","3.0.0-beta.8":"2019-10-08T05:48:21.065Z","3.0.0-beta.9":"2019-10-08T06:11:50.199Z","3.0.0-beta.11":"2019-10-08T09:43:00.340Z","3.0.0-beta.12":"2019-10-08T09:53:50.583Z","3.0.0-beta.13":"2019-10-09T04:13:30.428Z","3.0.0-beta.14":"2019-10-09T04:33:16.550Z","3.0.0-beta.15":"2019-10-09T04:50:51.443Z","3.0.0-beta.16":"2019-10-09T05:06:10.569Z","3.0.0-beta.17":"2019-10-09T05:25:13.093Z","3.0.0-beta.22":"2019-10-11T04:40:57.837Z","3.0.0-beta.23":"2019-10-11T05:40:08.348Z","3.0.0-beta.24":"2019-10-11T06:34:50.842Z","3.0.0-beta.25":"2019-10-11T07:34:53.195Z","3.0.0-beta.26":"2019-10-11T07:49:17.071Z","3.0.0-beta.27":"2019-10-11T07:54:06.849Z","3.0.0-beta.28":"2019-10-11T08:01:09.940Z","3.0.0-beta.30":"2019-10-11T22:58:50.513Z","3.0.0-beta.32":"2019-10-14T01:09:34.408Z","3.0.0-beta.34":"2019-10-14T07:37:04.071Z","3.0.0-beta.35":"2019-10-18T06:59:19.219Z","3.0.0-beta.36":"2019-10-19T10:46:00.993Z","3.0.0-beta.37":"2019-10-24T06:08:02.816Z","3.0.0-beta.38":"2019-10-30T22:52:32.443Z","3.0.0-alpha.12":"2019-11-02T01:11:49.253Z","3.0.0-beta.40":"2019-11-11T22:31:26.162Z","3.0.0-beta.41":"2019-11-12T04:55:43.865Z","3.0.0-beta.42":"2019-11-12T05:53:52.785Z","3.0.0-beta.46":"2019-11-14T21:58:23.754Z","3.0.0-beta.47":"2019-11-15T00:48:54.580Z","3.0.0-beta.48":"2019-11-16T23:36:09.819Z","3.0.0-beta.49":"2019-11-17T03:38:01.802Z","3.0.0-beta.50":"2019-11-17T04:29:49.670Z","3.0.0":"2019-11-17T07:06:15.500Z","3.1.0":"2019-11-22T03:28:33.096Z","3.2.0":"2019-11-24T07:35:07.661Z","3.2.1":"2019-11-24T08:03:55.745Z","3.2.2-alpha.2":"2020-01-14T20:27:38.695Z","3.2.2-alpha.3":"2020-01-14T21:12:58.031Z","3.3.0":"2020-01-22T23:31:17.551Z","3.4.0-alpha.0":"2020-01-27T23:40:40.584Z","3.4.0-alpha.1":"2020-01-27T23:52:30.983Z","3.4.0":"2020-01-28T00:01:48.239Z","3.5.0-beta.1":"2020-02-22T23:26:41.457Z","3.5.0-beta.2":"2020-02-22T23:52:44.842Z","3.5.0-beta.3":"2020-02-23T00:07:26.687Z","3.5.0-beta.4":"2020-02-23T01:57:30.409Z","3.5.0-beta.5":"2020-02-23T03:10:13.358Z","3.5.0-beta.6":"2020-02-23T03:17:49.208Z","3.5.0-beta.7":"2020-02-23T05:05:36.014Z","3.5.0-beta.8":"2020-02-23T05:08:43.849Z","3.5.0-beta.9":"2020-02-23T05:33:09.837Z","3.5.0-beta.10":"2020-02-23T05:50:30.320Z","3.5.0-beta.11":"2020-02-23T07:37:16.437Z","3.5.0-beta.12":"2020-02-23T09:00:12.836Z","3.5.0-beta.13":"2020-02-23T09:02:08.896Z","3.5.0-beta.14":"2020-02-23T10:00:16.165Z","3.5.0-beta.15":"2020-02-23T11:49:19.145Z","3.5.0-beta.16":"2020-02-23T11:58:36.386Z","3.5.0-beta.17":"2020-02-23T12:14:32.846Z","3.5.0-beta.18":"2020-02-25T03:59:36.214Z","3.5.0-beta.19":"2020-02-25T23:57:13.198Z","3.5.0-beta.20":"2020-03-02T23:22:44.589Z","3.5.0-beta.21":"2020-03-02T23:27:05.260Z","3.5.0-beta.22":"2020-03-02T23:42:21.670Z","3.5.0":"2020-03-03T00:03:09.141Z","3.6.0-alpha.0":"2020-03-08T18:25:01.742Z","3.6.0-alpha.1":"2020-03-08T18:35:15.857Z","3.6.0":"2020-03-08T19:05:47.471Z","3.6.1":"2020-03-10T18:42:57.118Z","3.8.0":"2020-05-12T19:19:34.086Z","3.9.0-alpha.0":"2020-05-12T19:29:49.628Z","3.8.1":"2020-05-12T19:40:43.939Z","3.9.0":"2020-05-15T17:58:12.262Z","3.10.0":"2020-05-15T21:15:31.543Z","3.12.0":"2021-01-20T00:01:48.934Z","3.12.1":"2021-01-20T00:12:45.375Z","4.0.0-alpha.9":"2021-02-03T01:48:06.761Z","4.0.0-alpha.10":"2021-02-03T01:56:12.440Z","4.0.0-alpha.11":"2021-02-03T02:24:19.324Z","3.13.0":"2021-02-25T23:43:33.716Z","3.13.1":"2021-06-15T23:48:46.716Z","4.0.0-alpha.13":"2021-09-23T23:32:10.032Z","4.0.0-alpha.15":"2021-10-06T17:03:53.553Z","4.0.0-alpha.16":"2021-10-06T17:05:08.849Z","4.0.0-alpha.17":"2021-10-06T18:47:31.542Z","4.0.0-alpha.18":"2021-10-06T23:40:33.597Z","4.0.0-alpha.19":"2021-10-06T23:47:29.446Z","4.0.0-alpha.20":"2021-10-06T23:54:57.045Z","4.0.0-alpha.21":"2021-10-08T17:06:00.726Z","4.0.0-alpha.22":"2021-10-11T20:39:30.442Z","4.0.0-alpha.23":"2021-10-11T21:07:27.929Z","4.0.0-alpha.24":"2021-10-11T21:46:59.723Z","4.0.0-alpha.25":"2021-10-12T01:20:47.940Z","4.0.0-alpha.26":"2021-10-12T01:34:38.292Z","4.0.0-alpha.27":"2021-10-13T19:06:37.062Z","4.0.0-alpha.28":"2021-10-13T22:18:27.365Z","4.0.0-alpha.29":"2021-10-15T17:35:59.168Z","4.0.0-alpha.30":"2021-10-15T18:51:06.209Z","4.0.0-alpha.31":"2021-10-15T18:55:29.176Z","4.0.0-alpha.32":"2021-10-15T19:39:51.543Z","4.0.0-alpha.33":"2021-10-15T19:43:11.110Z","4.0.0-alpha.34":"2021-10-15T19:53:17.105Z","4.0.0-alpha.35":"2021-10-15T20:00:20.036Z","4.0.0-alpha.36":"2021-10-15T20:03:48.015Z","4.0.0-alpha.37":"2021-10-15T20:06:33.760Z","4.0.0-alpha.38":"2021-10-15T20:46:12.648Z","4.0.0-alpha.39":"2021-10-15T21:10:09.829Z","4.0.0-alpha.40":"2021-10-15T21:20:05.450Z","4.0.0-alpha.41":"2021-10-18T18:34:31.107Z","4.0.0-alpha.42":"2021-10-18T19:40:38.490Z","4.0.0-alpha.43":"2021-10-18T19:44:51.721Z","4.0.0-alpha.44":"2021-11-02T17:39:37.176Z","4.0.0-alpha.45":"2021-11-02T18:15:57.381Z","3.14.0":"2022-03-18T00:18:39.019Z","3.14.1":"2022-03-18T00:48:19.808Z"},"bugs":{"url":"https://github.com/AgeOfLearning/aofl/issues"},"author":{"name":"Arian Khosravi","email":"arian.khosravi@aofl.com"},"license":"MIT","homepage":"https://github.com/AgeOfLearning/aofl#readme","keywords":["aofljs","@aofl/router","router","client side router"],"repository":{"url":"git+ssh://git@github.com/AgeOfLearning/aofl.git","type":"git"},"description":"AOFL Router is a simple client side router","contributors":[{"name":"Daniel Belisle","email":"daniel.belisle@aofl.com"},{"name":"Micah Blu","email":"micah.blu@aofl.com"}],"maintainers":[{"email":"alexdinari@me.com","name":"alexdinari"},{"email":"lorenzo.battigelli@aofl.com","name":"lorenzo.battigelli"},{"email":"alex.dinari@aofl.com","name":"alex.dinari"},{"email":"it@aofl.com","name":"ageoflearning"},{"email":"jie.zhang@aofl.com","name":"jiezhangaofl"}],"readme":"# @aofl/router\n\nAOFL Router is a simple client side router. It supports the history API, dynamic paths and provides multiple middleware hooks. It makes no path rendering assumptions.\n\n[Api Documentation](https://ageoflearning.github.io/aofl/v3.x/api-docs/module-@aofl_router.html)\n\n## Examples\n* https://stackblitz.com/edit/1-0-0-router?embed=1\n\n## Installation\n```bash\n$ npm i -S @aofl/router\n```\n\n## Middleware hooks\n\n| Name         | Arguments                     | Description                  |\n| ------------ | ----------------------------- | ---------------------------- |\n| before       |  fn[Function]  | Executes before a route has even been matched. Middleware here should be any prep work that needs to happen before a route begins to resolve. It will note be provided a matched route at this point. |\n| beforeEach   |  fn[Function]  | Executes after all \"before\" middleware. At this point a `matchedRoute` will be available in the `response` object passed to the middleware callback. Redirects can occur here. |\n| afterEach    |  fn[Function]  | Executes after all \"beforeEach\" middleware. Again a `matchedRoute` will be available in the `response` object passed to the middleware callback. The response body may also indicate a redirected route from a `beforeEach` middleware; this allows afterEach middleware to act on that information. No redirects however, are allowed at this point. So any changes to `redirect.to` will be ignored. |\n| after        |  fn[Function]  | Middleware here executes after the route has been updated in the browser. At least one middleware function is required here to call the `resolve |\n\n#### Middleware fn signature\n\n**_fn(request, response, next)_**\n\n`request`: {to: String, from: String} | Immutable original request object. Should never be modified.\n\n`response`: {to: String, from: String, `*matchedRoute`: Object} | Begins as a clone of request. Can be modified in `before` and `beforeEach` middleware.\n\n* `matchedRoute` will be the matched object from the route config.\n* The `response` object should be used to store and pass information down the middleware chain.\n* Redirects are made by updating `response.to` in `before` or `beforeEach` middleware.\n\n`next`: The next method must be called with the `response` object. Else the middleware chain will break and the route update will not occur.\n\n__Sample middleware__\n```js\nimport myRouter from 'my-router';\n\n// Middleware to redirect any requests to the /private dir to /login\nrouter.before(function(request, response, next) {\n  if (/private/.test(request.to)) {\n    response.to = '/login';\n  }\n  next(response);\n})\n```\n\n## Properties\n\nnone\n\n## Methods\n\n| Name | Arguments  | Description                  |\n| ---- | ---------- | ---------------------------- |\n| init | `config[Object]` | Initialize the router with the router configuration object |\n| navigate | `path[String]`, `force[Boolean]`, `popped[Boolean]`, `meta[Object]`  | performs path match and applies middleware |\n\n\\*\\* See middleware hooks for middleware methods\n","readmeFilename":"README.md"}