{"version":3,"sources":["webpack://Navigo/webpack/universalModuleDefinition","webpack://Navigo/./src/Q.ts","webpack://Navigo/./src/constants.ts","webpack://Navigo/./src/index.ts","webpack://Navigo/./src/lifecycles.ts","webpack://Navigo/./src/middlewares/callHandler.ts","webpack://Navigo/./src/middlewares/checkForAfterHook.ts","webpack://Navigo/./src/middlewares/checkForAlreadyHook.ts","webpack://Navigo/./src/middlewares/checkForBeforeHook.ts","webpack://Navigo/./src/middlewares/checkForDeprecationMethods.ts","webpack://Navigo/./src/middlewares/checkForForceOp.ts","webpack://Navigo/./src/middlewares/checkForLeaveHook.ts","webpack://Navigo/./src/middlewares/checkForNotFoundHandler.ts","webpack://Navigo/./src/middlewares/errorOut.ts","webpack://Navigo/./src/middlewares/flushCurrent.ts","webpack://Navigo/./src/middlewares/matchPathToRegisteredRoutes.ts","webpack://Navigo/./src/middlewares/processMatches.ts","webpack://Navigo/./src/middlewares/setLocationPath.ts","webpack://Navigo/./src/middlewares/updateBrowserURL.ts","webpack://Navigo/./src/middlewares/updateState.ts","webpack://Navigo/./src/middlewares/waitingList.ts","webpack://Navigo/./src/utils.ts","webpack://Navigo/webpack/bootstrap","webpack://Navigo/webpack/runtime/define property getters","webpack://Navigo/webpack/runtime/hasOwnProperty shorthand","webpack://Navigo/webpack/runtime/make namespace object","webpack://Navigo/webpack/startup"],"names":["Q","funcs","c","done","context","idx","next","Array","isArray","splice","moveForward","if","condition","one","two","PARAMETER_REGEXP","REPLACE_VARIABLE_REGEXP","WILDCARD_REGEXP","REPLACE_WILDCARD","NOT_SURE_REGEXP","REPLACE_NOT_SURE","START_BY_SLASH_REGEXP","MATCH_REGEXP_FLAGS","DEFAULT_LINK_SELECTOR","Navigo","appRoute","options","DEFAULT_RESOLVE_OPTIONS","strategy","hash","noMatchWarning","linksSelector","self","root","current","routes","destroyed","genericHooks","isPushStateAvailable","pushStateAvailable","isWindowAvailable","windowAvailable","console","warn","clean","_checkForAHash","url","indexOf","split","composePathWithRoot","path","createRoute","handler","hooks","name","isString","String","accumulateHooks","on","RegExp","Object","keys","forEach","p","uses","as","push","resolve","to","__dirty","__waiting","undefined","instance","currentLocationPath","navigateOptions","resolveOptions","setLocationPath","matchPathToRegisteredRoutes","matches","length","processMatches","notFoundLifeCycle","waitingList","navigate","checkForDeprecationMethods","checkForForceOp","updateBrowserURL","navigateByName","data","generate","replace","off","what","filter","r","isFunction","listen","__popstateListener","__freezeListening","window","addEventListener","destroy","removeEventListener","notFound","_notFoundRoute","updatePageLinks","findLinks","link","getAttribute","hasListenerAttached","navigoHandler","e","ctrlKey","metaKey","target","tagName","toLowerCase","location","match","URL","u","pathname","search","err","parseNavigateOptions","preventDefault","stopPropagation","slice","call","document","querySelectorAll","setGenericHooks","lastResolved","route","find","result","key","includeRoot","getLinkPath","pathToMatchObject","extractGETParameters","queryString","params","parseQuery","hashString","extractHashFromURL","getCurrentLocation","getCurrentEnvURL","directMatchWithRegisteredRoutes","directMatchWithLocation","currentLocation","annotatePathWithRoot","matchRoute","addHook","type","func","getRoute","f","nameOrHandler","__markAsClean","shift","matchLocation","addBeforeHook","bind","addAfterHook","addAlreadyHook","addLeaveHook","_pathToMatchObject","_clean","_setCurrent","foundLifecycle","checkForAlreadyHook","checkForBeforeHook","callHandler","checkForAfterHook","checkForLeaveHook","checkForNotFoundHandler","notFoundHandled","concat","updateState","errorOut","flushCurrent","undefinedOrTrue","after","already","before","map","beforeHookInternal","_","d","shouldStop","force","oldMatch","leaveLoopDone","leave","runHook","newLocationVSOldMatch","someOfTheLastOnesMatch","notFoundRoute","notFoundMatch","i","nextMatch","end","value","isItUsingHash","history","historyAPIMethod","stateObj","title","setTimeout","tmp","href","fallback","s","pop","regExpResultToParams","names","reduce","index","decodeURIComponent","join","query","pairs","pair","GETParams","paramNames","pattern","full","dots","regexp","groups","pushState","obj","source","str","temp","v","h"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;ACLe,SAASA,CAAT,CACbC,KADa,EAEbC,CAFa,EAGbC,IAHa,EAIb;AACA,MAAMC,OAAO,GAAGF,CAAC,IAAI,EAArB;AACA,MAAIG,GAAG,GAAG,CAAV;;AAEA,GAAC,SAASC,IAAT,GAAgB;AACf,QAAI,CAACL,KAAK,CAACI,GAAD,CAAV,EAAiB;AACf,UAAIF,IAAJ,EAAU;AACRA,YAAI,CAACC,OAAD,CAAJ;AACD;;AACD;AACD;;AACD,QAAIG,KAAK,CAACC,OAAN,CAAcP,KAAK,CAACI,GAAD,CAAnB,CAAJ,EAA+B;AAC7BJ,WAAK,CAACQ,MAAN,OAAAR,KAAK,GACHI,GADG,EAEH,CAFG,SAGCJ,KAAK,CAACI,GAAD,CAAL,CAAW,CAAX,EAAcD,OAAd,IAAyBH,KAAK,CAACI,GAAD,CAAL,CAAW,CAAX,CAAzB,GAAyCJ,KAAK,CAACI,GAAD,CAAL,CAAW,CAAX,CAH1C,EAAL;AAKAC,UAAI;AACL,KAPD,MAOO;AACL;AACA;AACCL,WAAK,CAACI,GAAD,CAAN,CAAyBD,OAAzB,EAAkC,UAACM,WAAD,EAAiB;AACjD,YAAI,OAAOA,WAAP,KAAuB,WAAvB,IAAsCA,WAAW,KAAK,IAA1D,EAAgE;AAC9DL,aAAG,IAAI,CAAP;AACAC,cAAI;AACL,SAHD,MAGO,IAAIH,IAAJ,EAAU;AACfA,cAAI,CAACC,OAAD,CAAJ;AACD;AACF,OAPD;AAQD;AACF,GA1BD;AA2BD;;AAEDJ,CAAC,CAACW,EAAF,GAAO,UAAUC,SAAV,EAA+BC,GAA/B,EAAoCC,GAApC,EAAyC;AAC9C,MAAI,CAACP,KAAK,CAACC,OAAN,CAAcK,GAAd,CAAL,EAAyBA,GAAG,GAAG,CAACA,GAAD,CAAN;AACzB,MAAI,CAACN,KAAK,CAACC,OAAN,CAAcM,GAAd,CAAL,EAAyBA,GAAG,GAAG,CAACA,GAAD,CAAN;AACzB,SAAO,CAACF,SAAD,EAAYC,GAAZ,EAAiBC,GAAjB,CAAP;AACD,CAJD,C;;;;;;;;;;;;;;;;;;;;;AC1CO,IAAMC,gBAAgB,GAAG,cAAzB;AACA,IAAMC,uBAAuB,GAAG,SAAhC;AACA,IAAMC,eAAe,GAAG,KAAxB;AACA,IAAMC,gBAAgB,GAAG,SAAzB;AACA,IAAMC,eAAe,GAAG,OAAxB;AACA,IAAMC,gBAAgB,GAAG,YAAzB;AACA,IAAMC,qBAAqB,GAAG,UAA9B;AACA,IAAMC,kBAAkB,GAAG,EAA3B,C;;;;;;;;;;;;;;;;;;;;;;;;;;ACKP;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA,IAAMC,qBAAqB,GAAG,eAA9B;AAEe,SAASC,MAAT,CAAgBC,QAAhB,EAAmCC,OAAnC,EAA4D;AACzE,MAAIC,uBAAsC,GAAGD,OAAO,IAAI;AACtDE,YAAQ,EAAE,KAD4C;AAEtDC,QAAI,EAAE,KAFgD;AAGtDC,kBAAc,EAAE,KAHsC;AAItDC,iBAAa,EAAER;AAJuC,GAAxD;AAMA,MAAIS,IAAkB,GAAG,IAAzB;AACA,MAAIC,IAAI,GAAG,GAAX;AACA,MAAIC,OAAgB,GAAG,IAAvB;AACA,MAAIC,MAAe,GAAG,EAAtB;AACA,MAAIC,SAAS,GAAG,KAAhB;AACA,MAAIC,YAAJ;AAEA,MAAMC,oBAAoB,GAAGC,0DAAkB,EAA/C;AACA,MAAMC,iBAAiB,GAAGC,uDAAe,EAAzC;;AAEA,MAAI,CAAChB,QAAL,EAAe;AACbiB,WAAO,CAACC,IAAR,CACE,0FADF;AAGD,GAJD,MAIO;AACLV,QAAI,GAAGW,6CAAK,CAACnB,QAAD,CAAZ;AACD;;AAED,WAASoB,cAAT,CAAwBC,GAAxB,EAA6C;AAC3C,QAAIA,GAAG,CAACC,OAAJ,CAAY,GAAZ,KAAoB,CAAxB,EAA2B;AACzB,UAAIpB,uBAAuB,CAACE,IAAxB,KAAiC,IAArC,EAA2C;AACzCiB,WAAG,GAAGA,GAAG,CAACE,KAAJ,CAAU,GAAV,EAAe,CAAf,KAAqB,GAA3B;AACD,OAFD,MAEO;AACLF,WAAG,GAAGA,GAAG,CAACE,KAAJ,CAAU,GAAV,EAAe,CAAf,CAAN;AACD;AACF;;AACD,WAAOF,GAAP;AACD;;AACD,WAASG,mBAAT,CAA6BC,IAA7B,EAA2C;AACzC,WAAON,6CAAK,CAAIX,IAAJ,SAAYW,6CAAK,CAACM,IAAD,CAAjB,CAAZ;AACD;;AACD,WAASC,WAAT,CACED,IADF,EAEEE,OAFF,EAGEC,KAHF,EAIEC,IAJF,EAKS;AACPJ,QAAI,GAAGK,gDAAQ,CAACL,IAAD,CAAR,GAAiBD,mBAAmB,CAACC,IAAD,CAApC,GAAuDA,IAA9D;AACA,WAAO;AACLI,UAAI,EAAEA,IAAI,IAAIV,6CAAK,CAACY,MAAM,CAACN,IAAD,CAAP,CADd;AAELA,UAAI,EAAJA,IAFK;AAGLE,aAAO,EAAPA,OAHK;AAILC,WAAK,EAAEI,uDAAe,CAACJ,KAAD;AAJjB,KAAP;AAMD,GAnDwE,CAqDzE;;;AACA,WAASK,EAAT,CACER,IADF,EAEEE,OAFF,EAGEC,KAHF,EAIE;AAAA;;AACA,QAAI,OAAOH,IAAP,KAAgB,QAAhB,IAA4B,EAAEA,IAAI,YAAYS,MAAlB,CAAhC,EAA2D;AACzDC,YAAM,CAACC,IAAP,CAAYX,IAAZ,EAAkBY,OAAlB,CAA0B,UAACC,CAAD,EAAO;AAC/B,YAAI,OAAOb,IAAI,CAACa,CAAD,CAAX,KAAmB,UAAvB,EAAmC;AACjC,eAAI,CAACL,EAAL,CAAQK,CAAR,EAAWb,IAAI,CAACa,CAAD,CAAf;AACD,SAFD,MAEO;AAAA,wBACsCb,IAAI,CAACa,CAAD,CAD1C;AAAA,cACSX,QADT,WACGY,IADH;AAAA,cACsBV,IADtB,WACkBW,EADlB;AAAA,cAC4BZ,MAD5B,WAC4BA,KAD5B;AAELlB,gBAAM,CAAC+B,IAAP,CAAYf,WAAW,CAACY,CAAD,EAAIX,QAAJ,EAAa,CAACf,YAAD,EAAegB,MAAf,CAAb,EAAoCC,IAApC,CAAvB;AACD;AACF,OAPD;AAQA,aAAO,IAAP;AACD,KAVD,MAUO,IAAI,OAAOJ,IAAP,KAAgB,UAApB,EAAgC;AACrCG,WAAK,GAAGD,OAAR;AACAA,aAAO,GAAGF,IAAV;AACAA,UAAI,GAAGjB,IAAP;AACD;;AACDE,UAAM,CAAC+B,IAAP,CACEf,WAAW,CAACD,IAAD,EAA0BE,OAA1B,EAAmC,CAACf,YAAD,EAAegB,KAAf,CAAnC,CADb;AAGA,WAAO,IAAP;AACD;;AACD,WAASc,OAAT,CAAiBC,EAAjB,EAA8B1C,OAA9B,EAAyE;AACvE,QAAIM,IAAI,CAACqC,OAAT,EAAkB;AAChBrC,UAAI,CAACsC,SAAL,CAAeJ,IAAf,CAAoB;AAAA,eAAMlC,IAAI,CAACmC,OAAL,CAAaC,EAAb,EAAiB1C,OAAjB,CAAN;AAAA,OAApB;;AACA;AACD,KAHD,MAGO;AACLM,UAAI,CAACqC,OAAL,GAAe,IAAf;AACD;;AACDD,MAAE,GAAGA,EAAE,GAAMxB,6CAAK,CAACX,IAAD,CAAX,SAAqBW,6CAAK,CAACwB,EAAD,CAA1B,GAAmCG,SAA1C,CAPuE,CAQvE;;AACA,QAAMnE,OAAiB,GAAG;AACxBoE,cAAQ,EAAExC,IADc;AAExBoC,QAAE,EAAFA,EAFwB;AAGxBK,yBAAmB,EAAEL,EAHG;AAIxBM,qBAAe,EAAE,EAJO;AAKxBC,oBAAc,eAAOhD,uBAAP,EAAmCD,OAAnC;AALU,KAA1B;AAOA1B,+CAAC,CACC,CACE4E,iEADF,EAEEC,6EAFF,EAGE7E,0CAAA,CACE;AAAA,UAAG8E,OAAH,QAAGA,OAAH;AAAA,aAA2BA,OAAO,IAAIA,OAAO,CAACC,MAAR,GAAiB,CAAvD;AAAA,KADF,EAEEC,gEAFF,EAGEC,0DAHF,CAHF,CADD,EAUC7E,OAVD,EAWC8E,6DAXD,CAAD;AAcA,WAAO9E,OAAO,CAAC0E,OAAR,GAAkB1E,OAAO,CAAC0E,OAA1B,GAAoC,KAA3C;AACD;;AACD,WAASK,QAAT,CAAkBf,EAAlB,EAA8BM,eAA9B,EAAuE;AACrE;AACA,QAAI1C,IAAI,CAACqC,OAAT,EAAkB;AAChBrC,UAAI,CAACsC,SAAL,CAAeJ,IAAf,CAAoB;AAAA,eAAMlC,IAAI,CAACmD,QAAL,CAAcf,EAAd,EAAkBM,eAAlB,CAAN;AAAA,OAApB;;AACA;AACD,KAHD,MAGO;AACL1C,UAAI,CAACqC,OAAL,GAAe,IAAf;AACD;;AACDD,MAAE,GAAMxB,6CAAK,CAACX,IAAD,CAAX,SAAqBW,6CAAK,CAACwB,EAAD,CAA5B;AACA,QAAMhE,OAAiB,GAAG;AACxBoE,cAAQ,EAAExC,IADc;AAExBoC,QAAE,EAAFA,EAFwB;AAGxBM,qBAAe,EAAEA,eAAe,IAAI,EAHZ;AAIxBC,oBAAc,EACZD,eAAe,IAAIA,eAAe,CAACC,cAAnC,GACID,eAAe,CAACC,cADpB,GAEIhD,uBAPkB;AAQxB8C,yBAAmB,EAAE5B,cAAc,CAACuB,EAAD;AARX,KAA1B;AAUApE,+CAAC,CACC,CACEoF,4EADF,EAEEC,iEAFF,EAGER,6EAHF,EAIE7E,0CAAA,CACE;AAAA,UAAG8E,OAAH,SAAGA,OAAH;AAAA,aAA2BA,OAAO,IAAIA,OAAO,CAACC,MAAR,GAAiB,CAAvD;AAAA,KADF,EAEEC,gEAFF,EAGEC,0DAHF,CAJF,EASEK,kEATF,EAUEJ,6DAVF,CADD,EAaC9E,OAbD,EAcC8E,6DAdD,CAAD;AAgBD;;AACD,WAASK,cAAT,CACEjC,IADF,EAEEkC,IAFF,EAGE9D,OAHF,EAIW;AACT,QAAMoB,GAAG,GAAG2C,QAAQ,CAACnC,IAAD,EAAOkC,IAAP,CAApB;;AACA,QAAI1C,GAAG,KAAK,IAAZ,EAAkB;AAChBqC,cAAQ,CAACrC,GAAG,CAAC4C,OAAJ,CAAY,IAAI/B,MAAJ,SAAkB1B,IAAlB,CAAZ,EAAuC,EAAvC,CAAD,EAA6CP,OAA7C,CAAR;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;;AACD,WAASiE,GAAT,CAAaC,IAAb,EAA+C;AAC7C,SAAKzD,MAAL,GAAcA,MAAM,GAAGA,MAAM,CAAC0D,MAAP,CAAc,UAACC,CAAD,EAAO;AAC1C,UAAIvC,gDAAQ,CAACqC,IAAD,CAAZ,EAAoB;AAClB,eAAOhD,6CAAK,CAACkD,CAAC,CAAC5C,IAAH,CAAL,KAA4BN,6CAAK,CAACgD,IAAD,CAAxC;AACD,OAFD,MAEO,IAAIG,kDAAU,CAACH,IAAD,CAAd,EAAsB;AAC3B,eAAOA,IAAI,KAAKE,CAAC,CAAC1C,OAAlB;AACD;;AACD,aAAOI,MAAM,CAACsC,CAAC,CAAC5C,IAAH,CAAN,KAAmBM,MAAM,CAACoC,IAAD,CAAhC;AACD,KAPsB,CAAvB;AAQA,WAAO,IAAP;AACD;;AACD,WAASI,MAAT,GAAkB;AAChB,QAAI1D,oBAAJ,EAA0B;AACxB,WAAK2D,kBAAL,GAA0B,YAAM;AAC9B,YAAI,CAACjE,IAAI,CAACkE,iBAAV,EAA6B;AAC3B/B,iBAAO;AACR;AACF,OAJD;;AAKAgC,YAAM,CAACC,gBAAP,CAAwB,UAAxB,EAAoC,KAAKH,kBAAzC;AACD;AACF;;AACD,WAASI,OAAT,GAAmB;AACjB,SAAKlE,MAAL,GAAcA,MAAM,GAAG,EAAvB;;AACA,QAAIG,oBAAJ,EAA0B;AACxB6D,YAAM,CAACG,mBAAP,CAA2B,UAA3B,EAAuC,KAAKL,kBAA5C;AACD;;AACD,SAAK7D,SAAL,GAAiBA,SAAS,GAAG,IAA7B;AACD;;AACD,WAASmE,QAAT,CAAkBnD,OAAlB,EAA2BC,KAA3B,EAA+C;AAC7CrB,QAAI,CAACwE,cAAL,GAAsBrD,WAAW,CAC/B,GAD+B,EAE/BC,OAF+B,EAG/B,CAACf,YAAD,EAAegB,KAAf,CAH+B,EAI/B,eAJ+B,CAAjC;AAMA,WAAO,IAAP;AACD;;AACD,WAASoD,eAAT,GAA2B;AACzB,QAAI,CAACjE,iBAAL,EAAwB;AACxBkE,aAAS,GAAG5C,OAAZ,CAAoB,UAAC6C,IAAD,EAAU;AAC5B,UACE,YAAYA,IAAI,CAACC,YAAL,CAAkB,aAAlB,CAAZ,IACA,aAAaD,IAAI,CAACC,YAAL,CAAkB,QAAlB,CAFf,EAGE;AACA,YAAID,IAAI,CAACE,mBAAT,EAA8B;AAC5BF,cAAI,CAACL,mBAAL,CAAyB,OAAzB,EAAkCK,IAAI,CAACG,aAAvC;AACD;;AACD;AACD;;AACD,UAAI,CAACH,IAAI,CAACE,mBAAV,EAA+B;AAC7BF,YAAI,CAACE,mBAAL,GAA2B,IAA3B;;AACAF,YAAI,CAACG,aAAL,GAAqB,UAAUC,CAAV,EAAa;AAChC,cACE,CAACA,CAAC,CAACC,OAAF,IAAaD,CAAC,CAACE,OAAhB,KACAF,CAAC,CAACG,MAAF,CAASC,OAAT,CAAiBC,WAAjB,OAAmC,GAFrC,EAGE;AACA,mBAAO,KAAP;AACD;;AACD,cAAIC,QAAQ,GAAGV,IAAI,CAACC,YAAL,CAAkB,MAAlB,CAAf;;AACA,cAAI,OAAOS,QAAP,KAAoB,WAApB,IAAmCA,QAAQ,KAAK,IAApD,EAA0D;AACxD,mBAAO,KAAP;AACD,WAV+B,CAWhC;;;AACA,cAAIA,QAAQ,CAACC,KAAT,CAAe,eAAf,KAAmC,OAAOC,GAAP,KAAe,WAAtD,EAAmE;AACjE,gBAAI;AACF,kBAAMC,CAAC,GAAG,IAAID,GAAJ,CAAQF,QAAR,CAAV;AACAA,sBAAQ,GAAGG,CAAC,CAACC,QAAF,GAAaD,CAAC,CAACE,MAA1B;AACD,aAHD,CAGE,OAAOC,GAAP,EAAY,CAAE;AACjB;;AACD,cAAMjG,OAAO,GAAGkG,4DAAoB,CAClCjB,IAAI,CAACC,YAAL,CAAkB,qBAAlB,CADkC,CAApC;;AAIA,cAAI,CAACxE,SAAL,EAAgB;AACd2E,aAAC,CAACc,cAAF;AACAd,aAAC,CAACe,eAAF;AACA9F,gBAAI,CAACmD,QAAL,CAAcvC,6CAAK,CAACyE,QAAD,CAAnB,EAA+B3F,OAA/B;AACD;AACF,SA3BD;;AA4BAiF,YAAI,CAACP,gBAAL,CAAsB,OAAtB,EAA+BO,IAAI,CAACG,aAApC;AACD;AACF,KA1CD;AA2CA,WAAO9E,IAAP;AACD;;AACD,WAAS0E,SAAT,GAAqB;AACnB,QAAIlE,iBAAJ,EAAuB;AACrB,aAAO,GAAGuF,KAAH,CAASC,IAAT,CACLC,QAAQ,CAACC,gBAAT,CACEvG,uBAAuB,CAACI,aAAxB,IAAyCR,qBAD3C,CADK,CAAP;AAKD;;AACD,WAAO,EAAP;AACD;;AACD,WAASoF,IAAT,CAAczD,IAAd,EAA4B;AAC1B,iBAAWjB,IAAX,SAAmBW,6CAAK,CAACM,IAAD,CAAxB;AACD;;AACD,WAASiF,eAAT,CAAyB9E,KAAzB,EAA4C;AAC1ChB,gBAAY,GAAGgB,KAAf;AACA,WAAO,IAAP;AACD;;AACD,WAAS+E,YAAT,GAAwC;AACtC,WAAOlG,OAAP;AACD;;AACD,WAASuD,QAAT,CACEnC,IADF,EAEEkC,IAFF,EAGE9D,OAHF,EAIU;AACR,QAAM2G,KAAK,GAAGlG,MAAM,CAACmG,IAAP,CAAY,UAACxC,CAAD;AAAA,aAAOA,CAAC,CAACxC,IAAF,KAAWA,IAAlB;AAAA,KAAZ,CAAd;AACA,QAAIiF,MAAM,GAAG,IAAb;;AACA,QAAIF,KAAJ,EAAW;AACTE,YAAM,GAAGF,KAAK,CAACnF,IAAf;;AACA,UAAIsC,IAAJ,EAAU;AACR,aAAK,IAAIgD,GAAT,IAAgBhD,IAAhB,EAAsB;AACpB+C,gBAAM,GAAGA,MAAM,CAAC7C,OAAP,CAAe,MAAM8C,GAArB,EAA0BhD,IAAI,CAACgD,GAAD,CAA9B,CAAT;AACD;AACF;;AACDD,YAAM,GAAG,CAACA,MAAM,CAACjB,KAAP,CAAa,KAAb,CAAD,SAA2BiB,MAA3B,GAAsCA,MAA/C;AACD;;AACD,QAAIA,MAAM,IAAI7G,OAAV,IAAqB,CAACA,OAAO,CAAC+G,WAAlC,EAA+C;AAC7CF,YAAM,GAAGA,MAAM,CAAC7C,OAAP,CAAe,IAAI/B,MAAJ,QAAgB1B,IAAhB,CAAf,EAAwC,EAAxC,CAAT;AACD;;AACD,WAAOsG,MAAP;AACD;;AACD,WAASG,WAAT,CAAqB/B,IAArB,EAA2B;AACzB,WAAOA,IAAI,CAACC,YAAL,CAAkB,MAAlB,CAAP;AACD;;AACD,WAAS+B,iBAAT,CAA2BzF,IAA3B,EAAgD;AAAA,gCACnB0F,4DAAoB,CAAChG,6CAAK,CAACM,IAAD,CAAN,CADD;AAAA,QACvCJ,GADuC;AAAA,QAClC+F,WADkC;;AAE9C,QAAMC,MAAM,GAAGD,WAAW,KAAK,EAAhB,GAAqB,IAArB,GAA4BE,kDAAU,CAACF,WAAD,CAArD;AACA,QAAMG,UAAU,GAAGC,0DAAkB,CAAC/F,IAAD,CAArC;AACA,QAAMmF,KAAK,GAAGlF,WAAW,CAACL,GAAD,EAAM,YAAM,CAAE,CAAd,EAAgB,CAACT,YAAD,CAAhB,EAAgCS,GAAhC,CAAzB;AACA,WAAO;AACLA,SAAG,EAAHA,GADK;AAEL+F,iBAAW,EAAXA,WAFK;AAGLG,gBAAU,EAAVA,UAHK;AAILX,WAAK,EAALA,KAJK;AAKL7C,UAAI,EAAE,IALD;AAMLsD,YAAM,EAAEA;AANH,KAAP;AAQD;;AACD,WAASI,kBAAT,GAAqC;AACnC,WAAOP,iBAAiB,CACtB/F,6CAAK,CAACuG,wDAAgB,CAAClH,IAAD,CAAjB,CAAL,CAA8ByD,OAA9B,CAAsC,IAAI/B,MAAJ,OAAe1B,IAAf,CAAtC,EAA8D,EAA9D,CADsB,CAAxB;AAGD;;AACD,WAASmH,+BAAT,CAAyClG,IAAzC,EAAwE;AACtE,QAAM9C,OAAiB,GAAG;AACxBoE,cAAQ,EAAExC,IADc;AAExByC,yBAAmB,EAAEvB,IAFG;AAGxBkB,QAAE,EAAElB,IAHoB;AAIxBwB,qBAAe,EAAE,EAJO;AAKxBC,oBAAc,EAAEhD;AALQ,KAA1B;AAOAkD,qFAA2B,CAACzE,OAAD,EAAU,YAAM,CAAE,CAAlB,CAA3B;AACA,WAAOA,OAAO,CAAC0E,OAAR,GAAkB1E,OAAO,CAAC0E,OAA1B,GAAoC,KAA3C;AACD;;AACD,WAASuE,uBAAT,CACEnG,IADF,EAEEoG,eAFF,EAGEC,oBAHF,EAIiB;AACf,QACE,OAAOD,eAAP,KAA2B,WAA3B,KACC,OAAOC,oBAAP,KAAgC,WAAhC,IAA+CA,oBADhD,CADF,EAGE;AACAD,qBAAe,GAAGrG,mBAAmB,CAACqG,eAAD,CAArC;AACD;;AACD,QAAMlJ,OAAiB,GAAG;AACxBoE,cAAQ,EAAExC,IADc;AAExBoC,QAAE,EAAEkF,eAFoB;AAGxB7E,yBAAmB,EAAE6E;AAHG,KAA1B;AAKA1E,yEAAe,CAACxE,OAAD,EAAU,YAAM,CAAE,CAAlB,CAAf;;AACA,QAAI,OAAO8C,IAAP,KAAgB,QAApB,EAA8B;AAC5BA,UAAI,GACF,OAAOqG,oBAAP,KAAgC,WAAhC,IAA+CA,oBAA/C,GACItG,mBAAmB,CAACC,IAAD,CADvB,GAEIA,IAHN;AAID;;AACD,QAAMoE,KAAK,GAAGkC,kDAAU,CAACpJ,OAAD,EAAU;AAChCkD,UAAI,EAAEE,MAAM,CAACN,IAAD,CADoB;AAEhCA,UAAI,EAAJA,IAFgC;AAGhCE,aAAO,EAAE,mBAAM,CAAE,CAHe;AAIhCC,WAAK,EAAE;AAJyB,KAAV,CAAxB;AAMA,WAAOiE,KAAK,GAAGA,KAAH,GAAW,KAAvB;AACD;;AACD,WAASmC,OAAT,CACEC,IADF,EAEErB,KAFF,EAGEsB,IAHF,EAIY;AACV,QAAI,OAAOtB,KAAP,KAAiB,QAArB,EAA+B;AAC7BA,WAAK,GAAGuB,QAAQ,CAACvB,KAAD,CAAhB;AACD;;AACD,QAAIA,KAAJ,EAAW;AACT,UAAI,CAACA,KAAK,CAAChF,KAAN,CAAYqG,IAAZ,CAAL,EAAwBrB,KAAK,CAAChF,KAAN,CAAYqG,IAAZ,IAAoB,EAApB;AACxBrB,WAAK,CAAChF,KAAN,CAAYqG,IAAZ,EAAkBxF,IAAlB,CAAuByF,IAAvB;AACA,aAAO,YAAM;AACVtB,aAAD,CAAiBhF,KAAjB,CAAuBqG,IAAvB,IAAgCrB,KAAD,CAAiBhF,KAAjB,CAAuBqG,IAAvB,EAA6B7D,MAA7B,CAC7B,UAACgE,CAAD;AAAA,iBAAOA,CAAC,KAAKF,IAAb;AAAA,SAD6B,CAA/B;AAGD,OAJD;AAKD,KARD,MAQO;AACLjH,aAAO,CAACC,IAAR,4BAAsC0F,KAAtC;AACD;;AACD,WAAO,YAAM,CAAE,CAAf;AACD;;AACD,WAASuB,QAAT,CAAkBE,aAAlB,EAAuE;AACrE,QAAI,OAAOA,aAAP,KAAyB,QAA7B,EAAuC;AACrC,aAAO3H,MAAM,CAACmG,IAAP,CAAY,UAACxC,CAAD;AAAA,eAAOA,CAAC,CAACxC,IAAF,KAAWL,mBAAmB,CAAC6G,aAAD,CAArC;AAAA,OAAZ,CAAP;AACD;;AACD,WAAO3H,MAAM,CAACmG,IAAP,CAAY,UAACxC,CAAD;AAAA,aAAOA,CAAC,CAAC1C,OAAF,KAAc0G,aAArB;AAAA,KAAZ,CAAP;AACD;;AACD,WAASC,aAAT,CAAuB3J,OAAvB,EAA0C;AACxCA,WAAO,CAACoE,QAAR,CAAiBH,OAAjB,GAA2B,KAA3B;;AACA,QAAIjE,OAAO,CAACoE,QAAR,CAAiBF,SAAjB,CAA2BS,MAA3B,GAAoC,CAAxC,EAA2C;AACzC3E,aAAO,CAACoE,QAAR,CAAiBF,SAAjB,CAA2B0F,KAA3B;AACD;AACF;;AAED,OAAK/H,IAAL,GAAYA,IAAZ;AACA,OAAKE,MAAL,GAAcA,MAAd;AACA,OAAKC,SAAL,GAAiBA,SAAjB;AACA,OAAKF,OAAL,GAAeA,OAAf;AACA,OAAKgE,iBAAL,GAAyB,KAAzB;AACA,OAAK5B,SAAL,GAAiB,EAAjB;AACA,OAAKD,OAAL,GAAe,KAAf;AACA,OAAK0F,aAAL,GAAqBA,aAArB;AAEA,OAAKrG,EAAL,GAAUA,EAAV;AACA,OAAKiC,GAAL,GAAWA,GAAX;AACA,OAAKxB,OAAL,GAAeA,OAAf;AACA,OAAKgB,QAAL,GAAgBA,QAAhB;AACA,OAAKI,cAAL,GAAsBA,cAAtB;AACA,OAAKc,OAAL,GAAeA,OAAf;AACA,OAAKE,QAAL,GAAgBA,QAAhB;AACA,OAAKE,eAAL,GAAuBA,eAAvB;AACA,OAAKE,IAAL,GAAYA,IAAZ;AACA,OAAKtD,KAAL,GAAa8E,eAAb;;AACA,OAAKS,oBAAL,GAA4B,UAAC9F,GAAD;AAAA,WAC1B8F,4DAAoB,CAAC/F,cAAc,CAACC,GAAD,CAAf,CADM;AAAA,GAA5B;;AAEA,OAAKsF,YAAL,GAAoBA,YAApB;AACA,OAAK3C,QAAL,GAAgBA,QAAhB;AACA,OAAKiD,WAAL,GAAmBA,WAAnB;AACA,OAAKpB,KAAL,GAAa8B,+BAAb;AACA,OAAKa,aAAL,GAAqBZ,uBAArB;AACA,OAAKH,kBAAL,GAA0BA,kBAA1B;AACA,OAAKgB,aAAL,GAAqBT,OAAO,CAACU,IAAR,CAAa,IAAb,EAAmB,QAAnB,CAArB;AACA,OAAKC,YAAL,GAAoBX,OAAO,CAACU,IAAR,CAAa,IAAb,EAAmB,OAAnB,CAApB;AACA,OAAKE,cAAL,GAAsBZ,OAAO,CAACU,IAAR,CAAa,IAAb,EAAmB,SAAnB,CAAtB;AACA,OAAKG,YAAL,GAAoBb,OAAO,CAACU,IAAR,CAAa,IAAb,EAAmB,OAAnB,CAApB;AACA,OAAKP,QAAL,GAAgBA,QAAhB;AACA,OAAKW,kBAAL,GAA0B5B,iBAA1B;AACA,OAAK6B,MAAL,GAAc5H,yCAAd;AACA,OAAKC,cAAL,GAAsBA,cAAtB;;AACA,OAAK4H,WAAL,GAAmB,UAACvK,CAAD;AAAA,WAAQgC,OAAO,GAAGF,IAAI,CAACE,OAAL,GAAehC,CAAjC;AAAA,GAAnB;;AAEA8F,QAAM,CAACgC,IAAP,CAAY,IAAZ;AACAvB,iBAAe,CAACuB,IAAhB,CAAqB,IAArB;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;AC3cD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,IAAM0C,cAAc,GAAG,CAC5BC,qEAD4B,EAE5BC,oEAF4B,EAG5BC,6DAH4B,EAI5BC,mEAJ4B,CAAvB;AAOA,IAAM7F,iBAAiB,GAAG,CAC/B8F,mEAD+B,EAE/BC,yEAF+B,EAG/BhL,0CAAA,CACE;AAAA,MAAGiL,eAAH,QAAGA,eAAH;AAAA,SAAmCA,eAAnC;AAAA,CADF,EAEEP,cAAc,CAACQ,MAAf,CAAsB,CAACC,6DAAD,CAAtB,CAFF,EAGE,CAACC,0DAAD,EAAWC,8DAAX,CAHF,CAH+B,CAA1B,C;;;;;;;;;;;;;;;AClBP;AAEe,SAASR,WAAT,CAAqBzK,OAArB,EAAwCD,IAAxC,EAA8C;AAC3D,MAAImL,uDAAe,CAAClL,OAAO,CAACsE,eAAT,EAA0B,aAA1B,CAAnB,EAA6D;AAC3DtE,WAAO,CAACkH,KAAR,CAAce,KAAd,CAAoBjF,OAApB,CAA4BhD,OAAO,CAACkH,KAApC;AACD;;AACDlH,SAAO,CAACoE,QAAR,CAAiBiC,eAAjB;AACAtG,MAAI;AACL,C;;;;;;;;;;;;;;;ACRD;AAEe,SAAS2K,iBAAT,CAA2B1K,OAA3B,EAA8CD,IAA9C,EAAoD;AACjE,MACEC,OAAO,CAACkH,KAAR,CAAce,KAAd,CAAoBhF,KAApB,IACAjD,OAAO,CAACkH,KAAR,CAAce,KAAd,CAAoBhF,KAApB,CAA0BkI,KAD1B,IAEAD,uDAAe,CAAClL,OAAO,CAACsE,eAAT,EAA0B,WAA1B,CAHjB,EAIE;AACAtE,WAAO,CAACkH,KAAR,CAAce,KAAd,CAAoBhF,KAApB,CAA0BkI,KAA1B,CAAgCzH,OAAhC,CAAwC,UAAC+F,CAAD;AAAA,aAAOA,CAAC,CAACzJ,OAAO,CAACkH,KAAT,CAAR;AAAA,KAAxC;AACD;;AACDnH,MAAI;AACL,C;;;;;;;;;;;;;;;ACXD;AAEe,SAASwK,mBAAT,CAA6BvK,OAA7B,EAAgDD,IAAhD,EAAsD;AACnE,MAAM+B,OAAO,GAAG9B,OAAO,CAACoE,QAAR,CAAiB4D,YAAjB,EAAhB;;AACA,MACElG,OAAO,IACPA,OAAO,CAAC,CAAD,CADP,IAEAA,OAAO,CAAC,CAAD,CAAP,CAAWmG,KAAX,KAAqBjI,OAAO,CAACkH,KAAR,CAAce,KAFnC,IAGAnG,OAAO,CAAC,CAAD,CAAP,CAAWY,GAAX,KAAmB1C,OAAO,CAACkH,KAAR,CAAcxE,GAHjC,IAIAZ,OAAO,CAAC,CAAD,CAAP,CAAW2G,WAAX,KAA2BzI,OAAO,CAACkH,KAAR,CAAcuB,WAL3C,EAME;AACA3G,WAAO,CAAC4B,OAAR,CAAgB,UAAC5D,CAAD,EAAO;AACrB,UAAIA,CAAC,CAACmI,KAAF,CAAQhF,KAAR,IAAiBnD,CAAC,CAACmI,KAAF,CAAQhF,KAAR,CAAcmI,OAAnC,EAA4C;AAC1C,YAAIF,uDAAe,CAAClL,OAAO,CAACsE,eAAT,EAA0B,WAA1B,CAAnB,EAA2D;AACzDxE,WAAC,CAACmI,KAAF,CAAQhF,KAAR,CAAcmI,OAAd,CAAsB1H,OAAtB,CAA8B,UAAC+F,CAAD;AAAA,mBAAOA,CAAC,CAACzJ,OAAO,CAACkH,KAAT,CAAR;AAAA,WAA9B;AACD;AACF;AACF,KAND;AAOAnH,QAAI,CAAC,KAAD,CAAJ;AACA;AACD;;AACDA,MAAI;AACL,C;;;;;;;;;;;;;;;;ACtBD;AACA;AAEe,SAASyK,kBAAT,CAA4BxK,OAA5B,EAA+CD,IAA/C,EAAqD;AAClE,MACEC,OAAO,CAACkH,KAAR,CAAce,KAAd,CAAoBhF,KAApB,IACAjD,OAAO,CAACkH,KAAR,CAAce,KAAd,CAAoBhF,KAApB,CAA0BoI,MAD1B,IAEAH,uDAAe,CAAClL,OAAO,CAACsE,eAAT,EAA0B,WAA1B,CAHjB,EAIE;AACA1E,+CAAC,CACCI,OAAO,CAACkH,KAAR,CAAce,KAAd,CAAoBhF,KAApB,CAA0BoI,MAA1B,CACGC,GADH,CACO,UAAC7B,CAAD,EAAO;AACV;AACA,aAAO,SAAS8B,kBAAT,CAA4BC,CAA5B,EAA+BC,CAA/B,EAAkC;AACvC,eAAOhC,CAAC,CAAC,UAACiC,UAAD,EAAgB;AACvB,cAAIA,UAAU,KAAK,KAAnB,EAA0B;AACxB1L,mBAAO,CAACoE,QAAR,CAAiBuF,aAAjB,CAA+B3J,OAA/B;AACD,WAFD,MAEO;AACLyL,aAAC;AACF;AACF,SANO,EAMLzL,OAAO,CAACkH,KANH,CAAR;AAOD,OARD;AASD,KAZH,EAaG4D,MAbH,CAaU,CAAC;AAAA,aAAM/K,IAAI,EAAV;AAAA,KAAD,CAbV,CADD,CAAD;AAgBD,GArBD,MAqBO;AACLA,QAAI;AACL;AACF,C;;;;;;;;;;;;;;AC3Bc,SAASiF,0BAAT,CAAoChF,OAApC,EAAuDD,IAAvD,EAA6D;AAC1E,MAAIC,OAAO,CAACsE,eAAZ,EAA6B;AAC3B,QAAI,OAAOtE,OAAO,CAACsE,eAAR,CAAwB,eAAxB,CAAP,KAAoD,WAAxD,EAAqE;AACnEhC,aAAO,CAACC,IAAR;AAGD;;AACD,QAAI,OAAOvC,OAAO,CAACsE,eAAR,CAAwB,QAAxB,CAAP,KAA6C,WAAjD,EAA8D;AAC5DhC,aAAO,CAACC,IAAR;AACD;AACF;;AACDxC,MAAI;AACL,C;;;;;;;;;;;;;;ACZc,SAASkF,eAAT,CAAyBjF,OAAzB,EAA4CD,IAA5C,EAAkD;AAC/D,MAAIC,OAAO,CAACsE,eAAR,CAAwBqH,KAAxB,KAAkC,IAAtC,EAA4C;AAC1C3L,WAAO,CAACoE,QAAR,CAAiBiG,WAAjB,CAA6B,CAC3BrK,OAAO,CAACoE,QAAR,CAAiB+F,kBAAjB,CAAoCnK,OAAO,CAACgE,EAA5C,CAD2B,CAA7B;;AAGAjE,QAAI,CAAC,KAAD,CAAJ;AACD,GALD,MAKO;AACLA,QAAI;AACL;AACF,C;;;;;;;;;;;;;;;;ACVD;AACA;AAEe,SAAS4K,iBAAT,CAA2B3K,OAA3B,EAA8CD,IAA9C,EAAoD;AACjE,MAAMqE,QAAQ,GAAGpE,OAAO,CAACoE,QAAzB;;AACA,MAAI,CAACA,QAAQ,CAAC4D,YAAT,EAAL,EAA8B;AAC5BjI,QAAI;AACJ;AACD;;AACDH,6CAAC,CACCwE,QAAQ,CAAC4D,YAAT,GAAwBsD,GAAxB,CAA4B,UAACM,QAAD,EAAc;AACxC,WAAO,UAACJ,CAAD,EAAIK,aAAJ,EAAsB;AAC3B;AACA,UAAI,CAACD,QAAQ,CAAC3D,KAAT,CAAehF,KAAhB,IAAyB,CAAC2I,QAAQ,CAAC3D,KAAT,CAAehF,KAAf,CAAqB6I,KAAnD,EAA0D;AACxDD,qBAAa;AACb;AACD;;AACD,UAAIE,OAAO,GAAG,KAAd;AACA,UAAMC,qBAAqB,GAAGhM,OAAO,CAACoE,QAAR,CAAiByF,aAAjB,CAC5B+B,QAAQ,CAAC3D,KAAT,CAAenF,IADa,EAE5B9C,OAAO,CAACqE,mBAFoB,EAG5B,KAH4B,CAA9B;;AAKA,UAAIuH,QAAQ,CAAC3D,KAAT,CAAenF,IAAf,KAAwB,GAA5B,EAAiC;AAC/BiJ,eAAO,GAAG,CAACC,qBAAX;AACD,OAFD,MAEO;AACL,YAAMC,sBAAsB,GAAGjM,OAAO,CAAC0E,OAAR,GAC3B1E,OAAO,CAAC0E,OAAR,CAAgBwD,IAAhB,CAAqB,UAAChB,KAAD,EAAW;AAC9B,iBAAO0E,QAAQ,CAAC3D,KAAT,CAAenF,IAAf,KAAwBoE,KAAK,CAACe,KAAN,CAAYnF,IAA3C;AACD,SAFD,CAD2B,GAI3B,KAJJ;AAKAiJ,eAAO,GAAG,CAACE,sBAAX;AACD;;AACD,UAAIf,uDAAe,CAAClL,OAAO,CAACsE,eAAT,EAA0B,WAA1B,CAAf,IAAyDyH,OAA7D,EAAsE;AACpEnM,mDAAC,CACCgM,QAAQ,CAAC3D,KAAT,CAAehF,KAAf,CAAqB6I,KAArB,CACGR,GADH,CACO,UAAC7B,CAAD,EAAO;AACV;AACA,iBAAO,UAAC+B,CAAD,EAAIC,CAAJ;AAAA,mBACLhC,CAAC,CACC,UAACiC,UAAD,EAAgB;AACd,kBAAIA,UAAU,KAAK,KAAnB,EAA0B;AACxB1L,uBAAO,CAACoE,QAAR,CAAiBuF,aAAjB,CAA+B3J,OAA/B;AACD,eAFD,MAEO;AACLyL,iBAAC;AACF;AACF,aAPF,EAQCzL,OAAO,CAAC0E,OAAR,IAAmB1E,OAAO,CAAC0E,OAAR,CAAgBC,MAAhB,GAAyB,CAA5C,GACI3E,OAAO,CAAC0E,OAAR,CAAgBC,MAAhB,KAA2B,CAA3B,GACE3E,OAAO,CAAC0E,OAAR,CAAgB,CAAhB,CADF,GAEE1E,OAAO,CAAC0E,OAHd,GAIIP,SAZL,CADI;AAAA,WAAP;AAeD,SAlBH,EAmBG2G,MAnBH,CAmBU,CAAC;AAAA,iBAAMe,aAAa,EAAnB;AAAA,SAAD,CAnBV,CADD,CAAD;AAsBA;AACD,OAxBD,MAwBO;AACLA,qBAAa;AACd;AACF,KAjDD;AAkDD,GAnDD,CADD,EAqDC,EArDD,EAsDC;AAAA,WAAM9L,IAAI,EAAV;AAAA,GAtDD,CAAD;AAwDD,C;;;;;;;;;;;;;;;ACjED;AAOe,SAAS6K,uBAAT,CAAiC5K,OAAjC,EAAoDD,IAApD,EAA0D;AACvE,MAAMmM,aAAa,GAAGlM,OAAO,CAACoE,QAAR,CAAiBgC,cAAvC;;AACA,MAAI8F,aAAJ,EAAmB;AACjBlM,WAAO,CAAC6K,eAAR,GAA0B,IAA1B;;AADiB,gCAEUrC,4DAAoB,CAC7CxI,OAAO,CAACqE,mBADqC,CAF9B;AAAA,QAEV3B,GAFU;AAAA,QAEL+F,WAFK;;AAKjB,QAAMG,UAAU,GAAGC,0DAAkB,CAAC7I,OAAO,CAACgE,EAAT,CAArC;AACAkI,iBAAa,CAACpJ,IAAd,GAAqBN,6CAAK,CAACE,GAAD,CAA1B;AACA,QAAMyJ,aAAoB,GAAG;AAC3BzJ,SAAG,EAAEwJ,aAAa,CAACpJ,IADQ;AAE3B2F,iBAAW,EAAXA,WAF2B;AAG3BG,gBAAU,EAAVA,UAH2B;AAI3BxD,UAAI,EAAE,IAJqB;AAK3B6C,WAAK,EAAEiE,aALoB;AAM3BxD,YAAM,EAAED,WAAW,KAAK,EAAhB,GAAqBE,kDAAU,CAACF,WAAD,CAA/B,GAA+C;AAN5B,KAA7B;AAQAzI,WAAO,CAAC0E,OAAR,GAAkB,CAACyH,aAAD,CAAlB;AACAnM,WAAO,CAACkH,KAAR,GAAgBiF,aAAhB;AACD;;AACDpM,MAAI;AACL,C;;;;;;;;;;;;;;AC3Bc,SAASiL,QAAT,CAAkBhL,OAAlB,EAAqCD,IAArC,EAA2C;AACxD,MACE,CAACC,OAAO,CAACuE,cAAT,IACAvE,OAAO,CAACuE,cAAR,CAAuB7C,cAAvB,KAA0C,KAD1C,IAEA,OAAO1B,OAAO,CAACuE,cAAR,CAAuB7C,cAA9B,KAAiD,WAHnD,EAKEY,OAAO,CAACC,IAAR,gBACcvC,OAAO,CAACqE,mBADtB;AAGFtE,MAAI;AACL,C;;;;;;;;;;;;;;ACVc,SAASkL,YAAT,CAAsBjL,OAAtB,EAAyCD,IAAzC,EAA+C;AAC5DC,SAAO,CAACoE,QAAR,CAAiBiG,WAAjB,CAA6B,IAA7B;;AACAtK,MAAI;AACL,C;;;;;;;;;;;;;;;ACLD;AAGe,SAAS0E,2BAAT,CAAqCzE,OAArC,EAAwDD,IAAxD,EAA8D;AAC3E,OAAK,IAAIqM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpM,OAAO,CAACoE,QAAR,CAAiBrC,MAAjB,CAAwB4C,MAA5C,EAAoDyH,CAAC,EAArD,EAAyD;AACvD,QAAMnE,KAAK,GAAGjI,OAAO,CAACoE,QAAR,CAAiBrC,MAAjB,CAAwBqK,CAAxB,CAAd;AACA,QAAMlF,KAAoB,GAAGkC,kDAAU,CAACpJ,OAAD,EAAUiI,KAAV,CAAvC;;AACA,QAAIf,KAAJ,EAAW;AACT,UAAI,CAAClH,OAAO,CAAC0E,OAAb,EAAsB1E,OAAO,CAAC0E,OAAR,GAAkB,EAAlB;AACtB1E,aAAO,CAAC0E,OAAR,CAAgBZ,IAAhB,CAAqBoD,KAArB;;AACA,UAAIlH,OAAO,CAACuE,cAAR,CAAuB/C,QAAvB,KAAoC,KAAxC,EAA+C;AAC7CzB,YAAI;AACJ;AACD;AACF;AACF;;AACDA,MAAI;AACL,C;;;;;;;;;;;;;;;;;;;;AChBD;AACA;AACA;AACA;AAEe,SAAS6E,cAAT,CAAwB5E,OAAxB,EAA2CD,IAA3C,EAAiD;AAC9D,MAAIE,GAAG,GAAG,CAAV;;AACA,WAASoM,SAAT,GAAqB;AACnB,QAAIpM,GAAG,KAAKD,OAAO,CAAC0E,OAAR,CAAgBC,MAA5B,EAAoC;AAClCoG,2DAAW,CAAC/K,OAAD,EAAUD,IAAV,CAAX;AACA;AACD;;AACDH,+CAAC,CACC0K,uDADD,eAEMtK,OAFN;AAEekH,WAAK,EAAElH,OAAO,CAAC0E,OAAR,CAAgBzE,GAAhB;AAFtB,QAGC,SAASqM,GAAT,GAAe;AACbrM,SAAG,IAAI,CAAP;AACAoM,eAAS;AACV,KANF,CAAD;AAQD;;AACD1B,6DAAiB,CAAC3K,OAAD,EAAUqM,SAAV,CAAjB;AACD,C;;;;;;;;;;;;;;;ACtBD;AAEe,SAAS7H,eAAT,CAAyBxE,OAAzB,EAA4CD,IAA5C,EAAkD;AAC/D,MAAI,OAAOC,OAAO,CAACqE,mBAAf,KAAuC,WAA3C,EAAwD;AACtDrE,WAAO,CAACqE,mBAAR,GAA8BrE,OAAO,CAACgE,EAAR,GAAa+E,wDAAgB,CACzD/I,OAAO,CAACoE,QAAR,CAAiBvC,IADwC,CAA3D;AAGD;;AACD7B,SAAO,CAACqE,mBAAR,GAA8BrE,OAAO,CAACoE,QAAR,CAAiB3B,cAAjB,CAC5BzC,OAAO,CAACqE,mBADoB,CAA9B;AAGAtE,MAAI;AACL,C;;;;;;;;;;;;;;;ACbD;AAGA,IAAMqC,iBAAiB,GAAGC,uDAAe,EAAzC;AACA,IAAMH,oBAAoB,GAAGC,0DAAkB,EAA/C;AAEe,SAAS+C,gBAAT,CAA0BlF,OAA1B,EAA6CD,IAA7C,EAAmD;AAChE,MAAImL,uDAAe,CAAClL,OAAO,CAACsE,eAAT,EAA0B,kBAA1B,CAAnB,EAAkE;AAChE,QAAMiI,KAAK,GAAG,OAAIvM,OAAO,CAACgE,EAAZ,EAAiBsB,OAAjB,CAAyB,OAAzB,EAAkC,GAAlC,CAAd,CADgE,CACV;;AACtD,QAAMkH,aAAa,GACjBpK,iBAAiB,IACjBpC,OAAO,CAACuE,cADR,IAEAvE,OAAO,CAACuE,cAAR,CAAuB9C,IAAvB,KAAgC,IAHlC;;AAIA,QAAIS,oBAAJ,EAA0B;AACxBuK,aAAO,CAACzM,OAAO,CAACsE,eAAR,CAAwBoI,gBAAxB,IAA4C,WAA7C,CAAP,CACE1M,OAAO,CAACsE,eAAR,CAAwBqI,QAAxB,IAAoC,EADtC,EAEE3M,OAAO,CAACsE,eAAR,CAAwBsI,KAAxB,IAAiC,EAFnC,EAGEJ,aAAa,SAAOD,KAAP,GAAiBA,KAHhC,EADwB,CAMxB;AACA;;AACA,UAAItF,QAAQ,IAAIA,QAAQ,CAACxF,IAAzB,EAA+B;AAC7BzB,eAAO,CAACoE,QAAR,CAAiB0B,iBAAjB,GAAqC,IAArC;AACA+G,kBAAU,CAAC,YAAM;AACf,cAAI,CAACL,aAAL,EAAoB;AAClB,gBAAIM,GAAG,GAAG7F,QAAQ,CAACxF,IAAnB;AACAwF,oBAAQ,CAACxF,IAAT,GAAgB,EAAhB;AACAwF,oBAAQ,CAACxF,IAAT,GAAgBqL,GAAhB;AACD;;AACD9M,iBAAO,CAACoE,QAAR,CAAiB0B,iBAAjB,GAAqC,KAArC;AACD,SAPS,EAOP,CAPO,CAAV;AAQD;AACF,KAnBD,MAmBO,IAAI1D,iBAAJ,EAAuB;AAC5B2D,YAAM,CAACkB,QAAP,CAAgB8F,IAAhB,GAAuB/M,OAAO,CAACgE,EAA/B;AACD;AACF;;AACDjE,MAAI;AACL,C;;;;;;;;;;;;;;;ACpCD;AAEe,SAASgL,WAAT,CAAqB/K,OAArB,EAAwCD,IAAxC,EAA8C;AAC3D,MAAImL,uDAAe,CAAClL,OAAO,CAACsE,eAAT,EAA0B,aAA1B,CAAnB,EAA6D;AAC3DtE,WAAO,CAACoE,QAAR,CAAiBiG,WAAjB,CAA6BrK,OAAO,CAAC0E,OAArC;AACD;;AACD3E,MAAI;AACL,C;;;;;;;;;;;;;;ACNc,SAAS+E,WAAT,CAAqB9E,OAArB,EAAwC;AACrDA,SAAO,CAACoE,QAAR,CAAiBuF,aAAjB,CAA+B3J,OAA/B;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACMD;AAWO,SAAS+I,gBAAT,CAA0BiE,QAA1B,EAAkD;AAAA,MAAxBA,QAAwB;AAAxBA,YAAwB,GAAb,GAAa;AAAA;;AACvD,MAAI3K,eAAe,EAAnB,EAAuB;AACrB,WAAO4E,QAAQ,CAACI,QAAT,GAAoBJ,QAAQ,CAACK,MAA7B,GAAsCL,QAAQ,CAACxF,IAAtD;AACD;;AACD,SAAOuL,QAAP;AACD;AACM,SAASxK,KAAT,CAAeyK,CAAf,EAA0B;AAC/B,SAAOA,CAAC,CAAC3H,OAAF,CAAU,MAAV,EAAkB,EAAlB,EAAsBA,OAAtB,CAA8B,MAA9B,EAAsC,EAAtC,CAAP;AACD;AACM,SAASnC,QAAT,CAAkB8J,CAAlB,EAAmC;AACxC,SAAO,OAAOA,CAAP,KAAa,QAApB;AACD;AACM,SAAStH,UAAT,CAAoBsH,CAApB,EAAqC;AAC1C,SAAO,OAAOA,CAAP,KAAa,UAApB;AACD;AACM,SAASpE,kBAAT,CAA4BnG,GAA5B,EAAyC;AAC9C,MAAIA,GAAG,IAAIA,GAAG,CAACC,OAAJ,CAAY,GAAZ,KAAoB,CAA/B,EAAkC;AAChC,WAAOD,GAAG,CAACE,KAAJ,CAAU,GAAV,EAAesK,GAAf,MAAwB,EAA/B;AACD;;AACD,SAAO,EAAP;AACD;AACM,SAASC,oBAAT,CAA8BjG,KAA9B,EAAqCkG,KAArC,EAAsD;AAC3D,MAAIA,KAAK,CAACzI,MAAN,KAAiB,CAArB,EAAwB,OAAO,IAAP;AACxB,MAAI,CAACuC,KAAL,EAAY,OAAO,IAAP;AACZ,SAAOA,KAAK,CAACS,KAAN,CAAY,CAAZ,EAAeT,KAAK,CAACvC,MAArB,EAA6B0I,MAA7B,CAAoC,UAAC3E,MAAD,EAAS6D,KAAT,EAAgBe,KAAhB,EAA0B;AACnE,QAAI5E,MAAM,KAAK,IAAf,EAAqBA,MAAM,GAAG,EAAT;AACrBA,UAAM,CAAC0E,KAAK,CAACE,KAAD,CAAN,CAAN,GAAuBC,kBAAkB,CAAChB,KAAD,CAAzC;AACA,WAAO7D,MAAP;AACD,GAJM,EAIJ,IAJI,CAAP;AAKD;AACM,SAASF,oBAAT,CAA8B9F,GAA9B,EAA2C;AAChD,MAAMoK,GAAG,GAAGtK,KAAK,CAACE,GAAD,CAAL,CAAWE,KAAX,CAAiB,UAAjB,CAAZ;AACA,SAAO,CAACJ,KAAK,CAACsK,GAAG,CAAC,CAAD,CAAJ,CAAN,EAAgBA,GAAG,CAACnF,KAAJ,CAAU,CAAV,EAAa6F,IAAb,CAAkB,EAAlB,CAAhB,CAAP;AACD;AACM,SAAS7E,UAAT,CAAoBF,WAApB,EAAiD;AACtD,MAAIgF,KAAK,GAAG,EAAZ;AACA,MAAIC,KAAK,GAAGjF,WAAW,CAAC7F,KAAZ,CAAkB,GAAlB,CAAZ;;AACA,OAAK,IAAIwJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsB,KAAK,CAAC/I,MAA1B,EAAkCyH,CAAC,EAAnC,EAAuC;AACrC,QAAIuB,IAAI,GAAGD,KAAK,CAACtB,CAAD,CAAL,CAASxJ,KAAT,CAAe,GAAf,CAAX;;AACA,QAAI+K,IAAI,CAAC,CAAD,CAAJ,KAAY,EAAhB,EAAoB;AAClB,UAAIvF,GAAG,GAAGmF,kBAAkB,CAACI,IAAI,CAAC,CAAD,CAAL,CAA5B;;AACA,UAAI,CAACF,KAAK,CAACrF,GAAD,CAAV,EAAiB;AACfqF,aAAK,CAACrF,GAAD,CAAL,GAAamF,kBAAkB,CAACI,IAAI,CAAC,CAAD,CAAJ,IAAW,EAAZ,CAA/B;AACD,OAFD,MAEO;AACL,YAAI,CAACxN,KAAK,CAACC,OAAN,CAAcqN,KAAK,CAACrF,GAAD,CAAnB,CAAL,EAAgCqF,KAAK,CAACrF,GAAD,CAAL,GAAa,CAACqF,KAAK,CAACrF,GAAD,CAAN,CAAb;AAChCqF,aAAK,CAACrF,GAAD,CAAL,CAAWtE,IAAX,CAAgByJ,kBAAkB,CAACI,IAAI,CAAC,CAAD,CAAJ,IAAW,EAAZ,CAAlC;AACD;AACF;AACF;;AACD,SAAOF,KAAP;AACD;AACM,SAASrE,UAAT,CAAoBpJ,OAApB,EAAuCiI,KAAvC,EAAoE;AAAA,8BAC5CO,oBAAoB,CAC/ChG,KAAK,CAACxC,OAAO,CAACqE,mBAAT,CAD0C,CADwB;AAAA,MAClEvC,OADkE;AAAA,MACzD8L,SADyD;;AAIzE,MAAMlF,MAAM,GAAGkF,SAAS,KAAK,EAAd,GAAmB,IAAnB,GAA0BjF,UAAU,CAACiF,SAAD,CAAnD;AACA,MAAMC,UAAU,GAAG,EAAnB;AACA,MAAIC,OAAJ;;AACA,MAAI3K,QAAQ,CAAC8E,KAAK,CAACnF,IAAP,CAAZ,EAA0B;AACxBgL,WAAO,GACL7M,6DAAqB,GACrBuB,KAAK,CAACyF,KAAK,CAACnF,IAAP,CAAL,CACGwC,OADH,CACW3E,wDADX,EAC6B,UAAUoN,IAAV,EAAgBC,IAAhB,EAAsB9K,IAAtB,EAA4B;AACrD2K,gBAAU,CAAC/J,IAAX,CAAgBZ,IAAhB;AACA,aAAOtC,+DAAP;AACD,KAJH,EAKG0E,OALH,CAKWzE,uDALX,EAK4BC,wDAL5B,EAMGwE,OANH,CAMWvE,uDANX,EAM4BC,wDAN5B,CADA,GAQA,GATF;;AAUA,QAAIwB,KAAK,CAACyF,KAAK,CAACnF,IAAP,CAAL,KAAgC,EAApC,EAAwC;AACtC,UAAIN,KAAK,CAACV,OAAD,CAAL,KAAmB,EAAvB,EAA2B;AACzB,eAAO;AACLY,aAAG,EAAEZ,OADA;AAEL2G,qBAAW,EAAEmF,SAFR;AAGLhF,oBAAU,EAAEC,kBAAkB,CAAC7I,OAAO,CAACgE,EAAT,CAHzB;AAILiE,eAAK,EAAEA,KAJF;AAKL7C,cAAI,EAAE,IALD;AAMLsD,gBAAM,EAANA;AANK,SAAP;AAQD;AACF;AACF,GAvBD,MAuBO;AACLoF,WAAO,GAAG7F,KAAK,CAACnF,IAAhB;AACD;;AACD,MAAMmL,MAAM,GAAG,IAAI1K,MAAJ,CAAWuK,OAAX,EAAoB5M,0DAApB,CAAf;AACA,MAAMgG,KAAK,GAAGpF,OAAO,CAACoF,KAAR,CAAc+G,MAAd,CAAd;;AAEA,MAAI/G,KAAJ,EAAW;AACT,QAAM9B,IAAI,GAAGjC,QAAQ,CAAC8E,KAAK,CAACnF,IAAP,CAAR,GACTqK,oBAAoB,CAACjG,KAAD,EAAQ2G,UAAR,CADX,GAET3G,KAAK,CAACgH,MAAN,GACAhH,KAAK,CAACgH,MADN,GAEAhH,KAAK,CAACS,KAAN,CAAY,CAAZ,CAJJ;AAKA,WAAO;AACLjF,SAAG,EAAEF,KAAK,CAACV,OAAO,CAACwD,OAAR,CAAgB,IAAI/B,MAAJ,OAAevD,OAAO,CAACoE,QAAR,CAAiBvC,IAAhC,CAAhB,EAAyD,EAAzD,CAAD,CADL;AAEL4G,iBAAW,EAAEmF,SAFR;AAGLhF,gBAAU,EAAEC,kBAAkB,CAAC7I,OAAO,CAACgE,EAAT,CAHzB;AAILiE,WAAK,EAAEA,KAJF;AAKL7C,UAAI,EAAJA,IALK;AAMLsD,YAAM,EAANA;AANK,KAAP;AAQD;;AACD,SAAO,KAAP;AACD;AACM,SAASvG,kBAAT,GAAuC;AAC5C,SAAO,CAAC,EACN,OAAO4D,MAAP,KAAkB,WAAlB,IACAA,MAAM,CAAC0G,OADP,IAEA1G,MAAM,CAAC0G,OAAP,CAAe0B,SAHT,CAAR;AAKD;AACM,SAASjD,eAAT,CAAyBkD,GAAzB,EAA8BhG,GAA9B,EAAoD;AACzD,SAAO,OAAOgG,GAAG,CAAChG,GAAD,CAAV,KAAoB,WAApB,IAAmCgG,GAAG,CAAChG,GAAD,CAAH,KAAa,IAAvD;AACD;AACM,SAASZ,oBAAT,CAA8B6G,MAA9B,EAAgE;AACrE,MAAI,CAACA,MAAL,EAAa,OAAO,EAAP;AACb,MAAMX,KAAK,GAAGW,MAAM,CAACzL,KAAP,CAAa,GAAb,CAAd;AACA,MAAMtB,OAAwB,GAAG,EAAjC;AACA,MAAIiD,cAAJ;AAEAmJ,OAAK,CAAChK,OAAN,CAAc,UAAC4K,GAAD,EAAS;AACrB,QAAMC,IAAI,GAAGD,GAAG,CAAC1L,KAAJ,CAAU,GAAV,EAAe0I,GAAf,CAAmB,UAACkD,CAAD;AAAA,aAAOA,CAAC,CAAClJ,OAAF,CAAU,YAAV,EAAwB,EAAxB,CAAP;AAAA,KAAnB,CAAb;;AACA,YAAQiJ,IAAI,CAAC,CAAD,CAAZ;AACE,WAAK,kBAAL;AACEjN,eAAO,CAACoL,gBAAR,GAA2B6B,IAAI,CAAC,CAAD,CAA/B;AACA;;AACF,WAAK,wBAAL;AACE,YAAI,CAAChK,cAAL,EAAqBA,cAAc,GAAG,EAAjB;AACrBA,sBAAc,CAAC/C,QAAf,GAA0B+M,IAAI,CAAC,CAAD,CAA9B;AACA;;AACF,WAAK,oBAAL;AACE,YAAI,CAAChK,cAAL,EAAqBA,cAAc,GAAG,EAAjB;AACrBA,sBAAc,CAAC9C,IAAf,GAAsB8M,IAAI,CAAC,CAAD,CAAJ,KAAY,MAAlC;AACA;;AACF,WAAK,kBAAL;AACA,WAAK,aAAL;AACA,WAAK,aAAL;AACA,WAAK,OAAL;AACEjN,eAAO,CAACiN,IAAI,CAAC,CAAD,CAAL,CAAP,GAAmBA,IAAI,CAAC,CAAD,CAAJ,KAAY,MAA/B;AACA;AAjBJ;AAmBD,GArBD;;AAsBA,MAAIhK,cAAJ,EAAoB;AAClBjD,WAAO,CAACiD,cAAR,GAAyBA,cAAzB;AACD;;AACD,SAAOjD,OAAP;AACD;AACM,SAASe,eAAT,GAA2B;AAChC,SAAO,OAAO0D,MAAP,KAAkB,WAAzB;AACD;AACM,SAAS1C,eAAT,CACLJ,KADK,EAELkF,MAFK,EAGc;AAAA,MAFnBlF,KAEmB;AAFnBA,SAEmB,GAFX,EAEW;AAAA;;AAAA,MADnBkF,MACmB;AADnBA,UACmB,GADS,EACT;AAAA;;AACnBlF,OAAK,CACFwC,MADH,CACU,UAACgJ,CAAD;AAAA,WAAOA,CAAP;AAAA,GADV,EAEG/K,OAFH,CAEW,UAAC+K,CAAD,EAAO;AACd,KAAC,QAAD,EAAW,OAAX,EAAoB,SAApB,EAA+B,OAA/B,EAAwC/K,OAAxC,CAAgD,UAAC4F,IAAD,EAAU;AACxD,UAAImF,CAAC,CAACnF,IAAD,CAAL,EAAa;AACX,YAAI,CAACnB,MAAM,CAACmB,IAAD,CAAX,EAAmBnB,MAAM,CAACmB,IAAD,CAAN,GAAe,EAAf;AACnBnB,cAAM,CAACmB,IAAD,CAAN,CAAaxF,IAAb,CAAkB2K,CAAC,CAACnF,IAAD,CAAnB;AACD;AACF,KALD;AAMD,GATH;AAUA,SAAOnB,MAAP;AACD,C;;;;;;UC1LD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCrBA;WACA;WACA;WACA;WACA,wCAAwC,yCAAyC;WACjF;WACA;WACA,E;;;;;WCPA,6CAA6C,wDAAwD,E;;;;;WCArG;WACA;WACA;WACA,sDAAsD,kBAAkB;WACxE;WACA,+CAA+C,cAAc;WAC7D,E;;;;UCNA;UACA;UACA;UACA","file":"navigo.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Navigo\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Navigo\"] = factory();\n\telse\n\t\troot[\"Navigo\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn ","type QChild = {\n  type: \"child\";\n  funcs: Array<Function | Array<any> | QChild>;\n};\n\nexport default function Q(\n  funcs: Array<Function | Array<any> | QChild>,\n  c?: any,\n  done?: Function\n) {\n  const context = c || {};\n  let idx = 0;\n\n  (function next() {\n    if (!funcs[idx]) {\n      if (done) {\n        done(context);\n      }\n      return;\n    }\n    if (Array.isArray(funcs[idx])) {\n      funcs.splice(\n        idx,\n        1,\n        ...(funcs[idx][0](context) ? funcs[idx][1] : funcs[idx][2])\n      );\n      next();\n    } else {\n      // console.log(funcs[idx].name + \" / \" + JSON.stringify(context));\n      // console.log(funcs[idx].name);\n      (funcs[idx] as Function)(context, (moveForward) => {\n        if (typeof moveForward === \"undefined\" || moveForward === true) {\n          idx += 1;\n          next();\n        } else if (done) {\n          done(context);\n        }\n      });\n    }\n  })();\n}\n\nQ.if = function (condition: Function, one, two) {\n  if (!Array.isArray(one)) one = [one];\n  if (!Array.isArray(two)) two = [two];\n  return [condition, one, two];\n};\n","export const PARAMETER_REGEXP = /([:*])(\\w+)/g;\nexport const REPLACE_VARIABLE_REGEXP = \"([^/]+)\";\nexport const WILDCARD_REGEXP = /\\*/g;\nexport const REPLACE_WILDCARD = \"?(?:.*)\";\nexport const NOT_SURE_REGEXP = /\\/\\?/g;\nexport const REPLACE_NOT_SURE = \"/?([^/]+|)\";\nexport const START_BY_SLASH_REGEXP = \"(?:/^|^)\";\nexport const MATCH_REGEXP_FLAGS = \"\";\n","import {\n  Match,\n  Route,\n  RouteHooks,\n  QContext,\n  NavigateOptions,\n  ResolveOptions,\n  GenerateOptions,\n  Handler,\n  RouterOptions,\n} from \"../index\";\nimport NavigoRouter from \"../index\";\nimport {\n  pushStateAvailable,\n  matchRoute,\n  parseQuery,\n  extractGETParameters,\n  isFunction,\n  isString,\n  clean,\n  parseNavigateOptions,\n  windowAvailable,\n  getCurrentEnvURL,\n  accumulateHooks,\n  extractHashFromURL,\n} from \"./utils\";\nimport Q from \"./Q\";\nimport setLocationPath from \"./middlewares/setLocationPath\";\nimport matchPathToRegisteredRoutes from \"./middlewares/matchPathToRegisteredRoutes\";\nimport checkForDeprecationMethods from \"./middlewares/checkForDeprecationMethods\";\nimport checkForForceOp from \"./middlewares/checkForForceOp\";\nimport updateBrowserURL from \"./middlewares/updateBrowserURL\";\nimport processMatches from \"./middlewares/processMatches\";\nimport waitingList from \"./middlewares/waitingList\";\n\nimport { notFoundLifeCycle } from \"./lifecycles\";\n\nconst DEFAULT_LINK_SELECTOR = \"[data-navigo]\";\n\nexport default function Navigo(appRoute?: string, options?: RouterOptions) {\n  let DEFAULT_RESOLVE_OPTIONS: RouterOptions = options || {\n    strategy: \"ONE\",\n    hash: false,\n    noMatchWarning: false,\n    linksSelector: DEFAULT_LINK_SELECTOR,\n  };\n  let self: NavigoRouter = this;\n  let root = \"/\";\n  let current: Match[] = null;\n  let routes: Route[] = [];\n  let destroyed = false;\n  let genericHooks: RouteHooks;\n\n  const isPushStateAvailable = pushStateAvailable();\n  const isWindowAvailable = windowAvailable();\n\n  if (!appRoute) {\n    console.warn(\n      'Navigo requires a root path in its constructor. If not provided will use \"/\" as default.'\n    );\n  } else {\n    root = clean(appRoute);\n  }\n\n  function _checkForAHash(url: string): string {\n    if (url.indexOf(\"#\") >= 0) {\n      if (DEFAULT_RESOLVE_OPTIONS.hash === true) {\n        url = url.split(\"#\")[1] || \"/\";\n      } else {\n        url = url.split(\"#\")[0];\n      }\n    }\n    return url;\n  }\n  function composePathWithRoot(path: string) {\n    return clean(`${root}/${clean(path)}`);\n  }\n  function createRoute(\n    path: string | RegExp,\n    handler: Handler,\n    hooks: RouteHooks[],\n    name?: string\n  ): Route {\n    path = isString(path) ? composePathWithRoot(path as string) : path;\n    return {\n      name: name || clean(String(path)),\n      path,\n      handler,\n      hooks: accumulateHooks(hooks),\n    };\n  }\n\n  // public APIs\n  function on(\n    path: string | Function | Object | RegExp,\n    handler?: Handler,\n    hooks?: RouteHooks\n  ) {\n    if (typeof path === \"object\" && !(path instanceof RegExp)) {\n      Object.keys(path).forEach((p) => {\n        if (typeof path[p] === \"function\") {\n          this.on(p, path[p]);\n        } else {\n          const { uses: handler, as: name, hooks } = path[p];\n          routes.push(createRoute(p, handler, [genericHooks, hooks], name));\n        }\n      });\n      return this;\n    } else if (typeof path === \"function\") {\n      hooks = handler as RouteHooks;\n      handler = path as Handler;\n      path = root;\n    }\n    routes.push(\n      createRoute(path as string | RegExp, handler, [genericHooks, hooks])\n    );\n    return this;\n  }\n  function resolve(to?: string, options?: ResolveOptions): false | Match[] {\n    if (self.__dirty) {\n      self.__waiting.push(() => self.resolve(to, options));\n      return;\n    } else {\n      self.__dirty = true;\n    }\n    to = to ? `${clean(root)}/${clean(to)}` : undefined;\n    // console.log(\"-- resolve --> \" + to, self.__dirty);\n    const context: QContext = {\n      instance: self,\n      to,\n      currentLocationPath: to,\n      navigateOptions: {},\n      resolveOptions: { ...DEFAULT_RESOLVE_OPTIONS, ...options },\n    };\n    Q(\n      [\n        setLocationPath,\n        matchPathToRegisteredRoutes,\n        Q.if(\n          ({ matches }: QContext) => matches && matches.length > 0,\n          processMatches,\n          notFoundLifeCycle\n        ),\n      ],\n      context,\n      waitingList\n    );\n\n    return context.matches ? context.matches : false;\n  }\n  function navigate(to: string, navigateOptions?: NavigateOptions): void {\n    // console.log(\"-- navigate --> \" + to, self.__dirty);\n    if (self.__dirty) {\n      self.__waiting.push(() => self.navigate(to, navigateOptions));\n      return;\n    } else {\n      self.__dirty = true;\n    }\n    to = `${clean(root)}/${clean(to)}`;\n    const context: QContext = {\n      instance: self,\n      to,\n      navigateOptions: navigateOptions || {},\n      resolveOptions:\n        navigateOptions && navigateOptions.resolveOptions\n          ? navigateOptions.resolveOptions\n          : DEFAULT_RESOLVE_OPTIONS,\n      currentLocationPath: _checkForAHash(to),\n    };\n    Q(\n      [\n        checkForDeprecationMethods,\n        checkForForceOp,\n        matchPathToRegisteredRoutes,\n        Q.if(\n          ({ matches }: QContext) => matches && matches.length > 0,\n          processMatches,\n          notFoundLifeCycle\n        ),\n        updateBrowserURL,\n        waitingList,\n      ],\n      context,\n      waitingList\n    );\n  }\n  function navigateByName(\n    name: string,\n    data?: Object,\n    options?: NavigateOptions\n  ): boolean {\n    const url = generate(name, data);\n    if (url !== null) {\n      navigate(url.replace(new RegExp(`^\\/?${root}`), \"\"), options);\n      return true;\n    }\n    return false;\n  }\n  function off(what: string | RegExp | Function) {\n    this.routes = routes = routes.filter((r) => {\n      if (isString(what)) {\n        return clean(r.path as string) !== clean(what as string);\n      } else if (isFunction(what)) {\n        return what !== r.handler;\n      }\n      return String(r.path) !== String(what);\n    });\n    return this;\n  }\n  function listen() {\n    if (isPushStateAvailable) {\n      this.__popstateListener = () => {\n        if (!self.__freezeListening) {\n          resolve();\n        }\n      };\n      window.addEventListener(\"popstate\", this.__popstateListener);\n    }\n  }\n  function destroy() {\n    this.routes = routes = [];\n    if (isPushStateAvailable) {\n      window.removeEventListener(\"popstate\", this.__popstateListener);\n    }\n    this.destroyed = destroyed = true;\n  }\n  function notFound(handler, hooks?: RouteHooks) {\n    self._notFoundRoute = createRoute(\n      \"*\",\n      handler,\n      [genericHooks, hooks],\n      \"__NOT_FOUND__\"\n    );\n    return this;\n  }\n  function updatePageLinks() {\n    if (!isWindowAvailable) return;\n    findLinks().forEach((link) => {\n      if (\n        \"false\" === link.getAttribute(\"data-navigo\") ||\n        \"_blank\" === link.getAttribute(\"target\")\n      ) {\n        if (link.hasListenerAttached) {\n          link.removeEventListener(\"click\", link.navigoHandler);\n        }\n        return;\n      }\n      if (!link.hasListenerAttached) {\n        link.hasListenerAttached = true;\n        link.navigoHandler = function (e) {\n          if (\n            (e.ctrlKey || e.metaKey) &&\n            e.target.tagName.toLowerCase() === \"a\"\n          ) {\n            return false;\n          }\n          let location = link.getAttribute(\"href\");\n          if (typeof location === \"undefined\" || location === null) {\n            return false;\n          }\n          // handling absolute paths\n          if (location.match(/^(http|https)/) && typeof URL !== \"undefined\") {\n            try {\n              const u = new URL(location);\n              location = u.pathname + u.search;\n            } catch (err) {}\n          }\n          const options = parseNavigateOptions(\n            link.getAttribute(\"data-navigo-options\")\n          );\n\n          if (!destroyed) {\n            e.preventDefault();\n            e.stopPropagation();\n            self.navigate(clean(location), options);\n          }\n        };\n        link.addEventListener(\"click\", link.navigoHandler);\n      }\n    });\n    return self;\n  }\n  function findLinks() {\n    if (isWindowAvailable) {\n      return [].slice.call(\n        document.querySelectorAll(\n          DEFAULT_RESOLVE_OPTIONS.linksSelector || DEFAULT_LINK_SELECTOR\n        )\n      );\n    }\n    return [];\n  }\n  function link(path: string) {\n    return `/${root}/${clean(path)}`;\n  }\n  function setGenericHooks(hooks: RouteHooks) {\n    genericHooks = hooks;\n    return this;\n  }\n  function lastResolved(): Match[] | null {\n    return current;\n  }\n  function generate(\n    name: string,\n    data?: Object,\n    options?: GenerateOptions\n  ): string {\n    const route = routes.find((r) => r.name === name);\n    let result = null;\n    if (route) {\n      result = route.path as string;\n      if (data) {\n        for (let key in data) {\n          result = result.replace(\":\" + key, data[key]);\n        }\n      }\n      result = !result.match(/^\\//) ? `/${result}` : result;\n    }\n    if (result && options && !options.includeRoot) {\n      result = result.replace(new RegExp(`^/${root}`), \"\");\n    }\n    return result;\n  }\n  function getLinkPath(link) {\n    return link.getAttribute(\"href\");\n  }\n  function pathToMatchObject(path: string): Match {\n    const [url, queryString] = extractGETParameters(clean(path));\n    const params = queryString === \"\" ? null : parseQuery(queryString);\n    const hashString = extractHashFromURL(path);\n    const route = createRoute(url, () => {}, [genericHooks], url);\n    return {\n      url,\n      queryString,\n      hashString,\n      route,\n      data: null,\n      params: params,\n    };\n  }\n  function getCurrentLocation(): Match {\n    return pathToMatchObject(\n      clean(getCurrentEnvURL(root)).replace(new RegExp(`^${root}`), \"\")\n    );\n  }\n  function directMatchWithRegisteredRoutes(path: string): false | Match[] {\n    const context: QContext = {\n      instance: self,\n      currentLocationPath: path,\n      to: path,\n      navigateOptions: {},\n      resolveOptions: DEFAULT_RESOLVE_OPTIONS,\n    };\n    matchPathToRegisteredRoutes(context, () => {});\n    return context.matches ? context.matches : false;\n  }\n  function directMatchWithLocation(\n    path: string | RegExp,\n    currentLocation?: string,\n    annotatePathWithRoot?: boolean\n  ): false | Match {\n    if (\n      typeof currentLocation !== \"undefined\" &&\n      (typeof annotatePathWithRoot === \"undefined\" || annotatePathWithRoot)\n    ) {\n      currentLocation = composePathWithRoot(currentLocation);\n    }\n    const context: QContext = {\n      instance: self,\n      to: currentLocation,\n      currentLocationPath: currentLocation,\n    };\n    setLocationPath(context, () => {});\n    if (typeof path === \"string\") {\n      path =\n        typeof annotatePathWithRoot === \"undefined\" || annotatePathWithRoot\n          ? composePathWithRoot(path)\n          : path;\n    }\n    const match = matchRoute(context, {\n      name: String(path),\n      path,\n      handler: () => {},\n      hooks: {},\n    });\n    return match ? match : false;\n  }\n  function addHook(\n    type: string,\n    route: Route | string,\n    func: Function\n  ): Function {\n    if (typeof route === \"string\") {\n      route = getRoute(route);\n    }\n    if (route) {\n      if (!route.hooks[type]) route.hooks[type] = [];\n      route.hooks[type].push(func);\n      return () => {\n        (route as Route).hooks[type] = (route as Route).hooks[type].filter(\n          (f) => f !== func\n        );\n      };\n    } else {\n      console.warn(`Route doesn't exists: ${route}`);\n    }\n    return () => {};\n  }\n  function getRoute(nameOrHandler: string | Function): Route | undefined {\n    if (typeof nameOrHandler === \"string\") {\n      return routes.find((r) => r.name === composePathWithRoot(nameOrHandler));\n    }\n    return routes.find((r) => r.handler === nameOrHandler);\n  }\n  function __markAsClean(context: QContext) {\n    context.instance.__dirty = false;\n    if (context.instance.__waiting.length > 0) {\n      context.instance.__waiting.shift()();\n    }\n  }\n\n  this.root = root;\n  this.routes = routes;\n  this.destroyed = destroyed;\n  this.current = current;\n  this.__freezeListening = false;\n  this.__waiting = [];\n  this.__dirty = false;\n  this.__markAsClean = __markAsClean;\n\n  this.on = on;\n  this.off = off;\n  this.resolve = resolve;\n  this.navigate = navigate;\n  this.navigateByName = navigateByName;\n  this.destroy = destroy;\n  this.notFound = notFound;\n  this.updatePageLinks = updatePageLinks;\n  this.link = link;\n  this.hooks = setGenericHooks;\n  this.extractGETParameters = (url) =>\n    extractGETParameters(_checkForAHash(url));\n  this.lastResolved = lastResolved;\n  this.generate = generate;\n  this.getLinkPath = getLinkPath;\n  this.match = directMatchWithRegisteredRoutes;\n  this.matchLocation = directMatchWithLocation;\n  this.getCurrentLocation = getCurrentLocation;\n  this.addBeforeHook = addHook.bind(this, \"before\");\n  this.addAfterHook = addHook.bind(this, \"after\");\n  this.addAlreadyHook = addHook.bind(this, \"already\");\n  this.addLeaveHook = addHook.bind(this, \"leave\");\n  this.getRoute = getRoute;\n  this._pathToMatchObject = pathToMatchObject;\n  this._clean = clean;\n  this._checkForAHash = _checkForAHash;\n  this._setCurrent = (c) => (current = self.current = c);\n\n  listen.call(this);\n  updatePageLinks.call(this);\n}\n","import { QContext } from \"../index\";\nimport Q from \"./Q\";\nimport checkForLeaveHook from \"./middlewares/checkForLeaveHook\";\nimport checkForBeforeHook from \"./middlewares/checkForBeforeHook\";\nimport callHandler from \"./middlewares/callHandler\";\nimport checkForAfterHook from \"./middlewares/checkForAfterHook\";\nimport checkForAlreadyHook from \"./middlewares/checkForAlreadyHook\";\nimport checkForNotFoundHandler from \"./middlewares/checkForNotFoundHandler\";\nimport errorOut from \"./middlewares/errorOut\";\nimport flushCurrent from \"./middlewares/flushCurrent\";\nimport updateState from \"./middlewares/updateState\";\n\nexport const foundLifecycle = [\n  checkForAlreadyHook,\n  checkForBeforeHook,\n  callHandler,\n  checkForAfterHook,\n];\n\nexport const notFoundLifeCycle = [\n  checkForLeaveHook,\n  checkForNotFoundHandler,\n  Q.if(\n    ({ notFoundHandled }: QContext) => notFoundHandled,\n    foundLifecycle.concat([updateState]),\n    [errorOut, flushCurrent]\n  ),\n];\n","import { QContext } from \"../../index\";\nimport { undefinedOrTrue } from \"../utils\";\n\nexport default function callHandler(context: QContext, done) {\n  if (undefinedOrTrue(context.navigateOptions, \"callHandler\")) {\n    context.match.route.handler(context.match);\n  }\n  context.instance.updatePageLinks();\n  done();\n}\n","import { QContext } from \"../../index\";\nimport { undefinedOrTrue } from \"../utils\";\n\nexport default function checkForAfterHook(context: QContext, done) {\n  if (\n    context.match.route.hooks &&\n    context.match.route.hooks.after &&\n    undefinedOrTrue(context.navigateOptions, \"callHooks\")\n  ) {\n    context.match.route.hooks.after.forEach((f) => f(context.match));\n  }\n  done();\n}\n","import { QContext } from \"../../index\";\nimport { undefinedOrTrue } from \"../utils\";\n\nexport default function checkForAlreadyHook(context: QContext, done) {\n  const current = context.instance.lastResolved();\n  if (\n    current &&\n    current[0] &&\n    current[0].route === context.match.route &&\n    current[0].url === context.match.url &&\n    current[0].queryString === context.match.queryString\n  ) {\n    current.forEach((c) => {\n      if (c.route.hooks && c.route.hooks.already) {\n        if (undefinedOrTrue(context.navigateOptions, \"callHooks\")) {\n          c.route.hooks.already.forEach((f) => f(context.match));\n        }\n      }\n    });\n    done(false);\n    return;\n  }\n  done();\n}\n","import { QContext } from \"../../index\";\nimport Q from \"../Q\";\nimport { undefinedOrTrue } from \"../utils\";\n\nexport default function checkForBeforeHook(context: QContext, done) {\n  if (\n    context.match.route.hooks &&\n    context.match.route.hooks.before &&\n    undefinedOrTrue(context.navigateOptions, \"callHooks\")\n  ) {\n    Q(\n      context.match.route.hooks.before\n        .map((f) => {\n          // just so we match the Q interface\n          return function beforeHookInternal(_, d) {\n            return f((shouldStop) => {\n              if (shouldStop === false) {\n                context.instance.__markAsClean(context);\n              } else {\n                d();\n              }\n            }, context.match);\n          };\n        })\n        .concat([() => done()])\n    );\n  } else {\n    done();\n  }\n}\n","import { QContext } from \"../../index\";\n\nexport default function checkForDeprecationMethods(context: QContext, done) {\n  if (context.navigateOptions) {\n    if (typeof context.navigateOptions[\"shouldResolve\"] !== \"undefined\") {\n      console.warn(\n        `\"shouldResolve\" is deprecated. Please check the documentation.`\n      );\n    }\n    if (typeof context.navigateOptions[\"silent\"] !== \"undefined\") {\n      console.warn(`\"silent\" is deprecated. Please check the documentation.`);\n    }\n  }\n  done();\n}\n","import { QContext } from \"../../index\";\n\nexport default function checkForForceOp(context: QContext, done) {\n  if (context.navigateOptions.force === true) {\n    context.instance._setCurrent([\n      context.instance._pathToMatchObject(context.to),\n    ]);\n    done(false);\n  } else {\n    done();\n  }\n}\n","import { QContext } from \"../../index\";\nimport Q from \"../Q\";\nimport { undefinedOrTrue } from \"../utils\";\n\nexport default function checkForLeaveHook(context: QContext, done) {\n  const instance = context.instance;\n  if (!instance.lastResolved()) {\n    done();\n    return;\n  }\n  Q(\n    instance.lastResolved().map((oldMatch) => {\n      return (_, leaveLoopDone) => {\n        // no leave hook\n        if (!oldMatch.route.hooks || !oldMatch.route.hooks.leave) {\n          leaveLoopDone();\n          return;\n        }\n        let runHook = false;\n        const newLocationVSOldMatch = context.instance.matchLocation(\n          oldMatch.route.path,\n          context.currentLocationPath,\n          false\n        );\n        if (oldMatch.route.path !== \"*\") {\n          runHook = !newLocationVSOldMatch;\n        } else {\n          const someOfTheLastOnesMatch = context.matches\n            ? context.matches.find((match) => {\n                return oldMatch.route.path === match.route.path;\n              })\n            : false;\n          runHook = !someOfTheLastOnesMatch;\n        }\n        if (undefinedOrTrue(context.navigateOptions, \"callHooks\") && runHook) {\n          Q(\n            oldMatch.route.hooks.leave\n              .map((f) => {\n                // just so we match the Q interface\n                return (_, d) =>\n                  f(\n                    (shouldStop) => {\n                      if (shouldStop === false) {\n                        context.instance.__markAsClean(context);\n                      } else {\n                        d();\n                      }\n                    },\n                    context.matches && context.matches.length > 0\n                      ? context.matches.length === 1\n                        ? context.matches[0]\n                        : context.matches\n                      : undefined\n                  );\n              })\n              .concat([() => leaveLoopDone()])\n          );\n          return;\n        } else {\n          leaveLoopDone();\n        }\n      };\n    }),\n    {},\n    () => done()\n  );\n}\n","import { QContext, Match } from \"../../index\";\nimport {\n  parseQuery,\n  extractGETParameters,\n  clean,\n  extractHashFromURL,\n} from \"../utils\";\n\nexport default function checkForNotFoundHandler(context: QContext, done) {\n  const notFoundRoute = context.instance._notFoundRoute;\n  if (notFoundRoute) {\n    context.notFoundHandled = true;\n    const [url, queryString] = extractGETParameters(\n      context.currentLocationPath\n    );\n    const hashString = extractHashFromURL(context.to);\n    notFoundRoute.path = clean(url);\n    const notFoundMatch: Match = {\n      url: notFoundRoute.path,\n      queryString,\n      hashString,\n      data: null,\n      route: notFoundRoute,\n      params: queryString !== \"\" ? parseQuery(queryString) : null,\n    };\n    context.matches = [notFoundMatch];\n    context.match = notFoundMatch;\n  }\n  done();\n}\n","import { QContext } from \"../../index\";\n\nexport default function errorOut(context: QContext, done) {\n  if (\n    !context.resolveOptions ||\n    context.resolveOptions.noMatchWarning === false ||\n    typeof context.resolveOptions.noMatchWarning === \"undefined\"\n  )\n    console.warn(\n      `Navigo: \"${context.currentLocationPath}\" didn't match any of the registered routes.`\n    );\n  done();\n}\n","import { QContext } from \"../../index\";\n\nexport default function flushCurrent(context: QContext, done) {\n  context.instance._setCurrent(null);\n  done();\n}\n","import { matchRoute } from \"../utils\";\nimport { QContext, Match } from \"../../index\";\n\nexport default function matchPathToRegisteredRoutes(context: QContext, done) {\n  for (let i = 0; i < context.instance.routes.length; i++) {\n    const route = context.instance.routes[i];\n    const match: false | Match = matchRoute(context, route);\n    if (match) {\n      if (!context.matches) context.matches = [];\n      context.matches.push(match);\n      if (context.resolveOptions.strategy === \"ONE\") {\n        done();\n        return;\n      }\n    }\n  }\n  done();\n}\n","import { QContext } from \"../../index\";\nimport Q from \"../Q\";\nimport { foundLifecycle } from \"../lifecycles\";\nimport updateState from \"./updateState\";\nimport checkForLeaveHook from \"./checkForLeaveHook\";\n\nexport default function processMatches(context: QContext, done) {\n  let idx = 0;\n  function nextMatch() {\n    if (idx === context.matches.length) {\n      updateState(context, done);\n      return;\n    }\n    Q(\n      foundLifecycle,\n      { ...context, match: context.matches[idx] },\n      function end() {\n        idx += 1;\n        nextMatch();\n      }\n    );\n  }\n  checkForLeaveHook(context, nextMatch);\n}\n","import { QContext } from \"../../index\";\nimport { getCurrentEnvURL } from \"../utils\";\n\nexport default function setLocationPath(context: QContext, done) {\n  if (typeof context.currentLocationPath === \"undefined\") {\n    context.currentLocationPath = context.to = getCurrentEnvURL(\n      context.instance.root\n    );\n  }\n  context.currentLocationPath = context.instance._checkForAHash(\n    context.currentLocationPath\n  );\n  done();\n}\n","import { undefinedOrTrue, pushStateAvailable, windowAvailable } from \"../utils\";\nimport { QContext } from \"../../index\";\n\nconst isWindowAvailable = windowAvailable();\nconst isPushStateAvailable = pushStateAvailable();\n\nexport default function updateBrowserURL(context: QContext, done) {\n  if (undefinedOrTrue(context.navigateOptions, \"updateBrowserURL\")) {\n    const value = `/${context.to}`.replace(/\\/\\//g, \"/\"); // making sure that we don't have two slashes\n    const isItUsingHash =\n      isWindowAvailable &&\n      context.resolveOptions &&\n      context.resolveOptions.hash === true;\n    if (isPushStateAvailable) {\n      history[context.navigateOptions.historyAPIMethod || \"pushState\"](\n        context.navigateOptions.stateObj || {},\n        context.navigateOptions.title || \"\",\n        isItUsingHash ? `#${value}` : value\n      );\n      // This is to solve a nasty bug where the page doesn't scroll to the anchor.\n      // We set a microtask to update the hash only.\n      if (location && location.hash) {\n        context.instance.__freezeListening = true;\n        setTimeout(() => {\n          if (!isItUsingHash) {\n            let tmp = location.hash;\n            location.hash = \"\";\n            location.hash = tmp;\n          }\n          context.instance.__freezeListening = false;\n        }, 1);\n      }\n    } else if (isWindowAvailable) {\n      window.location.href = context.to;\n    }\n  }\n  done();\n}\n","import { QContext } from \"../../index\";\nimport { undefinedOrTrue } from \"../utils\";\n\nexport default function updateState(context: QContext, done) {\n  if (undefinedOrTrue(context.navigateOptions, \"updateState\")) {\n    context.instance._setCurrent(context.matches);\n  }\n  done();\n}\n","import { QContext } from \"../../index\";\n\nexport default function waitingList(context: QContext) {\n  context.instance.__markAsClean(context);\n}\n","import {\n  RouteHooksStorage,\n  Match,\n  Route,\n  NavigateOptions,\n  ResolveOptions,\n  QContext,\n  ResolveStrategy,\n} from \"../index\";\n\nimport {\n  PARAMETER_REGEXP,\n  WILDCARD_REGEXP,\n  REPLACE_VARIABLE_REGEXP,\n  REPLACE_WILDCARD,\n  START_BY_SLASH_REGEXP,\n  MATCH_REGEXP_FLAGS,\n  REPLACE_NOT_SURE,\n  NOT_SURE_REGEXP,\n} from \"./constants\";\n\nexport function getCurrentEnvURL(fallback = \"/\"): string {\n  if (windowAvailable()) {\n    return location.pathname + location.search + location.hash;\n  }\n  return fallback;\n}\nexport function clean(s: string) {\n  return s.replace(/\\/+$/, \"\").replace(/^\\/+/, \"\");\n}\nexport function isString(s: any): boolean {\n  return typeof s === \"string\";\n}\nexport function isFunction(s: any): boolean {\n  return typeof s === \"function\";\n}\nexport function extractHashFromURL(url: string) {\n  if (url && url.indexOf(\"#\") >= 0) {\n    return url.split(\"#\").pop() || \"\";\n  }\n  return \"\";\n}\nexport function regExpResultToParams(match, names: string[]) {\n  if (names.length === 0) return null;\n  if (!match) return null;\n  return match.slice(1, match.length).reduce((params, value, index) => {\n    if (params === null) params = {};\n    params[names[index]] = decodeURIComponent(value);\n    return params;\n  }, null);\n}\nexport function extractGETParameters(url: string) {\n  const tmp = clean(url).split(/\\?(.*)?$/);\n  return [clean(tmp[0]), tmp.slice(1).join(\"\")];\n}\nexport function parseQuery(queryString: string): Object {\n  var query = {};\n  var pairs = queryString.split(\"&\");\n  for (var i = 0; i < pairs.length; i++) {\n    var pair = pairs[i].split(\"=\");\n    if (pair[0] !== \"\") {\n      let key = decodeURIComponent(pair[0]);\n      if (!query[key]) {\n        query[key] = decodeURIComponent(pair[1] || \"\");\n      } else {\n        if (!Array.isArray(query[key])) query[key] = [query[key]];\n        query[key].push(decodeURIComponent(pair[1] || \"\"));\n      }\n    }\n  }\n  return query;\n}\nexport function matchRoute(context: QContext, route: Route): false | Match {\n  const [current, GETParams] = extractGETParameters(\n    clean(context.currentLocationPath)\n  );\n  const params = GETParams === \"\" ? null : parseQuery(GETParams);\n  const paramNames = [];\n  let pattern;\n  if (isString(route.path)) {\n    pattern =\n      START_BY_SLASH_REGEXP +\n      clean(route.path as string)\n        .replace(PARAMETER_REGEXP, function (full, dots, name) {\n          paramNames.push(name);\n          return REPLACE_VARIABLE_REGEXP;\n        })\n        .replace(WILDCARD_REGEXP, REPLACE_WILDCARD)\n        .replace(NOT_SURE_REGEXP, REPLACE_NOT_SURE) +\n      \"$\";\n    if (clean(route.path as string) === \"\") {\n      if (clean(current) === \"\") {\n        return {\n          url: current,\n          queryString: GETParams,\n          hashString: extractHashFromURL(context.to),\n          route: route,\n          data: null,\n          params,\n        };\n      }\n    }\n  } else {\n    pattern = route.path;\n  }\n  const regexp = new RegExp(pattern, MATCH_REGEXP_FLAGS);\n  const match = current.match(regexp);\n\n  if (match) {\n    const data = isString(route.path)\n      ? regExpResultToParams(match, paramNames)\n      : match.groups\n      ? match.groups\n      : match.slice(1);\n    return {\n      url: clean(current.replace(new RegExp(`^${context.instance.root}`), \"\")),\n      queryString: GETParams,\n      hashString: extractHashFromURL(context.to),\n      route: route,\n      data,\n      params,\n    };\n  }\n  return false;\n}\nexport function pushStateAvailable(): boolean {\n  return !!(\n    typeof window !== \"undefined\" &&\n    window.history &&\n    window.history.pushState\n  );\n}\nexport function undefinedOrTrue(obj, key: string): boolean {\n  return typeof obj[key] === \"undefined\" || obj[key] === true;\n}\nexport function parseNavigateOptions(source?: string): NavigateOptions {\n  if (!source) return {};\n  const pairs = source.split(\",\");\n  const options: NavigateOptions = {};\n  let resolveOptions: ResolveOptions;\n\n  pairs.forEach((str) => {\n    const temp = str.split(\":\").map((v) => v.replace(/(^ +| +$)/g, \"\"));\n    switch (temp[0]) {\n      case \"historyAPIMethod\":\n        options.historyAPIMethod = temp[1];\n        break;\n      case \"resolveOptionsStrategy\":\n        if (!resolveOptions) resolveOptions = {};\n        resolveOptions.strategy = temp[1] as ResolveStrategy;\n        break;\n      case \"resolveOptionsHash\":\n        if (!resolveOptions) resolveOptions = {};\n        resolveOptions.hash = temp[1] === \"true\";\n        break;\n      case \"updateBrowserURL\":\n      case \"callHandler\":\n      case \"updateState\":\n      case \"force\":\n        options[temp[0]] = temp[1] === \"true\";\n        break;\n    }\n  });\n  if (resolveOptions) {\n    options.resolveOptions = resolveOptions;\n  }\n  return options;\n}\nexport function windowAvailable() {\n  return typeof window !== \"undefined\";\n}\nexport function accumulateHooks(\n  hooks = [],\n  result: RouteHooksStorage = {}\n): RouteHooksStorage {\n  hooks\n    .filter((h) => h)\n    .forEach((h) => {\n      [\"before\", \"after\", \"already\", \"leave\"].forEach((type) => {\n        if (h[type]) {\n          if (!result[type]) result[type] = [];\n          result[type].push(h[type]);\n        }\n      });\n    });\n  return result as RouteHooksStorage;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(\"./src/index.ts\");\n"],"sourceRoot":""}