From 4f20cb9078dd4b795eac15553222081ffb9c674d Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 29 Apr 2021 16:31:55 -0300 Subject: [PATCH] new config and route options, added payload between before enter functions --- CHANGELOG.md | 9 + README.md | 108 +- package.json | 2 +- public/build/bundle.css | 2 +- public/build/bundle.js | 11208 +++++++++++++++++++++++++++- public/build/bundle.js.map | 2 +- src/App.svelte | 61 +- src/components/SCR_Loading.svelte | 3 + src/components/SCR_Router.svelte | 53 +- src/js/store/config.js | 58 +- src/testComponents/SCR_C4.svelte | 6 +- 11 files changed, 11459 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a997fb0..244565c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Svelte Router changelog +## 1.0.10 + +- Changed routeObjParam returned inside Before Enter Functions +- Added configuration option setScrollProps +- Added configuration option setUseScroll +- Added route option scrollProps +- Added route option ignoreScroll +- Added payload passing between all Before Enter Functions + ## 1.0.9 - Improved documentation diff --git a/README.md b/README.md index d6cd589..4454c56 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,13 @@ In a default Svelte installation you need to edit your package.json and add _-s_ SCR_CONFIG_STORE.setConsoleLogStores(false); SCR_CONFIG_STORE.setNavigationHistoryLimit(10); SCR_CONFIG_STORE.setHashMode(false); + SCR_CONFIG_STORE.setUseScroll(true); + SCR_CONFIG_STORE.setScrollProps({ + top: 0, + left: 0, + behavior: "smooth", + timeout: 10, + }); SCR_CONFIG_STORE.setOnError((err, routeObjParams) => { console.log("GLOBAL ERROR CONFIG", routeObjParams); }); @@ -104,6 +111,7 @@ In a default Svelte installation you need to edit your package.json and add _-s_ name: "routeOne", path: "/test1", component: SCR_C1, + ignoreScroll: true, beforeEnter: [ (resolve) => { console.log("beforeEnter Executed"); @@ -123,13 +131,19 @@ In a default Svelte installation you need to edit your package.json and add _-s_ lazyLoadComponent: () => import("./testComponents/SCR_C2.svelte"), title: "Second Route Title", beforeEnter: [ - (resolve, rFrom, rTo, params) => { + (resolve, rFrom, rTo, params, payload) => { console.log("beforeEnter Executed"); console.log(params); setTimeout(() => resolve(true), 1000); }, ], loadingProps: { loadingText: "Carregando 2..." }, + scrollProps: { + top: 100, + left: 100, + behavior: "smooth", + timeout: 1000, + }, }, { name: "routeThree", @@ -236,6 +250,22 @@ Let's see the options we have here: // ## Boolean considerTrailingSlashOnMatchingRoute: true // ## Default is true + // ## Use Scroll - enable or disables scrolling on entering the route + // ## Boolean + useScroll: true // ## Default is true + + // ## Scroll Props + // ## The scrolling props on entering the route if enabled + // ## Default Values: + // ## scrollProps: { + // ## top: 0, + // ## left: 0, + // ## behavior: "smooth", + // ## timeout: 10, // timeout must be greater than 10 milliseconds + // ## }, + // ## Object + scrollProps: "/notFound", // ## Default is "/notFound" + // ## Before Enter defines a function or array of Functions // ## that must execute before each route // ## Function or Array - of Functions @@ -289,11 +319,9 @@ SCR_CONFIG_STORE.setOnError((err, routeObjParams) => { // ## port: "5000" // ## protocol: "http:" // ## } - // ## { - // ## params: - // ## { - // ## myCustomParam: "OK THEN SHALL WE!" - // ## } + // ## routeObjParams: + // ## { + // ## myCustomParams: "Route Defined Param!" // ## } console.log("GLOBAL ERROR CONFIG", err); }); @@ -312,7 +340,7 @@ SCR_CONFIG_STORE.setOnError((err, routeObjParams) => { // ## 3) Route going to // ## 4) Route defined params SCR_CONFIG_STORE.setBeforeEnter([ - (resolve, routeFrom, routeTo, routeObjParams) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { // ## resolve - function // ## routeFrom: // ## { @@ -338,15 +366,21 @@ SCR_CONFIG_STORE.setBeforeEnter([ // ## } // ## routeObjParams: // ## { - // ## params: - // ## { - // ## myCustomParams: "Route Defined Param!" - // ## } + // ## myCustomParams: "Route Defined Param!" + // ## } + // ## You can pass variables to components and between beforeEnters - acumulative + // ## Before Resolving this PAYLOAD will be made available to all components too + // ## This is great to update the loading component or you can send variables down the chain of + // ## before Enter list + // ## DO NOT REDEFINE THIS - if you set this payload = ... it will lose its REFERENCE + // ## payload: + // ## { + // ## ... // ## } console.log("Global Before Enter Route - 1"); resolve(true); }, - (resolve, routeFrom, routeTo, routeObjParams) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { console.log("Global Before Enter Route - 2"); resolve(true); }, @@ -363,15 +397,26 @@ SCR_CONFIG_STORE.setConfig({ consoleLogStores: true, usesRouteLayout: true, considerTrailingSlashOnMatchingRoute: true, + useScroll: false, + scrollProps: { + top: 0, + left: 0, + behavior: "smooth", + timeout: 10, + }, onError: (err, routeObjParams) => { console.log("GLOBAL ERROR CONFIG", routeObjParams); }, beforeEnter: [ - (resolve, routeFrom, routeTo, routeObjParams) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { + payload.GBER1 = "My Custom Param to Pass"; console.log("Global Before Enter Route - 1"); resolve(true); }, - (resolve, routeFrom, routeTo, routeObjParams) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { + if (payload.GBER1) { + payload.GBER2 = "Yes, I will be set too!"; + } console.log("Global Before Enter Route - 2"); resolve(true); } @@ -427,6 +472,10 @@ import SCR_Layout from "./testComponents/SCR_C1.svelte"; // ## Boolean ignoreLayout: false, + // ## Ignore Scroll - if this route should ignore scrolling + // ## Boolean + ignoreScroll: true, + // ## Title - it defines the route title // ## String title: "First Route Title", @@ -492,7 +541,7 @@ import SCR_Layout from "./testComponents/SCR_C1.svelte"; // ## defining all functions that must be executed for this specific route // ## Function or Array (Functions) beforeEnter: [ - (resolve, routeFrom, routeTo, routeObjParams) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { // ## resolve - function // ## routeFrom: // ## { @@ -518,16 +567,29 @@ import SCR_Layout from "./testComponents/SCR_C1.svelte"; // ## } // ## routeObjParams: // ## { - // ## params: - // ## { - // ## myCustomParams: "Route Defined Param!" - // ## } + // ## myCustomParams: "Route Defined Param!" + // ## ... PAYLOAD VARIABLES will be included HERE! + // ## } + // ## You can pass variables to components and between beforeEnters - acumulative + // ## Before Resolving this PAYLOAD will be made available to all components too + // ## This is great to update the loading component or you can send variables down the chain of + // ## before Enter list + // ## DO NOT REDEFINE THIS - if you set this payload = ... it will lose its REFERENCE + // ## payload: + // ## { + // ## ... // ## } + payload.passingToNextBeforeEnter: "yes, I will be there!", + payload.passingToComponents: "yes, I will be there either!", + payload.passingToLoadingComponents: "yes, why not?", + payload.passingToLayoutComponents: "yes, everyone get this payload", + setTimeout(() => resolve(true), 2000); console.log("beforeEnter Executed"); resolve(true); }, - (resolve, routeFrom, routeTo, routeObjParams) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { + console.log(payload); setTimeout(() => resolve(true), 1000); console.log("beforeEnter Executed2"); resolve({ redirect: "/test2" }); @@ -561,11 +623,9 @@ import SCR_Layout from "./testComponents/SCR_C1.svelte"; // ## port: "5000" // ## protocol: "http:" // ## } + // ## routeObjParams: // ## { - // ## params: - // ## { - // ## myCustomParam: "OK THEN SHALL WE!" - // ## } + // ## myCustomParam: "OK THEN SHALL WE!" // ## } // ## Function onError: (err, routeObjParams) => { diff --git a/package.json b/package.json index 820de57..7f40c68 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelte-client-router", - "version": "1.0.9", + "version": "1.0.10", "author": "Arthur José Germano", "license": "MIT", "main": "src/index.js", diff --git a/public/build/bundle.css b/public/build/bundle.css index 66a564e..4a79990 100644 --- a/public/build/bundle.css +++ b/public/build/bundle.css @@ -1 +1 @@ -main.svelte-1gmv5eg{text-align:center;padding:1em;max-width:240px;margin:0 auto}main.svelte-ms9hc9{text-align:center;margin:0 auto;width:80%}.scr-button.svelte-ms9hc9{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:100%;color:#ff3e00;border:1px solid #ff3e00;margin-bottom:2rem}.scr-button.svelte-ms9hc9:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}.scr-main-layout.svelte-ww5h5s{display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;margin:1rem 0;padding:1rem 0;width:100%;min-height:1vh}.scr-main-layout__header.svelte-ww5h5s{text-align:center;color:#4ba700;border-bottom:1px solid #000;padding:1rem 0}.svelte-yb9j7x{box-sizing:border-box}.scr-main.svelte-yb9j7x{margin:0 auto;width:100%}.scr-section.svelte-yb9j7x{text-align:center;margin:0 auto;width:80%}.scr-h3.svelte-yb9j7x{color:#000;background-color:#fd984330;border-radius:0.5rem;padding:1rem}.scr-ul.svelte-yb9j7x{color:#000;background-color:#fd984330;border-radius:0.5rem}.scr-li.svelte-yb9j7x{padding:0.5rem}.scr-button.svelte-yb9j7x{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:100%;color:#ff3e00;border:1px solid #ff3e00}.scr-button.svelte-yb9j7x:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}.scr-main-layout.svelte-102jv8t{display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;margin:1rem 0;padding:1rem 0;width:100%;min-height:1vh}.scr-main-layout__header.svelte-102jv8t{text-align:center;color:#ff3e00;border-bottom:1px solid #000;padding:1rem 0}.scr-main-layout__p.svelte-102jv8t{text-align:center;color:#ff3e00}.scr-main-layout__footer.svelte-102jv8t{width:100%;border-top:1px solid #000;text-align:center;color:#ff3e00;padding:1rem 0}main.svelte-um95cl{text-align:center;padding:1em;max-width:240px;margin:0 auto;min-height:200vh}div.svelte-um95cl{min-height:25vh}.scr-button.svelte-um95cl{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:100%;color:#ff3e00;border:1px solid #ff3e00}.scr-button.svelte-um95cl:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}main.svelte-10f8n0o{text-align:center;margin:0 auto;width:100%}.scr-button.svelte-10f8n0o{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:80%;color:#ff3e00;border:1px solid #ff3e00;margin:0 auto}.scr-button.svelte-10f8n0o:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}.scr-p.svelte-zj7cmj{color:#ff3e00;text-transform:uppercase;font-size:4rem;font-weight:100}.scr-p-small.svelte-zj7cmj{color:#ff3e00;text-transform:uppercase;font-size:2rem;font-weight:100}.scr-center.svelte-146mxqr.svelte-146mxqr{position:relative;height:100vh;display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;text-align:center}.scr-h1.svelte-146mxqr.svelte-146mxqr{color:#579c34;animation:svelte-146mxqr-loading-text 1.5s linear infinite}.scr-lds-spinner.svelte-146mxqr.svelte-146mxqr{color:official;display:inline-block;position:relative;width:80px;height:80px;margin:0 auto}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr{transform-origin:40px 40px;animation:svelte-146mxqr-lds-spinner 1.2s linear infinite}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:after{content:" ";display:block;position:absolute;top:3px;left:37px;width:6px;height:18px;border-radius:20%;background:#579c34}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(1){transform:rotate(0deg);animation-delay:-1.1s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(3){transform:rotate(60deg);animation-delay:-0.9s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(4){transform:rotate(90deg);animation-delay:-0.8s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(5){transform:rotate(120deg);animation-delay:-0.7s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(6){transform:rotate(150deg);animation-delay:-0.6s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(7){transform:rotate(180deg);animation-delay:-0.5s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(8){transform:rotate(210deg);animation-delay:-0.4s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(9){transform:rotate(240deg);animation-delay:-0.3s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(10){transform:rotate(270deg);animation-delay:-0.2s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(11){transform:rotate(300deg);animation-delay:-0.1s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes svelte-146mxqr-lds-spinner{0%{opacity:1}100%{opacity:0}}@keyframes svelte-146mxqr-loading-text{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.scr-p.svelte-jhjhwz{color:#ff0000;text-transform:uppercase;font-size:4rem;font-weight:100}.scr-p-small.svelte-jhjhwz{color:#ff0000;text-transform:uppercase;font-size:2rem;font-weight:100}.scr-main-layout.svelte-1myuyum{display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;margin:1rem 0;padding:1rem 0;width:100%;min-height:1vh}.scr-main-layout__header.svelte-1myuyum{text-align:center;color:#ff3e00;border-bottom:1px solid #000;padding:1rem 0} \ No newline at end of file +main.svelte-ms9hc9{text-align:center;margin:0 auto;width:80%}.scr-button.svelte-ms9hc9{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:100%;color:#ff3e00;border:1px solid #ff3e00;margin-bottom:2rem}.scr-button.svelte-ms9hc9:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}.scr-main-layout.svelte-ww5h5s{display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;margin:1rem 0;padding:1rem 0;width:100%;min-height:1vh}.scr-main-layout__header.svelte-ww5h5s{text-align:center;color:#4ba700;border-bottom:1px solid #000;padding:1rem 0}main.svelte-1gmv5eg{text-align:center;padding:1em;max-width:240px;margin:0 auto}.scr-main-layout.svelte-102jv8t{display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;margin:1rem 0;padding:1rem 0;width:100%;min-height:1vh}.scr-main-layout__header.svelte-102jv8t{text-align:center;color:#ff3e00;border-bottom:1px solid #000;padding:1rem 0}.scr-main-layout__p.svelte-102jv8t{text-align:center;color:#ff3e00}.scr-main-layout__footer.svelte-102jv8t{width:100%;border-top:1px solid #000;text-align:center;color:#ff3e00;padding:1rem 0}main.svelte-um95cl{text-align:center;padding:1em;max-width:240px;margin:0 auto;min-height:200vh}div.svelte-um95cl{min-height:25vh}.scr-button.svelte-um95cl{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:100%;color:#ff3e00;border:1px solid #ff3e00}.scr-button.svelte-um95cl:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}main.svelte-10f8n0o{text-align:center;margin:0 auto;width:100%}.scr-button.svelte-10f8n0o{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:80%;color:#ff3e00;border:1px solid #ff3e00;margin:0 auto}.scr-button.svelte-10f8n0o:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}.svelte-yb9j7x{box-sizing:border-box}.scr-main.svelte-yb9j7x{margin:0 auto;width:100%}.scr-section.svelte-yb9j7x{text-align:center;margin:0 auto;width:80%}.scr-h3.svelte-yb9j7x{color:#000;background-color:#fd984330;border-radius:0.5rem;padding:1rem}.scr-ul.svelte-yb9j7x{color:#000;background-color:#fd984330;border-radius:0.5rem}.scr-li.svelte-yb9j7x{padding:0.5rem}.scr-button.svelte-yb9j7x{background-color:#ff3e0010;padding:1rem;border-radius:0.5rem;transition:all linear 0.2s;width:100%;color:#ff3e00;border:1px solid #ff3e00}.scr-button.svelte-yb9j7x:hover{background-color:#ff3e0040;cursor:pointer;font-weight:bolder}.scr-p.svelte-zj7cmj{color:#ff3e00;text-transform:uppercase;font-size:4rem;font-weight:100}.scr-p-small.svelte-zj7cmj{color:#ff3e00;text-transform:uppercase;font-size:2rem;font-weight:100}.scr-center.svelte-146mxqr.svelte-146mxqr{position:relative;height:100vh;display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;text-align:center}.scr-h1.svelte-146mxqr.svelte-146mxqr{color:#579c34;animation:svelte-146mxqr-loading-text 1.5s linear infinite}.scr-lds-spinner.svelte-146mxqr.svelte-146mxqr{color:official;display:inline-block;position:relative;width:80px;height:80px;margin:0 auto}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr{transform-origin:40px 40px;animation:svelte-146mxqr-lds-spinner 1.2s linear infinite}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:after{content:" ";display:block;position:absolute;top:3px;left:37px;width:6px;height:18px;border-radius:20%;background:#579c34}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(1){transform:rotate(0deg);animation-delay:-1.1s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(3){transform:rotate(60deg);animation-delay:-0.9s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(4){transform:rotate(90deg);animation-delay:-0.8s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(5){transform:rotate(120deg);animation-delay:-0.7s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(6){transform:rotate(150deg);animation-delay:-0.6s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(7){transform:rotate(180deg);animation-delay:-0.5s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(8){transform:rotate(210deg);animation-delay:-0.4s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(9){transform:rotate(240deg);animation-delay:-0.3s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(10){transform:rotate(270deg);animation-delay:-0.2s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(11){transform:rotate(300deg);animation-delay:-0.1s}.scr-lds-spinner.svelte-146mxqr div.svelte-146mxqr:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes svelte-146mxqr-lds-spinner{0%{opacity:1}100%{opacity:0}}@keyframes svelte-146mxqr-loading-text{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.scr-p.svelte-jhjhwz{color:#ff0000;text-transform:uppercase;font-size:4rem;font-weight:100}.scr-p-small.svelte-jhjhwz{color:#ff0000;text-transform:uppercase;font-size:2rem;font-weight:100}.scr-main-layout.svelte-1myuyum{display:grid;grid-template-columns:1fr;justify-content:center;align-content:center;margin:1rem 0;padding:1rem 0;width:100%;min-height:1vh}.scr-main-layout__header.svelte-1myuyum{text-align:center;color:#ff3e00;border-bottom:1px solid #000;padding:1rem 0} \ No newline at end of file diff --git a/public/build/bundle.js b/public/build/bundle.js index 565864c..edc39ac 100644 --- a/public/build/bundle.js +++ b/public/build/bundle.js @@ -1,8 +1,11210 @@ -var app=function(){"use strict";function e(){}function t(e,t){for(const n in t)e[n]=t[n];return e}function n(e){return e()}function r(){return Object.create(null)}function o(e){e.forEach(n)}function i(e){return"function"==typeof e}function a(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}function c(t,n,r){t.$$.on_destroy.push(function(t,...n){if(null==t)return e;const r=t.subscribe(...n);return r.unsubscribe?()=>r.unsubscribe():r}(n,r))}function s(e,t,n,r){if(e){const o=u(e,t,n,r);return e[0](o)}}function u(e,n,r,o){return e[1]&&o?t(r.ctx.slice(),e[1](o(n))):r.ctx}function l(e,t,n,r,o,i,a){const c=function(e,t,n,r){if(e[2]&&r){const o=e[2](r(n));if(void 0===t.dirty)return o;if("object"==typeof o){const e=[],n=Math.max(t.dirty.length,o.length);for(let r=0;re.removeEventListener(t,n,r)}function g(e,t,n){null==n?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function _(e,t){const n=Object.getOwnPropertyDescriptors(e.__proto__);for(const r in t)null==t[r]?e.removeAttribute(r):"style"===r?e.style.cssText=t[r]:"__value"===r?e.value=e[r]=t[r]:n[r]&&n[r].set?e[r]=t[r]:g(e,r,t[r])}function w(e,t){t=""+t,e.wholeText!==t&&(e.data=t)}let j;function R(e){j=e}function E(){if(!j)throw new Error("Function called outside component initialization");return j}const x=[],S=[],O=[],$=[],I=Promise.resolve();let C=!1;function N(e){O.push(e)}let T=!1;const L=new Set;function A(){if(!T){T=!0;do{for(let e=0;e{F.delete(e),r&&(n&&e.d(1),r())})),e.o(t)}}function U(e,t){const n=t.token={};function r(e,r,o,i){if(t.token!==n)return;t.resolved=i;let a=t.ctx;void 0!==o&&(a=a.slice(),a[o]=i);const c=e&&(t.current=e)(a);let s=!1;t.block&&(t.blocks?t.blocks.forEach(((e,n)=>{n!==r&&e&&(M(),z(e,1,1,(()=>{t.blocks[n]===e&&(t.blocks[n]=null)})),P())})):t.block.d(1),c.c(),D(c,1),c.m(t.mount(),t.anchor),s=!0),t.block=c,t.blocks&&(t.blocks[r]=c),s&&A()}if((o=e)&&"object"==typeof o&&"function"==typeof o.then){const n=E();if(e.then((e=>{R(n),r(t.then,1,t.value,e),R(null)}),(e=>{if(R(n),r(t.catch,2,t.error,e),R(null),!t.hasCatch)throw e})),t.current!==t.pending)return r(t.pending,0),!0}else{if(t.current!==t.then)return r(t.then,1,t.value,e),!0;t.resolved=e}var o}function H(e,t){const n={},r={},o={$$scope:1};let i=e.length;for(;i--;){const a=e[i],c=t[i];if(c){for(const e in a)e in c||(r[e]=1);for(const e in c)o[e]||(n[e]=c[e],o[e]=1);e[i]=c}else for(const e in a)o[e]=1}for(const e in r)e in n||(n[e]=void 0);return n}function q(e){return"object"==typeof e&&null!==e?e:{}}function G(e){e&&e.c()}function W(e,t,r,a){const{fragment:c,on_mount:s,on_destroy:u,after_update:l}=e.$$;c&&c.m(t,r),a||N((()=>{const t=s.map(n).filter(i);u?u.push(...t):o(t),e.$$.on_mount=[]})),l.forEach(N)}function J(e,t){const n=e.$$;null!==n.fragment&&(o(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function K(e,t){-1===e.$$.dirty[0]&&(x.push(e),C||(C=!0,I.then(A)),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const o=r.length?r[0]:n;return f.ctx&&c(f.ctx[e],f.ctx[e]=o)&&(!f.skip_bound&&f.bound[e]&&f.bound[e](o),d&&K(t,e)),n})):[],f.update(),d=!0,o(f.before_update),f.fragment=!!a&&a(f.ctx),n.target){if(n.hydrate){const e=function(e){return Array.from(e.childNodes)}(n.target);f.fragment&&f.fragment.l(e),e.forEach(v)}else f.fragment&&f.fragment.c();n.intro&&D(t.$$.fragment),W(t,n.target,n.anchor,n.customElement),A()}R(l)}class X{$destroy(){J(this,1),this.$destroy=e}$on(e,t){const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1)}}$set(e){var t;this.$$set&&(t=e,0!==Object.keys(t).length)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}var Y=function(){this.__data__=[],this.size=0};var Q=function(e,t){return e===t||e!=e&&t!=t};var Z=function(e,t){for(var n=e.length;n--;)if(Q(e[n][0],t))return n;return-1},ee=Array.prototype.splice;var te=function(e){var t=this.__data__,n=Z(t,e);return!(n<0)&&(n==t.length-1?t.pop():ee.call(t,n,1),--this.size,!0)};var ne=function(e){var t=this.__data__,n=Z(t,e);return n<0?void 0:t[n][1]};var re=function(e){return Z(this.__data__,e)>-1};var oe=function(e,t){var n=this.__data__,r=Z(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function ie(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991},Tt={};Tt["[object Float32Array]"]=Tt["[object Float64Array]"]=Tt["[object Int8Array]"]=Tt["[object Int16Array]"]=Tt["[object Int32Array]"]=Tt["[object Uint8Array]"]=Tt["[object Uint8ClampedArray]"]=Tt["[object Uint16Array]"]=Tt["[object Uint32Array]"]=!0,Tt["[object Arguments]"]=Tt["[object Array]"]=Tt["[object ArrayBuffer]"]=Tt["[object Boolean]"]=Tt["[object DataView]"]=Tt["[object Date]"]=Tt["[object Error]"]=Tt["[object Function]"]=Tt["[object Map]"]=Tt["[object Number]"]=Tt["[object Object]"]=Tt["[object RegExp]"]=Tt["[object Set]"]=Tt["[object String]"]=Tt["[object WeakMap]"]=!1;var Lt=function(e){return _t(e)&&Nt(e.length)&&!!Tt[Se(e)]};var At=function(e){return function(t){return e(t)}},kt=de((function(e,t){var n=t&&!t.nodeType&&t,r=n&&e&&!e.nodeType&&e,o=r&&r.exports===n&&pe.process,i=function(){try{var e=r&&r.require&&r.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=i})),Ft=kt&&kt.isTypedArray,Bt=Ft?At(Ft):Lt,Mt=Object.prototype.hasOwnProperty;var Pt=function(e,t){var n=St(e),r=!n&&xt(e),o=!n&&!r&&$t(e),i=!n&&!r&&!o&&Bt(e),a=n||r||o||i,c=a?gt(e.length,String):[],s=c.length;for(var u in e)!t&&!Mt.call(e,u)||a&&("length"==u||o&&("offset"==u||"parent"==u)||i&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Ct(u,s))||c.push(u);return c},Dt=Object.prototype;var zt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Dt)};var Ut=function(e,t){return function(n){return e(t(n))}},Ht=Ut(Object.keys,Object),qt=Object.prototype.hasOwnProperty;var Gt=function(e){if(!zt(e))return Ht(e);var t=[];for(var n in Object(e))qt.call(e,n)&&"constructor"!=n&&t.push(n);return t};var Wt=function(e){return null!=e&&Nt(e.length)&&!Ie(e)};var Jt=function(e){return Wt(e)?Pt(e):Gt(e)};var Kt=function(e,t){return e&&bt(t,Jt(t),e)};var Vt=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t},Xt=Object.prototype.hasOwnProperty;var Yt=function(e){if(!Oe(e))return Vt(e);var t=zt(e),n=[];for(var r in e)("constructor"!=r||!t&&Xt.call(e,r))&&n.push(r);return n};var Qt=function(e){return Wt(e)?Pt(e,!0):Yt(e)};var Zt=function(e,t){return e&&bt(t,Qt(t),e)},en=de((function(e,t){var n=t&&!t.nodeType&&t,r=n&&e&&!e.nodeType&&e,o=r&&r.exports===n?ye.Buffer:void 0,i=o?o.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=i?i(n):new e.constructor(n);return e.copy(r),r}}));var tn=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++nObject.assign(or(e),or(t)),ar=(e,t)=>cr(e)[t],cr=e=>{let t;return e.subscribe((e=>{t=Array.isArray(e)?[...e]:ir({},e)}))(),t},sr=(e,t)=>{e.update((e=>ir(e,t)))};function ur(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}function lr(e,t){if(t.length1?"s":"")+" required, but only "+t.length+" present")}function fr(e){lr(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"==typeof e&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}function dr(e,t){lr(2,arguments);var n=fr(e).getTime(),r=ur(t);return new Date(n+r)}function vr(e,t){lr(2,arguments);var n=fr(e),r=fr(t);return n.getTime(){if(null==e||""===e.trim())return!1;null!=t?(br(),n&&Number.isSafeInteger(n)&&Number.isInteger(n)&&n>0&&function(e,t){if(!Number.isInteger(t)||!Number.isSafeInteger(t))throw new Error("Time to add an expire key is not a safe integer");let n=wr(pr.getItem(hr));const r=dr(new Date,t);null!=n?(n=n.filter((t=>t.key!==e)),n.push({key:e,liveUntil:r})):n=[{key:e,liveUntil:r}];pr.setItem(hr,_r(n))}(e,n),pr.setItem(e,_r(t))):mr([e])},mr=e=>{if(!Array.isArray(e)||0===e.length)return;e.map((e=>{pr.getItem(e)&&(pr.removeItem(e),function(e,t=!0){let n=wr(pr.getItem(hr));if(null==n)return;n=n.filter((t=>t.key!==e)),n.length>0?pr.setItem(hr,_r(n)):pr.removeItem(hr);!t&&pr.getItem(e)&&pr.removeItem(e)}(e))}));let t=wr(pr.getItem(hr));null!=t&&(t=t.filter((t=>!e.includes(t.key))),t.length>0?pr.setItem(hr,_r(t)):pr.removeItem(hr))},br=()=>{let e=[],t=wr(pr.getItem(hr));return t&&t.length>0&&(t=t.filter((t=>{if(vr(new Date,new Date(t.liveUntil))&&pr.getItem(t.key))return!0;pr.removeItem(t.key),e.push(t.key)})),t.length>0?pr.setItem(hr,_r(t)):pr.removeItem(hr)),e},gr=(e,t)=>{const n=(e=>(br(),wr(pr.getItem(e))))(t);n&&e((()=>Object.assign({},or(n))))};function _r(e){return"object"==typeof e?JSON.stringify(e):e}function wr(e){if(!e)return e;try{return JSON.parse(e)}catch(t){return e}} -/*! + +(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); +var app = (function () { + 'use strict'; + + function noop() { } + function assign$1(tar, src) { + // @ts-ignore + for (const k in src) + tar[k] = src[k]; + return tar; + } + function is_promise(value) { + return value && typeof value === 'object' && typeof value.then === 'function'; + } + function add_location(element, file, line, column, char) { + element.__svelte_meta = { + loc: { file, line, column, char } + }; + } + function run(fn) { + return fn(); + } + function blank_object() { + return Object.create(null); + } + function run_all(fns) { + fns.forEach(run); + } + function is_function(thing) { + return typeof thing === 'function'; + } + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); + } + function is_empty(obj) { + return Object.keys(obj).length === 0; + } + function validate_store(store, name) { + if (store != null && typeof store.subscribe !== 'function') { + throw new Error(`'${name}' is not a store with a 'subscribe' method`); + } + } + function subscribe(store, ...callbacks) { + if (store == null) { + return noop; + } + const unsub = store.subscribe(...callbacks); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; + } + function component_subscribe(component, store, callback) { + component.$$.on_destroy.push(subscribe(store, callback)); + } + function create_slot(definition, ctx, $$scope, fn) { + if (definition) { + const slot_ctx = get_slot_context(definition, ctx, $$scope, fn); + return definition[0](slot_ctx); + } + } + function get_slot_context(definition, ctx, $$scope, fn) { + return definition[1] && fn + ? assign$1($$scope.ctx.slice(), definition[1](fn(ctx))) + : $$scope.ctx; + } + function get_slot_changes(definition, $$scope, dirty, fn) { + if (definition[2] && fn) { + const lets = definition[2](fn(dirty)); + if ($$scope.dirty === undefined) { + return lets; + } + if (typeof lets === 'object') { + const merged = []; + const len = Math.max($$scope.dirty.length, lets.length); + for (let i = 0; i < len; i += 1) { + merged[i] = $$scope.dirty[i] | lets[i]; + } + return merged; + } + return $$scope.dirty | lets; + } + return $$scope.dirty; + } + function update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) { + const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn); + if (slot_changes) { + const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn); + slot.p(slot_context, slot_changes); + } + } + + function append(target, node) { + target.appendChild(node); + } + function insert(target, node, anchor) { + target.insertBefore(node, anchor || null); + } + function detach(node) { + node.parentNode.removeChild(node); + } + function element(name) { + return document.createElement(name); + } + function text(data) { + return document.createTextNode(data); + } + function space() { + return text(' '); + } + function empty() { + return text(''); + } + function listen(node, event, handler, options) { + node.addEventListener(event, handler, options); + return () => node.removeEventListener(event, handler, options); + } + function attr(node, attribute, value) { + if (value == null) + node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) + node.setAttribute(attribute, value); + } + function set_attributes(node, attributes) { + // @ts-ignore + const descriptors = Object.getOwnPropertyDescriptors(node.__proto__); + for (const key in attributes) { + if (attributes[key] == null) { + node.removeAttribute(key); + } + else if (key === 'style') { + node.style.cssText = attributes[key]; + } + else if (key === '__value') { + node.value = node[key] = attributes[key]; + } + else if (descriptors[key] && descriptors[key].set) { + node[key] = attributes[key]; + } + else { + attr(node, key, attributes[key]); + } + } + } + function children(element) { + return Array.from(element.childNodes); + } + function set_style(node, key, value, important) { + node.style.setProperty(key, value, important ? 'important' : ''); + } + function custom_event(type, detail) { + const e = document.createEvent('CustomEvent'); + e.initCustomEvent(type, false, false, detail); + return e; + } + + let current_component; + function set_current_component(component) { + current_component = component; + } + function get_current_component() { + if (!current_component) + throw new Error('Function called outside component initialization'); + return current_component; + } + function onMount(fn) { + get_current_component().$$.on_mount.push(fn); + } + + const dirty_components = []; + const binding_callbacks = []; + const render_callbacks = []; + const flush_callbacks = []; + const resolved_promise = Promise.resolve(); + let update_scheduled = false; + function schedule_update() { + if (!update_scheduled) { + update_scheduled = true; + resolved_promise.then(flush); + } + } + function add_render_callback(fn) { + render_callbacks.push(fn); + } + function add_flush_callback(fn) { + flush_callbacks.push(fn); + } + let flushing = false; + const seen_callbacks = new Set(); + function flush() { + if (flushing) + return; + flushing = true; + do { + // first, call beforeUpdate functions + // and update components + for (let i = 0; i < dirty_components.length; i += 1) { + const component = dirty_components[i]; + set_current_component(component); + update(component.$$); + } + set_current_component(null); + dirty_components.length = 0; + while (binding_callbacks.length) + binding_callbacks.pop()(); + // then, once components are updated, call + // afterUpdate functions. This may cause + // subsequent updates... + for (let i = 0; i < render_callbacks.length; i += 1) { + const callback = render_callbacks[i]; + if (!seen_callbacks.has(callback)) { + // ...so guard against infinite loops + seen_callbacks.add(callback); + callback(); + } + } + render_callbacks.length = 0; + } while (dirty_components.length); + while (flush_callbacks.length) { + flush_callbacks.pop()(); + } + update_scheduled = false; + flushing = false; + seen_callbacks.clear(); + } + function update($$) { + if ($$.fragment !== null) { + $$.update(); + run_all($$.before_update); + const dirty = $$.dirty; + $$.dirty = [-1]; + $$.fragment && $$.fragment.p($$.ctx, dirty); + $$.after_update.forEach(add_render_callback); + } + } + const outroing = new Set(); + let outros; + function group_outros() { + outros = { + r: 0, + c: [], + p: outros // parent group + }; + } + function check_outros() { + if (!outros.r) { + run_all(outros.c); + } + outros = outros.p; + } + function transition_in(block, local) { + if (block && block.i) { + outroing.delete(block); + block.i(local); + } + } + function transition_out(block, local, detach, callback) { + if (block && block.o) { + if (outroing.has(block)) + return; + outroing.add(block); + outros.c.push(() => { + outroing.delete(block); + if (callback) { + if (detach) + block.d(1); + callback(); + } + }); + block.o(local); + } + } + + function handle_promise(promise, info) { + const token = info.token = {}; + function update(type, index, key, value) { + if (info.token !== token) + return; + info.resolved = value; + let child_ctx = info.ctx; + if (key !== undefined) { + child_ctx = child_ctx.slice(); + child_ctx[key] = value; + } + const block = type && (info.current = type)(child_ctx); + let needs_flush = false; + if (info.block) { + if (info.blocks) { + info.blocks.forEach((block, i) => { + if (i !== index && block) { + group_outros(); + transition_out(block, 1, 1, () => { + if (info.blocks[i] === block) { + info.blocks[i] = null; + } + }); + check_outros(); + } + }); + } + else { + info.block.d(1); + } + block.c(); + transition_in(block, 1); + block.m(info.mount(), info.anchor); + needs_flush = true; + } + info.block = block; + if (info.blocks) + info.blocks[index] = block; + if (needs_flush) { + flush(); + } + } + if (is_promise(promise)) { + const current_component = get_current_component(); + promise.then(value => { + set_current_component(current_component); + update(info.then, 1, info.value, value); + set_current_component(null); + }, error => { + set_current_component(current_component); + update(info.catch, 2, info.error, error); + set_current_component(null); + if (!info.hasCatch) { + throw error; + } + }); + // if we previously had a then/catch block, destroy it + if (info.current !== info.pending) { + update(info.pending, 0); + return true; + } + } + else { + if (info.current !== info.then) { + update(info.then, 1, info.value, promise); + return true; + } + info.resolved = promise; + } + } + + const globals = (typeof window !== 'undefined' + ? window + : typeof globalThis !== 'undefined' + ? globalThis + : global); + + function get_spread_update(levels, updates) { + const update = {}; + const to_null_out = {}; + const accounted_for = { $$scope: 1 }; + let i = levels.length; + while (i--) { + const o = levels[i]; + const n = updates[i]; + if (n) { + for (const key in o) { + if (!(key in n)) + to_null_out[key] = 1; + } + for (const key in n) { + if (!accounted_for[key]) { + update[key] = n[key]; + accounted_for[key] = 1; + } + } + levels[i] = n; + } + else { + for (const key in o) { + accounted_for[key] = 1; + } + } + } + for (const key in to_null_out) { + if (!(key in update)) + update[key] = undefined; + } + return update; + } + function get_spread_object(spread_props) { + return typeof spread_props === 'object' && spread_props !== null ? spread_props : {}; + } + + function bind(component, name, callback) { + const index = component.$$.props[name]; + if (index !== undefined) { + component.$$.bound[index] = callback; + callback(component.$$.ctx[index]); + } + } + function create_component(block) { + block && block.c(); + } + function mount_component(component, target, anchor, customElement) { + const { fragment, on_mount, on_destroy, after_update } = component.$$; + fragment && fragment.m(target, anchor); + if (!customElement) { + // onMount happens before the initial afterUpdate + add_render_callback(() => { + const new_on_destroy = on_mount.map(run).filter(is_function); + if (on_destroy) { + on_destroy.push(...new_on_destroy); + } + else { + // Edge case - component was destroyed immediately, + // most likely as a result of a binding initialising + run_all(new_on_destroy); + } + component.$$.on_mount = []; + }); + } + after_update.forEach(add_render_callback); + } + function destroy_component(component, detaching) { + const $$ = component.$$; + if ($$.fragment !== null) { + run_all($$.on_destroy); + $$.fragment && $$.fragment.d(detaching); + // TODO null out other refs, including component.$$ (but need to + // preserve final state?) + $$.on_destroy = $$.fragment = null; + $$.ctx = []; + } + } + function make_dirty(component, i) { + if (component.$$.dirty[0] === -1) { + dirty_components.push(component); + schedule_update(); + component.$$.dirty.fill(0); + } + component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31)); + } + function init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) { + const parent_component = current_component; + set_current_component(component); + const $$ = component.$$ = { + fragment: null, + ctx: null, + // state + props, + update: noop, + not_equal, + bound: blank_object(), + // lifecycle + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(parent_component ? parent_component.$$.context : options.context || []), + // everything else + callbacks: blank_object(), + dirty, + skip_bound: false + }; + let ready = false; + $$.ctx = instance + ? instance(component, options.props || {}, (i, ret, ...rest) => { + const value = rest.length ? rest[0] : ret; + if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { + if (!$$.skip_bound && $$.bound[i]) + $$.bound[i](value); + if (ready) + make_dirty(component, i); + } + return ret; + }) + : []; + $$.update(); + ready = true; + run_all($$.before_update); + // `false` as a special case of no DOM component + $$.fragment = create_fragment ? create_fragment($$.ctx) : false; + if (options.target) { + if (options.hydrate) { + const nodes = children(options.target); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); + } + else { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.c(); + } + if (options.intro) + transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor, options.customElement); + flush(); + } + set_current_component(parent_component); + } + /** + * Base class for Svelte components. Used when dev=false. + */ + class SvelteComponent { + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + $on(type, callback) { + const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); + callbacks.push(callback); + return () => { + const index = callbacks.indexOf(callback); + if (index !== -1) + callbacks.splice(index, 1); + }; + } + $set($$props) { + if (this.$$set && !is_empty($$props)) { + this.$$.skip_bound = true; + this.$$set($$props); + this.$$.skip_bound = false; + } + } + } + + function dispatch_dev(type, detail) { + document.dispatchEvent(custom_event(type, Object.assign({ version: '3.37.0' }, detail))); + } + function append_dev(target, node) { + dispatch_dev('SvelteDOMInsert', { target, node }); + append(target, node); + } + function insert_dev(target, node, anchor) { + dispatch_dev('SvelteDOMInsert', { target, node, anchor }); + insert(target, node, anchor); + } + function detach_dev(node) { + dispatch_dev('SvelteDOMRemove', { node }); + detach(node); + } + function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) { + const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : []; + if (has_prevent_default) + modifiers.push('preventDefault'); + if (has_stop_propagation) + modifiers.push('stopPropagation'); + dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers }); + const dispose = listen(node, event, handler, options); + return () => { + dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers }); + dispose(); + }; + } + function attr_dev(node, attribute, value) { + attr(node, attribute, value); + if (value == null) + dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute }); + else + dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value }); + } + function set_data_dev(text, data) { + data = '' + data; + if (text.wholeText === data) + return; + dispatch_dev('SvelteDOMSetData', { node: text, data }); + text.data = data; + } + function validate_slots(name, slot, keys) { + for (const slot_key of Object.keys(slot)) { + if (!~keys.indexOf(slot_key)) { + console.warn(`<${name}> received an unexpected slot "${slot_key}".`); + } + } + } + /** + * Base class for Svelte components with some minor dev-enhancements. Used when dev=true. + */ + class SvelteComponentDev extends SvelteComponent { + constructor(options) { + if (!options || (!options.target && !options.$$inline)) { + throw new Error("'target' is a required option"); + } + super(); + } + $destroy() { + super.$destroy(); + this.$destroy = () => { + console.warn('Component was already destroyed'); // eslint-disable-line no-console + }; + } + $capture_state() { } + $inject_state() { } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + var _listCacheClear = listCacheClear; + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + var eq_1 = eq; + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq_1(array[length][0], key)) { + return length; + } + } + return -1; + } + + var _assocIndexOf = assocIndexOf; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + var _listCacheDelete = listCacheDelete; + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + var _listCacheGet = listCacheGet; + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return _assocIndexOf(this.__data__, key) > -1; + } + + var _listCacheHas = listCacheHas; + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + var _listCacheSet = listCacheSet; + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = _listCacheClear; + ListCache.prototype['delete'] = _listCacheDelete; + ListCache.prototype.get = _listCacheGet; + ListCache.prototype.has = _listCacheHas; + ListCache.prototype.set = _listCacheSet; + + var _ListCache = ListCache; + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new _ListCache; + this.size = 0; + } + + var _stackClear = stackClear; + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + var _stackDelete = stackDelete; + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + var _stackGet = stackGet; + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + var _stackHas = stackHas; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn) { + var module = { exports: {} }; + return fn(module, module.exports), module.exports; + } + + function commonjsRequire (target) { + throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.'); + } + + /** Detect free variable `global` from Node.js. */ + + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + var _freeGlobal = freeGlobal; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = _freeGlobal || freeSelf || Function('return this')(); + + var _root = root; + + /** Built-in value references. */ + var Symbol$1 = _root.Symbol; + + var _Symbol = Symbol$1; + + /** Used for built-in method references. */ + var objectProto$c = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$9 = objectProto$c.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$c.toString; + + /** Built-in value references. */ + var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty$9.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; + } + + var _getRawTag = getRawTag; + + /** Used for built-in method references. */ + var objectProto$b = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto$b.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + var _objectToString = objectToString; + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? _getRawTag(value) + : _objectToString(value); + } + + var _baseGetTag = baseGetTag; + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + var isObject_1 = isObject; + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag$2 = '[object Function]', + genTag$1 = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag; + } + + var isFunction_1 = isFunction; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = _root['__core-js_shared__']; + + var _coreJsData = coreJsData; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + var _isMasked = isMasked; + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + var _toSource = toSource; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto$a = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$8 = objectProto$a.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$8).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); + } + + var _baseIsNative = baseIsNative; + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + var _getValue = getValue; + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; + } + + var _getNative = getNative; + + /* Built-in method references that are verified to be native. */ + var Map$1 = _getNative(_root, 'Map'); + + var _Map = Map$1; + + /* Built-in method references that are verified to be native. */ + var nativeCreate = _getNative(Object, 'create'); + + var _nativeCreate = nativeCreate; + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; + } + + var _hashClear = hashClear; + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + var _hashDelete = hashDelete; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto$9 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$7 = objectProto$9.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (_nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED$1 ? undefined : result; + } + return hasOwnProperty$7.call(data, key) ? data[key] : undefined; + } + + var _hashGet = hashGet; + + /** Used for built-in method references. */ + var objectProto$8 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$6.call(data, key); + } + + var _hashHas = hashHas; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + var _hashSet = hashSet; + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = _hashClear; + Hash.prototype['delete'] = _hashDelete; + Hash.prototype.get = _hashGet; + Hash.prototype.has = _hashHas; + Hash.prototype.set = _hashSet; + + var _Hash = Hash; + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new _Hash, + 'map': new (_Map || _ListCache), + 'string': new _Hash + }; + } + + var _mapCacheClear = mapCacheClear; + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + var _isKeyable = isKeyable; + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return _isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + var _getMapData = getMapData; + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = _getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + var _mapCacheDelete = mapCacheDelete; + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return _getMapData(this, key).get(key); + } + + var _mapCacheGet = mapCacheGet; + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return _getMapData(this, key).has(key); + } + + var _mapCacheHas = mapCacheHas; + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = _getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + var _mapCacheSet = mapCacheSet; + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = _mapCacheClear; + MapCache.prototype['delete'] = _mapCacheDelete; + MapCache.prototype.get = _mapCacheGet; + MapCache.prototype.has = _mapCacheHas; + MapCache.prototype.set = _mapCacheSet; + + var _MapCache = MapCache; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache) { + var pairs = data.__data__; + if (!_Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + var _stackSet = stackSet; + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new _ListCache(entries); + this.size = data.size; + } + + // Add methods to `Stack`. + Stack.prototype.clear = _stackClear; + Stack.prototype['delete'] = _stackDelete; + Stack.prototype.get = _stackGet; + Stack.prototype.has = _stackHas; + Stack.prototype.set = _stackSet; + + var _Stack = Stack; + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + var _arrayEach = arrayEach; + + var defineProperty = (function() { + try { + var func = _getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + var _defineProperty = defineProperty; + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty) { + _defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + var _baseAssignValue = baseAssignValue; + + /** Used for built-in method references. */ + var objectProto$7 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$5 = objectProto$7.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$5.call(object, key) && eq_1(objValue, value)) || + (value === undefined && !(key in object))) { + _baseAssignValue(object, key, value); + } + } + + var _assignValue = assignValue; + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + _baseAssignValue(object, key, newValue); + } else { + _assignValue(object, key, newValue); + } + } + return object; + } + + var _copyObject = copyObject; + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + var _baseTimes = baseTimes; + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + var isObjectLike_1 = isObjectLike; + + /** `Object#toString` result references. */ + var argsTag$2 = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike_1(value) && _baseGetTag(value) == argsTag$2; + } + + var _baseIsArguments = baseIsArguments; + + /** Used for built-in method references. */ + var objectProto$6 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$6.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable$1 = objectProto$6.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { + return isObjectLike_1(value) && hasOwnProperty$4.call(value, 'callee') && + !propertyIsEnumerable$1.call(value, 'callee'); + }; + + var isArguments_1 = isArguments; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + var isArray_1 = isArray; + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + var stubFalse_1 = stubFalse; + + var isBuffer_1 = createCommonjsModule(function (module, exports) { + /** Detect free variable `exports`. */ + var freeExports = exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? _root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse_1; + + module.exports = isBuffer; + }); + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$1 = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + var _isIndex = isIndex; + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + var isLength_1 = isLength; + + /** `Object#toString` result references. */ + var argsTag$1 = '[object Arguments]', + arrayTag$1 = '[object Array]', + boolTag$2 = '[object Boolean]', + dateTag$2 = '[object Date]', + errorTag$1 = '[object Error]', + funcTag$1 = '[object Function]', + mapTag$4 = '[object Map]', + numberTag$2 = '[object Number]', + objectTag$2 = '[object Object]', + regexpTag$2 = '[object RegExp]', + setTag$4 = '[object Set]', + stringTag$2 = '[object String]', + weakMapTag$2 = '[object WeakMap]'; + + var arrayBufferTag$2 = '[object ArrayBuffer]', + dataViewTag$3 = '[object DataView]', + float32Tag$2 = '[object Float32Array]', + float64Tag$2 = '[object Float64Array]', + int8Tag$2 = '[object Int8Array]', + int16Tag$2 = '[object Int16Array]', + int32Tag$2 = '[object Int32Array]', + uint8Tag$2 = '[object Uint8Array]', + uint8ClampedTag$2 = '[object Uint8ClampedArray]', + uint16Tag$2 = '[object Uint16Array]', + uint32Tag$2 = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = + typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = + typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = + typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = + typedArrayTags[uint32Tag$2] = true; + typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = + typedArrayTags[arrayBufferTag$2] = typedArrayTags[boolTag$2] = + typedArrayTags[dataViewTag$3] = typedArrayTags[dateTag$2] = + typedArrayTags[errorTag$1] = typedArrayTags[funcTag$1] = + typedArrayTags[mapTag$4] = typedArrayTags[numberTag$2] = + typedArrayTags[objectTag$2] = typedArrayTags[regexpTag$2] = + typedArrayTags[setTag$4] = typedArrayTags[stringTag$2] = + typedArrayTags[weakMapTag$2] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike_1(value) && + isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)]; + } + + var _baseIsTypedArray = baseIsTypedArray; + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + var _baseUnary = baseUnary; + + var _nodeUtil = createCommonjsModule(function (module, exports) { + /** Detect free variable `exports`. */ + var freeExports = exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && _freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + module.exports = nodeUtil; + }); + + /* Node.js helper references. */ + var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; + + var isTypedArray_1 = isTypedArray; + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$5.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray_1(value), + isArg = !isArr && isArguments_1(value), + isBuff = !isArr && !isArg && isBuffer_1(value), + isType = !isArr && !isArg && !isBuff && isTypedArray_1(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$3.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + _isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + var _arrayLikeKeys = arrayLikeKeys; + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; + } + + var _isPrototype = isPrototype; + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + var _overArg = overArg; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = _overArg(Object.keys, Object); + + var _nativeKeys = nativeKeys; + + /** Used for built-in method references. */ + var objectProto$3 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!_isPrototype(object)) { + return _nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$2.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + var _baseKeys = baseKeys; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength_1(value.length) && !isFunction_1(value); + } + + var isArrayLike_1 = isArrayLike; + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike_1(object) ? _arrayLikeKeys(object) : _baseKeys(object); + } + + var keys_1 = keys; + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && _copyObject(source, keys_1(source), object); + } + + var _baseAssign = baseAssign; + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + var _nativeKeysIn = nativeKeysIn; + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject_1(object)) { + return _nativeKeysIn(object); + } + var isProto = _isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty$1.call(object, key)))) { + result.push(key); + } + } + return result; + } + + var _baseKeysIn = baseKeysIn; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike_1(object) ? _arrayLikeKeys(object, true) : _baseKeysIn(object); + } + + var keysIn_1 = keysIn; + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && _copyObject(source, keysIn_1(source), object); + } + + var _baseAssignIn = baseAssignIn; + + var _cloneBuffer = createCommonjsModule(function (module, exports) { + /** Detect free variable `exports`. */ + var freeExports = exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? _root.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + module.exports = cloneBuffer; + }); + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + var _copyArray = copyArray; + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + var _arrayFilter = arrayFilter; + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + var stubArray_1 = stubArray; + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto$1.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols$1 = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols$1 ? stubArray_1 : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return _arrayFilter(nativeGetSymbols$1(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + var _getSymbols = getSymbols; + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return _copyObject(source, _getSymbols(source), object); + } + + var _copySymbols = copySymbols; + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + var _arrayPush = arrayPush; + + /** Built-in value references. */ + var getPrototype = _overArg(Object.getPrototypeOf, Object); + + var _getPrototype = getPrototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray_1 : function(object) { + var result = []; + while (object) { + _arrayPush(result, _getSymbols(object)); + object = _getPrototype(object); + } + return result; + }; + + var _getSymbolsIn = getSymbolsIn; + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return _copyObject(source, _getSymbolsIn(source), object); + } + + var _copySymbolsIn = copySymbolsIn; + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray_1(object) ? result : _arrayPush(result, symbolsFunc(object)); + } + + var _baseGetAllKeys = baseGetAllKeys; + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return _baseGetAllKeys(object, keys_1, _getSymbols); + } + + var _getAllKeys = getAllKeys; + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return _baseGetAllKeys(object, keysIn_1, _getSymbolsIn); + } + + var _getAllKeysIn = getAllKeysIn; + + /* Built-in method references that are verified to be native. */ + var DataView = _getNative(_root, 'DataView'); + + var _DataView = DataView; + + /* Built-in method references that are verified to be native. */ + var Promise$1 = _getNative(_root, 'Promise'); + + var _Promise = Promise$1; + + /* Built-in method references that are verified to be native. */ + var Set$1 = _getNative(_root, 'Set'); + + var _Set = Set$1; + + /* Built-in method references that are verified to be native. */ + var WeakMap = _getNative(_root, 'WeakMap'); + + var _WeakMap = WeakMap; + + /** `Object#toString` result references. */ + var mapTag$3 = '[object Map]', + objectTag$1 = '[object Object]', + promiseTag = '[object Promise]', + setTag$3 = '[object Set]', + weakMapTag$1 = '[object WeakMap]'; + + var dataViewTag$2 = '[object DataView]'; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = _toSource(_DataView), + mapCtorString = _toSource(_Map), + promiseCtorString = _toSource(_Promise), + setCtorString = _toSource(_Set), + weakMapCtorString = _toSource(_WeakMap); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = _baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag$2) || + (_Map && getTag(new _Map) != mapTag$3) || + (_Promise && getTag(_Promise.resolve()) != promiseTag) || + (_Set && getTag(new _Set) != setTag$3) || + (_WeakMap && getTag(new _WeakMap) != weakMapTag$1)) { + getTag = function(value) { + var result = _baseGetTag(value), + Ctor = result == objectTag$1 ? value.constructor : undefined, + ctorString = Ctor ? _toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag$2; + case mapCtorString: return mapTag$3; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag$3; + case weakMapCtorString: return weakMapTag$1; + } + } + return result; + }; + } + + var _getTag = getTag; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + var _initCloneArray = initCloneArray; + + /** Built-in value references. */ + var Uint8Array$1 = _root.Uint8Array; + + var _Uint8Array = Uint8Array$1; + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array(result).set(new _Uint8Array(arrayBuffer)); + return result; + } + + var _cloneArrayBuffer = cloneArrayBuffer; + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? _cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + var _cloneDataView = cloneDataView; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + var _cloneRegExp = cloneRegExp; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = _Symbol ? _Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + var _cloneSymbol = cloneSymbol; + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? _cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + var _cloneTypedArray = cloneTypedArray; + + /** `Object#toString` result references. */ + var boolTag$1 = '[object Boolean]', + dateTag$1 = '[object Date]', + mapTag$2 = '[object Map]', + numberTag$1 = '[object Number]', + regexpTag$1 = '[object RegExp]', + setTag$2 = '[object Set]', + stringTag$1 = '[object String]', + symbolTag$1 = '[object Symbol]'; + + var arrayBufferTag$1 = '[object ArrayBuffer]', + dataViewTag$1 = '[object DataView]', + float32Tag$1 = '[object Float32Array]', + float64Tag$1 = '[object Float64Array]', + int8Tag$1 = '[object Int8Array]', + int16Tag$1 = '[object Int16Array]', + int32Tag$1 = '[object Int32Array]', + uint8Tag$1 = '[object Uint8Array]', + uint8ClampedTag$1 = '[object Uint8ClampedArray]', + uint16Tag$1 = '[object Uint16Array]', + uint32Tag$1 = '[object Uint32Array]'; + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag$1: + return _cloneArrayBuffer(object); + + case boolTag$1: + case dateTag$1: + return new Ctor(+object); + + case dataViewTag$1: + return _cloneDataView(object, isDeep); + + case float32Tag$1: case float64Tag$1: + case int8Tag$1: case int16Tag$1: case int32Tag$1: + case uint8Tag$1: case uint8ClampedTag$1: case uint16Tag$1: case uint32Tag$1: + return _cloneTypedArray(object, isDeep); + + case mapTag$2: + return new Ctor; + + case numberTag$1: + case stringTag$1: + return new Ctor(object); + + case regexpTag$1: + return _cloneRegExp(object); + + case setTag$2: + return new Ctor; + + case symbolTag$1: + return _cloneSymbol(object); + } + } + + var _initCloneByTag = initCloneByTag; + + /** Built-in value references. */ + var objectCreate = Object.create; + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject_1(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + var _baseCreate = baseCreate; + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !_isPrototype(object)) + ? _baseCreate(_getPrototype(object)) + : {}; + } + + var _initCloneObject = initCloneObject; + + /** `Object#toString` result references. */ + var mapTag$1 = '[object Map]'; + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike_1(value) && _getTag(value) == mapTag$1; + } + + var _baseIsMap = baseIsMap; + + /* Node.js helper references. */ + var nodeIsMap = _nodeUtil && _nodeUtil.isMap; + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? _baseUnary(nodeIsMap) : _baseIsMap; + + var isMap_1 = isMap; + + /** `Object#toString` result references. */ + var setTag$1 = '[object Set]'; + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike_1(value) && _getTag(value) == setTag$1; + } + + var _baseIsSet = baseIsSet; + + /* Node.js helper references. */ + var nodeIsSet = _nodeUtil && _nodeUtil.isSet; + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? _baseUnary(nodeIsSet) : _baseIsSet; + + var isSet_1 = isSet; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG$1 = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG$1 = 4; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG$1, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG$1; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject_1(value)) { + return value; + } + var isArr = isArray_1(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return _copyArray(value, result); + } + } else { + var tag = _getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer_1(value)) { + return _cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : _initCloneObject(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet_1(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap_1(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys) + : (isFlat ? keysIn_1 : keys_1); + + var props = isArr ? undefined : keysFunc(value); + _arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + _assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + var _baseClone = baseClone; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return _baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + var cloneDeep_1 = cloneDeep; + + const assign = (target, source) => { + return Object.assign(cloneDeep_1(target), cloneDeep_1(source)); + }; + + const getStoreKey = (store, key) => { + const storeState = getStoreState(store); + return storeState[key]; + }; + + const getStoreState = (store) => { + let storeStateObj; + const unsubscribe = store.subscribe((storeState) => { + if (!Array.isArray(storeState)) { + storeStateObj = assign({}, storeState); + } else { + storeStateObj = [...storeState]; + } + }); + unsubscribe(); + return storeStateObj; + }; + + const updateStoreKey = (store, objValue) => { + store.update((storeState) => { + return assign(storeState, objValue); + }); + }; + + function toInteger(dirtyNumber) { + if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { + return NaN; + } + + var number = Number(dirtyNumber); + + if (isNaN(number)) { + return number; + } + + return number < 0 ? Math.ceil(number) : Math.floor(number); + } + + function requiredArgs(required, args) { + if (args.length < required) { + throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present'); + } + } + + /** + * @name toDate + * @category Common Helpers + * @summary Convert the given argument to an instance of Date. + * + * @description + * Convert the given argument to an instance of Date. + * + * If the argument is an instance of Date, the function returns its clone. + * + * If the argument is a number, it is treated as a timestamp. + * + * If the argument is none of the above, the function returns Invalid Date. + * + * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. + * + * @param {Date|Number} argument - the value to convert + * @returns {Date} the parsed date in the local time zone + * @throws {TypeError} 1 argument required + * + * @example + * // Clone the date: + * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) + * //=> Tue Feb 11 2014 11:30:30 + * + * @example + * // Convert the timestamp to date: + * const result = toDate(1392098430000) + * //=> Tue Feb 11 2014 11:30:30 + */ + + function toDate(argument) { + requiredArgs(1, arguments); + var argStr = Object.prototype.toString.call(argument); // Clone the date + + if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') { + // Prevent the date to lose the milliseconds when passed to new Date() in IE10 + return new Date(argument.getTime()); + } else if (typeof argument === 'number' || argStr === '[object Number]') { + return new Date(argument); + } else { + if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') { + // eslint-disable-next-line no-console + console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"); // eslint-disable-next-line no-console + + console.warn(new Error().stack); + } + + return new Date(NaN); + } + } + + /** + * @name addMilliseconds + * @category Millisecond Helpers + * @summary Add the specified number of milliseconds to the given date. + * + * @description + * Add the specified number of milliseconds to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the milliseconds added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 750 milliseconds to 10 July 2014 12:45:30.000: + * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) + * //=> Thu Jul 10 2014 12:45:30.750 + */ + + function addMilliseconds(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var timestamp = toDate(dirtyDate).getTime(); + var amount = toInteger(dirtyAmount); + return new Date(timestamp + amount); + } + + /** + * @name isBefore + * @category Common Helpers + * @summary Is the first date before the second one? + * + * @description + * Is the first date before the second one? + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date that should be before the other one to return true + * @param {Date|Number} dateToCompare - the date to compare with + * @returns {Boolean} the first date is before the second date + * @throws {TypeError} 2 arguments required + * + * @example + * // Is 10 July 1989 before 11 February 1987? + * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11)) + * //=> false + */ + + function isBefore(dirtyDate, dirtyDateToCompare) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var dateToCompare = toDate(dirtyDateToCompare); + return date.getTime() < dateToCompare.getTime(); + } + + const LS = localStorage; + const PREFIX_KEY$1 = "SCR_ROUTER_"; + const EXPIRE_KEYS$1 = `${PREFIX_KEY$1}EXPIRE_KEYS`; + + const getItem$1 = (key) => { + removeExpiredKeys$1(); + return fromJSON$1(LS.getItem(key)); + }; + + const setItem$1 = (key, value, time) => { + if (key === undefined || key === null || key.trim() === "") { + return false; + } + if (value === undefined || value === null) { + clearKeyList$1([key]); + return; + } + removeExpiredKeys$1(); + if ( + time && + Number.isSafeInteger(time) && + Number.isInteger(time) && + time > 0 + ) { + addExpireKey$1(key, time); + } + LS.setItem(key, toJSON$1(value)); + }; + + const removeItem$1 = (key) => { + removeExpiredKeys$1(); + const item = fromJSON$1(LS.getItem(key)); + if (item !== null && item !== undefined) { + LS.removeItem(key); + removeExpireKey$1(key); + } + return item; + }; + + const getAll$1 = () => { + if (!LS || LS.length === 0) { + return []; + } + removeExpiredKeys$1(); + let items = Object.assign({}, cloneDeep_1(LS)); + delete items[EXPIRE_KEYS$1]; + return items; + }; + + // clear all the expiration list and the keys + const clearExpireKeys$1 = () => { + const expire = fromJSON$1(LS.getItem(EXPIRE_KEYS$1)); + + if (expire === null || expire === undefined) { + return; + } + + expire.map((item) => LS.removeItem(item.key)); + + LS.removeItem(EXPIRE_KEYS$1); + }; + + // clear a given array list of keys + // affects expiration key list and the keys + const clearKeyList$1 = (keyList) => { + if (!Array.isArray(keyList) || keyList.length === 0) { + return; + } + + keyList.map((key) => { + if (LS.getItem(key)) { + LS.removeItem(key); + removeExpireKey$1(key); + } + }); + + // updating the remaining list keychain if it has left any item + let expire = fromJSON$1(LS.getItem(EXPIRE_KEYS$1)); + if (expire === null || expire === undefined) { + return; + } + + expire = expire.filter((item) => !keyList.includes(item.key)); + if (expire.length > 0) { + LS.setItem(EXPIRE_KEYS$1, toJSON$1(expire)); + } else { + LS.removeItem(EXPIRE_KEYS$1); + } + }; + + // Function to check and remove a key if expired + // If so... remove the key from the expiration list and the key + const removeExpiredKeys$1 = () => { + let keyList = []; + let expire = fromJSON$1(LS.getItem(EXPIRE_KEYS$1)); + + if (expire && expire.length > 0) { + expire = expire.filter((item) => { + if ( + isBefore(new Date(), new Date(item.liveUntil)) && + LS.getItem(item.key) + ) { + return true; + } + LS.removeItem(item.key); + keyList.push(item.key); + }); + + if (expire.length > 0) { + LS.setItem(EXPIRE_KEYS$1, toJSON$1(expire)); + } else { + LS.removeItem(EXPIRE_KEYS$1); + } + } + return keyList; + }; + + const setSvelteStoreInStorage$1 = ( + subscribe, + key, + timeout, + ignoreKeys = [] + ) => { + const unsubscribe = subscribe((store) => { + for (let iKeys of ignoreKeys) { + store[iKeys] = undefined; + } + setItem$1(key, store, timeout); + }); + unsubscribe(); + }; + + const getSvelteStoreInStorage$1 = (update, key) => { + const storage = getItem$1(key); + if (!storage) { + return; + } + update(() => { + return Object.assign({}, cloneDeep_1(storage)); + }); + }; + + // ------------------------------------------------- ## BELOW THIS LINE PRIVATE FUNCTIONS ONLY ## ------------------------------------------------- + // add a key in the expiration key list + // key: String + // time: In milliseconds + function addExpireKey$1(key, time) { + if (!Number.isInteger(time) || !Number.isSafeInteger(time)) { + throw new Error("Time to add an expire key is not a safe integer"); + } + + let expire = fromJSON$1(LS.getItem(EXPIRE_KEYS$1)); + const liveUntil = addMilliseconds(new Date(), time); + + if (expire !== null && expire !== undefined) { + expire = expire.filter((item) => item.key !== key); + expire.push({ key, liveUntil }); + } else { + expire = [{ key, liveUntil }]; + } + + LS.setItem(EXPIRE_KEYS$1, toJSON$1(expire)); + } + + // removes a specific key from expiration key list, may remove the key too + // key: String + // expireKeyOnly: Boolean -- only = true for only remove from expireKey OR the key itself too + function removeExpireKey$1(key, expireKeyOnly = true) { + let expire = fromJSON$1(LS.getItem(EXPIRE_KEYS$1)); + if (expire === null || expire === undefined) { + return; + } + + expire = expire.filter((item) => item.key !== key); + + if (expire.length > 0) { + LS.setItem(EXPIRE_KEYS$1, toJSON$1(expire)); + } else { + LS.removeItem(EXPIRE_KEYS$1); + } + + if (!expireKeyOnly && LS.getItem(key)) { + LS.removeItem(key); + } + } + + function toJSON$1(item) { + if (typeof item === "object") { + return JSON.stringify(item); + } + return item; + } + + function fromJSON$1(item) { + if (!item) { + return item; + } + try { + return JSON.parse(item); + } catch (err) { + return item; + } + } + + // setInterval(removeExpiredKeys, 5000); + + var LS$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + getItem: getItem$1, + setItem: setItem$1, + removeItem: removeItem$1, + getAll: getAll$1, + clearExpireKeys: clearExpireKeys$1, + clearKeyList: clearKeyList$1, + removeExpiredKeys: removeExpiredKeys$1, + setSvelteStoreInStorage: setSvelteStoreInStorage$1, + getSvelteStoreInStorage: getSvelteStoreInStorage$1 + }); + + /*! localForage -- Offline Storage, Improved Version 1.9.0 https://localforage.github.io/localForage (c) 2013-2017 Mozilla, Apache License 2.0 - */var jr=de((function(e,t){e.exports=function e(t,n,r){function o(a,c){if(!n[a]){if(!t[a]){if(!c&&ve)return ve(a);if(i)return i(a,!0);var s=new Error("Cannot find module '"+a+"'");throw s.code="MODULE_NOT_FOUND",s}var u=n[a]={exports:{}};t[a][0].call(u.exports,(function(e){var n=t[a][1][e];return o(n||e)}),u,u.exports,e,t,n,r)}return n[a].exports}for(var i=ve,a=0;a=43)}})).catch((function(){return!1}))}function j(e){return"boolean"==typeof h?u.resolve(h):w(e).then((function(e){return h=e}))}function R(e){var t=y[e.name],n={};n.promise=new u((function(e,t){n.resolve=e,n.reject=t})),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then((function(){return n.promise})):t.dbReady=n.promise}function E(e){var t=y[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function x(e,t){var n=y[e.name].deferredOperations.pop();if(n)return n.reject(t),n.promise}function S(e,t){return new u((function(n,r){if(y[e.name]=y[e.name]||F(),e.db){if(!t)return n(e.db);R(e),e.db.close()}var o=[e.name];t&&o.push(e.version);var i=a.open.apply(a,o);t&&(i.onupgradeneeded=function(t){var n=i.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore(p)}catch(n){if("ConstraintError"!==n.name)throw n;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),i.onerror=function(e){e.preventDefault(),r(i.error)},i.onsuccess=function(){n(i.result),E(e)}}))}function O(e){return S(e,!1)}function $(e){return S(e,!0)}function I(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.versione.db.version;if(r&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),o||n){if(n){var i=e.db.version+1;i>e.version&&(e.version=i)}return!0}return!1}function C(e){return new u((function(t,n){var r=new FileReader;r.onerror=n,r.onloadend=function(n){var r=btoa(n.target.result||"");t({__local_forage_encoded_blob:!0,data:r,type:e.type})},r.readAsBinaryString(e)}))}function N(e){return s([_(atob(e.data))],{type:e.type})}function T(e){return e&&e.__local_forage_encoded_blob}function L(e){var t=this,n=t._initReady().then((function(){var e=y[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return f(n,e,e),n}function A(e){R(e);for(var t=y[e.name],n=t.forages,r=0;r0&&(!e.db||"InvalidStateError"===o.name||"NotFoundError"===o.name))return u.resolve().then((function(){if(!e.db||"NotFoundError"===o.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),$(e)})).then((function(){return A(e).then((function(){k(e,t,n,r-1)}))})).catch(n);n(o)}}function F(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function B(e){var t=this,n={db:null};if(e)for(var r in e)n[r]=e[r];var o=y[n.name];o||(o=F(),y[n.name]=o),o.forages.push(t),t._initReady||(t._initReady=t.ready,t.ready=L);var i=[];function a(){return u.resolve()}for(var c=0;c>4,l[s++]=(15&r)<<4|o>>2,l[s++]=(3&o)<<6|63&i;return u}function pe(e){var t,n=new Uint8Array(e),r="";for(t=0;t>2],r+=V[(3&n[t])<<4|n[t+1]>>4],r+=V[(15&n[t+1])<<2|n[t+2]>>6],r+=V[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}function he(e,t){var n="";if(e&&(n=de.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===de.call(e.buffer))){var r,o=Q;e instanceof ArrayBuffer?(r=e,o+=ee):(r=e.buffer,"[object Int8Array]"===n?o+=ne:"[object Uint8Array]"===n?o+=re:"[object Uint8ClampedArray]"===n?o+=oe:"[object Int16Array]"===n?o+=ie:"[object Uint16Array]"===n?o+=ce:"[object Int32Array]"===n?o+=ae:"[object Uint32Array]"===n?o+=se:"[object Float32Array]"===n?o+=ue:"[object Float64Array]"===n?o+=le:t(new Error("Failed to get type for BinaryArray"))),t(o+pe(r))}else if("[object Blob]"===n){var i=new FileReader;i.onload=function(){var n=X+e.type+"~"+pe(this.result);t(Q+te+n)},i.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}}function ye(e){if(e.substring(0,Z)!==Q)return JSON.parse(e);var t,n=e.substring(fe),r=e.substring(Z,fe);if(r===te&&Y.test(n)){var o=n.match(Y);t=o[1],n=n.substring(o[0].length)}var i=ve(n);switch(r){case ee:return i;case te:return s([i],{type:t});case ne:return new Int8Array(i);case re:return new Uint8Array(i);case oe:return new Uint8ClampedArray(i);case ie:return new Int16Array(i);case ce:return new Uint16Array(i);case ae:return new Int32Array(i);case se:return new Uint32Array(i);case ue:return new Float32Array(i);case le:return new Float64Array(i);default:throw new Error("Unkown type: "+r)}}var me={serialize:he,deserialize:ye,stringToBuffer:ve,bufferToString:pe};function be(e,t,n,r){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],n,r)}function ge(e){var t=this,n={db:null};if(e)for(var r in e)n[r]="string"!=typeof e[r]?e[r].toString():e[r];var o=new u((function(e,r){try{n.db=openDatabase(n.name,String(n.version),n.description,n.size)}catch(e){return r(e)}n.db.transaction((function(o){be(o,n,(function(){t._dbInfo=n,e()}),(function(e,t){r(t)}))}),r)}));return n.serializer=me,o}function _e(e,t,n,r,o,i){e.executeSql(n,r,o,(function(e,a){a.code===a.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,c){c.rows.length?i(e,a):be(e,t,(function(){e.executeSql(n,r,o,i)}),i)}),i):i(e,a)}),i)}function we(e,t){var n=this;e=d(e);var r=new u((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){_e(n,o,"SELECT * FROM "+o.storeName+" WHERE key = ? LIMIT 1",[e],(function(e,n){var r=n.rows.length?n.rows.item(0).value:null;r&&(r=o.serializer.deserialize(r)),t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function je(e,t){var n=this,r=new u((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){_e(n,o,"SELECT * FROM "+o.storeName,[],(function(n,r){for(var i=r.rows,a=i.length,c=0;c0)return void i(Re.apply(o,[e,c,n,r-1]));a(t)}}))}))})).catch(a)}));return l(i,n),i}function Ee(e,t,n){return Re.apply(this,[e,t,n,1])}function xe(e,t){var n=this;e=d(e);var r=new u((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){_e(n,o,"DELETE FROM "+o.storeName+" WHERE key = ?",[e],(function(){t()}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function Se(e){var t=this,n=new u((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){_e(t,r,"DELETE FROM "+r.storeName,[],(function(){e()}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function Oe(e){var t=this,n=new u((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){_e(t,r,"SELECT COUNT(key) as c FROM "+r.storeName,[],(function(t,n){var r=n.rows.item(0).c;e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function $e(e,t){var n=this,r=new u((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){_e(n,o,"SELECT key FROM "+o.storeName+" WHERE id = ? LIMIT 1",[e+1],(function(e,n){var r=n.rows.length?n.rows.item(0).key:null;t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function Ie(e){var t=this,n=new u((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){_e(t,r,"SELECT key FROM "+r.storeName,[],(function(t,n){for(var r=[],o=0;o '__WebKitDatabaseInfoTable__'",[],(function(n,r){for(var o=[],i=0;i0}function Be(e){var t=this,n={};if(e)for(var r in e)n[r]=e[r];return n.keyPrefix=Ae(e,t._defaultConfig),Fe()?(t._dbInfo=n,n.serializer=me,u.resolve()):u.reject()}function Me(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo.keyPrefix,n=localStorage.length-1;n>=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}}));return l(n,e),n}function Pe(e,t){var n=this;e=d(e);var r=n.ready().then((function(){var t=n._dbInfo,r=localStorage.getItem(t.keyPrefix+e);return r&&(r=t.serializer.deserialize(r)),r}));return l(r,t),r}function De(e,t){var n=this,r=n.ready().then((function(){for(var t=n._dbInfo,r=t.keyPrefix,o=r.length,i=localStorage.length,a=1,c=0;c=0;t--){var n=localStorage.key(t);0===n.indexOf(e)&&localStorage.removeItem(n)}})):u.reject("Invalid arguments"),t),r}var Je={_driver:"localStorageWrapper",_initStorage:Be,_support:Le(),iterate:De,getItem:Pe,setItem:Ge,removeItem:qe,clear:Me,length:He,key:ze,keys:Ue,dropInstance:We},Ke=function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)},Ve=function(e,t){for(var n=e.length,r=0;r{try{if(null==e||""===e.trim())return!1;if(null==t)return void await Sr([e]);await Or(),n&&Number.isSafeInteger(n)&&Number.isInteger(n)&&n>0&&await async function(e,t){try{if(!Number.isInteger(t)||!Number.isSafeInteger(t))throw new Error("Time to add an expire key is not a safe integer");let n=Cr(await Er.getItem(Rr));const r=dr(new Date,t);null!=n?(n=n.filter((t=>t.key!==e)),n.push({key:e,liveUntil:r})):n=[{key:e,liveUntil:r}],await Er.setItem(Rr,Ir(n))}catch(e){throw e}}(e,n),await Er.setItem(e,Ir(t))}catch(e){throw e}},Sr=async e=>{try{if(!Array.isArray(e)||0===e.length)return;await e.map((async e=>{await Er.getItem(e)&&(await Er.removeItem(e),await async function(e,t=!0){try{let n=Cr(await Er.getItem(Rr));if(null==n)return;n=n.filter((t=>t.key!==e)),n.length>0?await Er.setItem(Rr,Ir(n)):await Er.removeItem(Rr),!t&&Er.getItem(e)&&await Er.removeItem(e)}catch(e){throw e}}(e))}));let t=Cr(await Er.getItem(Rr));if(null==t)return;t=t.filter((t=>!e.includes(t.key))),t.length>0?await Er.setItem(Rr,Ir(t)):await Er.removeItem(Rr)}catch(e){throw e}},Or=async()=>{try{let e=[],t=Cr(await Er.getItem(Rr));return t&&t.length>0&&(t=await t.filter((async t=>{if(vr(new Date,new Date(t.liveUntil))&&await Er.getItem(t.key))return!0;await Er.removeItem(t.key),e.push(t.key)})),t.length>0?await Er.setItem(Rr,Ir(t)):await Er.removeItem(Rr)),e}catch(e){throw e}},$r=async(e,t)=>{try{const n=await(async e=>{try{return await Or(),Cr(await Er.getItem(e))}catch(e){throw e}})(t);if(!n)return;e((()=>Object.assign({},or(n))))}catch(e){throw e}};function Ir(e){return"object"==typeof e?JSON.stringify(e):e}function Cr(e){if(!e)return e;try{return JSON.parse(e)}catch(t){return e}}const Nr=[];function Tr(t,n=e){let r;const o=[];function i(e){if(a(t,e)&&(t=e,r)){const e=!Nr.length;for(let e=0;e{const e=o.indexOf(s);-1!==e&&o.splice(e,1),0===o.length&&(r(),r=null)}}}}const Lr=["localstorage","indexeddb","none"],Ar=Tr(ir({},{hashMode:!1,navigationHistoryLimit:10,saveMode:"localstorage",notFoundRoute:"/notFound",errorRoute:"/error",consoleLogErrorMessages:!0,consoleLogStores:!0,usesRouteLayout:!0,considerTrailingSlashOnMatchingRoute:!0}));let kr,Fr;function Br(e){"boolean"==typeof e&&sr(Ar,{hashMode:e})}function Mr(e){"number"==typeof e&&sr(Ar,{navigationHistoryLimit:e})}function Pr(e){Lr.includes(e)&&sr(Ar,{saveMode:e})}function Dr(e){"string"==typeof e&&e.includes("/")&&sr(Ar,{notFoundRoute:e})}function zr(e){"string"==typeof e&&e.includes("/")&&sr(Ar,{errorRoute:e})}function Ur(e=!1){"boolean"==typeof e&&sr(Ar,{consoleLogErrorMessages:e})}function Hr(e=!1){"boolean"==typeof e&&sr(Ar,{consoleLogStores:e})}function qr(e){"boolean"==typeof e&&sr(Ar,{usesRouteLayout:e})}function Gr(e){e&&"function"==typeof e&&(kr=e)}function Wr(e){if(e&&("function"==typeof e||Array.isArray(e))){if(Array.isArray(e))for(let t of e)if("function"!=typeof t)return;Fr=e}}var Jr={subscribe:Ar.subscribe,update:Ar.update,setConfig:function(e){Br(e.hashMode),Mr(e.navigationHistoryLimit),Pr(e.saveMode),Dr(e.notFoundRoute),zr(e.errorRoute),Ur(e.consoleLogErrorMessages),Hr(e.consoleLogStores),qr(e.usesRouteLayout),setConsiderTrailingSlashOnMatchingRoute(e.considerTrailingSlashOnMatchingRoute),Gr(e.onError),Wr(e.beforeEnter)},getConfig:function(){return cr(Ar)},setHashMode:Br,getHashMode:function(){return ar(Ar,"hashMode")},setNavigationHistoryLimit:Mr,getNavigationHistoryLimit:function(){return ar(Ar,"navigationHistoryLimit")},setSaveMode:Pr,getSaveMode:function(){return ar(Ar,"saveMode")},setNotFoundRoute:Dr,getNotFoundRoute:function(){return ar(Ar,"notFoundRoute")},setErrorRoute:zr,getErrorRoute:function(){return ar(Ar,"errorRoute")},setConsoleLogErrorMessages:Ur,getConsoleLogErrorMessages:function(){return ar(Ar,"consoleLogErrorMessages")},setConsoleLogStores:Hr,getConsoleLogStores:function(){return ar(Ar,"consoleLogStores")},setUsesRouteLayout:qr,getUsesRouteLayout:function(){return ar(Ar,"usesRouteLayout")},setConsiderTrailingSlashOnMachingRoute:function(e){"boolean"==typeof e&&sr(Ar,{considerTrailingSlashOnMachingRoute:e})},getConsiderTrailingSlashOnMachingRoute:function(){return ar(Ar,"considerTrailingSlashOnMachingRoute")},setOnError:Gr,getOnError:function(){return kr},setBeforeEnter:Wr,getBeforeEnter:function(){return Fr}};const Kr="SRC_ROUTER_STORE",Vr=Tr(ir({},{routes:[],currentLocation:void 0,currentRoute:{name:void 0,pathname:void 0,params:[],hostname:void 0,protocol:void 0,port:void 0,origin:void 0,hash:void 0},fromRoute:{name:void 0,pathname:void 0,params:[],hostname:void 0,protocol:void 0,port:void 0,origin:void 0,hash:void 0},navigationHistory:[]}));async function Xr(e){if("object"==typeof e){const t=Qr();t.navigationHistoryLimit>0&&(e=e.slice(0,t.navigationHistoryLimit-1)),sr(Vr,{navigationHistory:e}),await Zr()}}function Yr(){return ar(Vr,"navigationHistory")}function Qr(){return Jr.getConfig()}async function Zr(){const e=Qr();return!(!e||!e.saveMode||"none"==e.saveMode)&&("localstorage"===e.saveMode?await((e,t,n,r=[])=>{e((e=>{for(let t of r)e[t]=void 0;yr(t,e,n)}))()})(Vr.subscribe,Kr):"indexeddb"===e.saveMode&&await(async(e,t,n,r=[])=>{try{e((async e=>{for(let t of r)e[t]=void 0;await xr(t,e,n)}))()}catch(e){throw e}})(Vr.subscribe,Kr),!1)}var eo={subscribe:Vr.subscribe,update:Vr.update,STORAGE_KEY:Kr,setRoutes:async function(e=[]){Array.isArray(e)&&(sr(Vr,{routes:e}),await Zr())},getRoutes:function(){return ar(Vr,"routes")},setCurrentRoute:async function(e){"object"==typeof e&&(sr(Vr,{currentRoute:e}),await Zr())},getCurrentRoute:function(){return ar(Vr,"currentRoute")},setFromRoute:async function(e){"object"==typeof e&&(sr(Vr,{fromRoute:e}),await Zr())},getFromRoute:function(){return ar(Vr,"fromRoute")},setNavigationHistory:Xr,getNavigationHistory:Yr,pushNavigationHistory:async function(e){let t=Yr()||[];t=[e,...t],await Xr(t)},popNavigationHistory:async function(){let e=Yr()||[];if(0==e.length)return!1;const t={...e[0]};return await Xr(e.slice(1)),t},setCurrentLocation:async function(e){"string"==typeof e&&(sr(Vr,{currentLocation:e}),await Zr())},getCurrentLocation:function(){return ar(Vr,"currentLocation")},getConfig:Qr};const to=Tr(ir({},{pushRoute:!1,params:{}}));let no;function ro(e={}){sr(to,{params:e})}function oo(){const e=ar(to,"params");return ro(),e}function io(){return eo.getNavigationHistory()}var ao={subscribe:to.subscribe,update:to.update,pushRoute:function(e,t,n){if(!e){const t=new Error(`SCR_ROUTER - Route not defined - ${e}`);if("function"!=typeof n)throw t;n(t)}const r=eo.getRoutes();no=void 0,"string"==typeof e?no=r.find((t=>t.path===e)):e.path?no=r.find((t=>t.path===e.path)):e.name&&(no=r.find((t=>t.name===e.name))),no||(no={notFound:!0,path:"string"==typeof e?e:e.path||""}),n&&"function"==typeof n&&(no.onError=n),ro(t),sr(to,{pushRoute:!0})},getPushRoute:function(){return ar(to,"pushRoute")},consumeRoutePushed:function(){const e=ir({},no);return no=void 0,sr(to,{pushRoute:!1}),e.params={...e.params,...oo()},e},backRoute:function(){let e;return io().length>0&&(e=eo.popNavigationHistory()),window.history.back(),e},getNavigationHistory:io,getConfig:function(){return Jr.getConfig()},setParams:ro,consumeParams:oo};function co(){this.resolveLoading=function(){this.resolveFunc&&(this.resolveFunc(!0),this.resolveFunc=void 0)},this.startLoading=function(){return this.callbackFunc=new Promise(((e,t)=>{this.resolveFunc=e})),this.callbackFunc}}function so(t){let n,r,o,i,a,c=(t[0].currentLocation||"='(")+"";return{c(){n=p("center"),r=p("p"),r.textContent="Not Found",o=y(),i=p("p"),a=h(c),g(r,"class","scr-p svelte-zj7cmj"),g(i,"class","scr-p-small svelte-zj7cmj")},m(e,t){d(e,n,t),f(n,r),f(n,o),f(n,i),f(i,a)},p(e,[t]){1&t&&c!==(c=(e[0].currentLocation||"='(")+"")&&w(a,c)},i:e,o:e,d(e){e&&v(n)}}}function uo(e,t,n){let r;return c(e,eo,(e=>n(0,r=e))),[r]}class lo extends X{constructor(e){super(),V(this,e,uo,so,a,{})}}function fo(t){let n,r,o,i,a;return{c(){n=p("center"),r=p("div"),r.innerHTML='
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
',o=y(),i=p("h1"),a=h(t[0]),g(r,"class","scr-lds-spinner svelte-146mxqr"),g(i,"class","scr-h1 svelte-146mxqr"),g(n,"class","scr-center svelte-146mxqr")},m(e,t){d(e,n,t),f(n,r),f(n,o),f(n,i),f(i,a)},p(e,[t]){1&t&&w(a,e[0])},i:e,o:e,d(e){e&&v(n)}}}function vo(e,t,n){let{loadingText:r="Loading..."}=t;return e.$$set=e=>{"loadingText"in e&&n(0,r=e.loadingText)},[r]}class po extends X{constructor(e){super(),V(this,e,vo,fo,a,{loadingText:0})}}function ho(t){let n,r,o,i,a;return{c(){n=p("center"),r=p("p"),r.textContent="Error",o=y(),i=p("p"),a=h(t[0]),g(r,"class","scr-p svelte-jhjhwz"),g(i,"class","scr-p-small svelte-jhjhwz")},m(e,t){d(e,n,t),f(n,r),f(n,o),f(n,i),f(i,a)},p(e,[t]){1&t&&w(a,e[0])},i:e,o:e,d(e){e&&v(n)}}}function yo(e,t,n){let{errorMessage:r="An error has occured!"}=t;return e.$$set=e=>{"errorMessage"in e&&n(0,r=e.errorMessage)},[r]}class mo extends X{constructor(e){super(),V(this,e,yo,ho,a,{errorMessage:0})}}const bo=e=>({}),go=e=>({});function _o(e){let t,n,r;const o=e[1].scr_header,i=s(o,e,e[0],go),a=i||function(e){let t;return{c(){t=p("h1"),t.textContent="Svelte Client Router - Example Layout!",g(t,"class","scr-main-layout__header svelte-1myuyum")},m(e,n){d(e,t,n)},d(e){e&&v(t)}}}(),c=e[1].default,u=s(c,e,e[0],null);return{c(){t=p("main"),a&&a.c(),n=y(),u&&u.c(),g(t,"class","scr-main-layout svelte-1myuyum")},m(e,o){d(e,t,o),a&&a.m(t,null),f(t,n),u&&u.m(t,null),r=!0},p(e,[t]){i&&i.p&&1&t&&l(i,o,e,e[0],t,bo,go),u&&u.p&&1&t&&l(u,c,e,e[0],t,null,null)},i(e){r||(D(a,e),D(u,e),r=!0)},o(e){z(a,e),z(u,e),r=!1},d(e){e&&v(t),a&&a.d(e),u&&u.d(e)}}}function wo(e,t,n){let{$$slots:r={},$$scope:o}=t;return e.$$set=e=>{"$$scope"in e&&n(0,o=e.$$scope)},[o,r]}class jo extends X{constructor(e){super(),V(this,e,wo,_o,a,{})}}function Ro(t){return{c:e,m:e,p:e,i:e,o:e,d:e}}function Eo(e){let t,n,r,o;const i=[So,xo],a=[];function c(e,t){return e[1].usesRouteLayout&&"function"==typeof e[6]?0:1}return t=c(e),n=a[t]=i[t](e),{c(){n.c(),r=m()},m(e,n){a[t].m(e,n),d(e,r,n),o=!0},p(e,o){let s=t;t=c(e),t===s?a[t].p(e,o):(M(),z(a[s],1,1,(()=>{a[s]=null})),P(),n=a[t],n?n.p(e,o):(n=a[t]=i[t](e),n.c()),D(n,1),n.m(r.parentNode,r))},i(e){o||(D(n),o=!0)},o(e){z(n),o=!1},d(e){a[t].d(e),e&&v(r)}}}function xo(e){let n,r,o;const i=[e[2]];var a=e[4];function c(e){let n={};for(let e=0;e{J(e,1)})),P()}a?(n=new a(c()),G(n.$$.fragment),D(n.$$.fragment,1),W(n,r.parentNode,r)):n=null}else a&&n.$set(o)},i(e){o||(n&&D(n.$$.fragment,e),o=!0)},o(e){n&&z(n.$$.fragment,e),o=!1},d(e){e&&v(r),n&&J(n,e)}}}function So(e){let n,r,o;const i=[e[2]];var a=e[6];function c(e){let n={$$slots:{default:[Oo]},$$scope:{ctx:e}};for(let e=0;e{J(e,1)})),P()}a?(n=new a(c(e)),G(n.$$.fragment),D(n.$$.fragment,1),W(n,r.parentNode,r)):n=null}else a&&n.$set(o)},i(e){o||(n&&D(n.$$.fragment,e),o=!0)},o(e){n&&z(n.$$.fragment,e),o=!1},d(e){e&&v(r),n&&J(n,e)}}}function Oo(e){let n,r,o;const i=[e[2]];var a=e[4];function c(e){let n={};for(let e=0;e{J(e,1)})),P()}a?(n=new a(c()),G(n.$$.fragment),D(n.$$.fragment,1),W(n,r.parentNode,r)):n=null}else a&&n.$set(o)},i(e){o||(n&&D(n.$$.fragment,e),o=!0)},o(e){n&&z(n.$$.fragment,e),o=!1},d(e){e&&v(r),n&&J(n,e)}}}function $o(e){let n,r,o;const i=[e[3]];var a=e[0];function c(e){let n={};for(let e=0;e{J(e,1)})),P()}a?(n=new a(c()),G(n.$$.fragment),D(n.$$.fragment,1),W(n,r.parentNode,r)):n=null}else a&&n.$set(o)},i(e){o||(n&&D(n.$$.fragment,e),o=!0)},o(e){n&&z(n.$$.fragment,e),o=!1},d(e){e&&v(r),n&&J(n,e)}}}function Io(e){let t,n,r,o={ctx:e,current:null,token:null,hasCatch:!1,pending:$o,then:Eo,catch:Ro,value:24,blocks:[,,,]};return U(n=e[5],o),{c(){t=m(),o.block.c()},m(e,n){d(e,t,n),o.block.m(e,o.anchor=n),o.mount=()=>t.parentNode,o.anchor=t,r=!0},p(t,[r]){if(e=t,o.ctx=e,32&r&&n!==(n=e[5])&&U(n,o));else{const t=e.slice();t[24]=o.resolved,o.block.p(t,r)}},i(e){r||(D(o.block),r=!0)},o(e){for(let e=0;e<3;e+=1){z(o.blocks[e])}r=!1},d(e){e&&v(t),o.block.d(e),o.token=null,o=null}}}function Co(e){return e?Array.isArray(e)?e:"function"==typeof e?[e]:[]:[]}function No(e){let t={};return e.replace(/[?&]+([^=&]+)=([^&]*)/gi,(function(e,n,r){t[n]=r})),t}function To(e,t,n){let r,o,i;c(e,Jr,(e=>n(1,r=e))),c(e,eo,(e=>n(13,o=e))),c(e,ao,(e=>n(14,i=e)));let a,s,u,{routes:l}=t,{notFoundComponent:f=lo}=t,{errorComponent:d=mo}=t,{defaultLayoutComponent:v=jo}=t,{loadingComponent:p=po}=t,{allProps:h={}}=t,{allLoadingProps:y={}}=t,m={},b={},g=v,_=new co;function w(e,t=!0){const n=(r.hashMode?"#":"")+e;history.pushState?history.pushState(null,null,n):location.hash=n,t&&window.dispatchEvent(new Event("popstate"))}function j(e,t){return n(2,m={}),e&&e.params&&n(2,m={params:{...e.params,...ir({},h)}}),n(2,m={...m,...t,currentRoute:{...s,name:e.name,pathname:e.path},fromRoute:o.fromRoute}),m}function R(e,t,o){return n(4,a=d),j(o,{errorMessage:e}),t&&r.consoleLogErrorMessages&&console.error(t),w(r.errorRoute,!1)}async function x(e,t=!0){try{if(function(){let e=location.pathname;r.hashMode&&location.hash&&(e=location.hash.slice(1)),s={pathname:e,params:No(location.href),hostname:location.hostname,protocol:location.protocol,port:location.port,origin:location.origin,hash:location.hash}}(),n(6,g=!1),s.pathname===r.errorRoute)return void n(4,a=d);if(e){if(e.notFound)return await eo.setCurrentLocation(e.path),w(r.notFoundRoute)}else e=o.routes.find((e=>e.path==s.pathname||r.considerTrailingSlashOnMatchingRoute&&e.path+"/"==s.pathname));if(!e)return n(4,a=f),s.pathname!=r.notFoundRoute&&(await eo.setCurrentLocation(s.pathname),w(r.notFoundRoute));if(n(5,u=_.startLoading()),n(3,b={...ir({},y)}),e.loadingProps&&n(3,b={...b,...e.loadingProps}),!e.component&&!e.lazyLoadComponent)throw new Error(`No component defined for (${e.name} - ${e.path})!`);await eo.setCurrentLocation(s.pathname);const i=Jr.getBeforeEnter();if(!e.beforeEnter&&(!i||e.ignoreGlobalBeforeFunction))return await O(e,t);const c=Co(e.beforeEnter);if(e.ignoreGlobalBeforeFunction)await S(e,c,t);else{const n=Co(i),r=e.executeRouteBEFBeforeGlobalBEF?[...c,...n]:[...n,...c];await S(e,r,t)}}catch(t){_.resolveLoading(),Jr.getOnError()&&Jr.getOnError()(t,j(e)),R(`SCR_ROUTER - ${t}!`,t,e)}finally{_.resolveLoading()}}async function S(e,t,n){const r=ir({},o.currentRoute),i=ir({name:e.name},s);let a,c;for(let n of t){if(!n||"function"!=typeof n)throw new Error(`SCR_ROUTER - Before Enter Function of route (${e.name} - ${e.path}) is not a function!`);if(a=await new Promise((async(t,o)=>{try{c=void 0,e.params&&(c={params:e.params}),await n(t,r,i,c)}catch(e){t({SCR_ROUTE_ERROR:!0,error:e})}})),!0!==a){if(!a)return w(o.currentRoute.pathname);if(a.SCR_ROUTE_ERROR){if(e.onError&&"function"==typeof e.onError)return e.onError(a.error,j(e)),R(`SCR_ROUTER - ${a.error}!`,a.error,e);throw new Error(`Error on route (${e.name} - ${e.path}) - ${error}!`)}if(a&&(a.redirect||a.path))return w(a.redirect||a.path);if(a&&a.name){const t=o.routes.find((e=>e.name===a.name));if(!t){let t=new Error(`Error not found route name (${a.name})`);if(e.onError&&"function"==typeof e.onError)return e.onError(t,j(e)),!1;throw t}return w(t.path)}}}return await O(e,n)}async function O(e,t=!1){e.title&&(document.title=e.title),await eo.setFromRoute(o.currentRoute),await eo.pushNavigationHistory(o.currentRoute),t?await eo.setCurrentRoute({...s,name:e.name}):await eo.setCurrentRoute({pathname:e.path,params:{...e.params},hostname:s.hostname,protocol:s.protocol,port:s.port,origin:s.origin,hash:s.hash,name:e.name});const i=j(e);if(e.afterBeforeEnter&&"function"==typeof e.afterBeforeEnter&&e.afterBeforeEnter(i),r.usesRouteLayout&&!e.ignoreLayout)if("function"==typeof e.lazyLoadLayoutComponent){const t=await e.lazyLoadLayoutComponent();if(!t||!t.default)throw new Error(`Lazy Load Layout Component defined for (${e.name} - ${e.path}) could not be loaded`);n(6,g=t.default)}else e.layoutComponent?n(6,g=e.layoutComponent):n(6,g=v);else n(6,g=!1);if("function"==typeof e.lazyLoadComponent){const t=await e.lazyLoadComponent();if(!t||!t.default)throw new Error(`Lazy Load Component defined for (${e.name} - ${e.path}) could not be loaded`);n(4,a=t.default)}return _.resolveLoading(),w(e.path,!1)}var $;return $=async()=>{if("localstorage"===r.saveMode?await gr(eo.update,eo.STORAGE_KEY):"indexeddb"===r.saveMode&&await $r(eo.update,eo.STORAGE_KEY),l&&await eo.setRoutes(l),!o.routes||0==o.routes.length){const e=new Error("SCR_ROUTER - No routes were defined!");return Jr.getOnError()?Jr.getOnError()(e):R(`SCR_ROUTER - ${e}!`,e),n(4,a=d),e}await x()},E().$$.on_mount.push($),window.addEventListener("popstate",(async e=>{await x()})),e.$$set=e=>{"routes"in e&&n(7,l=e.routes),"notFoundComponent"in e&&n(8,f=e.notFoundComponent),"errorComponent"in e&&n(9,d=e.errorComponent),"defaultLayoutComponent"in e&&n(10,v=e.defaultLayoutComponent),"loadingComponent"in e&&n(0,p=e.loadingComponent),"allProps"in e&&n(11,h=e.allProps),"allLoadingProps"in e&&n(12,y=e.allLoadingProps)},e.$$.update=()=>{8194&e.$$.dirty&&r.consoleLogStores&&(console.log(o),console.log(r)),16384&e.$$.dirty&&i.pushRoute&&x(ao.consumeRoutePushed(),!1)},[p,r,m,b,a,u,g,l,f,d,v,h,y,o,i]}function Lo(e){let n,r,o,i;const a=e[6].default,c=s(a,e,e[5],null);let u=[e[0]],f={};for(let e=0;e{"props"in e&&n(2,i=e.props),"onError"in e&&n(3,a=e.onError),"to"in e&&n(4,c=e.to),"elementProps"in e&&n(0,s=e.elementProps),"$$scope"in e&&n(5,o=e.$$scope)},[s,function(){c?ao.pushRoute(c,i,a):alert("SCR_ROUTERLINK Component\n- to property is not defined")},i,a,c,o,r]}const ko=class extends X{constructor(e){super(),V(this,e,To,Io,a,{routes:7,notFoundComponent:8,errorComponent:9,defaultLayoutComponent:10,loadingComponent:0,allProps:11,allLoadingProps:12})}},Fo=class extends X{constructor(e){super(),V(this,e,Ao,Lo,a,{props:2,onError:3,to:4,elementProps:0})}},Bo=Jr,Mo=ao.pushRoute,Po=ao.backRoute;function Do(t){let n;return{c(){n=p("main"),n.textContent="C1",g(n,"class","svelte-1gmv5eg")},m(e,t){d(e,n,t)},p:e,i:e,o:e,d(e){e&&v(n)}}}class zo extends X{constructor(e){super(),V(this,e,null,Do,a,{})}}function Uo(t){let n,r,i,a,c,s,u,l,m,_,j,R,E,x,S,O,$,I,C,N,T,L,A,k,F,B,M,P,D,z,U,H,q,G,W,J,K,V,X,Y,Q,Z,ee=JSON.stringify(t[0])+"",te=JSON.stringify(t[1])+"",ne=JSON.stringify(t[2])+"";return{c(){n=p("main"),r=p("h2"),r.textContent="Component Four",i=y(),a=p("span"),a.textContent="Params Defined on Route:",c=y(),s=p("br"),u=y(),l=p("blockquote"),m=p("pre"),_=h(ee),j=y(),R=p("br"),E=y(),x=p("span"),x.textContent="Current Route Object:",S=y(),O=p("br"),$=y(),I=p("blockquote"),C=p("pre"),N=h(te),T=y(),L=p("br"),A=y(),k=p("span"),k.textContent="From Route Object:",F=y(),B=p("br"),M=y(),P=p("blockquote"),D=p("pre"),z=h(ne),U=y(),H=p("br"),q=y(),G=p("button"),G.textContent="Route One - GO!",W=y(),J=p("button"),J.textContent="Route Two - GO!",K=y(),V=p("button"),V.textContent="Route Three - GO!",X=y(),Y=p("button"),Y.textContent="Route Five - GO!",g(G,"class","scr-button svelte-ms9hc9"),g(J,"class","scr-button svelte-ms9hc9"),g(V,"class","scr-button svelte-ms9hc9"),g(Y,"class","scr-button svelte-ms9hc9"),g(n,"class","svelte-ms9hc9")},m(e,o){d(e,n,o),f(n,r),f(n,i),f(n,a),f(n,c),f(n,s),f(n,u),f(n,l),f(l,m),f(m,_),f(n,j),f(n,R),f(n,E),f(n,x),f(n,S),f(n,O),f(n,$),f(n,I),f(I,C),f(C,N),f(n,T),f(n,L),f(n,A),f(n,k),f(n,F),f(n,B),f(n,M),f(n,P),f(P,D),f(D,z),f(n,U),f(n,H),f(n,q),f(n,G),f(n,W),f(n,J),f(n,K),f(n,V),f(n,X),f(n,Y),Q||(Z=[b(G,"click",t[3]),b(J,"click",t[4]),b(V,"click",t[5]),b(Y,"click",t[6])],Q=!0)},p(e,[t]){1&t&&ee!==(ee=JSON.stringify(e[0])+"")&&w(_,ee),2&t&&te!==(te=JSON.stringify(e[1])+"")&&w(N,te),4&t&&ne!==(ne=JSON.stringify(e[2])+"")&&w(z,ne)},i:e,o:e,d(e){e&&v(n),Q=!1,o(Z)}}}function Ho(e,t,n){let{params:r}=t,{currentRoute:o}=t,{fromRoute:i}=t;console.log(r);return e.$$set=e=>{"params"in e&&n(0,r=e.params),"currentRoute"in e&&n(1,o=e.currentRoute),"fromRoute"in e&&n(2,i=e.fromRoute)},[r,o,i,()=>{Mo({name:"routeOne"})},()=>{Mo({name:"routeTwo"})},()=>{Mo({name:"routeThree"})},()=>{Mo({name:"routeFive"})}]}class qo extends X{constructor(e){super(),V(this,e,Ho,Uo,a,{params:0,currentRoute:1,fromRoute:2})}}var Go=Object.freeze({__proto__:null,default:qo});const Wo=e=>({}),Jo=e=>({});function Ko(e){let t,n,r;const o=e[1].scr_header,i=s(o,e,e[0],Jo),a=i||function(e){let t;return{c(){t=p("h1"),t.innerHTML="Svelte Client Router
Custom Global Example Layout!",g(t,"class","scr-main-layout__header svelte-ww5h5s")},m(e,n){d(e,t,n)},d(e){e&&v(t)}}}(),c=e[1].default,u=s(c,e,e[0],null);return{c(){t=p("main"),a&&a.c(),n=y(),u&&u.c(),g(t,"class","scr-main-layout svelte-ww5h5s")},m(e,o){d(e,t,o),a&&a.m(t,null),f(t,n),u&&u.m(t,null),r=!0},p(e,[t]){i&&i.p&&1&t&&l(i,o,e,e[0],t,Wo,Jo),u&&u.p&&1&t&&l(u,c,e,e[0],t,null,null)},i(e){r||(D(a,e),D(u,e),r=!0)},o(e){z(a,e),z(u,e),r=!1},d(e){e&&v(t),a&&a.d(e),u&&u.d(e)}}}function Vo(e,t,n){let{$$slots:r={},$$scope:o}=t;return e.$$set=e=>{"$$scope"in e&&n(0,o=e.$$scope)},[o,r]}class Xo extends X{constructor(e){super(),V(this,e,Vo,Ko,a,{})}}var Yo=Object.freeze({__proto__:null,default:Xo});function Qo(e){let t,n,r;function o(t){e[1](t)}let i={defaultLayoutComponent:Xo,allProps:{allPropsTest:"Passing To ALL"}};return void 0!==e[0]&&(i.routes=e[0]),t=new ko({props:i}),S.push((()=>function(e,t,n){const r=e.$$.props[t];void 0!==r&&(e.$$.bound[r]=n,n(e.$$.ctx[r]))}(t,"routes",o))),{c(){G(t.$$.fragment)},m(e,n){W(t,e,n),r=!0},p(e,[r]){const o={};var i;!n&&1&r&&(n=!0,o.routes=e[0],i=()=>n=!1,$.push(i)),t.$set(o)},i(e){r||(D(t.$$.fragment,e),r=!0)},o(e){z(t.$$.fragment,e),r=!1},d(e){J(t,e)}}}function Zo(e,t,n){Bo.setNotFoundRoute("/myCustomNotFound"),Bo.setConsoleLogStores(!1),Bo.setNavigationHistoryLimit(10),Bo.setHashMode(!0),Bo.setOnError(((e,t)=>{console.log("GLOBAL ERROR CONFIG",t)})),Bo.setBeforeEnter([e=>{console.log("GBER-1"),e(!0)},e=>{console.log("GBER-2"),e(!0)}]);let r=[{name:"rootRoute",path:"/svelte-client-router",lazyLoadComponent:()=>Promise.resolve().then((function(){return ri})),lazyLoadLayoutComponent:()=>Promise.resolve().then((function(){return pi})),title:"SCR - Root Route"},{name:"routeOne",path:"/svelte-client-router/test1",component:zo,beforeEnter:[e=>{console.log("beforeEnter Executed"),setTimeout((()=>e(!0)),2e3)},e=>{console.log("beforeEnter Executed2"),setTimeout((()=>e({redirect:"/svelte-client-router"})),1e3)}],title:"First Route Title",loadingProps:{loadingText:"Carregando 1..."}},{name:"routeTwo",path:"/svelte-client-router/test2",lazyLoadComponent:()=>Promise.resolve().then((function(){return mi})),title:"Second Route Title",beforeEnter:[(e,t,n,r)=>{console.log("beforeEnter Executed"),console.log(r),setTimeout((()=>e(!0)),1e3)}],loadingProps:{loadingText:"Carregando 2..."}},{name:"routeThree",path:"/svelte-client-router/test3",component:qo,title:"Third Route Title",beforeEnter:[e=>{throw console.log("BEFORE Enter C3"),new Error("teste")}],onError:(e,t)=>{console.log("ERROR DEFINED ROUTER C1",e),console.log(t)}},{name:"routeFour",path:"/svelte-client-router/test4",params:{myCustomParam:"This Param was set in the Router Definition"},title:"Four Route Title",lazyLoadComponent:()=>Promise.resolve().then((function(){return Go})),lazyLoadLayoutComponent:()=>Promise.resolve().then((function(){return Yo})),afterBeforeEnter:e=>{console.log("After BE Route Four"),console.log(e)},loadingProps:{loadingText:"Carregando 4..."}},{name:"routeFive",path:"/svelte-client-router/test5",title:"Five Route Title",lazyLoadComponent:()=>Promise.resolve().then((function(){return wi})),loadingProps:{loadingText:"Carregando 5..."},ignoreLayout:!0,ignoreGlobalBeforeFunction:!0}];return[r,function(e){r=e,n(0,r)}]}const ei=new class extends X{constructor(e){super(),V(this,e,Zo,Qo,a,{})}}({target:document.body});function ti(t){let n,r,i,a,c,s,u,l,h,m,_,w,j,R,E,x,S,O,$,I,C,N,T,L,A,k,F,B,M,P,D,z,U,H,q,G,W,J,K,V,X,Y,Q,Z,ee;return{c(){n=p("main"),r=p("section"),i=p("h3"),i.innerHTML='Route One Executes: \n
',a=y(),c=p("ul"),c.innerHTML='
  • Demonstrates Loading Component In Action
  • \n
  • Global Before Enter Functions
  • \n
  • Route Before Enter Functions
  • \n
  • Redirects in the second Before Enter Function to Root Page
  • ',s=y(),u=p("button"),u.textContent="Route One - GO!",l=y(),h=p("hr"),m=y(),_=p("section"),w=p("h3"),w.innerHTML='Route Two Executes: \n
    ',j=y(),R=p("ul"),R.innerHTML='
  • Global Before Enter Functions
  • \n
  • Route Before Enter Functions
  • \n
  • Resolve Opening the Component
  • ',E=y(),x=p("button"),x.textContent="Route Two - GO!",S=y(),O=p("hr"),$=y(),I=p("section"),C=p("h3"),C.innerHTML='Route Three Executes: \n
    ',N=y(),T=p("ul"),T.innerHTML='
  • Global Before Enter Functions
  • \n
  • Route Before Enter Functions
  • \n
  • Throws An Error on Before Enter - For Example Purposes!
  • ',L=y(),A=p("button"),A.textContent="Route Three - GO!",k=y(),F=p("hr"),B=y(),M=p("section"),P=p("h3"),P.innerHTML='Route Four Executes: \n
    ',D=y(),z=p("ul"),z.innerHTML='
  • Global Before Enter Functions
  • \n
  • Route Before Enter Functions
  • \n
  • After Enter Route Function
  • \n
  • Resolve Opening the Component
  • ',U=y(),H=p("button"),H.textContent="Route Four - GO!",q=y(),G=p("hr"),W=y(),J=p("section"),K=p("h3"),K.innerHTML='Route Five Executes: \n
    ',V=y(),X=p("ul"),X.innerHTML='
  • IGNORES Global Before Enter Functions
  • \n
  • Has NO Before Enter Functions
  • \n
  • IGNORES Layout
  • \n
  • Resolve Opening the Component
  • \n
  • Examples Router Link Component
  • ',Y=y(),Q=p("button"),Q.textContent="Route Five - GO!",g(i,"class","scr-h3 svelte-yb9j7x"),g(c,"class","scr-ul svelte-yb9j7x"),g(u,"class","scr-button svelte-yb9j7x"),g(r,"class","scr-section svelte-yb9j7x"),g(h,"class","svelte-yb9j7x"),g(w,"class","scr-h3 svelte-yb9j7x"),g(R,"class","scr-ul svelte-yb9j7x"),g(x,"class","scr-button svelte-yb9j7x"),g(_,"class","scr-section svelte-yb9j7x"),g(O,"class","svelte-yb9j7x"),g(C,"class","scr-h3 svelte-yb9j7x"),g(T,"class","scr-ul svelte-yb9j7x"),g(A,"class","scr-button svelte-yb9j7x"),g(I,"class","scr-section svelte-yb9j7x"),g(F,"class","svelte-yb9j7x"),g(P,"class","scr-h3 svelte-yb9j7x"),g(z,"class","scr-ul svelte-yb9j7x"),g(H,"class","scr-button svelte-yb9j7x"),g(M,"class","scr-section svelte-yb9j7x"),g(G,"class","svelte-yb9j7x"),g(K,"class","scr-h3 svelte-yb9j7x"),g(X,"class","scr-ul svelte-yb9j7x"),g(Q,"class","scr-button svelte-yb9j7x"),g(J,"class","scr-section svelte-yb9j7x"),g(n,"class","scr-main svelte-yb9j7x")},m(e,o){d(e,n,o),f(n,r),f(r,i),f(r,a),f(r,c),f(r,s),f(r,u),f(n,l),f(n,h),f(n,m),f(n,_),f(_,w),f(_,j),f(_,R),f(_,E),f(_,x),f(n,S),f(n,O),f(n,$),f(n,I),f(I,C),f(I,N),f(I,T),f(I,L),f(I,A),f(n,k),f(n,F),f(n,B),f(n,M),f(M,P),f(M,D),f(M,z),f(M,U),f(M,H),f(n,q),f(n,G),f(n,W),f(n,J),f(J,K),f(J,V),f(J,X),f(J,Y),f(J,Q),Z||(ee=[b(u,"click",t[0]),b(x,"click",t[1]),b(A,"click",t[2]),b(H,"click",t[3]),b(Q,"click",t[4])],Z=!0)},p:e,i:e,o:e,d(e){e&&v(n),Z=!1,o(ee)}}}function ni(e){return[()=>{Mo({name:"routeOne"})},()=>{Mo({name:"routeTwo"})},()=>{Mo({name:"routeThree"})},()=>{Mo({name:"routeFour"})},()=>{Mo({name:"routeFive"})}]}var ri=Object.freeze({__proto__:null,default:class extends X{constructor(e){super(),V(this,e,ni,ti,a,{})}}});const oi=e=>({}),ii=e=>({}),ai=e=>({}),ci=e=>({}),si=e=>({}),ui=e=>({}),li=e=>({}),fi=e=>({});function di(e){let t,n,r,o,i,a;const c=e[1].scr_header,u=s(c,e,e[0],fi),h=u||function(e){let t;return{c(){t=p("h1"),t.textContent="Svelte Client Router - The Svelte SPA Router!",g(t,"class","scr-main-layout__header svelte-102jv8t")},m(e,n){d(e,t,n)},d(e){e&&v(t)}}}(),m=e[1]["scr_before-main"],b=s(m,e,e[0],ui),_=b||function(e){let t;return{c(){t=p("p"),t.textContent="Test some button to see the router working!",g(t,"class","scr-main-layout__p svelte-102jv8t")},m(e,n){d(e,t,n)},d(e){e&&v(t)}}}(),w=e[1].default,j=s(w,e,e[0],null),R=e[1]["scr_after-main"],E=s(R,e,e[0],ci),x=E||function(e){let t;return{c(){t=p("p"),t.textContent="Nice Routing!",g(t,"class","scr-main-layout__p svelte-102jv8t")},m(e,n){d(e,t,n)},d(e){e&&v(t)}}}(),S=e[1].scr_footer,O=s(S,e,e[0],ii),$=O||function(e){let t;return{c(){t=p("footer"),t.textContent="This is some footer content",g(t,"class","scr-main-layout__footer svelte-102jv8t")},m(e,n){d(e,t,n)},d(e){e&&v(t)}}}();return{c(){t=p("main"),h&&h.c(),n=y(),_&&_.c(),r=y(),j&&j.c(),o=y(),x&&x.c(),i=y(),$&&$.c(),g(t,"class","scr-main-layout svelte-102jv8t")},m(e,c){d(e,t,c),h&&h.m(t,null),f(t,n),_&&_.m(t,null),f(t,r),j&&j.m(t,null),f(t,o),x&&x.m(t,null),f(t,i),$&&$.m(t,null),a=!0},p(e,[t]){u&&u.p&&1&t&&l(u,c,e,e[0],t,li,fi),b&&b.p&&1&t&&l(b,m,e,e[0],t,si,ui),j&&j.p&&1&t&&l(j,w,e,e[0],t,null,null),E&&E.p&&1&t&&l(E,R,e,e[0],t,ai,ci),O&&O.p&&1&t&&l(O,S,e,e[0],t,oi,ii)},i(e){a||(D(h,e),D(_,e),D(j,e),D(x,e),D($,e),a=!0)},o(e){z(h,e),z(_,e),z(j,e),z(x,e),z($,e),a=!1},d(e){e&&v(t),h&&h.d(e),_&&_.d(e),j&&j.d(e),x&&x.d(e),$&&$.d(e)}}}function vi(e,t,n){let{$$slots:r={},$$scope:o}=t;return e.$$set=e=>{"$$scope"in e&&n(0,o=e.$$scope)},[o,r]}var pi=Object.freeze({__proto__:null,default:class extends X{constructor(e){super(),V(this,e,vi,di,a,{})}}});function hi(t){let n,r,o,i,a,c,s,u,l,m,_,w,j,R,E,x,S,O,$,I,C,N,T,L,A,k,F,B,M,P,D,z,U,H,q,G;return{c(){n=p("main"),r=p("h2"),r.textContent="Component Two!",o=y(),i=p("div"),a=h("A\n "),c=p("br"),s=y(),u=p("br"),l=y(),m=p("button"),m.textContent="Go Back",_=y(),w=p("div"),w.textContent="B",j=y(),R=p("div"),R.textContent="C",E=y(),x=p("div"),x.textContent="D",S=y(),O=p("div"),O.textContent="E",$=y(),I=p("div"),I.textContent="F",C=y(),N=p("div"),N.textContent="G",T=y(),L=p("div"),L.textContent="H",A=y(),k=p("div"),k.textContent="I",F=y(),B=p("div"),B.textContent="J",M=y(),P=p("div"),P.textContent="K",D=y(),z=p("div"),z.textContent="L",U=y(),H=p("div"),H.textContent="M",g(m,"class","scr-button svelte-um95cl"),g(i,"class","svelte-um95cl"),g(w,"class","svelte-um95cl"),g(R,"class","svelte-um95cl"),g(x,"class","svelte-um95cl"),g(O,"class","svelte-um95cl"),g(I,"class","svelte-um95cl"),g(N,"class","svelte-um95cl"),g(L,"class","svelte-um95cl"),g(k,"class","svelte-um95cl"),g(B,"class","J_TEST svelte-um95cl"),g(P,"class","svelte-um95cl"),g(z,"class","svelte-um95cl"),g(H,"class","svelte-um95cl"),g(n,"class","svelte-um95cl")},m(e,v){d(e,n,v),f(n,r),f(n,o),f(n,i),f(i,a),f(i,c),f(i,s),f(i,u),f(i,l),f(i,m),f(n,_),f(n,w),f(n,j),f(n,R),f(n,E),f(n,x),f(n,S),f(n,O),f(n,$),f(n,I),f(n,C),f(n,N),f(n,T),f(n,L),f(n,A),f(n,k),f(n,F),f(n,B),f(n,M),f(n,P),f(n,D),f(n,z),f(n,U),f(n,H),q||(G=b(m,"click",t[0]),q=!0)},p:e,i:e,o:e,d(e){e&&v(n),q=!1,G()}}}function yi(e){return[()=>{Po()}]}var mi=Object.freeze({__proto__:null,default:class extends X{constructor(e){super(),V(this,e,yi,hi,a,{})}}});function bi(e){let t;return{c(){t=p("button"),t.innerHTML="Button With No Click Action
    But Works Because Router Link!",g(t,"class","scr-button svelte-10f8n0o")},m(e,n){d(e,t,n)},d(e){e&&v(t)}}}function gi(e){let t,n,r,o,i,a,c,s,u;return a=new Fo({props:{to:{name:"rootRoute"},props:{pushCustomParam:"Custom Param Defined Router Link - Navigation"},elementProps:{style:"margin: 1rem; padding: 1rem 0; display: grid; grid-template-columns: 1fr; justify-content: center; align-content:center; background-color:#ff3e0012"},$$slots:{default:[bi]},$$scope:{ctx:e}}}),{c(){t=p("main"),n=p("h2"),n.textContent="Component Five!",r=y(),o=p("button"),o.textContent="Go Back",i=y(),G(a.$$.fragment),g(o,"class","scr-button svelte-10f8n0o"),g(t,"class","svelte-10f8n0o")},m(l,v){d(l,t,v),f(t,n),f(t,r),f(t,o),f(t,i),W(a,t,null),c=!0,s||(u=b(o,"click",e[0]),s=!0)},p(e,[t]){const n={};2&t&&(n.$$scope={dirty:t,ctx:e}),a.$set(n)},i(e){c||(D(a.$$.fragment,e),c=!0)},o(e){z(a.$$.fragment,e),c=!1},d(e){e&&v(t),J(a),s=!1,u()}}}function _i(e){return[()=>{Po()}]}var wi=Object.freeze({__proto__:null,default:class extends X{constructor(e){super(),V(this,e,_i,gi,a,{})}}});return ei}(); + */ + + var localforage = createCommonjsModule(function (module, exports) { + (function(f){{module.exports=f();}})(function(){return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof commonjsRequire=="function"&&commonjsRequire;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw (f.code="MODULE_NOT_FOUND", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r);}return n[o].exports}var i=typeof commonjsRequire=="function"&&commonjsRequire;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted + // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. + var scriptEl = global.document.createElement('script'); + scriptEl.onreadystatechange = function () { + nextTick(); + + scriptEl.onreadystatechange = null; + scriptEl.parentNode.removeChild(scriptEl); + scriptEl = null; + }; + global.document.documentElement.appendChild(scriptEl); + }; + } else { + scheduleDrain = function () { + setTimeout(nextTick, 0); + }; + } + } + + var draining; + var queue = []; + //named nextTick for less confusing stack traces + function nextTick() { + draining = true; + var i, oldQueue; + var len = queue.length; + while (len) { + oldQueue = queue; + queue = []; + i = -1; + while (++i < len) { + oldQueue[i](); + } + len = queue.length; + } + draining = false; + } + + module.exports = immediate; + function immediate(task) { + if (queue.push(task) === 1 && !draining) { + scheduleDrain(); + } + } + + }).call(this,typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); + },{}],2:[function(_dereq_,module,exports){ + var immediate = _dereq_(1); + + /* istanbul ignore next */ + function INTERNAL() {} + + var handlers = {}; + + var REJECTED = ['REJECTED']; + var FULFILLED = ['FULFILLED']; + var PENDING = ['PENDING']; + + module.exports = Promise; + + function Promise(resolver) { + if (typeof resolver !== 'function') { + throw new TypeError('resolver must be a function'); + } + this.state = PENDING; + this.queue = []; + this.outcome = void 0; + if (resolver !== INTERNAL) { + safelyResolveThenable(this, resolver); + } + } + + Promise.prototype["catch"] = function (onRejected) { + return this.then(null, onRejected); + }; + Promise.prototype.then = function (onFulfilled, onRejected) { + if (typeof onFulfilled !== 'function' && this.state === FULFILLED || + typeof onRejected !== 'function' && this.state === REJECTED) { + return this; + } + var promise = new this.constructor(INTERNAL); + if (this.state !== PENDING) { + var resolver = this.state === FULFILLED ? onFulfilled : onRejected; + unwrap(promise, resolver, this.outcome); + } else { + this.queue.push(new QueueItem(promise, onFulfilled, onRejected)); + } + + return promise; + }; + function QueueItem(promise, onFulfilled, onRejected) { + this.promise = promise; + if (typeof onFulfilled === 'function') { + this.onFulfilled = onFulfilled; + this.callFulfilled = this.otherCallFulfilled; + } + if (typeof onRejected === 'function') { + this.onRejected = onRejected; + this.callRejected = this.otherCallRejected; + } + } + QueueItem.prototype.callFulfilled = function (value) { + handlers.resolve(this.promise, value); + }; + QueueItem.prototype.otherCallFulfilled = function (value) { + unwrap(this.promise, this.onFulfilled, value); + }; + QueueItem.prototype.callRejected = function (value) { + handlers.reject(this.promise, value); + }; + QueueItem.prototype.otherCallRejected = function (value) { + unwrap(this.promise, this.onRejected, value); + }; + + function unwrap(promise, func, value) { + immediate(function () { + var returnValue; + try { + returnValue = func(value); + } catch (e) { + return handlers.reject(promise, e); + } + if (returnValue === promise) { + handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); + } else { + handlers.resolve(promise, returnValue); + } + }); + } + + handlers.resolve = function (self, value) { + var result = tryCatch(getThen, value); + if (result.status === 'error') { + return handlers.reject(self, result.value); + } + var thenable = result.value; + + if (thenable) { + safelyResolveThenable(self, thenable); + } else { + self.state = FULFILLED; + self.outcome = value; + var i = -1; + var len = self.queue.length; + while (++i < len) { + self.queue[i].callFulfilled(value); + } + } + return self; + }; + handlers.reject = function (self, error) { + self.state = REJECTED; + self.outcome = error; + var i = -1; + var len = self.queue.length; + while (++i < len) { + self.queue[i].callRejected(error); + } + return self; + }; + + function getThen(obj) { + // Make sure we only access the accessor once as required by the spec + var then = obj && obj.then; + if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') { + return function appyThen() { + then.apply(obj, arguments); + }; + } + } + + function safelyResolveThenable(self, thenable) { + // Either fulfill, reject or reject with error + var called = false; + function onError(value) { + if (called) { + return; + } + called = true; + handlers.reject(self, value); + } + + function onSuccess(value) { + if (called) { + return; + } + called = true; + handlers.resolve(self, value); + } + + function tryToUnwrap() { + thenable(onSuccess, onError); + } + + var result = tryCatch(tryToUnwrap); + if (result.status === 'error') { + onError(result.value); + } + } + + function tryCatch(func, value) { + var out = {}; + try { + out.value = func(value); + out.status = 'success'; + } catch (e) { + out.status = 'error'; + out.value = e; + } + return out; + } + + Promise.resolve = resolve; + function resolve(value) { + if (value instanceof this) { + return value; + } + return handlers.resolve(new this(INTERNAL), value); + } + + Promise.reject = reject; + function reject(reason) { + var promise = new this(INTERNAL); + return handlers.reject(promise, reason); + } + + Promise.all = all; + function all(iterable) { + var self = this; + if (Object.prototype.toString.call(iterable) !== '[object Array]') { + return this.reject(new TypeError('must be an array')); + } + + var len = iterable.length; + var called = false; + if (!len) { + return this.resolve([]); + } + + var values = new Array(len); + var resolved = 0; + var i = -1; + var promise = new this(INTERNAL); + + while (++i < len) { + allResolver(iterable[i], i); + } + return promise; + function allResolver(value, i) { + self.resolve(value).then(resolveFromAll, function (error) { + if (!called) { + called = true; + handlers.reject(promise, error); + } + }); + function resolveFromAll(outValue) { + values[i] = outValue; + if (++resolved === len && !called) { + called = true; + handlers.resolve(promise, values); + } + } + } + } + + Promise.race = race; + function race(iterable) { + var self = this; + if (Object.prototype.toString.call(iterable) !== '[object Array]') { + return this.reject(new TypeError('must be an array')); + } + + var len = iterable.length; + var called = false; + if (!len) { + return this.resolve([]); + } + + var i = -1; + var promise = new this(INTERNAL); + + while (++i < len) { + resolver(iterable[i]); + } + return promise; + function resolver(value) { + self.resolve(value).then(function (response) { + if (!called) { + called = true; + handlers.resolve(promise, response); + } + }, function (error) { + if (!called) { + called = true; + handlers.reject(promise, error); + } + }); + } + } + + },{"1":1}],3:[function(_dereq_,module,exports){ + (function (global){ + if (typeof global.Promise !== 'function') { + global.Promise = _dereq_(2); + } + + }).call(this,typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); + },{"2":2}],4:[function(_dereq_,module,exports){ + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + function getIDB() { + /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */ + try { + if (typeof indexedDB !== 'undefined') { + return indexedDB; + } + if (typeof webkitIndexedDB !== 'undefined') { + return webkitIndexedDB; + } + if (typeof mozIndexedDB !== 'undefined') { + return mozIndexedDB; + } + if (typeof OIndexedDB !== 'undefined') { + return OIndexedDB; + } + if (typeof msIndexedDB !== 'undefined') { + return msIndexedDB; + } + } catch (e) { + return; + } + } + + var idb = getIDB(); + + function isIndexedDBValid() { + try { + // Initialize IndexedDB; fall back to vendor-prefixed versions + // if needed. + if (!idb || !idb.open) { + return false; + } + // We mimic PouchDB here; + // + // We test for openDatabase because IE Mobile identifies itself + // as Safari. Oh the lulz... + var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform); + + var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1; + + // Safari <10.1 does not meet our requirements for IDB support + // (see: https://github.com/pouchdb/pouchdb/issues/5572). + // Safari 10.1 shipped with fetch, we can use that to detect it. + // Note: this creates issues with `window.fetch` polyfills and + // overrides; see: + // https://github.com/localForage/localForage/issues/856 + return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' && + // some outdated implementations of IDB that appear on Samsung + // and HTC Android devices <4.4 are missing IDBKeyRange + // See: https://github.com/mozilla/localForage/issues/128 + // See: https://github.com/mozilla/localForage/issues/272 + typeof IDBKeyRange !== 'undefined'; + } catch (e) { + return false; + } + } + + // Abstracts constructing a Blob object, so it also works in older + // browsers that don't support the native Blob constructor. (i.e. + // old QtWebKit versions, at least). + // Abstracts constructing a Blob object, so it also works in older + // browsers that don't support the native Blob constructor. (i.e. + // old QtWebKit versions, at least). + function createBlob(parts, properties) { + /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */ + parts = parts || []; + properties = properties || {}; + try { + return new Blob(parts, properties); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder; + var builder = new Builder(); + for (var i = 0; i < parts.length; i += 1) { + builder.append(parts[i]); + } + return builder.getBlob(properties.type); + } + } + + // This is CommonJS because lie is an external dependency, so Rollup + // can just ignore it. + if (typeof Promise === 'undefined') { + // In the "nopromises" build this will just throw if you don't have + // a global promise object, but it would throw anyway later. + _dereq_(3); + } + var Promise$1 = Promise; + + function executeCallback(promise, callback) { + if (callback) { + promise.then(function (result) { + callback(null, result); + }, function (error) { + callback(error); + }); + } + } + + function executeTwoCallbacks(promise, callback, errorCallback) { + if (typeof callback === 'function') { + promise.then(callback); + } + + if (typeof errorCallback === 'function') { + promise["catch"](errorCallback); + } + } + + function normalizeKey(key) { + // Cast the key to a string, as that's all we can set as a key. + if (typeof key !== 'string') { + console.warn(key + ' used as a key, but it is not a string.'); + key = String(key); + } + + return key; + } + + function getCallback() { + if (arguments.length && typeof arguments[arguments.length - 1] === 'function') { + return arguments[arguments.length - 1]; + } + } + + // Some code originally from async_storage.js in + // [Gaia](https://github.com/mozilla-b2g/gaia). + + var DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support'; + var supportsBlobs = void 0; + var dbContexts = {}; + var toString = Object.prototype.toString; + + // Transaction Modes + var READ_ONLY = 'readonly'; + var READ_WRITE = 'readwrite'; + + // Transform a binary string to an array buffer, because otherwise + // weird stuff happens when you try to work with the binary string directly. + // It is known. + // From http://stackoverflow.com/questions/14967647/ (continues on next line) + // encode-decode-image-with-base64-breaks-image (2013-04-21) + function _binStringToArrayBuffer(bin) { + var length = bin.length; + var buf = new ArrayBuffer(length); + var arr = new Uint8Array(buf); + for (var i = 0; i < length; i++) { + arr[i] = bin.charCodeAt(i); + } + return buf; + } + + // + // Blobs are not supported in all versions of IndexedDB, notably + // Chrome <37 and Android <5. In those versions, storing a blob will throw. + // + // Various other blob bugs exist in Chrome v37-42 (inclusive). + // Detecting them is expensive and confusing to users, and Chrome 37-42 + // is at very low usage worldwide, so we do a hacky userAgent check instead. + // + // content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120 + // 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916 + // FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836 + // + // Code borrowed from PouchDB. See: + // https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js + // + function _checkBlobSupportWithoutCaching(idb) { + return new Promise$1(function (resolve) { + var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE); + var blob = createBlob(['']); + txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key'); + + txn.onabort = function (e) { + // If the transaction aborts now its due to not being able to + // write to the database, likely due to the disk being full + e.preventDefault(); + e.stopPropagation(); + resolve(false); + }; + + txn.oncomplete = function () { + var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/); + var matchedEdge = navigator.userAgent.match(/Edge\//); + // MS Edge pretends to be Chrome 42: + // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx + resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43); + }; + })["catch"](function () { + return false; // error, so assume unsupported + }); + } + + function _checkBlobSupport(idb) { + if (typeof supportsBlobs === 'boolean') { + return Promise$1.resolve(supportsBlobs); + } + return _checkBlobSupportWithoutCaching(idb).then(function (value) { + supportsBlobs = value; + return supportsBlobs; + }); + } + + function _deferReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; + + // Create a deferred object representing the current database operation. + var deferredOperation = {}; + + deferredOperation.promise = new Promise$1(function (resolve, reject) { + deferredOperation.resolve = resolve; + deferredOperation.reject = reject; + }); + + // Enqueue the deferred operation. + dbContext.deferredOperations.push(deferredOperation); + + // Chain its promise to the database readiness. + if (!dbContext.dbReady) { + dbContext.dbReady = deferredOperation.promise; + } else { + dbContext.dbReady = dbContext.dbReady.then(function () { + return deferredOperation.promise; + }); + } + } + + function _advanceReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; + + // Dequeue a deferred operation. + var deferredOperation = dbContext.deferredOperations.pop(); + + // Resolve its promise (which is part of the database readiness + // chain of promises). + if (deferredOperation) { + deferredOperation.resolve(); + return deferredOperation.promise; + } + } + + function _rejectReadiness(dbInfo, err) { + var dbContext = dbContexts[dbInfo.name]; + + // Dequeue a deferred operation. + var deferredOperation = dbContext.deferredOperations.pop(); + + // Reject its promise (which is part of the database readiness + // chain of promises). + if (deferredOperation) { + deferredOperation.reject(err); + return deferredOperation.promise; + } + } + + function _getConnection(dbInfo, upgradeNeeded) { + return new Promise$1(function (resolve, reject) { + dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext(); + + if (dbInfo.db) { + if (upgradeNeeded) { + _deferReadiness(dbInfo); + dbInfo.db.close(); + } else { + return resolve(dbInfo.db); + } + } + + var dbArgs = [dbInfo.name]; + + if (upgradeNeeded) { + dbArgs.push(dbInfo.version); + } + + var openreq = idb.open.apply(idb, dbArgs); + + if (upgradeNeeded) { + openreq.onupgradeneeded = function (e) { + var db = openreq.result; + try { + db.createObjectStore(dbInfo.storeName); + if (e.oldVersion <= 1) { + // Added when support for blob shims was added + db.createObjectStore(DETECT_BLOB_SUPPORT_STORE); + } + } catch (ex) { + if (ex.name === 'ConstraintError') { + console.warn('The database "' + dbInfo.name + '"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage "' + dbInfo.storeName + '" already exists.'); + } else { + throw ex; + } + } + }; + } + + openreq.onerror = function (e) { + e.preventDefault(); + reject(openreq.error); + }; + + openreq.onsuccess = function () { + resolve(openreq.result); + _advanceReadiness(dbInfo); + }; + }); + } + + function _getOriginalConnection(dbInfo) { + return _getConnection(dbInfo, false); + } + + function _getUpgradedConnection(dbInfo) { + return _getConnection(dbInfo, true); + } + + function _isUpgradeNeeded(dbInfo, defaultVersion) { + if (!dbInfo.db) { + return true; + } + + var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName); + var isDowngrade = dbInfo.version < dbInfo.db.version; + var isUpgrade = dbInfo.version > dbInfo.db.version; + + if (isDowngrade) { + // If the version is not the default one + // then warn for impossible downgrade. + if (dbInfo.version !== defaultVersion) { + console.warn('The database "' + dbInfo.name + '"' + " can't be downgraded from version " + dbInfo.db.version + ' to version ' + dbInfo.version + '.'); + } + // Align the versions to prevent errors. + dbInfo.version = dbInfo.db.version; + } + + if (isUpgrade || isNewStore) { + // If the store is new then increment the version (if needed). + // This will trigger an "upgradeneeded" event which is required + // for creating a store. + if (isNewStore) { + var incVersion = dbInfo.db.version + 1; + if (incVersion > dbInfo.version) { + dbInfo.version = incVersion; + } + } + + return true; + } + + return false; + } + + // encode a blob for indexeddb engines that don't support blobs + function _encodeBlob(blob) { + return new Promise$1(function (resolve, reject) { + var reader = new FileReader(); + reader.onerror = reject; + reader.onloadend = function (e) { + var base64 = btoa(e.target.result || ''); + resolve({ + __local_forage_encoded_blob: true, + data: base64, + type: blob.type + }); + }; + reader.readAsBinaryString(blob); + }); + } + + // decode an encoded blob + function _decodeBlob(encodedBlob) { + var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data)); + return createBlob([arrayBuff], { type: encodedBlob.type }); + } + + // is this one of our fancy encoded blobs? + function _isEncodedBlob(value) { + return value && value.__local_forage_encoded_blob; + } + + // Specialize the default `ready()` function by making it dependent + // on the current database operations. Thus, the driver will be actually + // ready when it's been initialized (default) *and* there are no pending + // operations on the database (initiated by some other instances). + function _fullyReady(callback) { + var self = this; + + var promise = self._initReady().then(function () { + var dbContext = dbContexts[self._dbInfo.name]; + + if (dbContext && dbContext.dbReady) { + return dbContext.dbReady; + } + }); + + executeTwoCallbacks(promise, callback, callback); + return promise; + } + + // Try to establish a new db connection to replace the + // current one which is broken (i.e. experiencing + // InvalidStateError while creating a transaction). + function _tryReconnect(dbInfo) { + _deferReadiness(dbInfo); + + var dbContext = dbContexts[dbInfo.name]; + var forages = dbContext.forages; + + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + if (forage._dbInfo.db) { + forage._dbInfo.db.close(); + forage._dbInfo.db = null; + } + } + dbInfo.db = null; + + return _getOriginalConnection(dbInfo).then(function (db) { + dbInfo.db = db; + if (_isUpgradeNeeded(dbInfo)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + return db; + }).then(function (db) { + // store the latest db reference + // in case the db was upgraded + dbInfo.db = dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + })["catch"](function (err) { + _rejectReadiness(dbInfo, err); + throw err; + }); + } + + // FF doesn't like Promises (micro-tasks) and IDDB store operations, + // so we have to do it with callbacks + function createTransaction(dbInfo, mode, callback, retries) { + if (retries === undefined) { + retries = 1; + } + + try { + var tx = dbInfo.db.transaction(dbInfo.storeName, mode); + callback(null, tx); + } catch (err) { + if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) { + return Promise$1.resolve().then(function () { + if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) { + // increase the db version, to create the new ObjectStore + if (dbInfo.db) { + dbInfo.version = dbInfo.db.version + 1; + } + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + }).then(function () { + return _tryReconnect(dbInfo).then(function () { + createTransaction(dbInfo, mode, callback, retries - 1); + }); + })["catch"](callback); + } + + callback(err); + } + } + + function createDbContext() { + return { + // Running localForages sharing a database. + forages: [], + // Shared database. + db: null, + // Database readiness (promise). + dbReady: null, + // Deferred operations on the database. + deferredOperations: [] + }; + } + + // Open the IndexedDB database (automatically creates one if one didn't + // previously exist), using any options set in the config. + function _initStorage(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } + + // Get the current context of the database; + var dbContext = dbContexts[dbInfo.name]; + + // ...or create a new context. + if (!dbContext) { + dbContext = createDbContext(); + // Register the new context in the global container. + dbContexts[dbInfo.name] = dbContext; + } + + // Register itself as a running localForage in the current context. + dbContext.forages.push(self); + + // Replace the default `ready()` function with the specialized one. + if (!self._initReady) { + self._initReady = self.ready; + self.ready = _fullyReady; + } + + // Create an array of initialization states of the related localForages. + var initPromises = []; + + function ignoreErrors() { + // Don't handle errors here, + // just makes sure related localForages aren't pending. + return Promise$1.resolve(); + } + + for (var j = 0; j < dbContext.forages.length; j++) { + var forage = dbContext.forages[j]; + if (forage !== self) { + // Don't wait for itself... + initPromises.push(forage._initReady()["catch"](ignoreErrors)); + } + } + + // Take a snapshot of the related localForages. + var forages = dbContext.forages.slice(0); + + // Initialize the connection process only when + // all the related localForages aren't pending. + return Promise$1.all(initPromises).then(function () { + dbInfo.db = dbContext.db; + // Get the connection or open a new one without upgrade. + return _getOriginalConnection(dbInfo); + }).then(function (db) { + dbInfo.db = db; + if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + return db; + }).then(function (db) { + dbInfo.db = dbContext.db = db; + self._dbInfo = dbInfo; + // Share the final connection amongst related localForages. + for (var k = 0; k < forages.length; k++) { + var forage = forages[k]; + if (forage !== self) { + // Self is already up-to-date. + forage._dbInfo.db = dbInfo.db; + forage._dbInfo.version = dbInfo.version; + } + } + }); + } + + function getItem(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.get(key); + + req.onsuccess = function () { + var value = req.result; + if (value === undefined) { + value = null; + } + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + resolve(value); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Iterate over all items stored in database. + function iterate(iterator, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openCursor(); + var iterationNumber = 1; + + req.onsuccess = function () { + var cursor = req.result; + + if (cursor) { + var value = cursor.value; + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + var result = iterator(value, cursor.key, iterationNumber++); + + // when the iterator callback returns any + // (non-`undefined`) value, then we stop + // the iteration immediately + if (result !== void 0) { + resolve(result); + } else { + cursor["continue"](); + } + } else { + resolve(); + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + + return promise; + } + + function setItem(key, value, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + var dbInfo; + self.ready().then(function () { + dbInfo = self._dbInfo; + if (toString.call(value) === '[object Blob]') { + return _checkBlobSupport(dbInfo.db).then(function (blobSupport) { + if (blobSupport) { + return value; + } + return _encodeBlob(value); + }); + } + return value; + }).then(function (value) { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + + // The reason we don't _save_ null is because IE 10 does + // not support saving the `null` type in IndexedDB. How + // ironic, given the bug below! + // See: https://github.com/mozilla/localForage/issues/161 + if (value === null) { + value = undefined; + } + + var req = store.put(value, key); + + transaction.oncomplete = function () { + // Cast to undefined so the value passed to + // callback/promise is the same as what one would get out + // of `getItem()` later. This leads to some weirdness + // (setItem('foo', undefined) will return `null`), but + // it's not my fault localStorage is our baseline and that + // it's weird. + if (value === undefined) { + value = null; + } + + resolve(value); + }; + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function removeItem(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + // We use a Grunt task to make this safe for IE and some + // versions of Android (including those used by Cordova). + // Normally IE won't like `.delete()` and will insist on + // using `['delete']()`, but we have a build step that + // fixes this for us now. + var req = store["delete"](key); + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onerror = function () { + reject(req.error); + }; + + // The request will be also be aborted if we've exceeded our storage + // space. + transaction.onabort = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function clear(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.clear(); + + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function length(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.count(); + + req.onsuccess = function () { + resolve(req.result); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function key(n, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + if (n < 0) { + resolve(null); + + return; + } + + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var advanced = false; + var req = store.openKeyCursor(); + + req.onsuccess = function () { + var cursor = req.result; + if (!cursor) { + // this means there weren't enough keys + resolve(null); + + return; + } + + if (n === 0) { + // We have the first key, return it if that's what they + // wanted. + resolve(cursor.key); + } else { + if (!advanced) { + // Otherwise, ask the cursor to skip ahead n + // records. + advanced = true; + cursor.advance(n); + } else { + // When we get here, we've got the nth key. + resolve(cursor.key); + } + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function keys(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openKeyCursor(); + var keys = []; + + req.onsuccess = function () { + var cursor = req.result; + + if (!cursor) { + resolve(keys); + return; + } + + keys.push(cursor.key); + cursor["continue"](); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function dropInstance(options, callback) { + callback = getCallback.apply(this, arguments); + + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db; + + var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) { + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + return db; + }); + + if (!options.storeName) { + promise = dbPromise.then(function (db) { + _deferReadiness(options); + + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + + db.close(); + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + forage._dbInfo.db = null; + } + + var dropDBPromise = new Promise$1(function (resolve, reject) { + var req = idb.deleteDatabase(options.name); + + req.onerror = req.onblocked = function (err) { + var db = req.result; + if (db) { + db.close(); + } + reject(err); + }; + + req.onsuccess = function () { + var db = req.result; + if (db) { + db.close(); + } + resolve(db); + }; + }); + + return dropDBPromise.then(function (db) { + dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + var _forage = forages[i]; + _advanceReadiness(_forage._dbInfo); + } + })["catch"](function (err) { + (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function () {}); + throw err; + }); + }); + } else { + promise = dbPromise.then(function (db) { + if (!db.objectStoreNames.contains(options.storeName)) { + return; + } + + var newVersion = db.version + 1; + + _deferReadiness(options); + + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + + db.close(); + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + forage._dbInfo.db = null; + forage._dbInfo.version = newVersion; + } + + var dropObjectPromise = new Promise$1(function (resolve, reject) { + var req = idb.open(options.name, newVersion); + + req.onerror = function (err) { + var db = req.result; + db.close(); + reject(err); + }; + + req.onupgradeneeded = function () { + var db = req.result; + db.deleteObjectStore(options.storeName); + }; + + req.onsuccess = function () { + var db = req.result; + db.close(); + resolve(db); + }; + }); + + return dropObjectPromise.then(function (db) { + dbContext.db = db; + for (var j = 0; j < forages.length; j++) { + var _forage2 = forages[j]; + _forage2._dbInfo.db = db; + _advanceReadiness(_forage2._dbInfo); + } + })["catch"](function (err) { + (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function () {}); + throw err; + }); + }); + } + } + + executeCallback(promise, callback); + return promise; + } + + var asyncStorage = { + _driver: 'asyncStorage', + _initStorage: _initStorage, + _support: isIndexedDBValid(), + iterate: iterate, + getItem: getItem, + setItem: setItem, + removeItem: removeItem, + clear: clear, + length: length, + key: key, + keys: keys, + dropInstance: dropInstance + }; + + function isWebSQLValid() { + return typeof openDatabase === 'function'; + } + + // Sadly, the best way to save binary data in WebSQL/localStorage is serializing + // it to Base64, so this is how we store it to prevent very strange errors with less + // verbose ways of binary <-> string data storage. + var BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + var BLOB_TYPE_PREFIX = '~~local_forage_type~'; + var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/; + + var SERIALIZED_MARKER = '__lfsc__:'; + var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length; + + // OMG the serializations! + var TYPE_ARRAYBUFFER = 'arbf'; + var TYPE_BLOB = 'blob'; + var TYPE_INT8ARRAY = 'si08'; + var TYPE_UINT8ARRAY = 'ui08'; + var TYPE_UINT8CLAMPEDARRAY = 'uic8'; + var TYPE_INT16ARRAY = 'si16'; + var TYPE_INT32ARRAY = 'si32'; + var TYPE_UINT16ARRAY = 'ur16'; + var TYPE_UINT32ARRAY = 'ui32'; + var TYPE_FLOAT32ARRAY = 'fl32'; + var TYPE_FLOAT64ARRAY = 'fl64'; + var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length; + + var toString$1 = Object.prototype.toString; + + function stringToBuffer(serializedString) { + // Fill the string into a ArrayBuffer. + var bufferLength = serializedString.length * 0.75; + var len = serializedString.length; + var i; + var p = 0; + var encoded1, encoded2, encoded3, encoded4; + + if (serializedString[serializedString.length - 1] === '=') { + bufferLength--; + if (serializedString[serializedString.length - 2] === '=') { + bufferLength--; + } + } + + var buffer = new ArrayBuffer(bufferLength); + var bytes = new Uint8Array(buffer); + + for (i = 0; i < len; i += 4) { + encoded1 = BASE_CHARS.indexOf(serializedString[i]); + encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]); + encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]); + encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]); + + /*jslint bitwise: true */ + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + return buffer; + } + + // Converts a buffer to a string to store, serialized, in the backend + // storage library. + function bufferToString(buffer) { + // base64-arraybuffer + var bytes = new Uint8Array(buffer); + var base64String = ''; + var i; + + for (i = 0; i < bytes.length; i += 3) { + /*jslint bitwise: true */ + base64String += BASE_CHARS[bytes[i] >> 2]; + base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4]; + base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6]; + base64String += BASE_CHARS[bytes[i + 2] & 63]; + } + + if (bytes.length % 3 === 2) { + base64String = base64String.substring(0, base64String.length - 1) + '='; + } else if (bytes.length % 3 === 1) { + base64String = base64String.substring(0, base64String.length - 2) + '=='; + } + + return base64String; + } + + // Serialize a value, afterwards executing a callback (which usually + // instructs the `setItem()` callback/promise to be executed). This is how + // we store binary data with localStorage. + function serialize(value, callback) { + var valueType = ''; + if (value) { + valueType = toString$1.call(value); + } + + // Cannot use `value instanceof ArrayBuffer` or such here, as these + // checks fail when running the tests using casper.js... + // + // TODO: See why those tests fail and use a better solution. + if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) { + // Convert binary arrays to a string and prefix the string with + // a special marker. + var buffer; + var marker = SERIALIZED_MARKER; + + if (value instanceof ArrayBuffer) { + buffer = value; + marker += TYPE_ARRAYBUFFER; + } else { + buffer = value.buffer; + + if (valueType === '[object Int8Array]') { + marker += TYPE_INT8ARRAY; + } else if (valueType === '[object Uint8Array]') { + marker += TYPE_UINT8ARRAY; + } else if (valueType === '[object Uint8ClampedArray]') { + marker += TYPE_UINT8CLAMPEDARRAY; + } else if (valueType === '[object Int16Array]') { + marker += TYPE_INT16ARRAY; + } else if (valueType === '[object Uint16Array]') { + marker += TYPE_UINT16ARRAY; + } else if (valueType === '[object Int32Array]') { + marker += TYPE_INT32ARRAY; + } else if (valueType === '[object Uint32Array]') { + marker += TYPE_UINT32ARRAY; + } else if (valueType === '[object Float32Array]') { + marker += TYPE_FLOAT32ARRAY; + } else if (valueType === '[object Float64Array]') { + marker += TYPE_FLOAT64ARRAY; + } else { + callback(new Error('Failed to get type for BinaryArray')); + } + } + + callback(marker + bufferToString(buffer)); + } else if (valueType === '[object Blob]') { + // Conver the blob to a binaryArray and then to a string. + var fileReader = new FileReader(); + + fileReader.onload = function () { + // Backwards-compatible prefix for the blob type. + var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result); + + callback(SERIALIZED_MARKER + TYPE_BLOB + str); + }; + + fileReader.readAsArrayBuffer(value); + } else { + try { + callback(JSON.stringify(value)); + } catch (e) { + console.error("Couldn't convert value into a JSON string: ", value); + + callback(null, e); + } + } + } + + // Deserialize data we've inserted into a value column/field. We place + // special markers into our strings to mark them as encoded; this isn't + // as nice as a meta field, but it's the only sane thing we can do whilst + // keeping localStorage support intact. + // + // Oftentimes this will just deserialize JSON content, but if we have a + // special marker (SERIALIZED_MARKER, defined above), we will extract + // some kind of arraybuffer/binary data/typed array out of the string. + function deserialize(value) { + // If we haven't marked this string as being specially serialized (i.e. + // something other than serialized JSON), we can just return it and be + // done with it. + if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) { + return JSON.parse(value); + } + + // The following code deals with deserializing some kind of Blob or + // TypedArray. First we separate out the type of data we're dealing + // with from the data itself. + var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH); + var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH); + + var blobType; + // Backwards-compatible blob type serialization strategy. + // DBs created with older versions of localForage will simply not have the blob type. + if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) { + var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX); + blobType = matcher[1]; + serializedString = serializedString.substring(matcher[0].length); + } + var buffer = stringToBuffer(serializedString); + + // Return the right type based on the code/type set during + // serialization. + switch (type) { + case TYPE_ARRAYBUFFER: + return buffer; + case TYPE_BLOB: + return createBlob([buffer], { type: blobType }); + case TYPE_INT8ARRAY: + return new Int8Array(buffer); + case TYPE_UINT8ARRAY: + return new Uint8Array(buffer); + case TYPE_UINT8CLAMPEDARRAY: + return new Uint8ClampedArray(buffer); + case TYPE_INT16ARRAY: + return new Int16Array(buffer); + case TYPE_UINT16ARRAY: + return new Uint16Array(buffer); + case TYPE_INT32ARRAY: + return new Int32Array(buffer); + case TYPE_UINT32ARRAY: + return new Uint32Array(buffer); + case TYPE_FLOAT32ARRAY: + return new Float32Array(buffer); + case TYPE_FLOAT64ARRAY: + return new Float64Array(buffer); + default: + throw new Error('Unkown type: ' + type); + } + } + + var localforageSerializer = { + serialize: serialize, + deserialize: deserialize, + stringToBuffer: stringToBuffer, + bufferToString: bufferToString + }; + + /* + * Includes code from: + * + * base64-arraybuffer + * https://github.com/niklasvh/base64-arraybuffer + * + * Copyright (c) 2012 Niklas von Hertzen + * Licensed under the MIT license. + */ + + function createDbTable(t, dbInfo, callback, errorCallback) { + t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback); + } + + // Open the WebSQL database (automatically creates one if one didn't + // previously exist), using any options set in the config. + function _initStorage$1(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i]; + } + } + + var dbInfoPromise = new Promise$1(function (resolve, reject) { + // Open the database; the openDatabase API will automatically + // create it for us if it doesn't exist. + try { + dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size); + } catch (e) { + return reject(e); + } + + // Create our key/value table if it doesn't exist. + dbInfo.db.transaction(function (t) { + createDbTable(t, dbInfo, function () { + self._dbInfo = dbInfo; + resolve(); + }, function (t, error) { + reject(error); + }); + }, reject); + }); + + dbInfo.serializer = localforageSerializer; + return dbInfoPromise; + } + + function tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) { + t.executeSql(sqlStatement, args, callback, function (t, error) { + if (error.code === error.SYNTAX_ERR) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name = ?", [dbInfo.storeName], function (t, results) { + if (!results.rows.length) { + // if the table is missing (was deleted) + // re-create it table and retry + createDbTable(t, dbInfo, function () { + t.executeSql(sqlStatement, args, callback, errorCallback); + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); + } + + function getItem$1(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) { + var result = results.rows.length ? results.rows.item(0).value : null; + + // Check to see if this is serialized content we need to + // unpack. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function iterate$1(iterator, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) { + var rows = results.rows; + var length = rows.length; + + for (var i = 0; i < length; i++) { + var item = rows.item(i); + var result = item.value; + + // Check to see if this is serialized content + // we need to unpack. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + result = iterator(result, item.key, i + 1); + + // void(0) prevents problems with redefinition + // of `undefined`. + if (result !== void 0) { + resolve(result); + return; + } + } + + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function _setItem(key, value, callback, retriesLeft) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + // The localStorage API doesn't return undefined values in an + // "expected" way, so undefined is always cast to null in all + // drivers. See: https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } + + // Save the original value to pass to the callback. + var originalValue = value; + + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () { + resolve(originalValue); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + // The transaction failed; check + // to see if it's a quota error. + if (sqlError.code === sqlError.QUOTA_ERR) { + // We reject the callback outright for now, but + // it's worth trying to re-run the transaction. + // Even if the user accepts the prompt to use + // more storage on Safari, this error will + // be called. + // + // Try to re-run the transaction. + if (retriesLeft > 0) { + resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1])); + return; + } + reject(sqlError); + } + }); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function setItem$1(key, value, callback) { + return _setItem.apply(this, [key, value, callback, 1]); + } + + function removeItem$1(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Deletes every item in the table. + // TODO: Find out if this resets the AUTO_INCREMENT number. + function clear$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Does a simple `COUNT(key)` to get the number of items stored in + // localForage. + function length$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + // Ahhh, SQL makes this one soooooo easy. + tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) { + var result = results.rows.item(0).c; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Return the key located at key index X; essentially gets the key from a + // `WHERE id = ?`. This is the most efficient way I can think to implement + // this rarely-used (in my experience) part of the API, but it can seem + // inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so + // the ID of each key will change every time it's updated. Perhaps a stored + // procedure for the `setItem()` SQL would solve this problem? + // TODO: Don't change ID on `setItem()`. + function key$1(n, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) { + var result = results.rows.length ? results.rows.item(0).key : null; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function keys$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) { + var keys = []; + + for (var i = 0; i < results.rows.length; i++) { + keys.push(results.rows.item(i).key); + } + + resolve(keys); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // https://www.w3.org/TR/webdatabase/#databases + // > There is no way to enumerate or delete the databases available for an origin from this API. + function getAllStoreNames(db) { + return new Promise$1(function (resolve, reject) { + db.transaction(function (t) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function (t, results) { + var storeNames = []; + + for (var i = 0; i < results.rows.length; i++) { + storeNames.push(results.rows.item(i).name); + } + + resolve({ + db: db, + storeNames: storeNames + }); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); + } + + function dropInstance$1(options, callback) { + callback = getCallback.apply(this, arguments); + + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + promise = new Promise$1(function (resolve) { + var db; + if (options.name === currentConfig.name) { + // use the db reference of the current instance + db = self._dbInfo.db; + } else { + db = openDatabase(options.name, '', '', 0); + } + + if (!options.storeName) { + // drop all database tables + resolve(getAllStoreNames(db)); + } else { + resolve({ + db: db, + storeNames: [options.storeName] + }); + } + }).then(function (operationInfo) { + return new Promise$1(function (resolve, reject) { + operationInfo.db.transaction(function (t) { + function dropTable(storeName) { + return new Promise$1(function (resolve, reject) { + t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + } + + var operations = []; + for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) { + operations.push(dropTable(operationInfo.storeNames[i])); + } + + Promise$1.all(operations).then(function () { + resolve(); + })["catch"](function (e) { + reject(e); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); + }); + } + + executeCallback(promise, callback); + return promise; + } + + var webSQLStorage = { + _driver: 'webSQLStorage', + _initStorage: _initStorage$1, + _support: isWebSQLValid(), + iterate: iterate$1, + getItem: getItem$1, + setItem: setItem$1, + removeItem: removeItem$1, + clear: clear$1, + length: length$1, + key: key$1, + keys: keys$1, + dropInstance: dropInstance$1 + }; + + function isLocalStorageValid() { + try { + return typeof localStorage !== 'undefined' && 'setItem' in localStorage && + // in IE8 typeof localStorage.setItem === 'object' + !!localStorage.setItem; + } catch (e) { + return false; + } + } + + function _getKeyPrefix(options, defaultConfig) { + var keyPrefix = options.name + '/'; + + if (options.storeName !== defaultConfig.storeName) { + keyPrefix += options.storeName + '/'; + } + return keyPrefix; + } + + // Check if localStorage throws when saving an item + function checkIfLocalStorageThrows() { + var localStorageTestKey = '_localforage_support_test'; + + try { + localStorage.setItem(localStorageTestKey, true); + localStorage.removeItem(localStorageTestKey); + + return false; + } catch (e) { + return true; + } + } + + // Check if localStorage is usable and allows to save an item + // This method checks if localStorage is usable in Safari Private Browsing + // mode, or in any other case where the available quota for localStorage + // is 0 and there wasn't any saved items yet. + function _isLocalStorageUsable() { + return !checkIfLocalStorageThrows() || localStorage.length > 0; + } + + // Config the localStorage backend, using options set in the config. + function _initStorage$2(options) { + var self = this; + var dbInfo = {}; + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } + + dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig); + + if (!_isLocalStorageUsable()) { + return Promise$1.reject(); + } + + self._dbInfo = dbInfo; + dbInfo.serializer = localforageSerializer; + + return Promise$1.resolve(); + } + + // Remove all keys from the datastore, effectively destroying all data in + // the app's key/value store! + function clear$2(callback) { + var self = this; + var promise = self.ready().then(function () { + var keyPrefix = self._dbInfo.keyPrefix; + + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + + executeCallback(promise, callback); + return promise; + } + + // Retrieve an item from the store. Unlike the original async_storage + // library in Gaia, we don't modify return values at all. If a key's value + // is `undefined`, we pass that value to the callback function. + function getItem$2(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result = localStorage.getItem(dbInfo.keyPrefix + key); + + // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the key + // is likely undefined and we'll pass it straight to the + // callback. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + return result; + }); + + executeCallback(promise, callback); + return promise; + } + + // Iterate over all items in the store. + function iterate$2(iterator, callback) { + var self = this; + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var keyPrefix = dbInfo.keyPrefix; + var keyPrefixLength = keyPrefix.length; + var length = localStorage.length; + + // We use a dedicated iterator instead of the `i` variable below + // so other keys we fetch in localStorage aren't counted in + // the `iterationNumber` argument passed to the `iterate()` + // callback. + // + // See: github.com/mozilla/localForage/pull/435#discussion_r38061530 + var iterationNumber = 1; + + for (var i = 0; i < length; i++) { + var key = localStorage.key(i); + if (key.indexOf(keyPrefix) !== 0) { + continue; + } + var value = localStorage.getItem(key); + + // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the + // key is likely undefined and we'll pass it straight + // to the iterator. + if (value) { + value = dbInfo.serializer.deserialize(value); + } + + value = iterator(value, key.substring(keyPrefixLength), iterationNumber++); + + if (value !== void 0) { + return value; + } + } + }); + + executeCallback(promise, callback); + return promise; + } + + // Same as localStorage's key() method, except takes a callback. + function key$2(n, callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result; + try { + result = localStorage.key(n); + } catch (error) { + result = null; + } + + // Remove the prefix from the key, if a key is found. + if (result) { + result = result.substring(dbInfo.keyPrefix.length); + } + + return result; + }); + + executeCallback(promise, callback); + return promise; + } + + function keys$2(callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var length = localStorage.length; + var keys = []; + + for (var i = 0; i < length; i++) { + var itemKey = localStorage.key(i); + if (itemKey.indexOf(dbInfo.keyPrefix) === 0) { + keys.push(itemKey.substring(dbInfo.keyPrefix.length)); + } + } + + return keys; + }); + + executeCallback(promise, callback); + return promise; + } + + // Supply the number of keys in the datastore to the callback function. + function length$2(callback) { + var self = this; + var promise = self.keys().then(function (keys) { + return keys.length; + }); + + executeCallback(promise, callback); + return promise; + } + + // Remove an item from the store, nice and simple. + function removeItem$2(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + localStorage.removeItem(dbInfo.keyPrefix + key); + }); + + executeCallback(promise, callback); + return promise; + } + + // Set a key's value and run an optional callback once the value is set. + // Unlike Gaia's implementation, the callback function is passed the value, + // in case you want to operate on that value only after you're sure it + // saved, or something like that. + function setItem$2(key, value, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + // Convert undefined values to null. + // https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } + + // Save the original value to pass to the callback. + var originalValue = value; + + return new Promise$1(function (resolve, reject) { + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + try { + localStorage.setItem(dbInfo.keyPrefix + key, value); + resolve(originalValue); + } catch (e) { + // localStorage capacity exceeded. + // TODO: Make this a specific error/event. + if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { + reject(e); + } + reject(e); + } + } + }); + }); + }); + + executeCallback(promise, callback); + return promise; + } + + function dropInstance$2(options, callback) { + callback = getCallback.apply(this, arguments); + + options = typeof options !== 'function' && options || {}; + if (!options.name) { + var currentConfig = this.config(); + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + promise = new Promise$1(function (resolve) { + if (!options.storeName) { + resolve(options.name + '/'); + } else { + resolve(_getKeyPrefix(options, self._defaultConfig)); + } + }).then(function (keyPrefix) { + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + } + + executeCallback(promise, callback); + return promise; + } + + var localStorageWrapper = { + _driver: 'localStorageWrapper', + _initStorage: _initStorage$2, + _support: isLocalStorageValid(), + iterate: iterate$2, + getItem: getItem$2, + setItem: setItem$2, + removeItem: removeItem$2, + clear: clear$2, + length: length$2, + key: key$2, + keys: keys$2, + dropInstance: dropInstance$2 + }; + + var sameValue = function sameValue(x, y) { + return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y); + }; + + var includes = function includes(array, searchElement) { + var len = array.length; + var i = 0; + while (i < len) { + if (sameValue(array[i], searchElement)) { + return true; + } + i++; + } + + return false; + }; + + var isArray = Array.isArray || function (arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + + // Drivers are stored here when `defineDriver()` is called. + // They are shared across all instances of localForage. + var DefinedDrivers = {}; + + var DriverSupport = {}; + + var DefaultDrivers = { + INDEXEDDB: asyncStorage, + WEBSQL: webSQLStorage, + LOCALSTORAGE: localStorageWrapper + }; + + var DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver]; + + var OptionalDriverMethods = ['dropInstance']; + + var LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods); + + var DefaultConfig = { + description: '', + driver: DefaultDriverOrder.slice(), + name: 'localforage', + // Default DB size is _JUST UNDER_ 5MB, as it's the highest size + // we can use without a prompt. + size: 4980736, + storeName: 'keyvaluepairs', + version: 1.0 + }; + + function callWhenReady(localForageInstance, libraryMethod) { + localForageInstance[libraryMethod] = function () { + var _args = arguments; + return localForageInstance.ready().then(function () { + return localForageInstance[libraryMethod].apply(localForageInstance, _args); + }); + }; + } + + function extend() { + for (var i = 1; i < arguments.length; i++) { + var arg = arguments[i]; + + if (arg) { + for (var _key in arg) { + if (arg.hasOwnProperty(_key)) { + if (isArray(arg[_key])) { + arguments[0][_key] = arg[_key].slice(); + } else { + arguments[0][_key] = arg[_key]; + } + } + } + } + } + + return arguments[0]; + } + + var LocalForage = function () { + function LocalForage(options) { + _classCallCheck(this, LocalForage); + + for (var driverTypeKey in DefaultDrivers) { + if (DefaultDrivers.hasOwnProperty(driverTypeKey)) { + var driver = DefaultDrivers[driverTypeKey]; + var driverName = driver._driver; + this[driverTypeKey] = driverName; + + if (!DefinedDrivers[driverName]) { + // we don't need to wait for the promise, + // since the default drivers can be defined + // in a blocking manner + this.defineDriver(driver); + } + } + } + + this._defaultConfig = extend({}, DefaultConfig); + this._config = extend({}, this._defaultConfig, options); + this._driverSet = null; + this._initDriver = null; + this._ready = false; + this._dbInfo = null; + + this._wrapLibraryMethodsWithReady(); + this.setDriver(this._config.driver)["catch"](function () {}); + } + + // Set any config values for localForage; can be called anytime before + // the first API call (e.g. `getItem`, `setItem`). + // We loop through options so we don't overwrite existing config + // values. + + + LocalForage.prototype.config = function config(options) { + // If the options argument is an object, we use it to set values. + // Otherwise, we return either a specified config value or all + // config values. + if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + // If localforage is ready and fully initialized, we can't set + // any new configuration values. Instead, we return an error. + if (this._ready) { + return new Error("Can't call config() after localforage " + 'has been used.'); + } + + for (var i in options) { + if (i === 'storeName') { + options[i] = options[i].replace(/\W/g, '_'); + } + + if (i === 'version' && typeof options[i] !== 'number') { + return new Error('Database version must be a number.'); + } + + this._config[i] = options[i]; + } + + // after all config options are set and + // the driver option is used, try setting it + if ('driver' in options && options.driver) { + return this.setDriver(this._config.driver); + } + + return true; + } else if (typeof options === 'string') { + return this._config[options]; + } else { + return this._config; + } + }; + + // Used to define a custom driver, shared across all instances of + // localForage. + + + LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) { + var promise = new Promise$1(function (resolve, reject) { + try { + var driverName = driverObject._driver; + var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver'); + + // A driver name should be defined and not overlap with the + // library-defined, default drivers. + if (!driverObject._driver) { + reject(complianceError); + return; + } + + var driverMethods = LibraryMethods.concat('_initStorage'); + for (var i = 0, len = driverMethods.length; i < len; i++) { + var driverMethodName = driverMethods[i]; + + // when the property is there, + // it should be a method even when optional + var isRequired = !includes(OptionalDriverMethods, driverMethodName); + if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') { + reject(complianceError); + return; + } + } + + var configureMissingMethods = function configureMissingMethods() { + var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) { + return function () { + var error = new Error('Method ' + methodName + ' is not implemented by the current driver'); + var promise = Promise$1.reject(error); + executeCallback(promise, arguments[arguments.length - 1]); + return promise; + }; + }; + + for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) { + var optionalDriverMethod = OptionalDriverMethods[_i]; + if (!driverObject[optionalDriverMethod]) { + driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod); + } + } + }; + + configureMissingMethods(); + + var setDriverSupport = function setDriverSupport(support) { + if (DefinedDrivers[driverName]) { + console.info('Redefining LocalForage driver: ' + driverName); + } + DefinedDrivers[driverName] = driverObject; + DriverSupport[driverName] = support; + // don't use a then, so that we can define + // drivers that have simple _support methods + // in a blocking manner + resolve(); + }; + + if ('_support' in driverObject) { + if (driverObject._support && typeof driverObject._support === 'function') { + driverObject._support().then(setDriverSupport, reject); + } else { + setDriverSupport(!!driverObject._support); + } + } else { + setDriverSupport(true); + } + } catch (e) { + reject(e); + } + }); + + executeTwoCallbacks(promise, callback, errorCallback); + return promise; + }; + + LocalForage.prototype.driver = function driver() { + return this._driver || null; + }; + + LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) { + var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.')); + + executeTwoCallbacks(getDriverPromise, callback, errorCallback); + return getDriverPromise; + }; + + LocalForage.prototype.getSerializer = function getSerializer(callback) { + var serializerPromise = Promise$1.resolve(localforageSerializer); + executeTwoCallbacks(serializerPromise, callback); + return serializerPromise; + }; + + LocalForage.prototype.ready = function ready(callback) { + var self = this; + + var promise = self._driverSet.then(function () { + if (self._ready === null) { + self._ready = self._initDriver(); + } + + return self._ready; + }); + + executeTwoCallbacks(promise, callback, callback); + return promise; + }; + + LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) { + var self = this; + + if (!isArray(drivers)) { + drivers = [drivers]; + } + + var supportedDrivers = this._getSupportedDrivers(drivers); + + function setDriverToConfig() { + self._config.driver = self.driver(); + } + + function extendSelfWithDriver(driver) { + self._extend(driver); + setDriverToConfig(); + + self._ready = self._initStorage(self._config); + return self._ready; + } + + function initDriver(supportedDrivers) { + return function () { + var currentDriverIndex = 0; + + function driverPromiseLoop() { + while (currentDriverIndex < supportedDrivers.length) { + var driverName = supportedDrivers[currentDriverIndex]; + currentDriverIndex++; + + self._dbInfo = null; + self._ready = null; + + return self.getDriver(driverName).then(extendSelfWithDriver)["catch"](driverPromiseLoop); + } + + setDriverToConfig(); + var error = new Error('No available storage method found.'); + self._driverSet = Promise$1.reject(error); + return self._driverSet; + } + + return driverPromiseLoop(); + }; + } + + // There might be a driver initialization in progress + // so wait for it to finish in order to avoid a possible + // race condition to set _dbInfo + var oldDriverSetDone = this._driverSet !== null ? this._driverSet["catch"](function () { + return Promise$1.resolve(); + }) : Promise$1.resolve(); + + this._driverSet = oldDriverSetDone.then(function () { + var driverName = supportedDrivers[0]; + self._dbInfo = null; + self._ready = null; + + return self.getDriver(driverName).then(function (driver) { + self._driver = driver._driver; + setDriverToConfig(); + self._wrapLibraryMethodsWithReady(); + self._initDriver = initDriver(supportedDrivers); + }); + })["catch"](function () { + setDriverToConfig(); + var error = new Error('No available storage method found.'); + self._driverSet = Promise$1.reject(error); + return self._driverSet; + }); + + executeTwoCallbacks(this._driverSet, callback, errorCallback); + return this._driverSet; + }; + + LocalForage.prototype.supports = function supports(driverName) { + return !!DriverSupport[driverName]; + }; + + LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) { + extend(this, libraryMethodsAndProperties); + }; + + LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) { + var supportedDrivers = []; + for (var i = 0, len = drivers.length; i < len; i++) { + var driverName = drivers[i]; + if (this.supports(driverName)) { + supportedDrivers.push(driverName); + } + } + return supportedDrivers; + }; + + LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() { + // Add a stub for each driver API method that delays the call to the + // corresponding driver method until localForage is ready. These stubs + // will be replaced by the driver methods as soon as the driver is + // loaded, so there is no performance impact. + for (var i = 0, len = LibraryMethods.length; i < len; i++) { + callWhenReady(this, LibraryMethods[i]); + } + }; + + LocalForage.prototype.createInstance = function createInstance(options) { + return new LocalForage(options); + }; + + return LocalForage; + }(); + + // The actual localForage object that we expose as a module or via a + // global. It's extended by pulling in one of our other libraries. + + + var localforage_js = new LocalForage(); + + module.exports = localforage_js; + + },{"3":3}]},{},[4])(4) + }); + }); + + const PREFIX_KEY = "SCR_ROUTER_"; + const IDX_DB_NAME = PREFIX_KEY; + const IDX_DB_STORE = PREFIX_KEY; + const EXPIRE_KEYS = `${PREFIX_KEY}IDX_DB_P_EXPIRE_KEYS`; + + localforage.config({ + driver: localforage.INDEXEDDB, + name: IDX_DB_NAME, + version: `${PREFIX_KEY}VERSION`, + storeName: IDX_DB_STORE, + description: `${PREFIX_KEY}DB_DESCRIPTOR`, + }); + + const LF = localforage; + + const getItem = async (key) => { + try { + await removeExpiredKeys(); + return fromJSON(await LF.getItem(key)); + } catch (error) { + throw error; + } + }; + + const setItem = async (key, value, time) => { + try { + if (key === undefined || key === null || key.trim() === "") { + return false; + } + if (value === undefined || value === null) { + await clearKeyList([key]); + return; + } + await removeExpiredKeys(); + if ( + time && + Number.isSafeInteger(time) && + Number.isInteger(time) && + time > 0 + ) { + await addExpireKey(key, time); + } + await LF.setItem(key, toJSON(value)); + } catch (error) { + throw error; + } + }; + + const removeItem = async (key) => { + try { + await removeExpiredKeys(); + const item = fromJSON(await LF.getItem(key)); + if (item !== null && item !== undefined) { + await LF.removeItem(key); + await removeExpireKey(key); + } + return item; + } catch (error) { + throw error; + } + }; + + const getAll = async () => { + try { + await removeExpiredKeys(); + const keys = await LF.keys(); + const items = []; + let item; + for (let key of keys) { + items.push(await LF.getItem(key)); + await LF.removeItem(key); + } + return items; + } catch (error) { + throw error; + } + }; + + // clear all the expiration list and the keys + const clearExpireKeys = async () => { + try { + const expire = fromJSON(await LF.getItem(EXPIRE_KEYS)); + + if (expire === null || expire === undefined) { + return; + } + + await expire.map(async (item) => await LF.removeItem(item.key)); + + await LF.removeItem(EXPIRE_KEYS); + } catch (error) { + throw error; + } + }; + + // clear a given array list of keys + // affects expiration key list and the keys + const clearKeyList = async (keyList) => { + try { + if (!Array.isArray(keyList) || keyList.length === 0) { + return; + } + + await keyList.map(async (key) => { + if (await LF.getItem(key)) { + await LF.removeItem(key); + await removeExpireKey(key); + } + }); + + // updating the remaining list keychain if it has left any item + let expire = fromJSON(await LF.getItem(EXPIRE_KEYS)); + if (expire === null || expire === undefined) { + return; + } + + expire = expire.filter((item) => !keyList.includes(item.key)); + if (expire.length > 0) { + await LF.setItem(EXPIRE_KEYS, toJSON(expire)); + } else { + await LF.removeItem(EXPIRE_KEYS); + } + } catch (error) { + throw error; + } + }; + + // Function to check and remove a key if expired + // If so... remove the key from the expiration list and the key + const removeExpiredKeys = async () => { + try { + let keyList = []; + let expire = fromJSON(await LF.getItem(EXPIRE_KEYS)); + + if (expire && expire.length > 0) { + expire = await expire.filter(async (item) => { + if ( + isBefore(new Date(), new Date(item.liveUntil)) && + (await LF.getItem(item.key)) + ) { + return true; + } + await LF.removeItem(item.key); + keyList.push(item.key); + }); + + if (expire.length > 0) { + await LF.setItem(EXPIRE_KEYS, toJSON(expire)); + } else { + await LF.removeItem(EXPIRE_KEYS); + } + } + return keyList; + } catch (error) { + throw error; + } + }; + + const setSvelteStoreInStorage = async ( + subscribe, + key, + timeout, + ignoreKeys = [] + ) => { + try { + const unsubscribe = subscribe(async (store) => { + for (let iKeys of ignoreKeys) { + store[iKeys] = undefined; + } + await setItem(key, store, timeout); + }); + unsubscribe(); + } catch (error) { + throw error; + } + }; + + const getSvelteStoreInStorage = async (update, key) => { + try { + const storage = await getItem(key); + if (!storage) { + return; + } + update(() => { + return Object.assign({}, cloneDeep_1(storage)); + }); + } catch (error) { + throw error; + } + }; + + // ------------------------------------------------- ## BELOW THIS LINE PRIVATE FUNCTIONS ONLY ## ------------------------------------------------- + // add a key in the expiration key list + // key: String + // time: In milliseconds + async function addExpireKey(key, time) { + try { + if (!Number.isInteger(time) || !Number.isSafeInteger(time)) { + throw new Error("Time to add an expire key is not a safe integer"); + } + + let expire = fromJSON(await LF.getItem(EXPIRE_KEYS)); + const liveUntil = addMilliseconds(new Date(), time); + + if (expire !== null && expire !== undefined) { + expire = expire.filter((item) => item.key !== key); + expire.push({ key, liveUntil }); + } else { + expire = [{ key, liveUntil }]; + } + + await LF.setItem(EXPIRE_KEYS, toJSON(expire)); + } catch (error) { + throw error; + } + } + + // removes a specific key from expiration key list, may remove the key too + // key: String + // expireKeyOnly: Boolean -- only = true for only remove from expireKey OR the key itself too + async function removeExpireKey(key, expireKeyOnly = true) { + try { + let expire = fromJSON(await LF.getItem(EXPIRE_KEYS)); + if (expire === null || expire === undefined) { + return; + } + + expire = expire.filter((item) => item.key !== key); + + if (expire.length > 0) { + await LF.setItem(EXPIRE_KEYS, toJSON(expire)); + } else { + await LF.removeItem(EXPIRE_KEYS); + } + + if (!expireKeyOnly && LF.getItem(key)) { + await LF.removeItem(key); + } + } catch (error) { + throw error; + } + } + + function toJSON(item) { + if (typeof item === "object") { + return JSON.stringify(item); + } + return item; + } + + function fromJSON(item) { + if (!item) { + return item; + } + try { + return JSON.parse(item); + } catch (err) { + return item; + } + } + + // setInterval(removeExpiredKeys, 5000); + + var LF$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + getItem: getItem, + setItem: setItem, + removeItem: removeItem, + getAll: getAll, + clearExpireKeys: clearExpireKeys, + clearKeyList: clearKeyList, + removeExpiredKeys: removeExpiredKeys, + setSvelteStoreInStorage: setSvelteStoreInStorage, + getSvelteStoreInStorage: getSvelteStoreInStorage + }); + + const subscriber_queue = []; + /** + * Create a `Writable` store that allows both updating and reading by subscription. + * @param {*=}value initial value + * @param {StartStopNotifier=}start start and stop notifications for subscriptions + */ + function writable(value, start = noop) { + let stop; + const subscribers = []; + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { // store is ready + const run_queue = !subscriber_queue.length; + for (let i = 0; i < subscribers.length; i += 1) { + const s = subscribers[i]; + s[1](); + subscriber_queue.push(s, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn(value)); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.push(subscriber); + if (subscribers.length === 1) { + stop = start(set) || noop; + } + run(value); + return () => { + const index = subscribers.indexOf(subscriber); + if (index !== -1) { + subscribers.splice(index, 1); + } + if (subscribers.length === 0) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; + } + + const storeTemplate$2 = { + hashMode: false, + navigationHistoryLimit: 10, + saveMode: "localstorage", + notFoundRoute: "/notFound", + errorRoute: "/error", + consoleLogErrorMessages: true, + consoleLogStores: true, + usesRouteLayout: true, + considerTrailingSlashOnMatchingRoute: true, + useScroll: false, + scrollProps: { + top: 0, + left: 0, + behavior: "smooth", + timeout: 10, + }, + }; + + const ENUM_SAVE_MODE = ["localstorage", "indexeddb", "none"]; + + const store$2 = writable(assign({}, storeTemplate$2)); + let onError; + let beforeEnter; + + // -------------- config Property ----------------------------------------------------- + + function setConfig(config) { + setHashMode(config.hashMode); + setNavigationHistoryLimit(config.navigationHistoryLimit); + setSaveMode(config.saveMode); + setNotFoundRoute(config.notFoundRoute); + setErrorRoute(config.errorRoute); + setConsoleLogErrorMessages(config.consoleLogErrorMessages); + setConsoleLogStores(config.consoleLogStores); + setUsesRouteLayout(config.usesRouteLayout); + setConsiderTrailingSlashOnMatchingRoute( + config.considerTrailingSlashOnMatchingRoute + ); + setOnError(config.onError); + setBeforeEnter(config.beforeEnter); + setScrollProps(config.scrollProps); + setUseScroll(config.useScroll); + } + + function getConfig$2() { + return getStoreState(store$2); + } + + // -------------------------------------------------------------------------------------- + // -------------- hashmode Property --------------------------------------------------- + + function setHashMode(hashMode) { + if (typeof hashMode == "boolean") { + updateStoreKey(store$2, { hashMode }); + } + } + + function getHashMode() { + return getStoreKey(store$2, "hashMode"); + } + + // -------------------------------------------------------------------------------------- + // -------------- navigationHistoryLimit Property ------------------------------------- + + function setNavigationHistoryLimit(navigationHistoryLimit) { + if (typeof navigationHistoryLimit == "number") { + updateStoreKey(store$2, { navigationHistoryLimit }); + } + } + + function getNavigationHistoryLimit() { + return getStoreKey(store$2, "navigationHistoryLimit"); + } + + // -------------------------------------------------------------------------------------- + // -------------- saveMode Property --------------------------------------------------- + + function setSaveMode(saveMode) { + if (ENUM_SAVE_MODE.includes(saveMode)) { + updateStoreKey(store$2, { saveMode }); + } + } + + function getSaveMode() { + return getStoreKey(store$2, "saveMode"); + } + + // -------------------------------------------------------------------------------------- + // -------------- notFoundRoute Property ---------------------------------------------- + + function setNotFoundRoute(notFoundRoute) { + if (typeof notFoundRoute == "string" && notFoundRoute.includes("/")) { + updateStoreKey(store$2, { notFoundRoute }); + } + } + + function getNotFoundRoute() { + return getStoreKey(store$2, "notFoundRoute"); + } + + // -------------------------------------------------------------------------------------- + // -------------- errorRoute Property ------------------------------------------------- + + function setErrorRoute(errorRoute) { + if (typeof errorRoute == "string" && errorRoute.includes("/")) { + updateStoreKey(store$2, { errorRoute }); + } + } + + function getErrorRoute() { + return getStoreKey(store$2, "errorRoute"); + } + + // -------------------------------------------------------------------------------------- + // -------------- consoleLogErrorMessages Property ------------------------------------ + + function setConsoleLogErrorMessages(consoleLogErrorMessages = false) { + if (typeof consoleLogErrorMessages == "boolean") { + updateStoreKey(store$2, { consoleLogErrorMessages }); + } + } + + function getConsoleLogErrorMessages() { + return getStoreKey(store$2, "consoleLogErrorMessages"); + } + + // -------------------------------------------------------------------------------------- + // -------------- consoleLogStores Property ------------------------------------ + + function setConsoleLogStores(consoleLogStores = false) { + if (typeof consoleLogStores == "boolean") { + updateStoreKey(store$2, { consoleLogStores }); + } + } + + function getConsoleLogStores() { + return getStoreKey(store$2, "consoleLogStores"); + } + + // -------------------------------------------------------------------------------------- + // -------------- usesRouteLayout Property -------------------------------------------- + + function setUsesRouteLayout(usesRouteLayout) { + if (typeof usesRouteLayout == "boolean") { + updateStoreKey(store$2, { usesRouteLayout }); + } + } + + function getUsesRouteLayout() { + return getStoreKey(store$2, "usesRouteLayout"); + } + + // -------------------------------------------------------------------------------------- + // -------------- considerTrailingSlashOnMachingRoute Property ------------------------ + + function setConsiderTrailingSlashOnMachingRoute( + considerTrailingSlashOnMachingRoute + ) { + if (typeof considerTrailingSlashOnMachingRoute == "boolean") { + updateStoreKey(store$2, { considerTrailingSlashOnMachingRoute }); + } + } + + function getConsiderTrailingSlashOnMachingRoute() { + return getStoreKey(store$2, "considerTrailingSlashOnMachingRoute"); + } + + // -------------------------------------------------------------------------------------- + // -------------- scrollProps Property ------------------------------------------------ + + function setScrollProps(scrollProps) { + if (typeof setScrollProps == "object") { + ({ + top: scrollProps.top, + left: scrollProps.left, + behavior: scrollProps.behavior, + timeout: + scrollProps.timeout && scrollProps.timeout > 10 + ? scrollProps.timeout + : 10, + }); + updateStoreKey(store$2, { scrollProps }); + } + } + + function getScrollProps() { + return getStoreKey(store$2, "scrollProps"); + } + + // -------------------------------------------------------------------------------------- + // -------------- useScroll Property -------------------------------------------------- + + function setUseScroll(useScroll) { + if (typeof useScroll == "boolean") { + updateStoreKey(store$2, { useScroll }); + } + } + + function getUseScroll() { + return getStoreKey(store$2, "useScroll"); + } + + // -------------------------------------------------------------------------------------- + // -------------- onError Function ---------------------------------------------------- + + function setOnError(onErrorParam) { + if (!onErrorParam || typeof onErrorParam !== "function") { + return; + } + onError = onErrorParam; + } + + function getOnError() { + return onError; + } + + // -------------------------------------------------------------------------------------- + // -------------- beforeEnter Function -------------------------------------------- + + function setBeforeEnter(beforeEnterParam) { + if ( + !beforeEnterParam || + (typeof beforeEnterParam !== "function" && !Array.isArray(beforeEnterParam)) + ) { + return; + } + if (Array.isArray(beforeEnterParam)) { + for (let bFuncItem of beforeEnterParam) { + if (typeof bFuncItem !== "function") { + return; + } + } + } + // if is valid + beforeEnter = beforeEnterParam; + } + + function getBeforeEnter() { + return beforeEnter; + } + + // -------------------------------------------------------------------------------------- + + var configStore = { + subscribe: store$2.subscribe, + update: store$2.update, + setConfig, + getConfig: getConfig$2, + setHashMode, + getHashMode, + setNavigationHistoryLimit, + getNavigationHistoryLimit, + setSaveMode, + getSaveMode, + setNotFoundRoute, + getNotFoundRoute, + setErrorRoute, + getErrorRoute, + setConsoleLogErrorMessages, + getConsoleLogErrorMessages, + setConsoleLogStores, + getConsoleLogStores, + setUsesRouteLayout, + getUsesRouteLayout, + setConsiderTrailingSlashOnMachingRoute, + getConsiderTrailingSlashOnMachingRoute, + setScrollProps, + getScrollProps, + setUseScroll, + getUseScroll, + setOnError, + getOnError, + setBeforeEnter, + getBeforeEnter, + }; + + const STORAGE_KEY = "SRC_ROUTER_STORE"; + + const storeTemplate$1 = { + routes: [], + currentLocation: undefined, + currentRoute: { + name: undefined, + pathname: undefined, + params: [], + hostname: undefined, + protocol: undefined, + port: undefined, + origin: undefined, + hash: undefined, + }, + fromRoute: { + name: undefined, + pathname: undefined, + params: [], + hostname: undefined, + protocol: undefined, + port: undefined, + origin: undefined, + hash: undefined, + }, + navigationHistory: [], + }; + + const store$1 = writable(assign({}, storeTemplate$1)); + + // -------------- routes Property ------------------------------------------------------ + + async function setRoutes(routes = []) { + if (!Array.isArray(routes)) { + return; + } + updateStoreKey(store$1, { routes }); + await saveMode(); + } + + function getRoutes() { + return getStoreKey(store$1, "routes"); + } + + // -------------------------------------------------------------------------------------- + // -------------- currentLocation Property -------------------------------------------- + + async function setCurrentLocation(currentLocation) { + if (typeof currentLocation == "string") { + updateStoreKey(store$1, { currentLocation }); + await saveMode(); + } + } + + function getCurrentLocation() { + return getStoreKey(store$1, "currentLocation"); + } + + // -------------------------------------------------------------------------------------- + // -------------- currentRoute Property ----------------------------------------------- + + async function setCurrentRoute(currentRoute) { + if (typeof currentRoute == "object") { + updateStoreKey(store$1, { currentRoute }); + await saveMode(); + } + } + + function getCurrentRoute() { + return getStoreKey(store$1, "currentRoute"); + } + + // -------------------------------------------------------------------------------------- + // -------------- fromRoute Property -------------------------------------------------- + + async function setFromRoute(fromRoute) { + if (typeof fromRoute == "object") { + updateStoreKey(store$1, { fromRoute }); + await saveMode(); + } + } + + function getFromRoute() { + return getStoreKey(store$1, "fromRoute"); + } + + // -------------------------------------------------------------------------------------- + // -------------- navigationHistory Property ------------------------------------------ + + async function setNavigationHistory(navigationHistory) { + if (typeof navigationHistory == "object") { + const configs = getConfig$1(); + if (configs.navigationHistoryLimit > 0) { + navigationHistory = navigationHistory.slice( + 0, + configs.navigationHistoryLimit - 1 + ); + } + updateStoreKey(store$1, { navigationHistory }); + await saveMode(); + } + } + + async function pushNavigationHistory(navObj) { + let navigationHistory = getNavigationHistory$1() || []; + navigationHistory = [navObj, ...navigationHistory]; + await setNavigationHistory(navigationHistory); + } + + async function popNavigationHistory() { + let navigationHistory = getNavigationHistory$1() || []; + + if (navigationHistory.length == 0) { + return false; + } + const navObj = { ...navigationHistory[0] }; + await setNavigationHistory(navigationHistory.slice(1)); + return navObj; + } + + function getNavigationHistory$1() { + return getStoreKey(store$1, "navigationHistory"); + } + + // -------------------------------------------------------------------------------------- + // -------------- config Property ----------------------------------------------------- + + function getConfig$1() { + return configStore.getConfig(); + } + + // -------------------------------------------------------------------------------------- + // -------------- saveMode Function --------------------------------------------------- + + async function saveMode() { + const configs = getConfig$1(); + if (!configs || !configs.saveMode || configs.saveMode == "none") { + return false; + } + if (configs.saveMode === "localstorage") { + await setSvelteStoreInStorage$1(store$1.subscribe, STORAGE_KEY); + } else if (configs.saveMode === "indexeddb") { + await setSvelteStoreInStorage(store$1.subscribe, STORAGE_KEY); + } + return false; + } + // -------------------------------------------------------------------------------------- + + var routerStore = { + subscribe: store$1.subscribe, + update: store$1.update, + STORAGE_KEY, + setRoutes, + getRoutes, + setCurrentRoute, + getCurrentRoute, + setFromRoute, + getFromRoute, + setNavigationHistory, + getNavigationHistory: getNavigationHistory$1, + pushNavigationHistory, + popNavigationHistory, + setCurrentLocation, + getCurrentLocation, + getConfig: getConfig$1, + }; + + const storeTemplate = { + pushRoute: false, + params: {}, + }; + + const store = writable(assign({}, storeTemplate)); + let routeNavigation; + + // -------------- pushRoute Property -------------------------------------------------- + + function pushRoute$1(route, params, onError) { + if (!route) { + const error = new Error(`SCR_ROUTER - Route not defined - ${route}`); + if (typeof onError === "function") { + onError(error); + } else { + throw error; + } + } + const routes = routerStore.getRoutes(); + routeNavigation = undefined; + + if (typeof route === "string") { + routeNavigation = routes.find((rItem) => rItem.path === route); + } else if (route.path) { + routeNavigation = routes.find((rItem) => rItem.path === route.path); + } else if (route.name) { + routeNavigation = routes.find((rItem) => rItem.name === route.name); + } + + if (!routeNavigation) { + routeNavigation = { + notFound: true, + path: typeof route === "string" ? route : route.path || "", + }; + } + + if (onError && typeof onError === "function") { + routeNavigation.onError = onError; + } + + setParams(params); + updateStoreKey(store, { pushRoute: true }); + } + + function consumeRoutePushed() { + const copyRouteNavigation = assign({}, routeNavigation); + routeNavigation = undefined; + updateStoreKey(store, { pushRoute: false }); + copyRouteNavigation.params = { + ...copyRouteNavigation.params, + ...consumeParams(), + }; + return copyRouteNavigation; + } + + function backRoute$1() { + const navigationHistory = getNavigationHistory(); + let popRoute; + if (navigationHistory.length > 0) { + popRoute = routerStore.popNavigationHistory(); + } + window.history.back(); + return popRoute; + } + + function getPushRoute() { + return getStoreKey(store, "pushRoute"); + } + + // -------------------------------------------------------------------------------------- + // -------------- params Property ----------------------------------------------------- + + function setParams(params = {}) { + updateStoreKey(store, { params }); + } + + function consumeParams() { + const params = getStoreKey(store, "params"); + setParams(); + return params; + } + + // -------------------------------------------------------------------------------------- + // -------------- navigationHistory Property ------------------------------------------ + + function getNavigationHistory() { + return routerStore.getNavigationHistory(); + } + + // -------------------------------------------------------------------------------------- + // -------------- config Property ----------------------------------------------------- + + function getConfig() { + return configStore.getConfig(); + } + + // -------------------------------------------------------------------------------------- + + var navigateStore = { + subscribe: store.subscribe, + update: store.update, + pushRoute: pushRoute$1, + getPushRoute, + consumeRoutePushed, + backRoute: backRoute$1, + getNavigationHistory, + getConfig, + setParams, + consumeParams, + }; + + function loadingController() { + this.resolveLoading = function () { + if (this.resolveFunc) { + this.resolveFunc(true); + this.resolveFunc = undefined; + } + }; + this.startLoading = function () { + this.callbackFunc = new Promise((resolve, reject) => { + this.resolveFunc = resolve; + }); + return this.callbackFunc; + }; + } + + /* src/components/SCR_NotFound.svelte generated by Svelte v3.37.0 */ + const file$b = "src/components/SCR_NotFound.svelte"; + + function create_fragment$d(ctx) { + let center; + let p0; + let t1; + let p1; + let t2_value = (/*$routerStore*/ ctx[0].currentLocation || "='(") + ""; + let t2; + + const block = { + c: function create() { + center = element("center"); + p0 = element("p"); + p0.textContent = "Not Found"; + t1 = space(); + p1 = element("p"); + t2 = text(t2_value); + attr_dev(p0, "class", "scr-p svelte-zj7cmj"); + add_location(p0, file$b, 5, 2, 82); + attr_dev(p1, "class", "scr-p-small svelte-zj7cmj"); + add_location(p1, file$b, 6, 2, 115); + add_location(center, file$b, 4, 0, 71); + }, + l: function claim(nodes) { + throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + }, + m: function mount(target, anchor) { + insert_dev(target, center, anchor); + append_dev(center, p0); + append_dev(center, t1); + append_dev(center, p1); + append_dev(p1, t2); + }, + p: function update(ctx, [dirty]) { + if (dirty & /*$routerStore*/ 1 && t2_value !== (t2_value = (/*$routerStore*/ ctx[0].currentLocation || "='(") + "")) set_data_dev(t2, t2_value); + }, + i: noop, + o: noop, + d: function destroy(detaching) { + if (detaching) detach_dev(center); + } + }; + + dispatch_dev("SvelteRegisterBlock", { + block, + id: create_fragment$d.name, + type: "component", + source: "", + ctx + }); + + return block; + } + + function instance$d($$self, $$props, $$invalidate) { + let $routerStore; + validate_store(routerStore, "routerStore"); + component_subscribe($$self, routerStore, $$value => $$invalidate(0, $routerStore = $$value)); + let { $$slots: slots = {}, $$scope } = $$props; + validate_slots("SCR_NotFound", slots, []); + const writable_props = []; + + Object.keys($$props).forEach(key => { + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); + }); + + $$self.$capture_state = () => ({ routerStore, $routerStore }); + return [$routerStore]; + } + + class SCR_NotFound extends SvelteComponentDev { + constructor(options) { + super(options); + init(this, options, instance$d, create_fragment$d, safe_not_equal, {}); + + dispatch_dev("SvelteRegisterComponent", { + component: this, + tagName: "SCR_NotFound", + options, + id: create_fragment$d.name + }); + } + } + + /* src/components/SCR_Loading.svelte generated by Svelte v3.37.0 */ + + const { console: console_1$3 } = globals; + const file$a = "src/components/SCR_Loading.svelte"; + + function create_fragment$c(ctx) { + let center; + let div12; + let div0; + let t0; + let div1; + let t1; + let div2; + let t2; + let div3; + let t3; + let div4; + let t4; + let div5; + let t5; + let div6; + let t6; + let div7; + let t7; + let div8; + let t8; + let div9; + let t9; + let div10; + let t10; + let div11; + let t11; + let h1; + let t12; + + const block = { + c: function create() { + center = element("center"); + div12 = element("div"); + div0 = element("div"); + t0 = space(); + div1 = element("div"); + t1 = space(); + div2 = element("div"); + t2 = space(); + div3 = element("div"); + t3 = space(); + div4 = element("div"); + t4 = space(); + div5 = element("div"); + t5 = space(); + div6 = element("div"); + t6 = space(); + div7 = element("div"); + t7 = space(); + div8 = element("div"); + t8 = space(); + div9 = element("div"); + t9 = space(); + div10 = element("div"); + t10 = space(); + div11 = element("div"); + t11 = space(); + h1 = element("h1"); + t12 = text(/*loadingText*/ ctx[0]); + attr_dev(div0, "class", "svelte-146mxqr"); + add_location(div0, file$a, 9, 4, 200); + attr_dev(div1, "class", "svelte-146mxqr"); + add_location(div1, file$a, 10, 4, 212); + attr_dev(div2, "class", "svelte-146mxqr"); + add_location(div2, file$a, 11, 4, 224); + attr_dev(div3, "class", "svelte-146mxqr"); + add_location(div3, file$a, 12, 4, 236); + attr_dev(div4, "class", "svelte-146mxqr"); + add_location(div4, file$a, 13, 4, 248); + attr_dev(div5, "class", "svelte-146mxqr"); + add_location(div5, file$a, 14, 4, 260); + attr_dev(div6, "class", "svelte-146mxqr"); + add_location(div6, file$a, 15, 4, 272); + attr_dev(div7, "class", "svelte-146mxqr"); + add_location(div7, file$a, 16, 4, 284); + attr_dev(div8, "class", "svelte-146mxqr"); + add_location(div8, file$a, 17, 4, 296); + attr_dev(div9, "class", "svelte-146mxqr"); + add_location(div9, file$a, 18, 4, 308); + attr_dev(div10, "class", "svelte-146mxqr"); + add_location(div10, file$a, 19, 4, 320); + attr_dev(div11, "class", "svelte-146mxqr"); + add_location(div11, file$a, 20, 4, 332); + attr_dev(div12, "class", "scr-lds-spinner svelte-146mxqr"); + add_location(div12, file$a, 8, 2, 166); + attr_dev(h1, "class", "scr-h1 svelte-146mxqr"); + add_location(h1, file$a, 22, 2, 351); + attr_dev(center, "class", "scr-center svelte-146mxqr"); + add_location(center, file$a, 7, 0, 136); + }, + l: function claim(nodes) { + throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + }, + m: function mount(target, anchor) { + insert_dev(target, center, anchor); + append_dev(center, div12); + append_dev(div12, div0); + append_dev(div12, t0); + append_dev(div12, div1); + append_dev(div12, t1); + append_dev(div12, div2); + append_dev(div12, t2); + append_dev(div12, div3); + append_dev(div12, t3); + append_dev(div12, div4); + append_dev(div12, t4); + append_dev(div12, div5); + append_dev(div12, t5); + append_dev(div12, div6); + append_dev(div12, t6); + append_dev(div12, div7); + append_dev(div12, t7); + append_dev(div12, div8); + append_dev(div12, t8); + append_dev(div12, div9); + append_dev(div12, t9); + append_dev(div12, div10); + append_dev(div12, t10); + append_dev(div12, div11); + append_dev(center, t11); + append_dev(center, h1); + append_dev(h1, t12); + }, + p: function update(ctx, [dirty]) { + if (dirty & /*loadingText*/ 1) set_data_dev(t12, /*loadingText*/ ctx[0]); + }, + i: noop, + o: noop, + d: function destroy(detaching) { + if (detaching) detach_dev(center); + } + }; + + dispatch_dev("SvelteRegisterBlock", { + block, + id: create_fragment$c.name, + type: "component", + source: "", + ctx + }); + + return block; + } + + function instance$c($$self, $$props, $$invalidate) { + let { $$slots: slots = {}, $$scope } = $$props; + validate_slots("SCR_Loading", slots, []); + let { loadingText = "Loading..." } = $$props; + let { myCustomParam } = $$props; + const writable_props = ["loadingText", "myCustomParam"]; + + Object.keys($$props).forEach(key => { + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console_1$3.warn(` was created with unknown prop '${key}'`); + }); + + $$self.$$set = $$props => { + if ("loadingText" in $$props) $$invalidate(0, loadingText = $$props.loadingText); + if ("myCustomParam" in $$props) $$invalidate(1, myCustomParam = $$props.myCustomParam); + }; + + $$self.$capture_state = () => ({ loadingText, myCustomParam }); + + $$self.$inject_state = $$props => { + if ("loadingText" in $$props) $$invalidate(0, loadingText = $$props.loadingText); + if ("myCustomParam" in $$props) $$invalidate(1, myCustomParam = $$props.myCustomParam); + }; + + if ($$props && "$$inject" in $$props) { + $$self.$inject_state($$props.$$inject); + } + + $$self.$$.update = () => { + if ($$self.$$.dirty & /*myCustomParam*/ 2) { + console.log("LOADING>>>", myCustomParam); + } + }; + + return [loadingText, myCustomParam]; + } + + class SCR_Loading extends SvelteComponentDev { + constructor(options) { + super(options); + init(this, options, instance$c, create_fragment$c, safe_not_equal, { loadingText: 0, myCustomParam: 1 }); + + dispatch_dev("SvelteRegisterComponent", { + component: this, + tagName: "SCR_Loading", + options, + id: create_fragment$c.name + }); + + const { ctx } = this.$$; + const props = options.props || {}; + + if (/*myCustomParam*/ ctx[1] === undefined && !("myCustomParam" in props)) { + console_1$3.warn(" was created without expected prop 'myCustomParam'"); + } + } + + get loadingText() { + throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); + } + + set loadingText(value) { + throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); + } + + get myCustomParam() { + throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); + } + + set myCustomParam(value) { + throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); + } + } + + /* src/components/SCR_Error.svelte generated by Svelte v3.37.0 */ + + const file$9 = "src/components/SCR_Error.svelte"; + + function create_fragment$b(ctx) { + let center; + let p0; + let t1; + let p1; + let t2; + + const block = { + c: function create() { + center = element("center"); + p0 = element("p"); + p0.textContent = "Error"; + t1 = space(); + p1 = element("p"); + t2 = text(/*errorMessage*/ ctx[0]); + attr_dev(p0, "class", "scr-p svelte-jhjhwz"); + add_location(p0, file$9, 5, 2, 84); + attr_dev(p1, "class", "scr-p-small svelte-jhjhwz"); + add_location(p1, file$9, 6, 2, 113); + add_location(center, file$9, 4, 0, 73); + }, + l: function claim(nodes) { + throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + }, + m: function mount(target, anchor) { + insert_dev(target, center, anchor); + append_dev(center, p0); + append_dev(center, t1); + append_dev(center, p1); + append_dev(p1, t2); + }, + p: function update(ctx, [dirty]) { + if (dirty & /*errorMessage*/ 1) set_data_dev(t2, /*errorMessage*/ ctx[0]); + }, + i: noop, + o: noop, + d: function destroy(detaching) { + if (detaching) detach_dev(center); + } + }; + + dispatch_dev("SvelteRegisterBlock", { + block, + id: create_fragment$b.name, + type: "component", + source: "", + ctx + }); + + return block; + } + + function instance$b($$self, $$props, $$invalidate) { + let { $$slots: slots = {}, $$scope } = $$props; + validate_slots("SCR_Error", slots, []); + let { errorMessage = "An error has occured!" } = $$props; + const writable_props = ["errorMessage"]; + + Object.keys($$props).forEach(key => { + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); + }); + + $$self.$$set = $$props => { + if ("errorMessage" in $$props) $$invalidate(0, errorMessage = $$props.errorMessage); + }; + + $$self.$capture_state = () => ({ errorMessage }); + + $$self.$inject_state = $$props => { + if ("errorMessage" in $$props) $$invalidate(0, errorMessage = $$props.errorMessage); + }; + + if ($$props && "$$inject" in $$props) { + $$self.$inject_state($$props.$$inject); + } + + return [errorMessage]; + } + + class SCR_Error extends SvelteComponentDev { + constructor(options) { + super(options); + init(this, options, instance$b, create_fragment$b, safe_not_equal, { errorMessage: 0 }); + + dispatch_dev("SvelteRegisterComponent", { + component: this, + tagName: "SCR_Error", + options, + id: create_fragment$b.name + }); + } + + get errorMessage() { + throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); + } + + set errorMessage(value) { + throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); + } + } + + /* src/components/SCR_Layout.svelte generated by Svelte v3.37.0 */ + + const file$8 = "src/components/SCR_Layout.svelte"; + const get_scr_header_slot_changes$2 = dirty => ({}); + const get_scr_header_slot_context$2 = ctx => ({}); + + // (2:26) + function fallback_block$2(ctx) { + let h1; + + const block = { + c: function create() { + h1 = element("h1"); + h1.textContent = "Svelte Client Router - Example Layout!"; + attr_dev(h1, "class", "scr-main-layout__header svelte-1myuyum"); + add_location(h1, file$8, 2, 4, 62); + }, + m: function mount(target, anchor) { + insert_dev(target, h1, anchor); + }, + d: function destroy(detaching) { + if (detaching) detach_dev(h1); + } + }; + + dispatch_dev("SvelteRegisterBlock", { + block, + id: fallback_block$2.name, + type: "fallback", + source: "(2:26) ", + ctx + }); + + return block; + } + + function create_fragment$a(ctx) { + let main; + let t; + let current; + const scr_header_slot_template = /*#slots*/ ctx[1].scr_header; + const scr_header_slot = create_slot(scr_header_slot_template, ctx, /*$$scope*/ ctx[0], get_scr_header_slot_context$2); + const scr_header_slot_or_fallback = scr_header_slot || fallback_block$2(ctx); + const default_slot_template = /*#slots*/ ctx[1].default; + const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[0], null); + + const block = { + c: function create() { + main = element("main"); + if (scr_header_slot_or_fallback) scr_header_slot_or_fallback.c(); + t = space(); + if (default_slot) default_slot.c(); + attr_dev(main, "class", "scr-main-layout svelte-1myuyum"); + add_location(main, file$8, 0, 0, 0); + }, + l: function claim(nodes) { + throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + }, + m: function mount(target, anchor) { + insert_dev(target, main, anchor); + + if (scr_header_slot_or_fallback) { + scr_header_slot_or_fallback.m(main, null); + } + + append_dev(main, t); + + if (default_slot) { + default_slot.m(main, null); + } + + current = true; + }, + p: function update(ctx, [dirty]) { + if (scr_header_slot) { + if (scr_header_slot.p && dirty & /*$$scope*/ 1) { + update_slot(scr_header_slot, scr_header_slot_template, ctx, /*$$scope*/ ctx[0], dirty, get_scr_header_slot_changes$2, get_scr_header_slot_context$2); + } + } + + if (default_slot) { + if (default_slot.p && dirty & /*$$scope*/ 1) { + update_slot(default_slot, default_slot_template, ctx, /*$$scope*/ ctx[0], dirty, null, null); + } + } + }, + i: function intro(local) { + if (current) return; + transition_in(scr_header_slot_or_fallback, local); + transition_in(default_slot, local); + current = true; + }, + o: function outro(local) { + transition_out(scr_header_slot_or_fallback, local); + transition_out(default_slot, local); + current = false; + }, + d: function destroy(detaching) { + if (detaching) detach_dev(main); + if (scr_header_slot_or_fallback) scr_header_slot_or_fallback.d(detaching); + if (default_slot) default_slot.d(detaching); + } + }; + + dispatch_dev("SvelteRegisterBlock", { + block, + id: create_fragment$a.name, + type: "component", + source: "", + ctx + }); + + return block; + } + + function instance$a($$self, $$props, $$invalidate) { + let { $$slots: slots = {}, $$scope } = $$props; + validate_slots("SCR_Layout", slots, ['scr_header','default']); + const writable_props = []; + + Object.keys($$props).forEach(key => { + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); + }); + + $$self.$$set = $$props => { + if ("$$scope" in $$props) $$invalidate(0, $$scope = $$props.$$scope); + }; + + return [$$scope, slots]; + } + + class SCR_Layout$2 extends SvelteComponentDev { + constructor(options) { + super(options); + init(this, options, instance$a, create_fragment$a, safe_not_equal, {}); + + dispatch_dev("SvelteRegisterComponent", { + component: this, + tagName: "SCR_Layout", + options, + id: create_fragment$a.name + }); + } + } + + /* src/components/SCR_Router.svelte generated by Svelte v3.37.0 */ + + const { Error: Error_1$1, console: console_1$2 } = globals; + + // (1:0) \";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, false, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(anchor = null) {\n this.a = anchor;\n this.e = this.n = null;\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.h(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\nconst active_docs = new Set();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = node.ownerDocument;\n active_docs.add(doc);\n const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = doc.head.appendChild(element('style')).sheet);\n const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n if (!current_rules[name]) {\n current_rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n active_docs.forEach(doc => {\n const stylesheet = doc.__svelte_stylesheet;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n doc.__svelte_rules = {};\n });\n active_docs.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach(fn => fn(event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n flushing = false;\n seen_callbacks.clear();\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = program.b - t;\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, classes_to_add) {\n const attributes = Object.assign({}, ...args);\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${String(value).replace(/\"/g, '"').replace(/'/g, ''')}\"`;\n }\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(parent_component ? parent_component.$$.context : context || []),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(parent_component ? parent_component.$$.context : options.context || []),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false\n };\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.37.0' }, detail)));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * \n * \n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to seperate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_space, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_current_component, get_custom_elements_slots, get_slot_changes, get_slot_context, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, listen, listen_dev, loop, loop_guard, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, update_slot, update_slot_spread, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","import cloneDeep from \"lodash/cloneDeep\";\n\nexport const assign = (target, source) => {\n return Object.assign(cloneDeep(target), cloneDeep(source));\n};\n\nexport const getStoreKey = (store, key) => {\n const storeState = getStoreState(store);\n return storeState[key];\n};\n\nexport const getStoreState = (store) => {\n let storeStateObj;\n const unsubscribe = store.subscribe((storeState) => {\n if (!Array.isArray(storeState)) {\n storeStateObj = assign({}, storeState);\n } else {\n storeStateObj = [...storeState];\n }\n });\n unsubscribe();\n return storeStateObj;\n};\n\nexport const updateStoreKey = (store, objValue) => {\n store.update((storeState) => {\n return assign(storeState, objValue);\n });\n};\n","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import cloneDeep from \"lodash/cloneDeep\";\nimport { isBefore, addMilliseconds } from \"date-fns\";\n\nconst LS = localStorage;\nconst PREFIX_KEY = \"SCR_ROUTER_\";\nconst EXPIRE_KEYS = `${PREFIX_KEY}EXPIRE_KEYS`;\n\nexport const getItem = (key) => {\n removeExpiredKeys();\n return fromJSON(LS.getItem(key));\n};\n\nexport const setItem = (key, value, time) => {\n if (key === undefined || key === null || key.trim() === \"\") {\n return false;\n }\n if (value === undefined || value === null) {\n clearKeyList([key]);\n return;\n }\n removeExpiredKeys();\n if (\n time &&\n Number.isSafeInteger(time) &&\n Number.isInteger(time) &&\n time > 0\n ) {\n addExpireKey(key, time);\n }\n LS.setItem(key, toJSON(value));\n};\n\nexport const removeItem = (key) => {\n removeExpiredKeys();\n const item = fromJSON(LS.getItem(key));\n if (item !== null && item !== undefined) {\n LS.removeItem(key);\n removeExpireKey(key);\n }\n return item;\n};\n\nexport const getAll = () => {\n if (!LS || LS.length === 0) {\n return [];\n }\n removeExpiredKeys();\n let items = Object.assign({}, cloneDeep(LS));\n delete items[EXPIRE_KEYS];\n return items;\n};\n\n// clear all the expiration list and the keys\nexport const clearExpireKeys = () => {\n const expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire.map((item) => LS.removeItem(item.key));\n\n LS.removeItem(EXPIRE_KEYS);\n};\n\n// clear a given array list of keys\n// affects expiration key list and the keys\nexport const clearKeyList = (keyList) => {\n if (!Array.isArray(keyList) || keyList.length === 0) {\n return;\n }\n\n keyList.map((key) => {\n if (LS.getItem(key)) {\n LS.removeItem(key);\n removeExpireKey(key);\n }\n });\n\n // updating the remaining list keychain if it has left any item\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => !keyList.includes(item.key));\n if (expire.length > 0) {\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n LS.removeItem(EXPIRE_KEYS);\n }\n};\n\n// Function to check and remove a key if expired\n// If so... remove the key from the expiration list and the key\nexport const removeExpiredKeys = () => {\n let keyList = [];\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n\n if (expire && expire.length > 0) {\n expire = expire.filter((item) => {\n if (\n isBefore(new Date(), new Date(item.liveUntil)) &&\n LS.getItem(item.key)\n ) {\n return true;\n }\n LS.removeItem(item.key);\n keyList.push(item.key);\n });\n\n if (expire.length > 0) {\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n LS.removeItem(EXPIRE_KEYS);\n }\n }\n return keyList;\n};\n\nexport const setSvelteStoreInStorage = (\n subscribe,\n key,\n timeout,\n ignoreKeys = []\n) => {\n const unsubscribe = subscribe((store) => {\n for (let iKeys of ignoreKeys) {\n store[iKeys] = undefined;\n }\n setItem(key, store, timeout);\n });\n unsubscribe();\n};\n\nexport const getSvelteStoreInStorage = (update, key) => {\n const storage = getItem(key);\n if (!storage) {\n return;\n }\n update(() => {\n return Object.assign({}, cloneDeep(storage));\n });\n};\n\n// ------------------------------------------------- ## BELOW THIS LINE PRIVATE FUNCTIONS ONLY ## -------------------------------------------------\n// add a key in the expiration key list\n// key: String\n// time: In milliseconds\nfunction addExpireKey(key, time) {\n if (!Number.isInteger(time) || !Number.isSafeInteger(time)) {\n throw new Error(\"Time to add an expire key is not a safe integer\");\n }\n\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n const liveUntil = addMilliseconds(new Date(), time);\n\n if (expire !== null && expire !== undefined) {\n expire = expire.filter((item) => item.key !== key);\n expire.push({ key, liveUntil });\n } else {\n expire = [{ key, liveUntil }];\n }\n\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n}\n\n// removes a specific key from expiration key list, may remove the key too\n// key: String\n// expireKeyOnly: Boolean -- only = true for only remove from expireKey OR the key itself too\nfunction removeExpireKey(key, expireKeyOnly = true) {\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => item.key !== key);\n\n if (expire.length > 0) {\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n LS.removeItem(EXPIRE_KEYS);\n }\n\n if (!expireKeyOnly && LS.getItem(key)) {\n LS.removeItem(key);\n }\n}\n\nfunction toJSON(item) {\n if (typeof item === \"object\") {\n return JSON.stringify(item);\n }\n return item;\n}\n\nfunction fromJSON(item) {\n if (!item) {\n return item;\n }\n try {\n return JSON.parse(item);\n } catch (err) {\n return item;\n }\n}\n\n// setInterval(removeExpiredKeys, 5000);\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.9.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = req.onblocked = function (err) {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(err);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","import cloneDeep from \"lodash/cloneDeep\";\nimport { isBefore, addMilliseconds } from \"date-fns\";\nimport localforage from \"localforage\";\n\nconst PREFIX_KEY = \"SCR_ROUTER_\";\nconst IDX_DB_NAME = PREFIX_KEY;\nconst IDX_DB_STORE = PREFIX_KEY;\nconst EXPIRE_KEYS = `${PREFIX_KEY}IDX_DB_P_EXPIRE_KEYS`;\n\nlocalforage.config({\n driver: localforage.INDEXEDDB,\n name: IDX_DB_NAME,\n version: `${PREFIX_KEY}VERSION`,\n storeName: IDX_DB_STORE,\n description: `${PREFIX_KEY}DB_DESCRIPTOR`,\n});\n\nconst LF = localforage;\n\nexport const getItem = async (key) => {\n try {\n await removeExpiredKeys();\n return fromJSON(await LF.getItem(key));\n } catch (error) {\n throw error;\n }\n};\n\nexport const setItem = async (key, value, time) => {\n try {\n if (key === undefined || key === null || key.trim() === \"\") {\n return false;\n }\n if (value === undefined || value === null) {\n await clearKeyList([key]);\n return;\n }\n await removeExpiredKeys();\n if (\n time &&\n Number.isSafeInteger(time) &&\n Number.isInteger(time) &&\n time > 0\n ) {\n await addExpireKey(key, time);\n }\n await LF.setItem(key, toJSON(value));\n } catch (error) {\n throw error;\n }\n};\n\nexport const removeItem = async (key) => {\n try {\n await removeExpiredKeys();\n const item = fromJSON(await LF.getItem(key));\n if (item !== null && item !== undefined) {\n await LF.removeItem(key);\n await removeExpireKey(key);\n }\n return item;\n } catch (error) {\n throw error;\n }\n};\n\nexport const getAll = async () => {\n try {\n await removeExpiredKeys();\n const keys = await LF.keys();\n const items = [];\n let item;\n for (let key of keys) {\n items.push(await LF.getItem(key));\n await LF.removeItem(key);\n }\n return items;\n } catch (error) {\n throw error;\n }\n};\n\n// clear all the expiration list and the keys\nexport const clearExpireKeys = async () => {\n try {\n const expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n\n if (expire === null || expire === undefined) {\n return;\n }\n\n await expire.map(async (item) => await LF.removeItem(item.key));\n\n await LF.removeItem(EXPIRE_KEYS);\n } catch (error) {\n throw error;\n }\n};\n\n// clear a given array list of keys\n// affects expiration key list and the keys\nexport const clearKeyList = async (keyList) => {\n try {\n if (!Array.isArray(keyList) || keyList.length === 0) {\n return;\n }\n\n await keyList.map(async (key) => {\n if (await LF.getItem(key)) {\n await LF.removeItem(key);\n await removeExpireKey(key);\n }\n });\n\n // updating the remaining list keychain if it has left any item\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => !keyList.includes(item.key));\n if (expire.length > 0) {\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n await LF.removeItem(EXPIRE_KEYS);\n }\n } catch (error) {\n throw error;\n }\n};\n\n// Function to check and remove a key if expired\n// If so... remove the key from the expiration list and the key\nexport const removeExpiredKeys = async () => {\n try {\n let keyList = [];\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n\n if (expire && expire.length > 0) {\n expire = await expire.filter(async (item) => {\n if (\n isBefore(new Date(), new Date(item.liveUntil)) &&\n (await LF.getItem(item.key))\n ) {\n return true;\n }\n await LF.removeItem(item.key);\n keyList.push(item.key);\n });\n\n if (expire.length > 0) {\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n await LF.removeItem(EXPIRE_KEYS);\n }\n }\n return keyList;\n } catch (error) {\n throw error;\n }\n};\n\nexport const setSvelteStoreInStorage = async (\n subscribe,\n key,\n timeout,\n ignoreKeys = []\n) => {\n try {\n const unsubscribe = subscribe(async (store) => {\n for (let iKeys of ignoreKeys) {\n store[iKeys] = undefined;\n }\n await setItem(key, store, timeout);\n });\n unsubscribe();\n } catch (error) {\n throw error;\n }\n};\n\nexport const getSvelteStoreInStorage = async (update, key) => {\n try {\n const storage = await getItem(key);\n if (!storage) {\n return;\n }\n update(() => {\n return Object.assign({}, cloneDeep(storage));\n });\n } catch (error) {\n throw error;\n }\n};\n\n// ------------------------------------------------- ## BELOW THIS LINE PRIVATE FUNCTIONS ONLY ## -------------------------------------------------\n// add a key in the expiration key list\n// key: String\n// time: In milliseconds\nasync function addExpireKey(key, time) {\n try {\n if (!Number.isInteger(time) || !Number.isSafeInteger(time)) {\n throw new Error(\"Time to add an expire key is not a safe integer\");\n }\n\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n const liveUntil = addMilliseconds(new Date(), time);\n\n if (expire !== null && expire !== undefined) {\n expire = expire.filter((item) => item.key !== key);\n expire.push({ key, liveUntil });\n } else {\n expire = [{ key, liveUntil }];\n }\n\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } catch (error) {\n throw error;\n }\n}\n\n// removes a specific key from expiration key list, may remove the key too\n// key: String\n// expireKeyOnly: Boolean -- only = true for only remove from expireKey OR the key itself too\nasync function removeExpireKey(key, expireKeyOnly = true) {\n try {\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => item.key !== key);\n\n if (expire.length > 0) {\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n await LF.removeItem(EXPIRE_KEYS);\n }\n\n if (!expireKeyOnly && LF.getItem(key)) {\n await LF.removeItem(key);\n }\n } catch (error) {\n throw error;\n }\n}\n\nfunction toJSON(item) {\n if (typeof item === \"object\") {\n return JSON.stringify(item);\n }\n return item;\n}\n\nfunction fromJSON(item) {\n if (!item) {\n return item;\n }\n try {\n return JSON.parse(item);\n } catch (err) {\n return item;\n }\n}\n\n// setInterval(removeExpiredKeys, 5000);\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = [];\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (let i = 0; i < subscribers.length; i += 1) {\n const s = subscribers[i];\n s[1]();\n subscriber_queue.push(s, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.push(subscriber);\n if (subscribers.length === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n const index = subscribers.indexOf(subscriber);\n if (index !== -1) {\n subscribers.splice(index, 1);\n }\n if (subscribers.length === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","import { writable } from \"svelte/store\";\nimport {\n assign,\n updateStoreKey,\n getStoreState,\n getStoreKey,\n} from \"../functions\";\nconst storeTemplate = {\n hashMode: false,\n navigationHistoryLimit: 10,\n saveMode: \"localstorage\",\n notFoundRoute: \"/notFound\",\n errorRoute: \"/error\",\n consoleLogErrorMessages: true,\n consoleLogStores: true,\n usesRouteLayout: true,\n considerTrailingSlashOnMatchingRoute: true\n};\n\nconst ENUM_SAVE_MODE = [\"localstorage\", \"indexeddb\", \"none\"];\n\nconst store = writable(assign({}, storeTemplate));\nlet onError;\nlet beforeEnter;\n\n// -------------- config Property -----------------------------------------------------\n\nfunction setConfig(config) {\n setHashMode(config.hashMode);\n setNavigationHistoryLimit(config.navigationHistoryLimit);\n setSaveMode(config.saveMode);\n setNotFoundRoute(config.notFoundRoute);\n setErrorRoute(config.errorRoute);\n setConsoleLogErrorMessages(config.consoleLogErrorMessages);\n setConsoleLogStores(config.consoleLogStores);\n setUsesRouteLayout(config.usesRouteLayout);\n setConsiderTrailingSlashOnMatchingRoute(config.considerTrailingSlashOnMatchingRoute);\n setOnError(config.onError);\n setBeforeEnter(config.beforeEnter);\n}\n\nfunction getConfig() {\n return getStoreState(store);\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- hashmode Property ---------------------------------------------------\n\nfunction setHashMode(hashMode) {\n if (typeof hashMode == \"boolean\") {\n updateStoreKey(store, { hashMode });\n }\n}\n\nfunction getHashMode() {\n return getStoreKey(store, \"hashMode\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- navigationHistoryLimit Property -------------------------------------\n\nfunction setNavigationHistoryLimit(navigationHistoryLimit) {\n if (typeof navigationHistoryLimit == \"number\") {\n updateStoreKey(store, { navigationHistoryLimit });\n }\n}\n\nfunction getNavigationHistoryLimit() {\n return getStoreKey(store, \"navigationHistoryLimit\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- saveMode Property ---------------------------------------------------\n\nfunction setSaveMode(saveMode) {\n if (ENUM_SAVE_MODE.includes(saveMode)) {\n updateStoreKey(store, { saveMode });\n }\n}\n\nfunction getSaveMode() {\n return getStoreKey(store, \"saveMode\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- notFoundRoute Property ----------------------------------------------\n\nfunction setNotFoundRoute(notFoundRoute) {\n if (typeof notFoundRoute == \"string\" && notFoundRoute.includes(\"/\")) {\n updateStoreKey(store, { notFoundRoute });\n }\n}\n\nfunction getNotFoundRoute() {\n return getStoreKey(store, \"notFoundRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- errorRoute Property -------------------------------------------------\n\nfunction setErrorRoute(errorRoute) {\n if (typeof errorRoute == \"string\" && errorRoute.includes(\"/\")) {\n updateStoreKey(store, { errorRoute });\n }\n}\n\nfunction getErrorRoute() {\n return getStoreKey(store, \"errorRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- consoleLogErrorMessages Property ------------------------------------\n\nfunction setConsoleLogErrorMessages(consoleLogErrorMessages = false) {\n if (typeof consoleLogErrorMessages == \"boolean\") {\n updateStoreKey(store, { consoleLogErrorMessages });\n }\n}\n\nfunction getConsoleLogErrorMessages() {\n return getStoreKey(store, \"consoleLogErrorMessages\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- consoleLogStores Property ------------------------------------\n\nfunction setConsoleLogStores(consoleLogStores = false) {\n if (typeof consoleLogStores == \"boolean\") {\n updateStoreKey(store, { consoleLogStores });\n }\n}\n\nfunction getConsoleLogStores() {\n return getStoreKey(store, \"consoleLogStores\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- usesRouteLayout Property --------------------------------------------\n\nfunction setUsesRouteLayout(usesRouteLayout) {\n if (typeof usesRouteLayout == \"boolean\") {\n updateStoreKey(store, { usesRouteLayout });\n }\n}\n\nfunction getUsesRouteLayout() {\n return getStoreKey(store, \"usesRouteLayout\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- considerTrailingSlashOnMachingRoute Property ------------------------\n\nfunction setConsiderTrailingSlashOnMachingRoute(considerTrailingSlashOnMachingRoute) {\n if (typeof considerTrailingSlashOnMachingRoute == \"boolean\") {\n updateStoreKey(store, { considerTrailingSlashOnMachingRoute });\n }\n}\n\nfunction getConsiderTrailingSlashOnMachingRoute() {\n return getStoreKey(store, \"considerTrailingSlashOnMachingRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- onError Function ----------------------------------------------------\n\nfunction setOnError(onErrorParam) {\n if (!onErrorParam || typeof onErrorParam !== \"function\") {\n return;\n }\n onError = onErrorParam;\n}\n\nfunction getOnError() {\n return onError;\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- beforeEnter Function --------------------------------------------\n\nfunction setBeforeEnter(beforeEnterParam) {\n if (\n !beforeEnterParam ||\n (typeof beforeEnterParam !== \"function\" && !Array.isArray(beforeEnterParam))\n ) {\n return;\n }\n if (Array.isArray(beforeEnterParam)) {\n for (let bFuncItem of beforeEnterParam) {\n if (typeof bFuncItem !== \"function\") {\n return;\n }\n }\n }\n // if is valid\n beforeEnter = beforeEnterParam;\n}\n\nfunction getBeforeEnter() {\n return beforeEnter;\n}\n\n// --------------------------------------------------------------------------------------\n\nexport default {\n subscribe: store.subscribe,\n update: store.update,\n setConfig,\n getConfig,\n setHashMode,\n getHashMode,\n setNavigationHistoryLimit,\n getNavigationHistoryLimit,\n setSaveMode,\n getSaveMode,\n setNotFoundRoute,\n getNotFoundRoute,\n setErrorRoute,\n getErrorRoute,\n setConsoleLogErrorMessages,\n getConsoleLogErrorMessages,\n setConsoleLogStores,\n getConsoleLogStores,\n setUsesRouteLayout,\n getUsesRouteLayout,\n setConsiderTrailingSlashOnMachingRoute,\n getConsiderTrailingSlashOnMachingRoute,\n setOnError,\n getOnError,\n setBeforeEnter,\n getBeforeEnter,\n};\n","import { writable } from \"svelte/store\";\nimport {\n assign,\n getStoreState,\n updateStoreKey,\n getStoreKey,\n} from \"../functions\";\nimport * as lsPlugin from \"../../plugins/lsplugin.js\";\nimport * as lfPlugin from \"../../plugins/lfplugin.js\";\n\nimport configStore from \"./config.js\";\n\nconst STORAGE_KEY = \"SRC_ROUTER_STORE\";\n\nconst storeTemplate = {\n routes: [],\n currentLocation: undefined,\n currentRoute: {\n name: undefined,\n pathname: undefined,\n params: [],\n hostname: undefined,\n protocol: undefined,\n port: undefined,\n origin: undefined,\n hash: undefined,\n },\n fromRoute: {\n name: undefined,\n pathname: undefined,\n params: [],\n hostname: undefined,\n protocol: undefined,\n port: undefined,\n origin: undefined,\n hash: undefined,\n },\n navigationHistory: [],\n};\n\nconst store = writable(assign({}, storeTemplate));\n\n// -------------- routes Property ------------------------------------------------------\n\nasync function setRoutes(routes = []) {\n if (!Array.isArray(routes)) {\n return;\n }\n updateStoreKey(store, { routes });\n await saveMode();\n}\n\nfunction getRoutes() {\n return getStoreKey(store, \"routes\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- currentLocation Property --------------------------------------------\n\nasync function setCurrentLocation(currentLocation) {\n if (typeof currentLocation == \"string\") {\n updateStoreKey(store, { currentLocation });\n await saveMode();\n }\n}\n\nfunction getCurrentLocation() {\n return getStoreKey(store, \"currentLocation\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- currentRoute Property -----------------------------------------------\n\nasync function setCurrentRoute(currentRoute) {\n if (typeof currentRoute == \"object\") {\n updateStoreKey(store, { currentRoute });\n await saveMode();\n }\n}\n\nfunction getCurrentRoute() {\n return getStoreKey(store, \"currentRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- fromRoute Property --------------------------------------------------\n\nasync function setFromRoute(fromRoute) {\n if (typeof fromRoute == \"object\") {\n updateStoreKey(store, { fromRoute });\n await saveMode();\n }\n}\n\nfunction getFromRoute() {\n return getStoreKey(store, \"fromRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- navigationHistory Property ------------------------------------------\n\nasync function setNavigationHistory(navigationHistory) {\n if (typeof navigationHistory == \"object\") {\n const configs = getConfig();\n if (configs.navigationHistoryLimit > 0) {\n navigationHistory = navigationHistory.slice(\n 0,\n configs.navigationHistoryLimit - 1\n );\n }\n updateStoreKey(store, { navigationHistory });\n await saveMode();\n }\n}\n\nasync function pushNavigationHistory(navObj) {\n let navigationHistory = getNavigationHistory() || [];\n navigationHistory = [navObj, ...navigationHistory];\n await setNavigationHistory(navigationHistory);\n}\n\nasync function popNavigationHistory() {\n let navigationHistory = getNavigationHistory() || [];\n\n if (navigationHistory.length == 0) {\n return false;\n }\n const navObj = { ...navigationHistory[0] };\n await setNavigationHistory(navigationHistory.slice(1));\n return navObj;\n}\n\nfunction getNavigationHistory() {\n return getStoreKey(store, \"navigationHistory\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- config Property -----------------------------------------------------\n\nfunction getConfig() {\n return configStore.getConfig();\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- saveMode Function ---------------------------------------------------\n\nasync function saveMode() {\n const configs = getConfig();\n if (!configs || !configs.saveMode || configs.saveMode == \"none\") {\n return false;\n }\n if (configs.saveMode === \"localstorage\") {\n await lsPlugin.setSvelteStoreInStorage(store.subscribe, STORAGE_KEY);\n } else if (configs.saveMode === \"indexeddb\") {\n await lfPlugin.setSvelteStoreInStorage(store.subscribe, STORAGE_KEY);\n }\n return false;\n}\n// --------------------------------------------------------------------------------------\n\nexport default {\n subscribe: store.subscribe,\n update: store.update,\n STORAGE_KEY,\n setRoutes,\n getRoutes,\n setCurrentRoute,\n getCurrentRoute,\n setFromRoute,\n getFromRoute,\n setNavigationHistory,\n getNavigationHistory,\n pushNavigationHistory,\n popNavigationHistory,\n setCurrentLocation,\n getCurrentLocation,\n getConfig,\n};\n","import { writable } from \"svelte/store\";\nimport {\n assign,\n getStoreState,\n updateStoreKey,\n getStoreKey,\n} from \"../functions\";\nimport * as lsPlugin from \"../../plugins/lsplugin.js\";\nimport * as lfPlugin from \"../../plugins/lfplugin.js\";\n\nimport configStore from \"./config.js\";\nimport routeStore from \"./router.js\";\n\nconst storeTemplate = {\n pushRoute: false,\n params: {},\n};\n\nconst store = writable(assign({}, storeTemplate));\nlet routeNavigation;\nlet backRouteNavigation;\n\n// -------------- pushRoute Property --------------------------------------------------\n\nfunction pushRoute(route, params, onError) {\n if (!route) {\n const error = new Error(`SCR_ROUTER - Route not defined - ${route}`);\n if (typeof onError === \"function\") {\n onError(error);\n } else {\n throw error;\n }\n }\n const routes = routeStore.getRoutes();\n routeNavigation = undefined;\n\n if (typeof route === \"string\") {\n routeNavigation = routes.find((rItem) => rItem.path === route);\n } else if (route.path) {\n routeNavigation = routes.find((rItem) => rItem.path === route.path);\n } else if (route.name) {\n routeNavigation = routes.find((rItem) => rItem.name === route.name);\n }\n\n if (!routeNavigation) {\n routeNavigation = {\n notFound: true,\n path: typeof route === \"string\" ? route : route.path || \"\",\n };\n }\n\n if (onError && typeof onError === \"function\") {\n routeNavigation.onError = onError;\n }\n\n setParams(params);\n updateStoreKey(store, { pushRoute: true });\n}\n\nfunction consumeRoutePushed() {\n const copyRouteNavigation = assign({}, routeNavigation);\n routeNavigation = undefined;\n updateStoreKey(store, { pushRoute: false });\n copyRouteNavigation.params = {\n ...copyRouteNavigation.params,\n ...consumeParams(),\n };\n return copyRouteNavigation;\n}\n\nfunction backRoute() {\n const navigationHistory = getNavigationHistory();\n let popRoute;\n if (navigationHistory.length > 0) {\n popRoute = routeStore.popNavigationHistory();\n }\n window.history.back();\n return popRoute;\n}\n\nfunction getPushRoute() {\n return getStoreKey(store, \"pushRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- params Property -----------------------------------------------------\n\nfunction setParams(params = {}) {\n updateStoreKey(store, { params });\n}\n\nfunction consumeParams() {\n const params = getStoreKey(store, \"params\");\n setParams();\n return params;\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- navigationHistory Property ------------------------------------------\n\nfunction getNavigationHistory() {\n return routeStore.getNavigationHistory();\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- config Property -----------------------------------------------------\n\nfunction getConfig() {\n return configStore.getConfig();\n}\n\n// --------------------------------------------------------------------------------------\n\nexport default {\n subscribe: store.subscribe,\n update: store.update,\n pushRoute,\n getPushRoute,\n consumeRoutePushed,\n backRoute,\n getNavigationHistory,\n getConfig,\n setParams,\n consumeParams,\n};\n","function loadingController() {\n let callbackFunc;\n let resolveFunc;\n this.resolveLoading = function () {\n if (this.resolveFunc) {\n this.resolveFunc(true);\n this.resolveFunc = undefined;\n }\n };\n this.startLoading = function () {\n if (resolveFunc) {\n this.resolveLoading();\n }\n this.callbackFunc = new Promise((resolve, reject) => {\n this.resolveFunc = resolve;\n });\n return this.callbackFunc;\n };\n}\nexport default loadingController;\n","\n\n
    \n

    Not Found

    \n

    {$routerStore.currentLocation || \"='(\"}

    \n
    \n\n","\n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {loadingText}

    \n
    \n\n\n","\n\n
    \n

    Error

    \n

    {errorMessage}

    \n
    \n\n\n","\n\n{#await loadingPromise}\n \n{:then value}\n {#if $configStore.usesRouteLayout && typeof layoutComponent === \"function\"}\n \n \n \n {:else}\n \n {/if}\n{/await}\n","\n\n
    \n \n
    \n","import SCR_ROUTER_COMPONENT_IMPORT from \"./components/SCR_Router.svelte\";\nimport SCR_ROUTER_LINK_COMPONENT_IMPORT from \"./components/SCR_RouterLink.svelte\";\nimport routerStore from \"./js/store/router.js\";\nimport configStore from \"./js/store/config.js\";\nimport navigateStore from \"./js/store/navigate.js\";\n\nexport const SCR_ROUTER_COMPONENT = SCR_ROUTER_COMPONENT_IMPORT;\nexport const SCR_ROUTER_LINK = SCR_ROUTER_LINK_COMPONENT_IMPORT;\nexport const SCR_ROUTER_STORE = routerStore;\nexport const SCR_CONFIG_STORE = configStore;\nexport const SCR_NAVIGATE_STORE = navigateStore;\nexport const pushRoute = navigateStore.pushRoute;\nexport const backRoute = navigateStore.backRoute;","\n\n
    \n

    Component Four

    \n Params Defined on Route:\n
    \n
    \n
    \n      {JSON.stringify(params)}\n    
    \n
    \n
    \n Current Route Object:\n
    \n
    \n
    \n      {JSON.stringify(currentRoute)}\n    
    \n
    \n
    \n From Route Object:\n
    \n
    \n
    \n      {JSON.stringify(fromRoute)}\n    
    \n
    \n
    \n {\n pushRoute({ name: \"routeOne\" });\n }}>Route One - GO!\n {\n pushRoute({ name: \"routeTwo\" });\n }}>Route Two - GO!\n {\n pushRoute({ name: \"routeThree\" });\n }}>Route Three - GO!\n {\n pushRoute({ name: \"routeFive\" });\n }}>Route Five - GO!\n
    \n\n\n","\n\n\n","import App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n});\n\nexport default app;","\n\n
    \n
    \n

    \n Route One Executes:\n
    \n

    \n
      \n
    • Demonstrates Loading Component In Action
    • \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • \n Redirects in the second Before Enter Function to Root Page\n
    • \n
    \n {\n pushRoute({ name: \"routeOne\" });\n }}>Route One - GO!\n
    \n
    \n
    \n

    \n Route Two Executes:\n
    \n

    \n
      \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • \n Resolve Opening the Component\n
    • \n
    \n {\n pushRoute({ name: \"routeTwo\" });\n }}>Route Two - GO!\n
    \n
    \n
    \n

    \n Route Three Executes:\n
    \n

    \n
      \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • \n Throws An Error on Before Enter - For Example Purposes!\n
    • \n
    \n {\n pushRoute({ name: \"routeThree\" });\n }}>Route Three - GO!\n
    \n
    \n
    \n

    \n Route Four Executes:\n
    \n

    \n
      \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • After Enter Route Function
    • \n
    • \n Resolve Opening the Component\n
    • \n
    \n {\n pushRoute({ name: \"routeFour\" });\n }}>Route Four - GO!\n
    \n
    \n
    \n

    \n Route Five Executes:\n
    \n

    \n
      \n
    • IGNORES Global Before Enter Functions
    • \n
    • Has NO Before Enter Functions
    • \n
    • IGNORES Layout
    • \n
    • \n Resolve Opening the Component\n
    • \n
    • \n Examples Router Link Component\n
    • \n
    \n {\n pushRoute({ name: \"routeFive\" });\n }}>Route Five - GO!\n
    \n
    \n\n\n","\n\n
    \n

    Component Two!

    \n
    \n A\n
    \n
    \n {\n backRoute();\n }}>Go Back\n
    \n
    B
    \n
    C
    \n
    D
    \n
    E
    \n
    F
    \n
    G
    \n
    H
    \n
    I
    \n
    J
    \n
    K
    \n
    L
    \n
    M
    \n
    \n\n\n","\n\n
    \n

    Component Five!

    \n {\n backRoute();\n }}>Go Back\n \n \n \n
    \n\n\n"],"names":["noop","assign","tar","src","k","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","component_subscribe","component","store","callback","$$","on_destroy","push","callbacks","unsub","subscribe","unsubscribe","create_slot","definition","ctx","$$scope","slot_ctx","get_slot_context","slice","update_slot","slot","slot_definition","dirty","get_slot_changes_fn","get_slot_context_fn","slot_changes","lets","undefined","merged","len","Math","max","length","i","get_slot_changes","slot_context","p","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","element","name","document","createElement","text","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","getAttribute","setAttribute","set_attributes","attributes","descriptors","getOwnPropertyDescriptors","__proto__","key","style","cssText","set","set_data","wholeText","current_component","set_current_component","get_current_component","Error","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","add_render_callback","flushing","seen_callbacks","Set","flush","update","pop","has","add","clear","fragment","before_update","after_update","outroing","outros","group_outros","r","c","check_outros","transition_in","block","local","delete","transition_out","o","d","handle_promise","promise","info","token","type","index","resolved","child_ctx","current","needs_flush","blocks","m","mount","then","error","catch","hasCatch","pending","get_spread_update","levels","updates","to_null_out","accounted_for","n","get_spread_object","spread_props","create_component","mount_component","customElement","on_mount","new_on_destroy","map","filter","destroy_component","detaching","make_dirty","fill","init","instance","create_fragment","not_equal","props","parent_component","bound","on_disconnect","context","Map","skip_bound","ready","ret","rest","hydrate","nodes","Array","from","childNodes","children","l","intro","SvelteComponent","[object Object]","this","$destroy","indexOf","splice","$$props","obj","$$set","keys","__data__","size","other","array","eq","prototype","assocIndexOf","call","ListCache","entries","entry","listCacheClear","listCacheDelete","get","listCacheGet","listCacheHas","listCacheSet","result","global","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","isOwn","tag","unmasked","e","getRawTag","objectToString","uid","isObject","baseGetTag","maskSrcKey","exec","coreJsData","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","test","toSource","object","getValue","baseIsNative","getNative","nativeCreate","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","hash","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","pairs","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","iteratee","defineProperty","configurable","enumerable","writable","objValue","baseAssignValue","source","customizer","isNew","newValue","assignValue","isObjectLike","propertyIsEnumerable","baseIsArguments","arguments","isArray","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","stubFalse","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","copyObject","nativeKeysIn","isProto","baseKeysIn","keysIn","allocUnsafe","buffer","isDeep","copy","predicate","resIndex","nativeGetSymbols","getOwnPropertySymbols","arrayFilter","symbol","stubArray","getSymbols","values","offset","getPrototypeOf","arrayPush","getPrototype","getSymbolsIn","keysFunc","symbolsFunc","baseGetAllKeys","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","DataView","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","WeakMap","getTag","ArrayBuffer","ctorString","input","Uint8Array","arrayBuffer","byteLength","dataView","cloneArrayBuffer","byteOffset","reFlags","regexp","lastIndex","symbolProto","symbolValueOf","valueOf","typedArray","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","objectCreate","proto","baseCreate","nodeIsMap","isMap","baseIsMap","nodeIsSet","isSet","baseIsSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","initCloneArray","copyArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","arrayEach","CLONE_DEEP_FLAG","cloneDeep","getStoreKey","getStoreState","storeStateObj","storeState","updateStoreKey","toInteger","dirtyNumber","NaN","number","Number","isNaN","ceil","floor","requiredArgs","required","args","TypeError","toDate","argument","argStr","Date","getTime","console","warn","addMilliseconds","dirtyDate","dirtyAmount","timestamp","amount","isBefore","dirtyDateToCompare","date","dateToCompare","LS","localStorage","EXPIRE_KEYS","setItem","time","trim","removeExpiredKeys","isSafeInteger","isInteger","expire","fromJSON","getItem","liveUntil","item","toJSON","addExpireKey","clearKeyList","keyList","removeItem","expireKeyOnly","removeExpireKey","includes","getSvelteStoreInStorage","storage","JSON","stringify","parse","err","t","s","u","f","code","1","_dereq_","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","observe","characterData","setImmediate","MessageChannel","scriptEl","onreadystatechange","documentElement","setTimeout","channel","port1","onmessage","port2","postMessage","queue","oldQueue","immediate","task","window","2","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","state","outcome","safelyResolveThenable","QueueItem","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","reject","getThen","apply","thenable","onError","onSuccess","tryToUnwrap","tryCatch","status","out","reason","all","iterable","allResolver","resolveFromAll","outValue","race","response","3","4","_typeof","iterator","_classCallCheck","Constructor","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","open","isSafari","openDatabase","navigator","userAgent","platform","hasFetch","fetch","IDBKeyRange","createBlob","parts","properties","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","getBlob","Promise$1","executeCallback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","buf","arr","charCodeAt","_checkBlobSupportWithoutCaching","txn","transaction","blob","objectStore","put","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","match","matchedEdge","parseInt","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","createDbContext","db","close","dbArgs","version","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onerror","onsuccess","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","base64","btoa","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","initPromises","ignoreErrors","j","_defaultConfig","req","iterate","openCursor","iterationNumber","cursor","blobSupport","count","advanced","openKeyCursor","advance","dropInstance","currentConfig","config","dbPromise","deleteObjectStore","_forage2","deleteDatabase","onblocked","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","bytes","bufferToString","base64String","substring","serialize","valueType","marker","fileReader","onload","str","readAsArrayBuffer","deserialize","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","description","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","results","rows","getItem$1","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","concat","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","localforage_js","LocalForage","driverTypeKey","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","configureMissingMethods","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage","PREFIX_KEY","LF","async","subscriber_queue","start","stop","subscribers","new_value","run_queue","invalidate","subscriber","ENUM_SAVE_MODE","hashMode","navigationHistoryLimit","saveMode","notFoundRoute","errorRoute","consoleLogErrorMessages","consoleLogStores","usesRouteLayout","considerTrailingSlashOnMatchingRoute","beforeEnter","setHashMode","setNavigationHistoryLimit","setSaveMode","setNotFoundRoute","setErrorRoute","setConsoleLogErrorMessages","setConsoleLogStores","setUsesRouteLayout","setOnError","onErrorParam","setBeforeEnter","beforeEnterParam","bFuncItem","setConfig","setConsiderTrailingSlashOnMatchingRoute","getHashMode","getNavigationHistoryLimit","getSaveMode","getNotFoundRoute","getErrorRoute","getConsoleLogErrorMessages","getConsoleLogStores","getUsesRouteLayout","setConsiderTrailingSlashOnMachingRoute","considerTrailingSlashOnMachingRoute","getConsiderTrailingSlashOnMachingRoute","getOnError","getBeforeEnter","STORAGE_KEY","routes","currentLocation","currentRoute","pathname","params","hostname","protocol","port","origin","fromRoute","navigationHistory","setNavigationHistory","configs","getConfig","getNavigationHistory","configStore","timeout","ignoreKeys","iKeys","lsPlugin.setSvelteStoreInStorage","lfPlugin.setSvelteStoreInStorage","setRoutes","getRoutes","setCurrentRoute","getCurrentRoute","setFromRoute","getFromRoute","pushNavigationHistory","navObj","popNavigationHistory","setCurrentLocation","getCurrentLocation","pushRoute","routeNavigation","setParams","consumeParams","routeStore","route","find","rItem","path","notFound","getPushRoute","consumeRoutePushed","copyRouteNavigation","popRoute","history","back","loadingController","resolveLoading","resolveFunc","startLoading","callbackFunc","loadingText","errorMessage","getBeforeEnterAsArray","beforeEnterFuncOrArr","getUrlParameter","url","getParams","currentComponent","loadingPromise","notFoundComponent","SCR_NotFound","errorComponent","SCR_Error","defaultLayoutComponent","SCR_Layout","loadingComponent","SCR_Loading","allProps","allLoadingProps","loadingProps","layoutComponent","LoadingController","popEvent","routePath","$configStore","pushState","location","dispatchEvent","Event","getRouteParams","routeObj","customParams","$routerStore","setErrorComponent","loadRoute","isLoading","href","getLocation","routerStore","routeItem","lazyLoadComponent","configBERs","ignoreGlobalBeforeFunction","finalizeRoute","beforeEnterRoute","executeBeforeEnterFunctions","beforeEnterGlobal","beforeEnterArr","executeRouteBEFBeforeGlobalBEF","routeFrom","routeTo","resFunc","routeObjParams","bFunc","SCR_ROUTE_ERROR","redirect","findRoute","notFoundRouteName","title","routeParams","afterBeforeEnter","ignoreLayout","lazyLoadLayoutComponent","loadedLayoutComponent","default","loadedComponent","LS.getSvelteStoreInStorage","LF.getSvelteStoreInStorage","log","$navigateStore","navigateStore","to","elementProps","alert","SCR_ROUTER_COMPONENT","SCR_ROUTER_LINK","SCR_CONFIG_STORE","backRoute","SCR_Layout_Global","allPropsTest","SCR_C1","rFrom","rTo","SCR_C4","myCustomParam","app","body","pushCustomParam"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal/index.mjs","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_arrayEach.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_baseAssign.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/_baseAssignIn.js","../../node_modules/lodash/_cloneBuffer.js","../../node_modules/lodash/_copyArray.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/_copySymbols.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/_getSymbolsIn.js","../../node_modules/lodash/_copySymbolsIn.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_getAllKeysIn.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/_initCloneArray.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_cloneArrayBuffer.js","../../node_modules/lodash/_cloneDataView.js","../../node_modules/lodash/_cloneRegExp.js","../../node_modules/lodash/_cloneSymbol.js","../../node_modules/lodash/_cloneTypedArray.js","../../node_modules/lodash/_initCloneByTag.js","../../node_modules/lodash/_baseCreate.js","../../node_modules/lodash/_initCloneObject.js","../../node_modules/lodash/_baseIsMap.js","../../node_modules/lodash/isMap.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseClone.js","../../node_modules/lodash/cloneDeep.js","../../src/js/functions.js","../../node_modules/date-fns/esm/_lib/toInteger/index.js","../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../node_modules/date-fns/esm/toDate/index.js","../../node_modules/date-fns/esm/addMilliseconds/index.js","../../node_modules/date-fns/esm/isBefore/index.js","../../src/plugins/lsplugin.js","../../node_modules/localforage/dist/localforage.js","../../src/plugins/lfplugin.js","../../node_modules/svelte/store/index.mjs","../../src/js/store/config.js","../../src/js/store/router.js","../../src/js/store/navigate.js","../../src/js/helpers/loadingController.js","../../src/components/SCR_NotFound.svelte","../../src/components/SCR_Loading.svelte","../../src/components/SCR_Error.svelte","../../src/components/SCR_Router.svelte","../../src/components/SCR_RouterLink.svelte","../../src/index.js","../../src/testComponents/SCR_C4.svelte","../../src/App.svelte","../../src/main.js","../../src/testComponents/SCR_Root.svelte","../../src/testComponents/SCR_C2.svelte","../../src/testComponents/SCR_C5.svelte"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot_spread(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_spread_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_spread_changes_fn(dirty) | get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value = ret) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction claim_element(nodes, name, attributes, svg) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeName === name) {\n let j = 0;\n const remove = [];\n while (j < node.attributes.length) {\n const attribute = node.attributes[j++];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n for (let k = 0; k < remove.length; k++) {\n node.removeAttribute(remove[k]);\n }\n return nodes.splice(i, 1)[0];\n }\n }\n return svg ? svg_element(name) : element(name);\n}\nfunction claim_text(nodes, data) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 3) {\n node.data = '' + data;\n return nodes.splice(i, 1)[0];\n }\n }\n return text(data);\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n node.style.setProperty(key, value, important ? 'important' : '');\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, false, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(anchor = null) {\n this.a = anchor;\n this.e = this.n = null;\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.h(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\nconst active_docs = new Set();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = node.ownerDocument;\n active_docs.add(doc);\n const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = doc.head.appendChild(element('style')).sheet);\n const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n if (!current_rules[name]) {\n current_rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n active_docs.forEach(doc => {\n const stylesheet = doc.__svelte_stylesheet;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n doc.__svelte_rules = {};\n });\n active_docs.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach(fn => fn(event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n flushing = false;\n seen_callbacks.clear();\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = program.b - t;\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, classes_to_add) {\n const attributes = Object.assign({}, ...args);\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${String(value).replace(/\"/g, '"').replace(/'/g, ''')}\"`;\n }\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(parent_component ? parent_component.$$.context : context || []),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(parent_component ? parent_component.$$.context : options.context || []),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false\n };\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.37.0' }, detail)));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * \n * \n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to seperate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_space, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_current_component, get_custom_elements_slots, get_slot_changes, get_slot_context, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, listen, listen_dev, loop, loop_guard, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, update_slot, update_slot_spread, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","import cloneDeep from \"lodash/cloneDeep\";\n\nexport const assign = (target, source) => {\n return Object.assign(cloneDeep(target), cloneDeep(source));\n};\n\nexport const getStoreKey = (store, key) => {\n const storeState = getStoreState(store);\n return storeState[key];\n};\n\nexport const getStoreState = (store) => {\n let storeStateObj;\n const unsubscribe = store.subscribe((storeState) => {\n if (!Array.isArray(storeState)) {\n storeStateObj = assign({}, storeState);\n } else {\n storeStateObj = [...storeState];\n }\n });\n unsubscribe();\n return storeStateObj;\n};\n\nexport const updateStoreKey = (store, objValue) => {\n store.update((storeState) => {\n return assign(storeState, objValue);\n });\n};\n","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import cloneDeep from \"lodash/cloneDeep\";\nimport { isBefore, addMilliseconds } from \"date-fns\";\n\nconst LS = localStorage;\nconst PREFIX_KEY = \"SCR_ROUTER_\";\nconst EXPIRE_KEYS = `${PREFIX_KEY}EXPIRE_KEYS`;\n\nexport const getItem = (key) => {\n removeExpiredKeys();\n return fromJSON(LS.getItem(key));\n};\n\nexport const setItem = (key, value, time) => {\n if (key === undefined || key === null || key.trim() === \"\") {\n return false;\n }\n if (value === undefined || value === null) {\n clearKeyList([key]);\n return;\n }\n removeExpiredKeys();\n if (\n time &&\n Number.isSafeInteger(time) &&\n Number.isInteger(time) &&\n time > 0\n ) {\n addExpireKey(key, time);\n }\n LS.setItem(key, toJSON(value));\n};\n\nexport const removeItem = (key) => {\n removeExpiredKeys();\n const item = fromJSON(LS.getItem(key));\n if (item !== null && item !== undefined) {\n LS.removeItem(key);\n removeExpireKey(key);\n }\n return item;\n};\n\nexport const getAll = () => {\n if (!LS || LS.length === 0) {\n return [];\n }\n removeExpiredKeys();\n let items = Object.assign({}, cloneDeep(LS));\n delete items[EXPIRE_KEYS];\n return items;\n};\n\n// clear all the expiration list and the keys\nexport const clearExpireKeys = () => {\n const expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire.map((item) => LS.removeItem(item.key));\n\n LS.removeItem(EXPIRE_KEYS);\n};\n\n// clear a given array list of keys\n// affects expiration key list and the keys\nexport const clearKeyList = (keyList) => {\n if (!Array.isArray(keyList) || keyList.length === 0) {\n return;\n }\n\n keyList.map((key) => {\n if (LS.getItem(key)) {\n LS.removeItem(key);\n removeExpireKey(key);\n }\n });\n\n // updating the remaining list keychain if it has left any item\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => !keyList.includes(item.key));\n if (expire.length > 0) {\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n LS.removeItem(EXPIRE_KEYS);\n }\n};\n\n// Function to check and remove a key if expired\n// If so... remove the key from the expiration list and the key\nexport const removeExpiredKeys = () => {\n let keyList = [];\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n\n if (expire && expire.length > 0) {\n expire = expire.filter((item) => {\n if (\n isBefore(new Date(), new Date(item.liveUntil)) &&\n LS.getItem(item.key)\n ) {\n return true;\n }\n LS.removeItem(item.key);\n keyList.push(item.key);\n });\n\n if (expire.length > 0) {\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n LS.removeItem(EXPIRE_KEYS);\n }\n }\n return keyList;\n};\n\nexport const setSvelteStoreInStorage = (\n subscribe,\n key,\n timeout,\n ignoreKeys = []\n) => {\n const unsubscribe = subscribe((store) => {\n for (let iKeys of ignoreKeys) {\n store[iKeys] = undefined;\n }\n setItem(key, store, timeout);\n });\n unsubscribe();\n};\n\nexport const getSvelteStoreInStorage = (update, key) => {\n const storage = getItem(key);\n if (!storage) {\n return;\n }\n update(() => {\n return Object.assign({}, cloneDeep(storage));\n });\n};\n\n// ------------------------------------------------- ## BELOW THIS LINE PRIVATE FUNCTIONS ONLY ## -------------------------------------------------\n// add a key in the expiration key list\n// key: String\n// time: In milliseconds\nfunction addExpireKey(key, time) {\n if (!Number.isInteger(time) || !Number.isSafeInteger(time)) {\n throw new Error(\"Time to add an expire key is not a safe integer\");\n }\n\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n const liveUntil = addMilliseconds(new Date(), time);\n\n if (expire !== null && expire !== undefined) {\n expire = expire.filter((item) => item.key !== key);\n expire.push({ key, liveUntil });\n } else {\n expire = [{ key, liveUntil }];\n }\n\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n}\n\n// removes a specific key from expiration key list, may remove the key too\n// key: String\n// expireKeyOnly: Boolean -- only = true for only remove from expireKey OR the key itself too\nfunction removeExpireKey(key, expireKeyOnly = true) {\n let expire = fromJSON(LS.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => item.key !== key);\n\n if (expire.length > 0) {\n LS.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n LS.removeItem(EXPIRE_KEYS);\n }\n\n if (!expireKeyOnly && LS.getItem(key)) {\n LS.removeItem(key);\n }\n}\n\nfunction toJSON(item) {\n if (typeof item === \"object\") {\n return JSON.stringify(item);\n }\n return item;\n}\n\nfunction fromJSON(item) {\n if (!item) {\n return item;\n }\n try {\n return JSON.parse(item);\n } catch (err) {\n return item;\n }\n}\n\n// setInterval(removeExpiredKeys, 5000);\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.9.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = req.onblocked = function (err) {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(err);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","import cloneDeep from \"lodash/cloneDeep\";\nimport { isBefore, addMilliseconds } from \"date-fns\";\nimport localforage from \"localforage\";\n\nconst PREFIX_KEY = \"SCR_ROUTER_\";\nconst IDX_DB_NAME = PREFIX_KEY;\nconst IDX_DB_STORE = PREFIX_KEY;\nconst EXPIRE_KEYS = `${PREFIX_KEY}IDX_DB_P_EXPIRE_KEYS`;\n\nlocalforage.config({\n driver: localforage.INDEXEDDB,\n name: IDX_DB_NAME,\n version: `${PREFIX_KEY}VERSION`,\n storeName: IDX_DB_STORE,\n description: `${PREFIX_KEY}DB_DESCRIPTOR`,\n});\n\nconst LF = localforage;\n\nexport const getItem = async (key) => {\n try {\n await removeExpiredKeys();\n return fromJSON(await LF.getItem(key));\n } catch (error) {\n throw error;\n }\n};\n\nexport const setItem = async (key, value, time) => {\n try {\n if (key === undefined || key === null || key.trim() === \"\") {\n return false;\n }\n if (value === undefined || value === null) {\n await clearKeyList([key]);\n return;\n }\n await removeExpiredKeys();\n if (\n time &&\n Number.isSafeInteger(time) &&\n Number.isInteger(time) &&\n time > 0\n ) {\n await addExpireKey(key, time);\n }\n await LF.setItem(key, toJSON(value));\n } catch (error) {\n throw error;\n }\n};\n\nexport const removeItem = async (key) => {\n try {\n await removeExpiredKeys();\n const item = fromJSON(await LF.getItem(key));\n if (item !== null && item !== undefined) {\n await LF.removeItem(key);\n await removeExpireKey(key);\n }\n return item;\n } catch (error) {\n throw error;\n }\n};\n\nexport const getAll = async () => {\n try {\n await removeExpiredKeys();\n const keys = await LF.keys();\n const items = [];\n let item;\n for (let key of keys) {\n items.push(await LF.getItem(key));\n await LF.removeItem(key);\n }\n return items;\n } catch (error) {\n throw error;\n }\n};\n\n// clear all the expiration list and the keys\nexport const clearExpireKeys = async () => {\n try {\n const expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n\n if (expire === null || expire === undefined) {\n return;\n }\n\n await expire.map(async (item) => await LF.removeItem(item.key));\n\n await LF.removeItem(EXPIRE_KEYS);\n } catch (error) {\n throw error;\n }\n};\n\n// clear a given array list of keys\n// affects expiration key list and the keys\nexport const clearKeyList = async (keyList) => {\n try {\n if (!Array.isArray(keyList) || keyList.length === 0) {\n return;\n }\n\n await keyList.map(async (key) => {\n if (await LF.getItem(key)) {\n await LF.removeItem(key);\n await removeExpireKey(key);\n }\n });\n\n // updating the remaining list keychain if it has left any item\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => !keyList.includes(item.key));\n if (expire.length > 0) {\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n await LF.removeItem(EXPIRE_KEYS);\n }\n } catch (error) {\n throw error;\n }\n};\n\n// Function to check and remove a key if expired\n// If so... remove the key from the expiration list and the key\nexport const removeExpiredKeys = async () => {\n try {\n let keyList = [];\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n\n if (expire && expire.length > 0) {\n expire = await expire.filter(async (item) => {\n if (\n isBefore(new Date(), new Date(item.liveUntil)) &&\n (await LF.getItem(item.key))\n ) {\n return true;\n }\n await LF.removeItem(item.key);\n keyList.push(item.key);\n });\n\n if (expire.length > 0) {\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n await LF.removeItem(EXPIRE_KEYS);\n }\n }\n return keyList;\n } catch (error) {\n throw error;\n }\n};\n\nexport const setSvelteStoreInStorage = async (\n subscribe,\n key,\n timeout,\n ignoreKeys = []\n) => {\n try {\n const unsubscribe = subscribe(async (store) => {\n for (let iKeys of ignoreKeys) {\n store[iKeys] = undefined;\n }\n await setItem(key, store, timeout);\n });\n unsubscribe();\n } catch (error) {\n throw error;\n }\n};\n\nexport const getSvelteStoreInStorage = async (update, key) => {\n try {\n const storage = await getItem(key);\n if (!storage) {\n return;\n }\n update(() => {\n return Object.assign({}, cloneDeep(storage));\n });\n } catch (error) {\n throw error;\n }\n};\n\n// ------------------------------------------------- ## BELOW THIS LINE PRIVATE FUNCTIONS ONLY ## -------------------------------------------------\n// add a key in the expiration key list\n// key: String\n// time: In milliseconds\nasync function addExpireKey(key, time) {\n try {\n if (!Number.isInteger(time) || !Number.isSafeInteger(time)) {\n throw new Error(\"Time to add an expire key is not a safe integer\");\n }\n\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n const liveUntil = addMilliseconds(new Date(), time);\n\n if (expire !== null && expire !== undefined) {\n expire = expire.filter((item) => item.key !== key);\n expire.push({ key, liveUntil });\n } else {\n expire = [{ key, liveUntil }];\n }\n\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } catch (error) {\n throw error;\n }\n}\n\n// removes a specific key from expiration key list, may remove the key too\n// key: String\n// expireKeyOnly: Boolean -- only = true for only remove from expireKey OR the key itself too\nasync function removeExpireKey(key, expireKeyOnly = true) {\n try {\n let expire = fromJSON(await LF.getItem(EXPIRE_KEYS));\n if (expire === null || expire === undefined) {\n return;\n }\n\n expire = expire.filter((item) => item.key !== key);\n\n if (expire.length > 0) {\n await LF.setItem(EXPIRE_KEYS, toJSON(expire));\n } else {\n await LF.removeItem(EXPIRE_KEYS);\n }\n\n if (!expireKeyOnly && LF.getItem(key)) {\n await LF.removeItem(key);\n }\n } catch (error) {\n throw error;\n }\n}\n\nfunction toJSON(item) {\n if (typeof item === \"object\") {\n return JSON.stringify(item);\n }\n return item;\n}\n\nfunction fromJSON(item) {\n if (!item) {\n return item;\n }\n try {\n return JSON.parse(item);\n } catch (err) {\n return item;\n }\n}\n\n// setInterval(removeExpiredKeys, 5000);\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = [];\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (let i = 0; i < subscribers.length; i += 1) {\n const s = subscribers[i];\n s[1]();\n subscriber_queue.push(s, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.push(subscriber);\n if (subscribers.length === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n const index = subscribers.indexOf(subscriber);\n if (index !== -1) {\n subscribers.splice(index, 1);\n }\n if (subscribers.length === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","import { writable } from \"svelte/store\";\nimport {\n assign,\n updateStoreKey,\n getStoreState,\n getStoreKey,\n} from \"../functions\";\nconst storeTemplate = {\n hashMode: false,\n navigationHistoryLimit: 10,\n saveMode: \"localstorage\",\n notFoundRoute: \"/notFound\",\n errorRoute: \"/error\",\n consoleLogErrorMessages: true,\n consoleLogStores: true,\n usesRouteLayout: true,\n considerTrailingSlashOnMatchingRoute: true,\n useScroll: false,\n scrollProps: {\n top: 0,\n left: 0,\n behavior: \"smooth\",\n timeout: 10,\n },\n};\n\nconst ENUM_SAVE_MODE = [\"localstorage\", \"indexeddb\", \"none\"];\n\nconst store = writable(assign({}, storeTemplate));\nlet onError;\nlet beforeEnter;\n\n// -------------- config Property -----------------------------------------------------\n\nfunction setConfig(config) {\n setHashMode(config.hashMode);\n setNavigationHistoryLimit(config.navigationHistoryLimit);\n setSaveMode(config.saveMode);\n setNotFoundRoute(config.notFoundRoute);\n setErrorRoute(config.errorRoute);\n setConsoleLogErrorMessages(config.consoleLogErrorMessages);\n setConsoleLogStores(config.consoleLogStores);\n setUsesRouteLayout(config.usesRouteLayout);\n setConsiderTrailingSlashOnMatchingRoute(\n config.considerTrailingSlashOnMatchingRoute\n );\n setOnError(config.onError);\n setBeforeEnter(config.beforeEnter);\n setScrollProps(config.scrollProps);\n setUseScroll(config.useScroll);\n}\n\nfunction getConfig() {\n return getStoreState(store);\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- hashmode Property ---------------------------------------------------\n\nfunction setHashMode(hashMode) {\n if (typeof hashMode == \"boolean\") {\n updateStoreKey(store, { hashMode });\n }\n}\n\nfunction getHashMode() {\n return getStoreKey(store, \"hashMode\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- navigationHistoryLimit Property -------------------------------------\n\nfunction setNavigationHistoryLimit(navigationHistoryLimit) {\n if (typeof navigationHistoryLimit == \"number\") {\n updateStoreKey(store, { navigationHistoryLimit });\n }\n}\n\nfunction getNavigationHistoryLimit() {\n return getStoreKey(store, \"navigationHistoryLimit\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- saveMode Property ---------------------------------------------------\n\nfunction setSaveMode(saveMode) {\n if (ENUM_SAVE_MODE.includes(saveMode)) {\n updateStoreKey(store, { saveMode });\n }\n}\n\nfunction getSaveMode() {\n return getStoreKey(store, \"saveMode\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- notFoundRoute Property ----------------------------------------------\n\nfunction setNotFoundRoute(notFoundRoute) {\n if (typeof notFoundRoute == \"string\" && notFoundRoute.includes(\"/\")) {\n updateStoreKey(store, { notFoundRoute });\n }\n}\n\nfunction getNotFoundRoute() {\n return getStoreKey(store, \"notFoundRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- errorRoute Property -------------------------------------------------\n\nfunction setErrorRoute(errorRoute) {\n if (typeof errorRoute == \"string\" && errorRoute.includes(\"/\")) {\n updateStoreKey(store, { errorRoute });\n }\n}\n\nfunction getErrorRoute() {\n return getStoreKey(store, \"errorRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- consoleLogErrorMessages Property ------------------------------------\n\nfunction setConsoleLogErrorMessages(consoleLogErrorMessages = false) {\n if (typeof consoleLogErrorMessages == \"boolean\") {\n updateStoreKey(store, { consoleLogErrorMessages });\n }\n}\n\nfunction getConsoleLogErrorMessages() {\n return getStoreKey(store, \"consoleLogErrorMessages\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- consoleLogStores Property ------------------------------------\n\nfunction setConsoleLogStores(consoleLogStores = false) {\n if (typeof consoleLogStores == \"boolean\") {\n updateStoreKey(store, { consoleLogStores });\n }\n}\n\nfunction getConsoleLogStores() {\n return getStoreKey(store, \"consoleLogStores\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- usesRouteLayout Property --------------------------------------------\n\nfunction setUsesRouteLayout(usesRouteLayout) {\n if (typeof usesRouteLayout == \"boolean\") {\n updateStoreKey(store, { usesRouteLayout });\n }\n}\n\nfunction getUsesRouteLayout() {\n return getStoreKey(store, \"usesRouteLayout\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- considerTrailingSlashOnMachingRoute Property ------------------------\n\nfunction setConsiderTrailingSlashOnMachingRoute(\n considerTrailingSlashOnMachingRoute\n) {\n if (typeof considerTrailingSlashOnMachingRoute == \"boolean\") {\n updateStoreKey(store, { considerTrailingSlashOnMachingRoute });\n }\n}\n\nfunction getConsiderTrailingSlashOnMachingRoute() {\n return getStoreKey(store, \"considerTrailingSlashOnMachingRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- scrollProps Property ------------------------------------------------\n\nfunction setScrollProps(scrollProps) {\n if (typeof setScrollProps == \"object\") {\n let sp = {\n top: scrollProps.top,\n left: scrollProps.left,\n behavior: scrollProps.behavior,\n timeout:\n scrollProps.timeout && scrollProps.timeout > 10\n ? scrollProps.timeout\n : 10,\n };\n updateStoreKey(store, { scrollProps });\n }\n}\n\nfunction getScrollProps() {\n return getStoreKey(store, \"scrollProps\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- useScroll Property --------------------------------------------------\n\nfunction setUseScroll(useScroll) {\n if (typeof useScroll == \"boolean\") {\n updateStoreKey(store, { useScroll });\n }\n}\n\nfunction getUseScroll() {\n return getStoreKey(store, \"useScroll\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- onError Function ----------------------------------------------------\n\nfunction setOnError(onErrorParam) {\n if (!onErrorParam || typeof onErrorParam !== \"function\") {\n return;\n }\n onError = onErrorParam;\n}\n\nfunction getOnError() {\n return onError;\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- beforeEnter Function --------------------------------------------\n\nfunction setBeforeEnter(beforeEnterParam) {\n if (\n !beforeEnterParam ||\n (typeof beforeEnterParam !== \"function\" && !Array.isArray(beforeEnterParam))\n ) {\n return;\n }\n if (Array.isArray(beforeEnterParam)) {\n for (let bFuncItem of beforeEnterParam) {\n if (typeof bFuncItem !== \"function\") {\n return;\n }\n }\n }\n // if is valid\n beforeEnter = beforeEnterParam;\n}\n\nfunction getBeforeEnter() {\n return beforeEnter;\n}\n\n// --------------------------------------------------------------------------------------\n\nexport default {\n subscribe: store.subscribe,\n update: store.update,\n setConfig,\n getConfig,\n setHashMode,\n getHashMode,\n setNavigationHistoryLimit,\n getNavigationHistoryLimit,\n setSaveMode,\n getSaveMode,\n setNotFoundRoute,\n getNotFoundRoute,\n setErrorRoute,\n getErrorRoute,\n setConsoleLogErrorMessages,\n getConsoleLogErrorMessages,\n setConsoleLogStores,\n getConsoleLogStores,\n setUsesRouteLayout,\n getUsesRouteLayout,\n setConsiderTrailingSlashOnMachingRoute,\n getConsiderTrailingSlashOnMachingRoute,\n setScrollProps,\n getScrollProps,\n setUseScroll,\n getUseScroll,\n setOnError,\n getOnError,\n setBeforeEnter,\n getBeforeEnter,\n};\n","import { writable } from \"svelte/store\";\nimport {\n assign,\n getStoreState,\n updateStoreKey,\n getStoreKey,\n} from \"../functions\";\nimport * as lsPlugin from \"../../plugins/lsplugin.js\";\nimport * as lfPlugin from \"../../plugins/lfplugin.js\";\n\nimport configStore from \"./config.js\";\n\nconst STORAGE_KEY = \"SRC_ROUTER_STORE\";\n\nconst storeTemplate = {\n routes: [],\n currentLocation: undefined,\n currentRoute: {\n name: undefined,\n pathname: undefined,\n params: [],\n hostname: undefined,\n protocol: undefined,\n port: undefined,\n origin: undefined,\n hash: undefined,\n },\n fromRoute: {\n name: undefined,\n pathname: undefined,\n params: [],\n hostname: undefined,\n protocol: undefined,\n port: undefined,\n origin: undefined,\n hash: undefined,\n },\n navigationHistory: [],\n};\n\nconst store = writable(assign({}, storeTemplate));\n\n// -------------- routes Property ------------------------------------------------------\n\nasync function setRoutes(routes = []) {\n if (!Array.isArray(routes)) {\n return;\n }\n updateStoreKey(store, { routes });\n await saveMode();\n}\n\nfunction getRoutes() {\n return getStoreKey(store, \"routes\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- currentLocation Property --------------------------------------------\n\nasync function setCurrentLocation(currentLocation) {\n if (typeof currentLocation == \"string\") {\n updateStoreKey(store, { currentLocation });\n await saveMode();\n }\n}\n\nfunction getCurrentLocation() {\n return getStoreKey(store, \"currentLocation\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- currentRoute Property -----------------------------------------------\n\nasync function setCurrentRoute(currentRoute) {\n if (typeof currentRoute == \"object\") {\n updateStoreKey(store, { currentRoute });\n await saveMode();\n }\n}\n\nfunction getCurrentRoute() {\n return getStoreKey(store, \"currentRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- fromRoute Property --------------------------------------------------\n\nasync function setFromRoute(fromRoute) {\n if (typeof fromRoute == \"object\") {\n updateStoreKey(store, { fromRoute });\n await saveMode();\n }\n}\n\nfunction getFromRoute() {\n return getStoreKey(store, \"fromRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- navigationHistory Property ------------------------------------------\n\nasync function setNavigationHistory(navigationHistory) {\n if (typeof navigationHistory == \"object\") {\n const configs = getConfig();\n if (configs.navigationHistoryLimit > 0) {\n navigationHistory = navigationHistory.slice(\n 0,\n configs.navigationHistoryLimit - 1\n );\n }\n updateStoreKey(store, { navigationHistory });\n await saveMode();\n }\n}\n\nasync function pushNavigationHistory(navObj) {\n let navigationHistory = getNavigationHistory() || [];\n navigationHistory = [navObj, ...navigationHistory];\n await setNavigationHistory(navigationHistory);\n}\n\nasync function popNavigationHistory() {\n let navigationHistory = getNavigationHistory() || [];\n\n if (navigationHistory.length == 0) {\n return false;\n }\n const navObj = { ...navigationHistory[0] };\n await setNavigationHistory(navigationHistory.slice(1));\n return navObj;\n}\n\nfunction getNavigationHistory() {\n return getStoreKey(store, \"navigationHistory\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- config Property -----------------------------------------------------\n\nfunction getConfig() {\n return configStore.getConfig();\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- saveMode Function ---------------------------------------------------\n\nasync function saveMode() {\n const configs = getConfig();\n if (!configs || !configs.saveMode || configs.saveMode == \"none\") {\n return false;\n }\n if (configs.saveMode === \"localstorage\") {\n await lsPlugin.setSvelteStoreInStorage(store.subscribe, STORAGE_KEY);\n } else if (configs.saveMode === \"indexeddb\") {\n await lfPlugin.setSvelteStoreInStorage(store.subscribe, STORAGE_KEY);\n }\n return false;\n}\n// --------------------------------------------------------------------------------------\n\nexport default {\n subscribe: store.subscribe,\n update: store.update,\n STORAGE_KEY,\n setRoutes,\n getRoutes,\n setCurrentRoute,\n getCurrentRoute,\n setFromRoute,\n getFromRoute,\n setNavigationHistory,\n getNavigationHistory,\n pushNavigationHistory,\n popNavigationHistory,\n setCurrentLocation,\n getCurrentLocation,\n getConfig,\n};\n","import { writable } from \"svelte/store\";\nimport {\n assign,\n getStoreState,\n updateStoreKey,\n getStoreKey,\n} from \"../functions\";\nimport * as lsPlugin from \"../../plugins/lsplugin.js\";\nimport * as lfPlugin from \"../../plugins/lfplugin.js\";\n\nimport configStore from \"./config.js\";\nimport routeStore from \"./router.js\";\n\nconst storeTemplate = {\n pushRoute: false,\n params: {},\n};\n\nconst store = writable(assign({}, storeTemplate));\nlet routeNavigation;\nlet backRouteNavigation;\n\n// -------------- pushRoute Property --------------------------------------------------\n\nfunction pushRoute(route, params, onError) {\n if (!route) {\n const error = new Error(`SCR_ROUTER - Route not defined - ${route}`);\n if (typeof onError === \"function\") {\n onError(error);\n } else {\n throw error;\n }\n }\n const routes = routeStore.getRoutes();\n routeNavigation = undefined;\n\n if (typeof route === \"string\") {\n routeNavigation = routes.find((rItem) => rItem.path === route);\n } else if (route.path) {\n routeNavigation = routes.find((rItem) => rItem.path === route.path);\n } else if (route.name) {\n routeNavigation = routes.find((rItem) => rItem.name === route.name);\n }\n\n if (!routeNavigation) {\n routeNavigation = {\n notFound: true,\n path: typeof route === \"string\" ? route : route.path || \"\",\n };\n }\n\n if (onError && typeof onError === \"function\") {\n routeNavigation.onError = onError;\n }\n\n setParams(params);\n updateStoreKey(store, { pushRoute: true });\n}\n\nfunction consumeRoutePushed() {\n const copyRouteNavigation = assign({}, routeNavigation);\n routeNavigation = undefined;\n updateStoreKey(store, { pushRoute: false });\n copyRouteNavigation.params = {\n ...copyRouteNavigation.params,\n ...consumeParams(),\n };\n return copyRouteNavigation;\n}\n\nfunction backRoute() {\n const navigationHistory = getNavigationHistory();\n let popRoute;\n if (navigationHistory.length > 0) {\n popRoute = routeStore.popNavigationHistory();\n }\n window.history.back();\n return popRoute;\n}\n\nfunction getPushRoute() {\n return getStoreKey(store, \"pushRoute\");\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- params Property -----------------------------------------------------\n\nfunction setParams(params = {}) {\n updateStoreKey(store, { params });\n}\n\nfunction consumeParams() {\n const params = getStoreKey(store, \"params\");\n setParams();\n return params;\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- navigationHistory Property ------------------------------------------\n\nfunction getNavigationHistory() {\n return routeStore.getNavigationHistory();\n}\n\n// --------------------------------------------------------------------------------------\n// -------------- config Property -----------------------------------------------------\n\nfunction getConfig() {\n return configStore.getConfig();\n}\n\n// --------------------------------------------------------------------------------------\n\nexport default {\n subscribe: store.subscribe,\n update: store.update,\n pushRoute,\n getPushRoute,\n consumeRoutePushed,\n backRoute,\n getNavigationHistory,\n getConfig,\n setParams,\n consumeParams,\n};\n","function loadingController() {\n let callbackFunc;\n let resolveFunc;\n this.resolveLoading = function () {\n if (this.resolveFunc) {\n this.resolveFunc(true);\n this.resolveFunc = undefined;\n }\n };\n this.startLoading = function () {\n if (resolveFunc) {\n this.resolveLoading();\n }\n this.callbackFunc = new Promise((resolve, reject) => {\n this.resolveFunc = resolve;\n });\n return this.callbackFunc;\n };\n}\nexport default loadingController;\n","\n\n
    \n

    Not Found

    \n

    {$routerStore.currentLocation || \"='(\"}

    \n
    \n\n","\n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {loadingText}

    \n
    \n\n\n","\n\n
    \n

    Error

    \n

    {errorMessage}

    \n
    \n\n\n","\n\n{#await loadingPromise}\n \n{:then value}\n {#if $configStore.usesRouteLayout && typeof layoutComponent === \"function\"}\n \n \n \n {:else}\n \n {/if}\n{/await}\n","\n\n
    \n \n
    \n","import SCR_ROUTER_COMPONENT_IMPORT from \"./components/SCR_Router.svelte\";\nimport SCR_ROUTER_LINK_COMPONENT_IMPORT from \"./components/SCR_RouterLink.svelte\";\nimport routerStore from \"./js/store/router.js\";\nimport configStore from \"./js/store/config.js\";\nimport navigateStore from \"./js/store/navigate.js\";\n\nexport const SCR_ROUTER_COMPONENT = SCR_ROUTER_COMPONENT_IMPORT;\nexport const SCR_ROUTER_LINK = SCR_ROUTER_LINK_COMPONENT_IMPORT;\nexport const SCR_ROUTER_STORE = routerStore;\nexport const SCR_CONFIG_STORE = configStore;\nexport const SCR_NAVIGATE_STORE = navigateStore;\nexport const pushRoute = navigateStore.pushRoute;\nexport const backRoute = navigateStore.backRoute;","\n\n
    \n

    Component Four

    \n Params Defined on Route:\n
    \n
    \n
    \n      {JSON.stringify(payload)}\n    
    \n
    \n
    \n Current Route Object:\n
    \n
    \n
    \n      {JSON.stringify(currentRoute)}\n    
    \n
    \n
    \n From Route Object:\n
    \n
    \n
    \n      {JSON.stringify(fromRoute)}\n    
    \n
    \n
    \n {\n pushRoute({ name: \"routeOne\" });\n }}>Route One - GO!\n {\n pushRoute({ name: \"routeTwo\" });\n }}>Route Two - GO!\n {\n pushRoute({ name: \"routeThree\" });\n }}>Route Three - GO!\n {\n pushRoute({ name: \"routeFive\" });\n }}>Route Five - GO!\n
    \n\n\n","\n\n\n","import App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n});\n\nexport default app;","\n\n
    \n
    \n

    \n Route One Executes:\n
    \n

    \n
      \n
    • Demonstrates Loading Component In Action
    • \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • \n Redirects in the second Before Enter Function to Root Page\n
    • \n
    \n {\n pushRoute({ name: \"routeOne\" });\n }}>Route One - GO!\n
    \n
    \n
    \n

    \n Route Two Executes:\n
    \n

    \n
      \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • \n Resolve Opening the Component\n
    • \n
    \n {\n pushRoute({ name: \"routeTwo\" });\n }}>Route Two - GO!\n
    \n
    \n
    \n

    \n Route Three Executes:\n
    \n

    \n
      \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • \n Throws An Error on Before Enter - For Example Purposes!\n
    • \n
    \n {\n pushRoute({ name: \"routeThree\" });\n }}>Route Three - GO!\n
    \n
    \n
    \n

    \n Route Four Executes:\n
    \n

    \n
      \n
    • Global Before Enter Functions
    • \n
    • Route Before Enter Functions
    • \n
    • After Enter Route Function
    • \n
    • \n Resolve Opening the Component\n
    • \n
    \n {\n pushRoute({ name: \"routeFour\" });\n }}>Route Four - GO!\n
    \n
    \n
    \n

    \n Route Five Executes:\n
    \n

    \n
      \n
    • IGNORES Global Before Enter Functions
    • \n
    • Has NO Before Enter Functions
    • \n
    • IGNORES Layout
    • \n
    • \n Resolve Opening the Component\n
    • \n
    • \n Examples Router Link Component\n
    • \n
    \n {\n pushRoute({ name: \"routeFive\" });\n }}>Route Five - GO!\n
    \n
    \n\n\n","\n\n
    \n

    Component Two!

    \n
    \n A\n
    \n
    \n {\n backRoute();\n }}>Go Back\n
    \n
    B
    \n
    C
    \n
    D
    \n
    E
    \n
    F
    \n
    G
    \n
    H
    \n
    I
    \n
    J
    \n
    K
    \n
    L
    \n
    M
    \n
    \n\n\n","\n\n
    \n

    Component Five!

    \n {\n backRoute();\n }}>Go Back\n \n \n \n
    \n\n\n"],"names":["assign","eq","assocIndexOf","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","global","freeGlobal","Symbol","root","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","objectToString","funcTag","genTag","isObject","baseGetTag","coreJsData","funcProto","funcToString","isMasked","isFunction","toSource","getValue","baseIsNative","Map","getNative","nativeCreate","HASH_UNDEFINED","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","isKeyable","getMapData","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","stackClear","stackDelete","stackGet","stackHas","stackSet","defineProperty","baseAssignValue","assignValue","argsTag","isObjectLike","propertyIsEnumerable","baseIsArguments","stubFalse","MAX_SAFE_INTEGER","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","isLength","nodeUtil","baseUnary","baseIsTypedArray","isArray","isArguments","isBuffer","isTypedArray","baseTimes","isIndex","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","copyObject","keys","nativeKeysIn","baseKeysIn","keysIn","nativeGetSymbols","stubArray","arrayFilter","getSymbols","arrayPush","getPrototype","getSymbolsIn","baseGetAllKeys","Promise","Set","DataView","WeakMap","Uint8Array","cloneArrayBuffer","symbolTag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","baseCreate","getTag","baseIsMap","baseIsSet","CLONE_DEEP_FLAG","CLONE_SYMBOLS_FLAG","initCloneArray","copyArray","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","Stack","isSet","isMap","getAllKeysIn","getAllKeys","arrayEach","baseClone","cloneDeep","PREFIX_KEY","EXPIRE_KEYS","getItem","removeExpiredKeys","fromJSON","setItem","clearKeyList","addExpireKey","toJSON","removeItem","removeExpireKey","getAll","clearExpireKeys","setSvelteStoreInStorage","getSvelteStoreInStorage","require","storeTemplate","store","getConfig","getNavigationHistory","lsPlugin.setSvelteStoreInStorage","lfPlugin.setSvelteStoreInStorage","pushRoute","routeStore","backRoute","SCR_Layout","loadingController","LoadingController","document","LS.getSvelteStoreInStorage","LF.getSvelteStoreInStorage","SCR_ROUTER_COMPONENT_IMPORT","SCR_ROUTER_LINK_COMPONENT_IMPORT"],"mappings":"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"} \ No newline at end of file diff --git a/src/App.svelte b/src/App.svelte index c33915a..0703aae 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -9,16 +9,28 @@ SCR_CONFIG_STORE.setConsoleLogStores(false); SCR_CONFIG_STORE.setNavigationHistoryLimit(10); SCR_CONFIG_STORE.setHashMode(true); + SCR_CONFIG_STORE.setUseScroll(true); + SCR_CONFIG_STORE.setScrollProps({ + top: 0, + left: 0, + behavior: "smooth", + timeout: 10, + }); SCR_CONFIG_STORE.setOnError((err, routeObjParams) => { console.log("GLOBAL ERROR CONFIG", routeObjParams); }); SCR_CONFIG_STORE.setBeforeEnter([ - (resolve) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { + payload.firstGBEF = "set on Global Enter Function - 1!" + console.log(payload) console.log("GBER-1"); resolve(true); }, - (resolve) => { + (resolve, routeFrom, routeTo, routeObjParams, payload) => { + console.log(payload) + payload.secondGBEF = "set on Global Enter Function! - 2" console.log("GBER-2"); + console.log(payload) resolve(true); }, ]); @@ -28,13 +40,15 @@ name: "rootRoute", path: "/svelte-client-router", lazyLoadComponent: () => import("./testComponents/SCR_Root.svelte"), - lazyLoadLayoutComponent: () => import("./testComponents/SCR_Layout.svelte"), + lazyLoadLayoutComponent: () => + import("./testComponents/SCR_Layout.svelte"), title: "SCR - Root Route", }, { name: "routeOne", path: "/svelte-client-router/test1", component: SCR_C1, + ignoreScroll: true, beforeEnter: [ (resolve) => { console.log("beforeEnter Executed"); @@ -42,7 +56,10 @@ }, (resolve) => { console.log("beforeEnter Executed2"); - setTimeout(() => resolve({ redirect: "/svelte-client-router" }), 1000); + setTimeout( + () => resolve({ redirect: "/svelte-client-router" }), + 1000 + ); }, ], title: "First Route Title", @@ -54,13 +71,22 @@ lazyLoadComponent: () => import("./testComponents/SCR_C2.svelte"), title: "Second Route Title", beforeEnter: [ - (resolve, rFrom, rTo, params) => { + (resolve, rFrom, rTo, params, payload) => { + console.log(payload); + payload.myCustomParam = "123"; + console.log("<<<<>>>>>"); console.log("beforeEnter Executed"); console.log(params); setTimeout(() => resolve(true), 1000); }, ], loadingProps: { loadingText: "Carregando 2..." }, + scrollProps: { + top: 100, + left: 100, + behavior: "smooth", + timeout: 1000, + }, }, { name: "routeThree", @@ -85,10 +111,18 @@ myCustomParam: "This Param was set in the Router Definition", }, title: "Four Route Title", - lazyLoadComponent: () => import('./testComponents/SCR_C4.svelte'), - lazyLoadLayoutComponent: () => import("./testComponents/SCR_Layout_Global.svelte"), + lazyLoadComponent: () => import("./testComponents/SCR_C4.svelte"), + lazyLoadLayoutComponent: () => + import("./testComponents/SCR_Layout_Global.svelte"), + beforeEnter: [ + (resolve, rFrom, rTo, params, payload) => { + console.log(payload); + payload.myCustomParam2 = "set on Route Before Enter" + resolve(true) + }, + ], afterBeforeEnter: (routeObjParams) => { - console.log("After BE Route Four") + console.log("After BE Route Four"); console.log(routeObjParams); }, loadingProps: { loadingText: "Carregando 4..." }, @@ -97,13 +131,16 @@ name: "routeFive", path: "/svelte-client-router/test5", title: "Five Route Title", - lazyLoadComponent: () => import('./testComponents/SCR_C5.svelte'), + lazyLoadComponent: () => import("./testComponents/SCR_C5.svelte"), loadingProps: { loadingText: "Carregando 5..." }, ignoreLayout: true, - ignoreGlobalBeforeFunction: true + ignoreGlobalBeforeFunction: true, }, ]; - - + diff --git a/src/components/SCR_Loading.svelte b/src/components/SCR_Loading.svelte index 1c46cde..b4e4de9 100644 --- a/src/components/SCR_Loading.svelte +++ b/src/components/SCR_Loading.svelte @@ -1,5 +1,8 @@
    diff --git a/src/components/SCR_Router.svelte b/src/components/SCR_Router.svelte index 8700e9f..d735e94 100644 --- a/src/components/SCR_Router.svelte +++ b/src/components/SCR_Router.svelte @@ -13,6 +13,7 @@ import SCR_Loading from "./SCR_Loading.svelte"; import SCR_Error from "./SCR_Error.svelte"; import SCR_Layout from "./SCR_Layout.svelte"; + import { document } from "lodash/_freeGlobal"; // ------------------------------------------------------------------------------------ // ----------------- Export Variables ----------------------------------------------- @@ -103,7 +104,11 @@ function getRouteParams(routeObj, customParams) { props = {}; if (routeObj && routeObj.params) { - props = { params: { ...routeObj.params, ...assign({}, allProps) } }; + props = { + payload: routeObj.payload, + ...routeObj.params, + ...assign({}, allProps), + }; } props = { ...props, @@ -253,6 +258,7 @@ // object merge params with custom route params defined let routeObjParams; + routeObj.payload = {}; for (let bFunc of beforeEnterArr) { // beforeEnter Function is not a function throw an error if (!bFunc || typeof bFunc !== "function") { @@ -268,12 +274,29 @@ routeObjParams = undefined; if (routeObj.params) { routeObjParams = { - params: routeObj.params, + ...routeObj.params, }; } - // executing beforeEnter router - await bFunc(resolve, routeFrom, routeTo, routeObjParams); + // executing beforeEnter Functions GLOBAL And Route Specific + await bFunc( + resolve, + routeFrom, + routeTo, + routeObjParams, + routeObj.payload + ); + + // reseting payload if destroyed + if (!routeObj.payload) { + routeObj.payload = {}; + if ($configStore.consoleLogErrorMessages) { + console.warn("SCR_ROUTER - Payload property were redefined"); + } + } + + // updating props and passing to all components! + getRouteParams(routeObj); } catch (error) { resolve({ SCR_ROUTE_ERROR: true, error }); } @@ -412,6 +435,26 @@ } } loadingController.resolveLoading(); + + // scroll to position if enabled + if ($configStore.useScroll && !routeObj.ignoreScroll) { + let scrollProps = { + top: $configStore.scrollProps.top || 0, + left: $configStore.scrollProps.left || 0, + behavior: $configStore.scrollProps.behavior || "smooth", + timeout: $configStore.scrollProps.timeout || 10, + }; + + if (routeObj.scrollProps) { + scrollProps.top = routeObj.scrollProps.top; + scrollProps.left = routeObj.scrollProps.left; + scrollProps.behavior = routeObj.scrollProps.behavior; + scrollProps.timeout = routeObj.scrollProps.timeout; + } + + setTimeout(() => window.scrollTo(scrollProps), scrollProps.timeout); + } + return pushRoute(routeObj.path, false); } @@ -480,7 +523,7 @@ {#await loadingPromise} - + {:then value} {#if $configStore.usesRouteLayout && typeof layoutComponent === "function"} diff --git a/src/js/store/config.js b/src/js/store/config.js index 41699b8..f1ad603 100644 --- a/src/js/store/config.js +++ b/src/js/store/config.js @@ -14,7 +14,14 @@ const storeTemplate = { consoleLogErrorMessages: true, consoleLogStores: true, usesRouteLayout: true, - considerTrailingSlashOnMatchingRoute: true + considerTrailingSlashOnMatchingRoute: true, + useScroll: false, + scrollProps: { + top: 0, + left: 0, + behavior: "smooth", + timeout: 10, + }, }; const ENUM_SAVE_MODE = ["localstorage", "indexeddb", "none"]; @@ -34,9 +41,13 @@ function setConfig(config) { setConsoleLogErrorMessages(config.consoleLogErrorMessages); setConsoleLogStores(config.consoleLogStores); setUsesRouteLayout(config.usesRouteLayout); - setConsiderTrailingSlashOnMatchingRoute(config.considerTrailingSlashOnMatchingRoute); + setConsiderTrailingSlashOnMatchingRoute( + config.considerTrailingSlashOnMatchingRoute + ); setOnError(config.onError); setBeforeEnter(config.beforeEnter); + setScrollProps(config.scrollProps); + setUseScroll(config.useScroll); } function getConfig() { @@ -150,7 +161,9 @@ function getUsesRouteLayout() { // -------------------------------------------------------------------------------------- // -------------- considerTrailingSlashOnMachingRoute Property ------------------------ -function setConsiderTrailingSlashOnMachingRoute(considerTrailingSlashOnMachingRoute) { +function setConsiderTrailingSlashOnMachingRoute( + considerTrailingSlashOnMachingRoute +) { if (typeof considerTrailingSlashOnMachingRoute == "boolean") { updateStoreKey(store, { considerTrailingSlashOnMachingRoute }); } @@ -160,6 +173,41 @@ function getConsiderTrailingSlashOnMachingRoute() { return getStoreKey(store, "considerTrailingSlashOnMachingRoute"); } +// -------------------------------------------------------------------------------------- +// -------------- scrollProps Property ------------------------------------------------ + +function setScrollProps(scrollProps) { + if (typeof setScrollProps == "object") { + let sp = { + top: scrollProps.top, + left: scrollProps.left, + behavior: scrollProps.behavior, + timeout: + scrollProps.timeout && scrollProps.timeout > 10 + ? scrollProps.timeout + : 10, + }; + updateStoreKey(store, { scrollProps }); + } +} + +function getScrollProps() { + return getStoreKey(store, "scrollProps"); +} + +// -------------------------------------------------------------------------------------- +// -------------- useScroll Property -------------------------------------------------- + +function setUseScroll(useScroll) { + if (typeof useScroll == "boolean") { + updateStoreKey(store, { useScroll }); + } +} + +function getUseScroll() { + return getStoreKey(store, "useScroll"); +} + // -------------------------------------------------------------------------------------- // -------------- onError Function ---------------------------------------------------- @@ -224,6 +272,10 @@ export default { getUsesRouteLayout, setConsiderTrailingSlashOnMachingRoute, getConsiderTrailingSlashOnMachingRoute, + setScrollProps, + getScrollProps, + setUseScroll, + getUseScroll, setOnError, getOnError, setBeforeEnter, diff --git a/src/testComponents/SCR_C4.svelte b/src/testComponents/SCR_C4.svelte index f0d83c4..35ca899 100644 --- a/src/testComponents/SCR_C4.svelte +++ b/src/testComponents/SCR_C4.svelte @@ -1,9 +1,9 @@
    @@ -12,7 +12,7 @@
    -      {JSON.stringify(params)}
    +      {JSON.stringify(payload)}