@angular/router 6.0.0-rc.6 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/router-testing.umd.js +1 -1
- package/bundles/router-testing.umd.js.map +1 -1
- package/bundles/router-testing.umd.min.js +1 -1
- package/bundles/router-testing.umd.min.js.map +1 -1
- package/bundles/router-upgrade.umd.js +1 -1
- package/bundles/router-upgrade.umd.min.js +1 -1
- package/bundles/router-upgrade.umd.min.js.map +1 -1
- package/bundles/router.umd.js +2 -2
- package/bundles/router.umd.js.map +1 -1
- package/bundles/router.umd.min.js +2 -2
- package/bundles/router.umd.min.js.map +1 -1
- package/esm2015/src/version.js +1 -1
- package/esm5/src/version.js +1 -1
- package/fesm2015/router.js +2 -2
- package/fesm2015/router.js.map +1 -1
- package/fesm2015/testing.js +1 -1
- package/fesm2015/testing.js.map +1 -1
- package/fesm2015/upgrade.js +1 -1
- package/fesm2015/upgrade.js.map +1 -1
- package/fesm5/router.js +2 -2
- package/fesm5/router.js.map +1 -1
- package/fesm5/testing.js +1 -1
- package/fesm5/upgrade.js +1 -1
- package/package.json +5 -5
- package/router.metadata.json +1 -1
- package/testing.d.ts +1 -1
- package/upgrade.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["packages/router/router.umd.js"],"names":["global","factory","exports","module","require","define","amd","ng","router","common","core","rxjs","operators","platformBrowser","this","extendStatics","Object","setPrototypeOf","__proto__","Array","d","b","p","hasOwnProperty","__extends","__","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","__values","o","m","Symbol","iterator","next","value","done","__read","r","e","ar","push","error","__spread","concat","RouterEvent","NavigationStart","_super","id","url","navigationTrigger","restoredState","_this","toString","NavigationEnd","urlAfterRedirects","NavigationCancel","reason","NavigationError","RoutesRecognized","state","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","route","path","RouteConfigLoadEnd","ChildActivationStart","snapshot","routeConfig","ChildActivationEnd","ActivationStart","ActivationEnd","PRIMARY_OUTLET","ParamsAsMap","params","has","name","get","v","isArray","getAll","defineProperty","keys","enumerable","configurable","convertToParamMap","defaultUrlMatcher","segments","segmentGroup","parts","split","pathMatch","hasChildren","posParams","index","part","segment","startsWith","substring","consumed","slice","LoadedRouterConfig","routes","validateConfig","config","parentPath","validateNode","getFullPath","fullPath","Error","component","outlet","redirectTo","children","loadChildren","matcher","charAt","currentRoute","copyConfig","map","shallowEqual","a","key","k1","k2","flatten","arr","apply","last$1","forEach","map$$1","callback","prop","andObservables","observables","pipe","mergeAll","every","result","wrapIntoObservable","ɵisObservable","ɵisPromise","from","Promise","resolve","of","containsTree","container","containee","exact","equalQueryParams","queryParams","equalSegmentGroups","equalPath","numberOfChildren","c","root","containsQueryParams","containsSegmentGroup","containsSegmentGroupHelper","containeePaths","current","UrlTree","fragment","_queryParamMap","DEFAULT_SERIALIZER","serialize","UrlSegmentGroup","parent","k","serializePaths","UrlSegment","parameters","_parameterMap","serializePath","as","bs","mapChildrenIntoArray","fn","res","child","childOutlet","UrlSerializer","DefaultUrlSerializer","parse","UrlParser","parseRootSegment","parseQueryParams","parseFragment","tree","serializeSegment","primary","children_1","join","serializeQueryParams","strParams","encodeUriQuery","encodeUriFragment","encodeURI","encodeUriString","encodeURIComponent","replace","encodeUriSegment","decode","decodeURIComponent","decodeQuery","serializeMatrixParams","SEGMENT_RE","matchSegments","str","match","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","remaining","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","capture","parseParens","parseMatrixParams","parseParam","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodedVal","currentVal","allowPrimary","outletName","indexOf","substr","NoMatch","AbsoluteRedirect","urlTree","noMatch","Observable","obs","absoluteRedirect","newTree","namedOutletsRedirect","ApplyRedirects","moduleInjector","configLoader","urlSerializer","allowRedirects","ngModule","NgModuleRef","expandSegmentGroup","rootSegmentGroup","createUrlTree","catchError","noMatchError","rootCandidate","_a","expandChildren","expandSegment","waitForMap","obj","waitHead","waitTail","mapped","concatAll","last","expandSegmentAgainstRoute","first","_","EmptyError","noLeftoversInUrl","paths","getOutlet","undefined","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","lineralizeSegments","mergeMap","newSegments","group","consumedSegments","lastChild","positionalParamSegments","matched","rawSegmentGroup","load","injector","cfg","_loadedConfig","rawSlicedSegments","getChildConfig","routerConfig","childModule","childConfig","slicedSegments","containsEmptyPathRedirectsWithNamedOutlets","some","isEmptyPathRedirect","mergeTrivialChildren","createChildrenForEmptySegments","primarySegmentGroup","e_3","routes_2","routes_2_1","e_3_1","return","containsEmptyPathRedirects","addEmptySegmentsToChildrenIfNeeded","e_2","routes_1","routes_1_1","e_2_1","cs","runCanLoadGuard","canLoad","injectionToken","guard","shouldLoad","canLoadFails","navigationCancelingError","message","applyRedirectCreatreUrlTree","newRoot","createSegmentGroup","createQueryParams","redirectToParams","actualParams","sourceName","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","pos","e_1","idx","actualSegments_1","actualSegments_1_1","splice","e_1_1","Tree","_root","pathFromRoot","findNode","firstChild","siblings","findPath","filter","cc","node","_b","node_1","_c","unshift","TreeNode","nodeChildrenAsMap","RouterState","setRouterState","createEmptyState","rootComponent","createEmptyStateSnapshot","activated","ActivatedRouteSnapshot","RouterStateSnapshot","emptyUrl","BehaviorSubject","emptyParams","emptyData","emptyQueryParams","ActivatedRoute","data","futureSnapshot","_futureSnapshot","_routerState","_paramMap","inheritedParamsDataResolve","paramsInheritanceStrategy","inheritingStartingFrom","parent_1","flattenInherited","reduce","curr","_resolvedData","urlSegment","lastPathIndex","_urlSegment","_lastPathIndex","_resolve","serializeNode","advanceActivatedRoute","currentSnapshot","nextSnapshot","shallowEqualArrays","equalParamsAndUrlSegments","equalSegments","isMatrixParams","command","outlets","segmentPath","oldSegmentGroup","newSegmentGroup","qp","replaceSegment","oldSegment","newSegment","Navigation","isAbsolute","numberOfDoubleDots","commands","cmdWithOutlet","find","toRoot","Position","processChildren","getPath","updateSegmentGroup","startIndex","updateSegmentGroupChildren","prefixedWith","currentCommandIndex","currentPathIndex","pathIndex","commandIndex","compare","slicedCommands","g","createNewSegmentGroup","outlets_2","getOutlets","createNewSegmentChildren","stringify","CanActivate","CanDeactivate","PreActivation","future","forwardEvent","canActivateChecks","canDeactivateChecks","initialize","parentContexts","futureRoot","setupChildRouteGuards","checkGuards","isDeactivating","isActivating","runCanDeactivateChecks","canDeactivate","runCanActivateChecks","resolveData","concatMap","check","runResolve","futureNode","currNode","contexts","futurePath","prevChildren","setupRouteGuards","deactivateRouteAndItsChildren","getContext","context","shouldRunGuardsAndResolvers","runGuardsAndResolvers","mode","childName","isActivated","runCanDeactivate","fireChildActivationStart","fireActivationStart","runCanActivateChild","runCanActivate","canActivate","getToken","canActivateChildGuards","reverse","extractCanActivateChild","guards","canActivateChild","resolveNode","resolvedData","key_1","getResolver","resolver","token","closestLoadedConfig","NoMatch$1","Recognizer","rootComponentType","recognize","split$1","processSegmentGroup","freeze","rootNode","routeState","inheritParamsAndData","routeNode","processSegment","checkOutletNameUniqueness","nodes","names","routeWithSameOutletName","sortActivatedRouteSnapshots","sort","localeCompare","config_1","config_1_1","processSegmentAgainstRoute","rawSegment","getData","getSourceSegmentGroup","getPathIndexShift","getResolve","match$1","_sourceSegment","_segmentIndexShift","containsEmptyPathMatchesWithNamedOutlets","emptyPathMatch","getOutlet$1","s_1","createChildrenForEmptyPaths","primarySegment","containsEmptyPathMatches","s_2","addEmptyPathsToChildrenIfNeeded","RouteReuseStrategy","DefaultRouteReuseStrategy","shouldDetach","store","detachedTree","shouldAttach","retrieve","shouldReuseRoute","ROUTES","InjectionToken","RouterConfigLoader","loader","compiler","onLoadStartListener","onLoadEndListener","parentInjector","loadModuleFactory","NgModuleFactory","compileModuleAsync","UrlHandlingStrategy","DefaultUrlHandlingStrategy","shouldProcessUrl","extract","merge","newUrlPart","wholeUrl","defaultErrorHandler","defaultRouterHook","Router","rootContexts","location","navigations","navigationId","events","Subject","errorHandler","navigated","lastSuccessfulId","hooks","beforePreactivation","afterPreactivation","urlHandlingStrategy","routeReuseStrategy","onSameUrlNavigation","resetConfig","currentUrlTree","createEmptyUrlTree","rawUrlTree","triggerEvent","routerState","processNavigations","resetRootComponentType","initialNavigation","setUpLocationChangeListener","navigateByUrl","replaceUrl","locationSubscription","subscribe","change","source","setTimeout","scheduleNavigation","serializeUrl","ngOnDestroy","dispose","unsubscribe","navigationExtras","relativeTo","preserveQueryParams","queryParamsHandling","preserveFragment","isDevMode","console","warn","f","q","removeEmptyProps","nav","computeNavigation","cmd","cmdIdx","outlets_1","urlPart","partIndex","startingPosition","findStartingPosition","modifier","createPositionApplyingDoubleDots","ci","dd","extras","skipLocationChange","parseUrl","mergedTree","navigate","validateCommands","isActive","executeScheduledNavigation","promise","catch","rawUrl","lastNavigation","reject","rej","urlTransition","then","runNavigate","precreatedState","resolvePromise","rejectPromise","preActivation","routerState$","appliedUrl","applyRedirects","evt","createRouterState","prevState","createNode","createOrReuseChildren","detachedRouteHandle","setFutureSnapshotsOfActivatedRoutes","createActivatedRoute","activateRoutes","storedState","storedUrl","navigationIsSuccessful","isCurrentPathEqualTo","replaceState","go","ActivateRoutes","activate","resetUrlToCurrentUrlTree","isNavigationCancelingError","resetStateAndUrl","ee","futureState","currState","currRoot","deactivateChildRoutes","activateChildRoutes","futureChild","childOutletName","deactivateRoutes","parentContext","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","componentRef","detach","onOutletDeactivated","contexts_1","deactivate","getOrCreateContext","stored","onOutletReAttached","attachRef","attach","advanceActivatedRouteNodeAndItsChildren","parentLoadedConfig","cmpFactoryResolver","componentFactoryResolver","activateWith","RouterLink","tabIndex","renderer","el","setAttribute","nativeElement","set","preserve","onClick","attrBoolValue","decorators","type","Directive","args","selector","ctorParameters","Attribute","Renderer2","ElementRef","propDecorators","Input","routerLink","HostListener","RouterLinkWithHref","locationStrategy","subscription","updateTargetUrlAndHref","ngOnChanges","changes","button","ctrlKey","metaKey","shiftKey","target","href","prepareExternalUrl","LocationStrategy","HostBinding","RouterLinkActive","element","cdr","classes","routerLinkActiveOptions","update","ngAfterContentInit","links","linksWithHrefs","hasActiveLinks","addClass","removeClass","isLinkActive","link","exportAs","ChangeDetectorRef","ContentChildren","descendants","routerLinkActive","OutletContext","ChildrenOutletContexts","Map","onChildOutletCreated","onChildOutletDestroyed","RouterOutlet","changeDetector","_activatedRoute","activateEvents","EventEmitter","deactivateEvents","ngOnInit","instance","cmp","ref","activatedRoute","insert","hostView","destroy","emit","resolveComponentFactory","childContexts","OutletInjector","createComponent","markForCheck","ViewContainerRef","ComponentFactoryResolver","Output","notFoundValue","PreloadingStrategy","PreloadAllModules","preload","NoPreloading","RouterPreloader","moduleLoader","preloadingStrategy","setUpPreloading","processRoutes","preloadConfig","Injectable","NgModuleFactoryLoader","Compiler","Injector","ROUTER_DIRECTIVES","ROUTER_CONFIGURATION","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","Location","provide","useClass","useFactory","setupRouter","deps","ApplicationRef","Optional","rootRoute","SystemJsNgModuleLoader","useValue","enableTracing","routerNgProbeToken","NgProbeToken","RouterModule","forRoot","providers","provideRoutes","provideForRootGuard","SkipSelf","provideLocationStrategy","PlatformLocation","Inject","APP_BASE_HREF","useExisting","multi","provideRouterInitializer","forChild","NgModule","declarations","platformLocationStrategy","baseHref","options","useHash","HashLocationStrategy","PathLocationStrategy","ANALYZE_FOR_ENTRY_COMPONENTS","opts","dom_1","ɵgetDOM","logGroup","log","logGroupEnd","RouterInitializer","initNavigation","resultOfPreactivationDone","appInitializer","LOCATION_INITIALIZED","isLegacyDisabled","isLegacyEnabled","bootstrapListener","bootstrappedComponentRef","preloader","components","componentTypes","complete","getAppInitializer","bind","getBootstrapListener","ROUTER_INITIALIZER","APP_INITIALIZER","APP_BOOTSTRAP_LISTENER","VERSION","Version","ɵangular_packages_router_router_a","ɵangular_packages_router_router_g","ɵangular_packages_router_router_h","ɵangular_packages_router_router_i","ɵangular_packages_router_router_d","ɵangular_packages_router_router_c","ɵangular_packages_router_router_j","ɵangular_packages_router_router_f","ɵangular_packages_router_router_b","ɵangular_packages_router_router_e","ɵangular_packages_router_router_k","ɵangular_packages_router_router_l","ɵROUTER_PROVIDERS","ɵflatten"],"mappings":"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","sourcesContent":["/**\n * @license Angular v6.0.0-rc.6\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/platform-browser')) :\n\ttypeof define === 'function' && define.amd ? define('@angular/router', ['exports', '@angular/common', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/platform-browser'], factory) :\n\t(factory((global.ng = global.ng || {}, global.ng.router = {}),global.ng.common,global.ng.core,global.rxjs,global.rxjs.operators,global.ng.platformBrowser));\n}(this, (function (exports,common,core,rxjs,operators,platformBrowser) { 'use strict';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Base for events the Router goes through, as opposed to events tied to a specific\n * Route. `RouterEvent`s will only be fired one time for any given navigation.\n *\n * Example:\n *\n * ```\n * class MyService {\n * constructor(public router: Router, logger: Logger) {\n * router.events.filter(e => e instanceof RouterEvent).subscribe(e => {\n * logger.log(e.id, e.url);\n * });\n * }\n * }\n * ```\n *\n * @experimental\n */\nvar RouterEvent = /** @class */ (function () {\n function RouterEvent(/** @docsNotRequired */\n id, /** @docsNotRequired */\n url) {\n this.id = id;\n this.url = url;\n }\n return RouterEvent;\n}());\n/**\n * @description\n *\n * Represents an event triggered when a navigation starts.\n *\n *\n */\nvar NavigationStart = /** @class */ (function (_super) {\n __extends(NavigationStart, _super);\n function NavigationStart(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n /** @docsNotRequired */\n navigationTrigger, /** @docsNotRequired */\n /** @docsNotRequired */\n restoredState) {\n /** @docsNotRequired */\n if (navigationTrigger === void 0) { navigationTrigger = 'imperative'; }\n /** @docsNotRequired */\n if (restoredState === void 0) { restoredState = null; }\n var _this = _super.call(this, id, url) || this;\n _this.navigationTrigger = navigationTrigger;\n _this.restoredState = restoredState;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationStart.prototype.toString = /** @docsNotRequired */\n function () { return \"NavigationStart(id: \" + this.id + \", url: '\" + this.url + \"')\"; };\n return NavigationStart;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when a navigation ends successfully.\n *\n *\n */\nvar NavigationEnd = /** @class */ (function (_super) {\n __extends(NavigationEnd, _super);\n function NavigationEnd(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationEnd.prototype.toString = /** @docsNotRequired */\n function () {\n return \"NavigationEnd(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"')\";\n };\n return NavigationEnd;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when a navigation is canceled.\n *\n *\n */\nvar NavigationCancel = /** @class */ (function (_super) {\n __extends(NavigationCancel, _super);\n function NavigationCancel(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n reason) {\n var _this = _super.call(this, id, url) || this;\n _this.reason = reason;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationCancel.prototype.toString = /** @docsNotRequired */\n function () { return \"NavigationCancel(id: \" + this.id + \", url: '\" + this.url + \"')\"; };\n return NavigationCancel;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when a navigation fails due to an unexpected error.\n *\n *\n */\nvar NavigationError = /** @class */ (function (_super) {\n __extends(NavigationError, _super);\n function NavigationError(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n error) {\n var _this = _super.call(this, id, url) || this;\n _this.error = error;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationError.prototype.toString = /** @docsNotRequired */\n function () {\n return \"NavigationError(id: \" + this.id + \", url: '\" + this.url + \"', error: \" + this.error + \")\";\n };\n return NavigationError;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when routes are recognized.\n *\n *\n */\nvar RoutesRecognized = /** @class */ (function (_super) {\n __extends(RoutesRecognized, _super);\n function RoutesRecognized(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n RoutesRecognized.prototype.toString = /** @docsNotRequired */\n function () {\n return \"RoutesRecognized(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return RoutesRecognized;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the start of the Guard phase of routing.\n *\n * @experimental\n */\nvar GuardsCheckStart = /** @class */ (function (_super) {\n __extends(GuardsCheckStart, _super);\n function GuardsCheckStart(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n GuardsCheckStart.prototype.toString = function () {\n return \"GuardsCheckStart(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return GuardsCheckStart;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the end of the Guard phase of routing.\n *\n * @experimental\n */\nvar GuardsCheckEnd = /** @class */ (function (_super) {\n __extends(GuardsCheckEnd, _super);\n function GuardsCheckEnd(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state, /** @docsNotRequired */\n shouldActivate) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n _this.shouldActivate = shouldActivate;\n return _this;\n }\n GuardsCheckEnd.prototype.toString = function () {\n return \"GuardsCheckEnd(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \", shouldActivate: \" + this.shouldActivate + \")\";\n };\n return GuardsCheckEnd;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the start of the Resolve phase of routing. The timing of this\n * event may change, thus it's experimental. In the current iteration it will run\n * in the \"resolve\" phase whether there's things to resolve or not. In the future this\n * behavior may change to only run when there are things to be resolved.\n *\n * @experimental\n */\nvar ResolveStart = /** @class */ (function (_super) {\n __extends(ResolveStart, _super);\n function ResolveStart(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n ResolveStart.prototype.toString = function () {\n return \"ResolveStart(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return ResolveStart;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the end of the Resolve phase of routing. See note on\n * `ResolveStart` for use of this experimental API.\n *\n * @experimental\n */\nvar ResolveEnd = /** @class */ (function (_super) {\n __extends(ResolveEnd, _super);\n function ResolveEnd(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n ResolveEnd.prototype.toString = function () {\n return \"ResolveEnd(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return ResolveEnd;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered before lazy loading a route config.\n *\n * @experimental\n */\nvar RouteConfigLoadStart = /** @class */ (function () {\n function RouteConfigLoadStart(/** @docsNotRequired */\n route) {\n this.route = route;\n }\n RouteConfigLoadStart.prototype.toString = function () { return \"RouteConfigLoadStart(path: \" + this.route.path + \")\"; };\n return RouteConfigLoadStart;\n}());\n/**\n * @description\n *\n * Represents an event triggered when a route has been lazy loaded.\n *\n * @experimental\n */\nvar RouteConfigLoadEnd = /** @class */ (function () {\n function RouteConfigLoadEnd(/** @docsNotRequired */\n route) {\n this.route = route;\n }\n RouteConfigLoadEnd.prototype.toString = function () { return \"RouteConfigLoadEnd(path: \" + this.route.path + \")\"; };\n return RouteConfigLoadEnd;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ChildActivationEnd` for use of this experimental API.\n *\n * @experimental\n */\nvar ChildActivationStart = /** @class */ (function () {\n function ChildActivationStart(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ChildActivationStart.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ChildActivationStart(path: '\" + path + \"')\";\n };\n return ChildActivationStart;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ChildActivationStart` for use of this experimental API.\n *\n * @experimental\n */\nvar ChildActivationEnd = /** @class */ (function () {\n function ChildActivationEnd(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ChildActivationEnd.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ChildActivationEnd(path: '\" + path + \"')\";\n };\n return ChildActivationEnd;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ActivationEnd` for use of this experimental API.\n *\n * @experimental\n */\nvar ActivationStart = /** @class */ (function () {\n function ActivationStart(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ActivationStart.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ActivationStart(path: '\" + path + \"')\";\n };\n return ActivationStart;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ActivationStart` for use of this experimental API.\n *\n * @experimental\n */\nvar ActivationEnd = /** @class */ (function () {\n function ActivationEnd(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ActivationEnd.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ActivationEnd(path: '\" + path + \"')\";\n };\n return ActivationEnd;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Name of the primary outlet.\n *\n *\n */\nvar PRIMARY_OUTLET = 'primary';\nvar ParamsAsMap = /** @class */ (function () {\n function ParamsAsMap(params) {\n this.params = params || {};\n }\n ParamsAsMap.prototype.has = function (name) { return this.params.hasOwnProperty(name); };\n ParamsAsMap.prototype.get = function (name) {\n if (this.has(name)) {\n var v = this.params[name];\n return Array.isArray(v) ? v[0] : v;\n }\n return null;\n };\n ParamsAsMap.prototype.getAll = function (name) {\n if (this.has(name)) {\n var v = this.params[name];\n return Array.isArray(v) ? v : [v];\n }\n return [];\n };\n Object.defineProperty(ParamsAsMap.prototype, \"keys\", {\n get: function () { return Object.keys(this.params); },\n enumerable: true,\n configurable: true\n });\n return ParamsAsMap;\n}());\n/**\n * Convert a `Params` instance to a `ParamMap`.\n *\n *\n */\nfunction convertToParamMap(params) {\n return new ParamsAsMap(params);\n}\nvar NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\nfunction navigationCancelingError(message) {\n var error = Error('NavigationCancelingError: ' + message);\n error[NAVIGATION_CANCELING_ERROR] = true;\n return error;\n}\nfunction isNavigationCancelingError(error) {\n return error && error[NAVIGATION_CANCELING_ERROR];\n}\n// Matches the route configuration (`route`) against the actual URL (`segments`).\nfunction defaultUrlMatcher(segments, segmentGroup, route) {\n var parts = route.path.split('/');\n if (parts.length > segments.length) {\n // The actual URL is shorter than the config, no match\n return null;\n }\n if (route.pathMatch === 'full' &&\n (segmentGroup.hasChildren() || parts.length < segments.length)) {\n // The config is longer than the actual URL but we are looking for a full match, return null\n return null;\n }\n var posParams = {};\n // Check each config part against the actual URL\n for (var index = 0; index < parts.length; index++) {\n var part = parts[index];\n var segment = segments[index];\n var isParameter = part.startsWith(':');\n if (isParameter) {\n posParams[part.substring(1)] = segment;\n }\n else if (part !== segment.path) {\n // The actual URL part does not match the config, no match\n return null;\n }\n }\n return { consumed: segments.slice(0, parts.length), posParams: posParams };\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar LoadedRouterConfig = /** @class */ (function () {\n function LoadedRouterConfig(routes, module) {\n this.routes = routes;\n this.module = module;\n }\n return LoadedRouterConfig;\n}());\nfunction validateConfig(config, parentPath) {\n if (parentPath === void 0) { parentPath = ''; }\n // forEach doesn't iterate undefined values\n for (var i = 0; i < config.length; i++) {\n var route = config[i];\n var fullPath = getFullPath(parentPath, route);\n validateNode(route, fullPath);\n }\n}\nfunction validateNode(route, fullPath) {\n if (!route) {\n throw new Error(\"\\n Invalid configuration of route '\" + fullPath + \"': Encountered undefined route.\\n The reason might be an extra comma.\\n\\n Example:\\n const routes: Routes = [\\n { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\\n { path: 'dashboard', component: DashboardComponent },, << two commas\\n { path: 'detail/:id', component: HeroDetailComponent }\\n ];\\n \");\n }\n if (Array.isArray(route)) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': Array cannot be specified\");\n }\n if (!route.component && (route.outlet && route.outlet !== PRIMARY_OUTLET)) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': a componentless route cannot have a named outlet set\");\n }\n if (route.redirectTo && route.children) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': redirectTo and children cannot be used together\");\n }\n if (route.redirectTo && route.loadChildren) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': redirectTo and loadChildren cannot be used together\");\n }\n if (route.children && route.loadChildren) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': children and loadChildren cannot be used together\");\n }\n if (route.redirectTo && route.component) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': redirectTo and component cannot be used together\");\n }\n if (route.path && route.matcher) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': path and matcher cannot be used together\");\n }\n if (route.redirectTo === void 0 && !route.component && !route.children && !route.loadChildren) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"'. One of the following must be provided: component, redirectTo, children or loadChildren\");\n }\n if (route.path === void 0 && route.matcher === void 0) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': routes must have either a path or a matcher specified\");\n }\n if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': path cannot start with a slash\");\n }\n if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n var exp = \"The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.\";\n throw new Error(\"Invalid configuration of route '{path: \\\"\" + fullPath + \"\\\", redirectTo: \\\"\" + route.redirectTo + \"\\\"}': please provide 'pathMatch'. \" + exp);\n }\n if (route.pathMatch !== void 0 && route.pathMatch !== 'full' && route.pathMatch !== 'prefix') {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': pathMatch can only be set to 'prefix' or 'full'\");\n }\n if (route.children) {\n validateConfig(route.children, fullPath);\n }\n}\nfunction getFullPath(parentPath, currentRoute) {\n if (!currentRoute) {\n return parentPath;\n }\n if (!parentPath && !currentRoute.path) {\n return '';\n }\n else if (parentPath && !currentRoute.path) {\n return parentPath + \"/\";\n }\n else if (!parentPath && currentRoute.path) {\n return currentRoute.path;\n }\n else {\n return parentPath + \"/\" + currentRoute.path;\n }\n}\nfunction copyConfig(r) {\n var children = r.children && r.children.map(copyConfig);\n return children ? __assign({}, r, { children: children }) : __assign({}, r);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction shallowEqualArrays(a, b) {\n if (a.length !== b.length)\n return false;\n for (var i = 0; i < a.length; ++i) {\n if (!shallowEqual(a[i], b[i]))\n return false;\n }\n return true;\n}\nfunction shallowEqual(a, b) {\n var k1 = Object.keys(a);\n var k2 = Object.keys(b);\n if (k1.length != k2.length) {\n return false;\n }\n var key;\n for (var i = 0; i < k1.length; i++) {\n key = k1[i];\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Flattens single-level nested arrays.\n */\nfunction flatten(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n/**\n * Return the last element of an array.\n */\nfunction last$1(a) {\n return a.length > 0 ? a[a.length - 1] : null;\n}\n/**\n * Verifys all booleans in an array are `true`.\n */\n\nfunction forEach(map$$1, callback) {\n for (var prop in map$$1) {\n if (map$$1.hasOwnProperty(prop)) {\n callback(map$$1[prop], prop);\n }\n }\n}\nfunction waitForMap(obj, fn) {\n if (Object.keys(obj).length === 0) {\n return rxjs.of({});\n }\n var waitHead = [];\n var waitTail = [];\n var res = {};\n forEach(obj, function (a, k) {\n var mapped = fn(k, a).pipe(operators.map(function (r) { return res[k] = r; }));\n if (k === PRIMARY_OUTLET) {\n waitHead.push(mapped);\n }\n else {\n waitTail.push(mapped);\n }\n });\n // Closure compiler has problem with using spread operator here. So just using Array.concat.\n return rxjs.of.apply(null, waitHead.concat(waitTail)).pipe(operators.concatAll(), operators.last(), operators.map(function () { return res; }));\n}\n/**\n * ANDs Observables by merging all input observables, reducing to an Observable verifying all\n * input Observables return `true`.\n */\nfunction andObservables(observables) {\n return observables.pipe(operators.mergeAll(), operators.every(function (result) { return result === true; }));\n}\nfunction wrapIntoObservable(value) {\n if (core.ɵisObservable(value)) {\n return value;\n }\n if (core.ɵisPromise(value)) {\n // Use `Promise.resolve()` to wrap promise-like instances.\n // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the\n // change detection.\n return rxjs.from(Promise.resolve(value));\n }\n return rxjs.of(value);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createEmptyUrlTree() {\n return new UrlTree(new UrlSegmentGroup([], {}), {}, null);\n}\nfunction containsTree(container, containee, exact) {\n if (exact) {\n return equalQueryParams(container.queryParams, containee.queryParams) &&\n equalSegmentGroups(container.root, containee.root);\n }\n return containsQueryParams(container.queryParams, containee.queryParams) &&\n containsSegmentGroup(container.root, containee.root);\n}\nfunction equalQueryParams(container, containee) {\n return shallowEqual(container, containee);\n}\nfunction equalSegmentGroups(container, containee) {\n if (!equalPath(container.segments, containee.segments))\n return false;\n if (container.numberOfChildren !== containee.numberOfChildren)\n return false;\n for (var c in containee.children) {\n if (!container.children[c])\n return false;\n if (!equalSegmentGroups(container.children[c], containee.children[c]))\n return false;\n }\n return true;\n}\nfunction containsQueryParams(container, containee) {\n return Object.keys(containee).length <= Object.keys(container).length &&\n Object.keys(containee).every(function (key) { return containee[key] === container[key]; });\n}\nfunction containsSegmentGroup(container, containee) {\n return containsSegmentGroupHelper(container, containee, containee.segments);\n}\nfunction containsSegmentGroupHelper(container, containee, containeePaths) {\n if (container.segments.length > containeePaths.length) {\n var current = container.segments.slice(0, containeePaths.length);\n if (!equalPath(current, containeePaths))\n return false;\n if (containee.hasChildren())\n return false;\n return true;\n }\n else if (container.segments.length === containeePaths.length) {\n if (!equalPath(container.segments, containeePaths))\n return false;\n for (var c in containee.children) {\n if (!container.children[c])\n return false;\n if (!containsSegmentGroup(container.children[c], containee.children[c]))\n return false;\n }\n return true;\n }\n else {\n var current = containeePaths.slice(0, container.segments.length);\n var next = containeePaths.slice(container.segments.length);\n if (!equalPath(container.segments, current))\n return false;\n if (!container.children[PRIMARY_OUTLET])\n return false;\n return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next);\n }\n}\n/**\n * @description\n *\n * Represents the parsed URL.\n *\n * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a\n * serialized tree.\n * UrlTree is a data structure that provides a lot of affordances in dealing with URLs\n *\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const tree: UrlTree =\n * router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');\n * const f = tree.fragment; // return 'fragment'\n * const q = tree.queryParams; // returns {debug: 'true'}\n * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n * const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'\n * g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'\n * g.children['support'].segments; // return 1 segment 'help'\n * }\n * }\n * ```\n *\n *\n */\nvar UrlTree = /** @class */ (function () {\n /** @internal */\n function UrlTree(/** The root segment group of the URL tree */\n root, /** The query params of the URL */\n queryParams, /** The fragment of the URL */\n fragment) {\n this.root = root;\n this.queryParams = queryParams;\n this.fragment = fragment;\n }\n Object.defineProperty(UrlTree.prototype, \"queryParamMap\", {\n get: function () {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n },\n enumerable: true,\n configurable: true\n });\n /** @docsNotRequired */\n /** @docsNotRequired */\n UrlTree.prototype.toString = /** @docsNotRequired */\n function () { return DEFAULT_SERIALIZER.serialize(this); };\n return UrlTree;\n}());\n/**\n * @description\n *\n * Represents the parsed URL segment group.\n *\n * See `UrlTree` for more information.\n *\n *\n */\nvar UrlSegmentGroup = /** @class */ (function () {\n function UrlSegmentGroup(/** The URL segments of this group. See `UrlSegment` for more information */\n segments, /** The list of children of this group */\n children) {\n var _this = this;\n this.segments = segments;\n this.children = children;\n /** The parent node in the url tree */\n this.parent = null;\n forEach(children, function (v, k) { return v.parent = _this; });\n }\n /** Whether the segment has child segments */\n /** Whether the segment has child segments */\n UrlSegmentGroup.prototype.hasChildren = /** Whether the segment has child segments */\n function () { return this.numberOfChildren > 0; };\n Object.defineProperty(UrlSegmentGroup.prototype, \"numberOfChildren\", {\n /** Number of child segments */\n get: /** Number of child segments */\n function () { return Object.keys(this.children).length; },\n enumerable: true,\n configurable: true\n });\n /** @docsNotRequired */\n /** @docsNotRequired */\n UrlSegmentGroup.prototype.toString = /** @docsNotRequired */\n function () { return serializePaths(this); };\n return UrlSegmentGroup;\n}());\n/**\n * @description\n *\n * Represents a single URL segment.\n *\n * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix\n * parameters associated with the segment.\n *\n * ## Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const tree: UrlTree = router.parseUrl('/team;id=33');\n * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n * const s: UrlSegment[] = g.segments;\n * s[0].path; // returns 'team'\n * s[0].parameters; // returns {id: 33}\n * }\n * }\n * ```\n *\n *\n */\nvar UrlSegment = /** @class */ (function () {\n function UrlSegment(/** The path part of a URL segment */\n path, /** The matrix parameters associated with a segment */\n parameters) {\n this.path = path;\n this.parameters = parameters;\n }\n Object.defineProperty(UrlSegment.prototype, \"parameterMap\", {\n get: function () {\n if (!this._parameterMap) {\n this._parameterMap = convertToParamMap(this.parameters);\n }\n return this._parameterMap;\n },\n enumerable: true,\n configurable: true\n });\n /** @docsNotRequired */\n /** @docsNotRequired */\n UrlSegment.prototype.toString = /** @docsNotRequired */\n function () { return serializePath(this); };\n return UrlSegment;\n}());\nfunction equalSegments(as, bs) {\n return equalPath(as, bs) && as.every(function (a, i) { return shallowEqual(a.parameters, bs[i].parameters); });\n}\nfunction equalPath(as, bs) {\n if (as.length !== bs.length)\n return false;\n return as.every(function (a, i) { return a.path === bs[i].path; });\n}\nfunction mapChildrenIntoArray(segment, fn) {\n var res = [];\n forEach(segment.children, function (child, childOutlet) {\n if (childOutlet === PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n forEach(segment.children, function (child, childOutlet) {\n if (childOutlet !== PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n return res;\n}\n/**\n * @description\n *\n * Serializes and deserializes a URL string into a URL tree.\n *\n * The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n *\n * See `DefaultUrlSerializer` for an example of a URL serializer.\n *\n *\n */\nvar UrlSerializer = /** @class */ (function () {\n function UrlSerializer() {\n }\n return UrlSerializer;\n}());\n/**\n * @description\n *\n * A default implementation of the `UrlSerializer`.\n *\n * Example URLs:\n *\n * ```\n * /inbox/33(popup:compose)\n * /inbox/33;open=true/messages/44\n * ```\n *\n * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the\n * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to\n * specify route specific parameters.\n *\n *\n */\nvar DefaultUrlSerializer = /** @class */ (function () {\n function DefaultUrlSerializer() {\n }\n /** Parses a url into a `UrlTree` */\n /** Parses a url into a `UrlTree` */\n DefaultUrlSerializer.prototype.parse = /** Parses a url into a `UrlTree` */\n function (url) {\n var p = new UrlParser(url);\n return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n };\n /** Converts a `UrlTree` into a url */\n /** Converts a `UrlTree` into a url */\n DefaultUrlSerializer.prototype.serialize = /** Converts a `UrlTree` into a url */\n function (tree) {\n var segment = \"/\" + serializeSegment(tree.root, true);\n var query = serializeQueryParams(tree.queryParams);\n var fragment = typeof tree.fragment === \"string\" ? \"#\" + encodeUriFragment((tree.fragment)) : '';\n return \"\" + segment + query + fragment;\n };\n return DefaultUrlSerializer;\n}());\nvar DEFAULT_SERIALIZER = new DefaultUrlSerializer();\nfunction serializePaths(segment) {\n return segment.segments.map(function (p) { return serializePath(p); }).join('/');\n}\nfunction serializeSegment(segment, root) {\n if (!segment.hasChildren()) {\n return serializePaths(segment);\n }\n if (root) {\n var primary = segment.children[PRIMARY_OUTLET] ?\n serializeSegment(segment.children[PRIMARY_OUTLET], false) :\n '';\n var children_1 = [];\n forEach(segment.children, function (v, k) {\n if (k !== PRIMARY_OUTLET) {\n children_1.push(k + \":\" + serializeSegment(v, false));\n }\n });\n return children_1.length > 0 ? primary + \"(\" + children_1.join('//') + \")\" : primary;\n }\n else {\n var children = mapChildrenIntoArray(segment, function (v, k) {\n if (k === PRIMARY_OUTLET) {\n return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n }\n return [k + \":\" + serializeSegment(v, false)];\n });\n return serializePaths(segment) + \"/(\" + children.join('//') + \")\";\n }\n}\n/**\n * Encodes a URI string with the default encoding. This function will only ever be called from\n * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need\n * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't\n * have to be encoded per https://url.spec.whatwg.org.\n */\nfunction encodeUriString(s) {\n return encodeURIComponent(s)\n .replace(/%40/g, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',');\n}\n/**\n * This function should be used to encode both keys and values in a query string key/value. In\n * the following URL, you need to call encodeUriQuery on \"k\" and \"v\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriQuery(s) {\n return encodeUriString(s).replace(/%3B/gi, ';');\n}\n/**\n * This function should be used to encode a URL fragment. In the following URL, you need to call\n * encodeUriFragment on \"f\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriFragment(s) {\n return encodeURI(s);\n}\n/**\n * This function should be run on any URI segment as well as the key and value in a key/value\n * pair for matrix params. In the following URL, you need to call encodeUriSegment on \"html\",\n * \"mk\", and \"mv\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriSegment(s) {\n return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\nfunction decode(s) {\n return decodeURIComponent(s);\n}\n// Query keys/values should have the \"+\" replaced first, as \"+\" in a query string is \" \".\n// decodeURIComponent function will not decode \"+\" as a space.\nfunction decodeQuery(s) {\n return decode(s.replace(/\\+/g, '%20'));\n}\nfunction serializePath(path) {\n return \"\" + encodeUriSegment(path.path) + serializeMatrixParams(path.parameters);\n}\nfunction serializeMatrixParams(params) {\n return Object.keys(params)\n .map(function (key) { return \";\" + encodeUriSegment(key) + \"=\" + encodeUriSegment(params[key]); })\n .join('');\n}\nfunction serializeQueryParams(params) {\n var strParams = Object.keys(params).map(function (name) {\n var value = params[name];\n return Array.isArray(value) ?\n value.map(function (v) { return encodeUriQuery(name) + \"=\" + encodeUriQuery(v); }).join('&') :\n encodeUriQuery(name) + \"=\" + encodeUriQuery(value);\n });\n return strParams.length ? \"?\" + strParams.join(\"&\") : '';\n}\nvar SEGMENT_RE = /^[^\\/()?;=&#]+/;\nfunction matchSegments(str) {\n var match = str.match(SEGMENT_RE);\n return match ? match[0] : '';\n}\nvar QUERY_PARAM_RE = /^[^=?&#]+/;\n// Return the name of the query param at the start of the string or an empty string\nfunction matchQueryParams(str) {\n var match = str.match(QUERY_PARAM_RE);\n return match ? match[0] : '';\n}\nvar QUERY_PARAM_VALUE_RE = /^[^?&#]+/;\n// Return the value of the query param at the start of the string or an empty string\nfunction matchUrlQueryParamValue(str) {\n var match = str.match(QUERY_PARAM_VALUE_RE);\n return match ? match[0] : '';\n}\nvar UrlParser = /** @class */ (function () {\n function UrlParser(url) {\n this.url = url;\n this.remaining = url;\n }\n UrlParser.prototype.parseRootSegment = function () {\n this.consumeOptional('/');\n if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n return new UrlSegmentGroup([], {});\n }\n // The root segment group never has segments\n return new UrlSegmentGroup([], this.parseChildren());\n };\n UrlParser.prototype.parseQueryParams = function () {\n var params = {};\n if (this.consumeOptional('?')) {\n do {\n this.parseQueryParam(params);\n } while (this.consumeOptional('&'));\n }\n return params;\n };\n UrlParser.prototype.parseFragment = function () {\n return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n };\n UrlParser.prototype.parseChildren = function () {\n if (this.remaining === '') {\n return {};\n }\n this.consumeOptional('/');\n var segments = [];\n if (!this.peekStartsWith('(')) {\n segments.push(this.parseSegment());\n }\n while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n this.capture('/');\n segments.push(this.parseSegment());\n }\n var children = {};\n if (this.peekStartsWith('/(')) {\n this.capture('/');\n children = this.parseParens(true);\n }\n var res = {};\n if (this.peekStartsWith('(')) {\n res = this.parseParens(false);\n }\n if (segments.length > 0 || Object.keys(children).length > 0) {\n res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n }\n return res;\n };\n // parse a segment with its matrix parameters\n // ie `name;k1=v1;k2`\n // parse a segment with its matrix parameters\n // ie `name;k1=v1;k2`\n UrlParser.prototype.parseSegment = \n // parse a segment with its matrix parameters\n // ie `name;k1=v1;k2`\n function () {\n var path = matchSegments(this.remaining);\n if (path === '' && this.peekStartsWith(';')) {\n throw new Error(\"Empty path url segment cannot have parameters: '\" + this.remaining + \"'.\");\n }\n this.capture(path);\n return new UrlSegment(decode(path), this.parseMatrixParams());\n };\n UrlParser.prototype.parseMatrixParams = function () {\n var params = {};\n while (this.consumeOptional(';')) {\n this.parseParam(params);\n }\n return params;\n };\n UrlParser.prototype.parseParam = function (params) {\n var key = matchSegments(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n var value = '';\n if (this.consumeOptional('=')) {\n var valueMatch = matchSegments(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n params[decode(key)] = decode(value);\n };\n // Parse a single query parameter `name[=value]`\n // Parse a single query parameter `name[=value]`\n UrlParser.prototype.parseQueryParam = \n // Parse a single query parameter `name[=value]`\n function (params) {\n var key = matchQueryParams(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n var value = '';\n if (this.consumeOptional('=')) {\n var valueMatch = matchUrlQueryParamValue(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n var decodedKey = decodeQuery(key);\n var decodedVal = decodeQuery(value);\n if (params.hasOwnProperty(decodedKey)) {\n // Append to existing values\n var currentVal = params[decodedKey];\n if (!Array.isArray(currentVal)) {\n currentVal = [currentVal];\n params[decodedKey] = currentVal;\n }\n currentVal.push(decodedVal);\n }\n else {\n // Create a new value\n params[decodedKey] = decodedVal;\n }\n };\n // parse `(a/b//outlet_name:c/d)`\n // parse `(a/b//outlet_name:c/d)`\n UrlParser.prototype.parseParens = \n // parse `(a/b//outlet_name:c/d)`\n function (allowPrimary) {\n var segments = {};\n this.capture('(');\n while (!this.consumeOptional(')') && this.remaining.length > 0) {\n var path = matchSegments(this.remaining);\n var next = this.remaining[path.length];\n // if is is not one of these characters, then the segment was unescaped\n // or the group was not closed\n if (next !== '/' && next !== ')' && next !== ';') {\n throw new Error(\"Cannot parse url '\" + this.url + \"'\");\n }\n var outletName = (undefined);\n if (path.indexOf(':') > -1) {\n outletName = path.substr(0, path.indexOf(':'));\n this.capture(outletName);\n this.capture(':');\n }\n else if (allowPrimary) {\n outletName = PRIMARY_OUTLET;\n }\n var children = this.parseChildren();\n segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] :\n new UrlSegmentGroup([], children);\n this.consumeOptional('//');\n }\n return segments;\n };\n UrlParser.prototype.peekStartsWith = function (str) { return this.remaining.startsWith(str); };\n // Consumes the prefix when it is present and returns whether it has been consumed\n // Consumes the prefix when it is present and returns whether it has been consumed\n UrlParser.prototype.consumeOptional = \n // Consumes the prefix when it is present and returns whether it has been consumed\n function (str) {\n if (this.peekStartsWith(str)) {\n this.remaining = this.remaining.substring(str.length);\n return true;\n }\n return false;\n };\n UrlParser.prototype.capture = function (str) {\n if (!this.consumeOptional(str)) {\n throw new Error(\"Expected \\\"\" + str + \"\\\".\");\n }\n };\n return UrlParser;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar NoMatch = /** @class */ (function () {\n function NoMatch(segmentGroup) {\n this.segmentGroup = segmentGroup || null;\n }\n return NoMatch;\n}());\nvar AbsoluteRedirect = /** @class */ (function () {\n function AbsoluteRedirect(urlTree) {\n this.urlTree = urlTree;\n }\n return AbsoluteRedirect;\n}());\nfunction noMatch(segmentGroup) {\n return new rxjs.Observable(function (obs) { return obs.error(new NoMatch(segmentGroup)); });\n}\nfunction absoluteRedirect(newTree) {\n return new rxjs.Observable(function (obs) { return obs.error(new AbsoluteRedirect(newTree)); });\n}\nfunction namedOutletsRedirect(redirectTo) {\n return new rxjs.Observable(function (obs) {\n return obs.error(new Error(\"Only absolute redirects can have named outlets. redirectTo: '\" + redirectTo + \"'\"));\n });\n}\nfunction canLoadFails(route) {\n return new rxjs.Observable(function (obs) {\n return obs.error(navigationCancelingError(\"Cannot load children because the guard of the route \\\"path: '\" + route.path + \"'\\\" returned false\"));\n });\n}\n/**\n * Returns the `UrlTree` with the redirection applied.\n *\n * Lazy modules are loaded along the way.\n */\nfunction applyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {\n return new ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config).apply();\n}\nvar ApplyRedirects = /** @class */ (function () {\n function ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {\n this.configLoader = configLoader;\n this.urlSerializer = urlSerializer;\n this.urlTree = urlTree;\n this.config = config;\n this.allowRedirects = true;\n this.ngModule = moduleInjector.get(core.NgModuleRef);\n }\n ApplyRedirects.prototype.apply = function () {\n var _this = this;\n var expanded$ = this.expandSegmentGroup(this.ngModule, this.config, this.urlTree.root, PRIMARY_OUTLET);\n var urlTrees$ = expanded$.pipe(operators.map(function (rootSegmentGroup) {\n return _this.createUrlTree(rootSegmentGroup, _this.urlTree.queryParams, (_this.urlTree.fragment));\n }));\n return urlTrees$.pipe(operators.catchError(function (e) {\n if (e instanceof AbsoluteRedirect) {\n // after an absolute redirect we do not apply any more redirects!\n // after an absolute redirect we do not apply any more redirects!\n _this.allowRedirects = false;\n // we need to run matching, so we can fetch all lazy-loaded modules\n return _this.match(e.urlTree);\n }\n if (e instanceof NoMatch) {\n throw _this.noMatchError(e);\n }\n throw e;\n }));\n };\n ApplyRedirects.prototype.match = function (tree) {\n var _this = this;\n var expanded$ = this.expandSegmentGroup(this.ngModule, this.config, tree.root, PRIMARY_OUTLET);\n var mapped$ = expanded$.pipe(operators.map(function (rootSegmentGroup) {\n return _this.createUrlTree(rootSegmentGroup, tree.queryParams, (tree.fragment));\n }));\n return mapped$.pipe(operators.catchError(function (e) {\n if (e instanceof NoMatch) {\n throw _this.noMatchError(e);\n }\n throw e;\n }));\n };\n ApplyRedirects.prototype.noMatchError = function (e) {\n return new Error(\"Cannot match any routes. URL Segment: '\" + e.segmentGroup + \"'\");\n };\n ApplyRedirects.prototype.createUrlTree = function (rootCandidate, queryParams, fragment) {\n var root = rootCandidate.segments.length > 0 ?\n new UrlSegmentGroup([], (_a = {}, _a[PRIMARY_OUTLET] = rootCandidate, _a)) :\n rootCandidate;\n return new UrlTree(root, queryParams, fragment);\n var _a;\n };\n ApplyRedirects.prototype.expandSegmentGroup = function (ngModule, routes, segmentGroup, outlet) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.expandChildren(ngModule, routes, segmentGroup)\n .pipe(operators.map(function (children) { return new UrlSegmentGroup([], children); }));\n }\n return this.expandSegment(ngModule, segmentGroup, routes, segmentGroup.segments, outlet, true);\n };\n // Recursively expand segment groups for all the child outlets\n // Recursively expand segment groups for all the child outlets\n ApplyRedirects.prototype.expandChildren = \n // Recursively expand segment groups for all the child outlets\n function (ngModule, routes, segmentGroup) {\n var _this = this;\n return waitForMap(segmentGroup.children, function (childOutlet, child) { return _this.expandSegmentGroup(ngModule, routes, child, childOutlet); });\n };\n ApplyRedirects.prototype.expandSegment = function (ngModule, segmentGroup, routes, segments, outlet, allowRedirects) {\n var _this = this;\n return rxjs.of.apply(void 0, __spread(routes)).pipe(operators.map(function (r) {\n var expanded$ = _this.expandSegmentAgainstRoute(ngModule, segmentGroup, routes, r, segments, outlet, allowRedirects);\n return expanded$.pipe(operators.catchError(function (e) {\n if (e instanceof NoMatch) {\n // TODO(i): this return type doesn't match the declared Observable<UrlSegmentGroup> -\n // talk to Jason\n return rxjs.of(null);\n }\n throw e;\n }));\n }), operators.concatAll(), operators.first(function (s) { return !!s; }), operators.catchError(function (e, _) {\n if (e instanceof rxjs.EmptyError || e.name === 'EmptyError') {\n if (_this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return rxjs.of(new UrlSegmentGroup([], {}));\n }\n throw new NoMatch(segmentGroup);\n }\n throw e;\n }));\n };\n ApplyRedirects.prototype.noLeftoversInUrl = function (segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n };\n ApplyRedirects.prototype.expandSegmentAgainstRoute = function (ngModule, segmentGroup, routes, route, paths, outlet, allowRedirects) {\n if (getOutlet(route) !== outlet) {\n return noMatch(segmentGroup);\n }\n if (route.redirectTo === undefined) {\n return this.matchSegmentAgainstRoute(ngModule, segmentGroup, route, paths);\n }\n if (allowRedirects && this.allowRedirects) {\n return this.expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, paths, outlet);\n }\n return noMatch(segmentGroup);\n };\n ApplyRedirects.prototype.expandSegmentAgainstRouteUsingRedirect = function (ngModule, segmentGroup, routes, route, segments, outlet) {\n if (route.path === '**') {\n return this.expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet);\n }\n return this.expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet);\n };\n ApplyRedirects.prototype.expandWildCardWithParamsAgainstRouteUsingRedirect = function (ngModule, routes, route, outlet) {\n var _this = this;\n var newTree = this.applyRedirectCommands([], (route.redirectTo), {});\n if (route.redirectTo.startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n return this.lineralizeSegments(route, newTree).pipe(operators.mergeMap(function (newSegments) {\n var group = new UrlSegmentGroup(newSegments, {});\n return _this.expandSegment(ngModule, group, routes, newSegments, outlet, false);\n }));\n };\n ApplyRedirects.prototype.expandRegularSegmentAgainstRouteUsingRedirect = function (ngModule, segmentGroup, routes, route, segments, outlet) {\n var _this = this;\n var _a = match(segmentGroup, route, segments), matched = _a.matched, consumedSegments = _a.consumedSegments, lastChild = _a.lastChild, positionalParamSegments = _a.positionalParamSegments;\n if (!matched)\n return noMatch(segmentGroup);\n var newTree = this.applyRedirectCommands(consumedSegments, (route.redirectTo), positionalParamSegments);\n if (route.redirectTo.startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n return this.lineralizeSegments(route, newTree).pipe(operators.mergeMap(function (newSegments) {\n return _this.expandSegment(ngModule, segmentGroup, routes, newSegments.concat(segments.slice(lastChild)), outlet, false);\n }));\n };\n ApplyRedirects.prototype.matchSegmentAgainstRoute = function (ngModule, rawSegmentGroup, route, segments) {\n var _this = this;\n if (route.path === '**') {\n if (route.loadChildren) {\n return this.configLoader.load(ngModule.injector, route)\n .pipe(operators.map(function (cfg) {\n route._loadedConfig = cfg;\n return new UrlSegmentGroup(segments, {});\n }));\n }\n return rxjs.of(new UrlSegmentGroup(segments, {}));\n }\n var _a = match(rawSegmentGroup, route, segments), matched = _a.matched, consumedSegments = _a.consumedSegments, lastChild = _a.lastChild;\n if (!matched)\n return noMatch(rawSegmentGroup);\n var rawSlicedSegments = segments.slice(lastChild);\n var childConfig$ = this.getChildConfig(ngModule, route);\n return childConfig$.pipe(operators.mergeMap(function (routerConfig) {\n var childModule = routerConfig.module;\n var childConfig = routerConfig.routes;\n var _a = split(rawSegmentGroup, consumedSegments, rawSlicedSegments, childConfig), segmentGroup = _a.segmentGroup, slicedSegments = _a.slicedSegments;\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n var expanded$_1 = _this.expandChildren(childModule, childConfig, segmentGroup);\n return expanded$_1.pipe(operators.map(function (children) { return new UrlSegmentGroup(consumedSegments, children); }));\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return rxjs.of(new UrlSegmentGroup(consumedSegments, {}));\n }\n var expanded$ = _this.expandSegment(childModule, segmentGroup, childConfig, slicedSegments, PRIMARY_OUTLET, true);\n return expanded$.pipe(operators.map(function (cs) {\n return new UrlSegmentGroup(consumedSegments.concat(cs.segments), cs.children);\n }));\n }));\n };\n ApplyRedirects.prototype.getChildConfig = function (ngModule, route) {\n var _this = this;\n if (route.children) {\n // The children belong to the same module\n return rxjs.of(new LoadedRouterConfig(route.children, ngModule));\n }\n if (route.loadChildren) {\n // lazy children belong to the loaded module\n if (route._loadedConfig !== undefined) {\n return rxjs.of(route._loadedConfig);\n }\n return runCanLoadGuard(ngModule.injector, route).pipe(operators.mergeMap(function (shouldLoad) {\n if (shouldLoad) {\n return _this.configLoader.load(ngModule.injector, route)\n .pipe(operators.map(function (cfg) {\n route._loadedConfig = cfg;\n return cfg;\n }));\n }\n return canLoadFails(route);\n }));\n }\n return rxjs.of(new LoadedRouterConfig([], ngModule));\n };\n ApplyRedirects.prototype.lineralizeSegments = function (route, urlTree) {\n var res = [];\n var c = urlTree.root;\n while (true) {\n res = res.concat(c.segments);\n if (c.numberOfChildren === 0) {\n return rxjs.of(res);\n }\n if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n return namedOutletsRedirect((route.redirectTo));\n }\n c = c.children[PRIMARY_OUTLET];\n }\n };\n ApplyRedirects.prototype.applyRedirectCommands = function (segments, redirectTo, posParams) {\n return this.applyRedirectCreatreUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n };\n ApplyRedirects.prototype.applyRedirectCreatreUrlTree = function (redirectTo, urlTree, segments, posParams) {\n var newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);\n };\n ApplyRedirects.prototype.createQueryParams = function (redirectToParams, actualParams) {\n var res = {};\n forEach(redirectToParams, function (v, k) {\n var copySourceValue = typeof v === 'string' && v.startsWith(':');\n if (copySourceValue) {\n var sourceName = v.substring(1);\n res[k] = actualParams[sourceName];\n }\n else {\n res[k] = v;\n }\n });\n return res;\n };\n ApplyRedirects.prototype.createSegmentGroup = function (redirectTo, group, segments, posParams) {\n var _this = this;\n var updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n var children = {};\n forEach(group.children, function (child, name) {\n children[name] = _this.createSegmentGroup(redirectTo, child, segments, posParams);\n });\n return new UrlSegmentGroup(updatedSegments, children);\n };\n ApplyRedirects.prototype.createSegments = function (redirectTo, redirectToSegments, actualSegments, posParams) {\n var _this = this;\n return redirectToSegments.map(function (s) {\n return s.path.startsWith(':') ? _this.findPosParam(redirectTo, s, posParams) :\n _this.findOrReturn(s, actualSegments);\n });\n };\n ApplyRedirects.prototype.findPosParam = function (redirectTo, redirectToUrlSegment, posParams) {\n var pos = posParams[redirectToUrlSegment.path.substring(1)];\n if (!pos)\n throw new Error(\"Cannot redirect to '\" + redirectTo + \"'. Cannot find '\" + redirectToUrlSegment.path + \"'.\");\n return pos;\n };\n ApplyRedirects.prototype.findOrReturn = function (redirectToUrlSegment, actualSegments) {\n var idx = 0;\n try {\n for (var actualSegments_1 = __values(actualSegments), actualSegments_1_1 = actualSegments_1.next(); !actualSegments_1_1.done; actualSegments_1_1 = actualSegments_1.next()) {\n var s = actualSegments_1_1.value;\n if (s.path === redirectToUrlSegment.path) {\n actualSegments.splice(idx);\n return s;\n }\n idx++;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (actualSegments_1_1 && !actualSegments_1_1.done && (_a = actualSegments_1.return)) _a.call(actualSegments_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return redirectToUrlSegment;\n var e_1, _a;\n };\n return ApplyRedirects;\n}());\nfunction runCanLoadGuard(moduleInjector, route) {\n var canLoad = route.canLoad;\n if (!canLoad || canLoad.length === 0)\n return rxjs.of(true);\n var obs = rxjs.from(canLoad).pipe(operators.map(function (injectionToken) {\n var guard = moduleInjector.get(injectionToken);\n return wrapIntoObservable(guard.canLoad ? guard.canLoad(route) : guard(route));\n }));\n return andObservables(obs);\n}\nfunction match(segmentGroup, route, segments) {\n if (route.path === '') {\n if ((route.pathMatch === 'full') && (segmentGroup.hasChildren() || segments.length > 0)) {\n return { matched: false, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };\n }\n return { matched: true, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };\n }\n var matcher = route.matcher || defaultUrlMatcher;\n var res = matcher(segments, segmentGroup, route);\n if (!res) {\n return {\n matched: false,\n consumedSegments: [],\n lastChild: 0,\n positionalParamSegments: {},\n };\n }\n return {\n matched: true,\n consumedSegments: (res.consumed),\n lastChild: (res.consumed.length),\n positionalParamSegments: (res.posParams),\n };\n}\nfunction split(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n var s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptySegments(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n return { segmentGroup: mergeTrivialChildren(s), slicedSegments: [] };\n }\n if (slicedSegments.length === 0 &&\n containsEmptyPathRedirects(segmentGroup, slicedSegments, config)) {\n var s = new UrlSegmentGroup(segmentGroup.segments, addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n return { segmentGroup: mergeTrivialChildren(s), slicedSegments: slicedSegments };\n }\n return { segmentGroup: segmentGroup, slicedSegments: slicedSegments };\n}\nfunction mergeTrivialChildren(s) {\n if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n var c = s.children[PRIMARY_OUTLET];\n return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n }\n return s;\n}\nfunction addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n var res = {};\n try {\n for (var routes_1 = __values(routes), routes_1_1 = routes_1.next(); !routes_1_1.done; routes_1_1 = routes_1.next()) {\n var r = routes_1_1.value;\n if (isEmptyPathRedirect(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (routes_1_1 && !routes_1_1.done && (_a = routes_1.return)) _a.call(routes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return __assign({}, children, res);\n var e_2, _a;\n}\nfunction createChildrenForEmptySegments(routes, primarySegmentGroup) {\n var res = {};\n res[PRIMARY_OUTLET] = primarySegmentGroup;\n try {\n for (var routes_2 = __values(routes), routes_2_1 = routes_2.next(); !routes_2_1.done; routes_2_1 = routes_2.next()) {\n var r = routes_2_1.value;\n if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (routes_2_1 && !routes_2_1.done && (_a = routes_2.return)) _a.call(routes_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return res;\n var e_3, _a;\n}\nfunction containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, segments, routes) {\n return routes.some(function (r) { return isEmptyPathRedirect(segmentGroup, segments, r) && getOutlet(r) !== PRIMARY_OUTLET; });\n}\nfunction containsEmptyPathRedirects(segmentGroup, segments, routes) {\n return routes.some(function (r) { return isEmptyPathRedirect(segmentGroup, segments, r); });\n}\nfunction isEmptyPathRedirect(segmentGroup, segments, r) {\n if ((segmentGroup.hasChildren() || segments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '' && r.redirectTo !== undefined;\n}\nfunction getOutlet(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar Tree = /** @class */ (function () {\n function Tree(root) {\n this._root = root;\n }\n Object.defineProperty(Tree.prototype, \"root\", {\n get: function () { return this._root.value; },\n enumerable: true,\n configurable: true\n });\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.parent = /**\n * @internal\n */\n function (t) {\n var p = this.pathFromRoot(t);\n return p.length > 1 ? p[p.length - 2] : null;\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.children = /**\n * @internal\n */\n function (t) {\n var n = findNode(t, this._root);\n return n ? n.children.map(function (t) { return t.value; }) : [];\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.firstChild = /**\n * @internal\n */\n function (t) {\n var n = findNode(t, this._root);\n return n && n.children.length > 0 ? n.children[0].value : null;\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.siblings = /**\n * @internal\n */\n function (t) {\n var p = findPath(t, this._root);\n if (p.length < 2)\n return [];\n var c = p[p.length - 2].children.map(function (c) { return c.value; });\n return c.filter(function (cc) { return cc !== t; });\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.pathFromRoot = /**\n * @internal\n */\n function (t) { return findPath(t, this._root).map(function (s) { return s.value; }); };\n return Tree;\n}());\n// DFS for the node matching the value\nfunction findNode(value, node) {\n if (value === node.value)\n return node;\n try {\n for (var _a = __values(node.children), _b = _a.next(); !_b.done; _b = _a.next()) {\n var child = _b.value;\n var node_1 = findNode(value, child);\n if (node_1)\n return node_1;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return null;\n var e_1, _c;\n}\n// Return the path to the node with the given value using DFS\nfunction findPath(value, node) {\n if (value === node.value)\n return [node];\n try {\n for (var _a = __values(node.children), _b = _a.next(); !_b.done; _b = _a.next()) {\n var child = _b.value;\n var path = findPath(value, child);\n if (path.length) {\n path.unshift(node);\n return path;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return [];\n var e_2, _c;\n}\nvar TreeNode = /** @class */ (function () {\n function TreeNode(value, children) {\n this.value = value;\n this.children = children;\n }\n TreeNode.prototype.toString = function () { return \"TreeNode(\" + this.value + \")\"; };\n return TreeNode;\n}());\n// Return the list of T indexed by outlet name\nfunction nodeChildrenAsMap(node) {\n var map$$1 = {};\n if (node) {\n node.children.forEach(function (child) { return map$$1[child.value.outlet] = child; });\n }\n return map$$1;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Represents the state of the router.\n *\n * RouterState is a tree of activated routes. Every node in this tree knows about the \"consumed\" URL\n * segments, the extracted parameters, and the resolved data.\n *\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const state: RouterState = router.routerState;\n * const root: ActivatedRoute = state.root;\n * const child = root.firstChild;\n * const id: Observable<string> = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n *\n * See `ActivatedRoute` for more information.\n *\n *\n */\nvar RouterState = /** @class */ (function (_super) {\n __extends(RouterState, _super);\n /** @internal */\n function RouterState(root, /** The current snapshot of the router state */\n snapshot) {\n var _this = _super.call(this, root) || this;\n _this.snapshot = snapshot;\n setRouterState(_this, root);\n return _this;\n }\n RouterState.prototype.toString = function () { return this.snapshot.toString(); };\n return RouterState;\n}(Tree));\nfunction createEmptyState(urlTree, rootComponent) {\n var snapshot = createEmptyStateSnapshot(urlTree, rootComponent);\n var emptyUrl = new rxjs.BehaviorSubject([new UrlSegment('', {})]);\n var emptyParams = new rxjs.BehaviorSubject({});\n var emptyData = new rxjs.BehaviorSubject({});\n var emptyQueryParams = new rxjs.BehaviorSubject({});\n var fragment = new rxjs.BehaviorSubject('');\n var activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);\n activated.snapshot = snapshot.root;\n return new RouterState(new TreeNode(activated, []), snapshot);\n}\nfunction createEmptyStateSnapshot(urlTree, rootComponent) {\n var emptyParams = {};\n var emptyData = {};\n var emptyQueryParams = {};\n var fragment = '';\n var activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, urlTree.root, -1, {});\n return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet. An `ActivatedRoute` can also be used to traverse the router state tree.\n *\n * ```\n * @Component({...})\n * class MyComponent {\n * constructor(route: ActivatedRoute) {\n * const id: Observable<string> = route.params.map(p => p.id);\n * const url: Observable<string> = route.url.map(segments => segments.join(''));\n * // route.data includes both `data` and `resolve`\n * const user = route.data.map(d => d.user);\n * }\n * }\n * ```\n *\n *\n */\nvar ActivatedRoute = /** @class */ (function () {\n /** @internal */\n function ActivatedRoute(/** An observable of the URL segments matched by this route */\n url, /** An observable of the matrix parameters scoped to this route */\n params, /** An observable of the query parameters shared by all the routes */\n queryParams, /** An observable of the URL fragment shared by all the routes */\n fragment, /** An observable of the static and resolved data of this route. */\n data, /** The outlet name of the route. It's a constant */\n outlet, /** The component of the route. It's a constant */\n // TODO(vsavkin): remove |string\n component, futureSnapshot) {\n this.url = url;\n this.params = params;\n this.queryParams = queryParams;\n this.fragment = fragment;\n this.data = data;\n this.outlet = outlet;\n this.component = component;\n this._futureSnapshot = futureSnapshot;\n }\n Object.defineProperty(ActivatedRoute.prototype, \"routeConfig\", {\n /** The configuration used to match this route */\n get: /** The configuration used to match this route */\n function () { return this._futureSnapshot.routeConfig; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"root\", {\n /** The root of the router state */\n get: /** The root of the router state */\n function () { return this._routerState.root; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"parent\", {\n /** The parent of this route in the router state tree */\n get: /** The parent of this route in the router state tree */\n function () { return this._routerState.parent(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"firstChild\", {\n /** The first child of this route in the router state tree */\n get: /** The first child of this route in the router state tree */\n function () { return this._routerState.firstChild(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"children\", {\n /** The children of this route in the router state tree */\n get: /** The children of this route in the router state tree */\n function () { return this._routerState.children(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"pathFromRoot\", {\n /** The path from the root of the router state tree to this route */\n get: /** The path from the root of the router state tree to this route */\n function () { return this._routerState.pathFromRoot(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"paramMap\", {\n get: function () {\n if (!this._paramMap) {\n this._paramMap = this.params.pipe(operators.map(function (p) { return convertToParamMap(p); }));\n }\n return this._paramMap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"queryParamMap\", {\n get: function () {\n if (!this._queryParamMap) {\n this._queryParamMap =\n this.queryParams.pipe(operators.map(function (p) { return convertToParamMap(p); }));\n }\n return this._queryParamMap;\n },\n enumerable: true,\n configurable: true\n });\n ActivatedRoute.prototype.toString = function () {\n return this.snapshot ? this.snapshot.toString() : \"Future(\" + this._futureSnapshot + \")\";\n };\n return ActivatedRoute;\n}());\n/**\n * Returns the inherited params, data, and resolve for a given route.\n * By default, this only inherits values up to the nearest path-less or component-less route.\n * @internal\n */\nfunction inheritedParamsDataResolve(route, paramsInheritanceStrategy) {\n if (paramsInheritanceStrategy === void 0) { paramsInheritanceStrategy = 'emptyOnly'; }\n var pathFromRoot = route.pathFromRoot;\n var inheritingStartingFrom = 0;\n if (paramsInheritanceStrategy !== 'always') {\n inheritingStartingFrom = pathFromRoot.length - 1;\n while (inheritingStartingFrom >= 1) {\n var current = pathFromRoot[inheritingStartingFrom];\n var parent_1 = pathFromRoot[inheritingStartingFrom - 1];\n // current route is an empty path => inherits its parent's params and data\n if (current.routeConfig && current.routeConfig.path === '') {\n inheritingStartingFrom--;\n // parent is componentless => current route should inherit its params and data\n }\n else if (!parent_1.component) {\n inheritingStartingFrom--;\n }\n else {\n break;\n }\n }\n }\n return flattenInherited(pathFromRoot.slice(inheritingStartingFrom));\n}\n/** @internal */\nfunction flattenInherited(pathFromRoot) {\n return pathFromRoot.reduce(function (res, curr) {\n var params = __assign({}, res.params, curr.params);\n var data = __assign({}, res.data, curr.data);\n var resolve = __assign({}, res.resolve, curr._resolvedData);\n return { params: params, data: data, resolve: resolve };\n }, { params: {}, data: {}, resolve: {} });\n}\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to\n * traverse the router state tree.\n *\n * ```\n * @Component({templateUrl:'./my-component.html'})\n * class MyComponent {\n * constructor(route: ActivatedRoute) {\n * const id: string = route.snapshot.params.id;\n * const url: string = route.snapshot.url.join('');\n * const user = route.snapshot.data.user;\n * }\n * }\n * ```\n *\n *\n */\nvar ActivatedRouteSnapshot = /** @class */ (function () {\n /** @internal */\n function ActivatedRouteSnapshot(/** The URL segments matched by this route */\n url, /** The matrix parameters scoped to this route */\n params, /** The query parameters shared by all the routes */\n queryParams, /** The URL fragment shared by all the routes */\n fragment, /** The static and resolved data of this route */\n data, /** The outlet name of the route */\n outlet, /** The component of the route */\n component, routeConfig, urlSegment, lastPathIndex, resolve) {\n this.url = url;\n this.params = params;\n this.queryParams = queryParams;\n this.fragment = fragment;\n this.data = data;\n this.outlet = outlet;\n this.component = component;\n this.routeConfig = routeConfig;\n this._urlSegment = urlSegment;\n this._lastPathIndex = lastPathIndex;\n this._resolve = resolve;\n }\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"root\", {\n /** The root of the router state */\n get: /** The root of the router state */\n function () { return this._routerState.root; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"parent\", {\n /** The parent of this route in the router state tree */\n get: /** The parent of this route in the router state tree */\n function () { return this._routerState.parent(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"firstChild\", {\n /** The first child of this route in the router state tree */\n get: /** The first child of this route in the router state tree */\n function () { return this._routerState.firstChild(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"children\", {\n /** The children of this route in the router state tree */\n get: /** The children of this route in the router state tree */\n function () { return this._routerState.children(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"pathFromRoot\", {\n /** The path from the root of the router state tree to this route */\n get: /** The path from the root of the router state tree to this route */\n function () { return this._routerState.pathFromRoot(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"paramMap\", {\n get: function () {\n if (!this._paramMap) {\n this._paramMap = convertToParamMap(this.params);\n }\n return this._paramMap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"queryParamMap\", {\n get: function () {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n },\n enumerable: true,\n configurable: true\n });\n ActivatedRouteSnapshot.prototype.toString = function () {\n var url = this.url.map(function (segment) { return segment.toString(); }).join('/');\n var matched = this.routeConfig ? this.routeConfig.path : '';\n return \"Route(url:'\" + url + \"', path:'\" + matched + \"')\";\n };\n return ActivatedRouteSnapshot;\n}());\n/**\n * @description\n *\n * Represents the state of the router at a moment in time.\n *\n * This is a tree of activated route snapshots. Every node in this tree knows about\n * the \"consumed\" URL segments, the extracted parameters, and the resolved data.\n *\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const state: RouterState = router.routerState;\n * const snapshot: RouterStateSnapshot = state.snapshot;\n * const root: ActivatedRouteSnapshot = snapshot.root;\n * const child = root.firstChild;\n * const id: Observable<string> = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n *\n *\n */\nvar RouterStateSnapshot = /** @class */ (function (_super) {\n __extends(RouterStateSnapshot, _super);\n /** @internal */\n function RouterStateSnapshot(/** The url from which this snapshot was created */\n url, root) {\n var _this = _super.call(this, root) || this;\n _this.url = url;\n setRouterState(_this, root);\n return _this;\n }\n RouterStateSnapshot.prototype.toString = function () { return serializeNode(this._root); };\n return RouterStateSnapshot;\n}(Tree));\nfunction setRouterState(state, node) {\n node.value._routerState = state;\n node.children.forEach(function (c) { return setRouterState(state, c); });\n}\nfunction serializeNode(node) {\n var c = node.children.length > 0 ? \" { \" + node.children.map(serializeNode).join(', ') + \" } \" : '';\n return \"\" + node.value + c;\n}\n/**\n * The expectation is that the activate route is created with the right set of parameters.\n * So we push new values into the observables only when they are not the initial values.\n * And we detect that by checking if the snapshot field is set.\n */\nfunction advanceActivatedRoute(route) {\n if (route.snapshot) {\n var currentSnapshot = route.snapshot;\n var nextSnapshot = route._futureSnapshot;\n route.snapshot = nextSnapshot;\n if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n route.queryParams.next(nextSnapshot.queryParams);\n }\n if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n route.fragment.next(nextSnapshot.fragment);\n }\n if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n route.params.next(nextSnapshot.params);\n }\n if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n route.url.next(nextSnapshot.url);\n }\n if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n route.data.next(nextSnapshot.data);\n }\n }\n else {\n route.snapshot = route._futureSnapshot;\n // this is for resolved data\n // this is for resolved data\n route.data.next(route._futureSnapshot.data);\n }\n}\nfunction equalParamsAndUrlSegments(a, b) {\n var equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n var parentsMismatch = !a.parent !== !b.parent;\n return equalUrlParams && !parentsMismatch &&\n (!a.parent || equalParamsAndUrlSegments(a.parent, (b.parent)));\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createRouterState(routeReuseStrategy, curr, prevState) {\n var root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n return new RouterState(root, curr);\n}\nfunction createNode(routeReuseStrategy, curr, prevState) {\n // reuse an activated route that is currently displayed on the screen\n if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n var value = prevState.value;\n value._futureSnapshot = curr.value;\n var children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n return new TreeNode(value, children);\n // retrieve an activated route that is used to be displayed, but is not currently displayed\n }\n else {\n var detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n if (detachedRouteHandle) {\n var tree = detachedRouteHandle.route;\n setFutureSnapshotsOfActivatedRoutes(curr, tree);\n return tree;\n }\n else {\n var value = createActivatedRoute(curr.value);\n var children = curr.children.map(function (c) { return createNode(routeReuseStrategy, c); });\n return new TreeNode(value, children);\n }\n }\n}\nfunction setFutureSnapshotsOfActivatedRoutes(curr, result) {\n if (curr.value.routeConfig !== result.value.routeConfig) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot created from a different route');\n }\n if (curr.children.length !== result.children.length) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot with a different number of children');\n }\n result.value._futureSnapshot = curr.value;\n for (var i = 0; i < curr.children.length; ++i) {\n setFutureSnapshotsOfActivatedRoutes(curr.children[i], result.children[i]);\n }\n}\nfunction createOrReuseChildren(routeReuseStrategy, curr, prevState) {\n return curr.children.map(function (child) {\n try {\n for (var _a = __values(prevState.children), _b = _a.next(); !_b.done; _b = _a.next()) {\n var p = _b.value;\n if (routeReuseStrategy.shouldReuseRoute(p.value.snapshot, child.value)) {\n return createNode(routeReuseStrategy, child, p);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return createNode(routeReuseStrategy, child);\n var e_1, _c;\n });\n}\nfunction createActivatedRoute(c) {\n return new ActivatedRoute(new rxjs.BehaviorSubject(c.url), new rxjs.BehaviorSubject(c.params), new rxjs.BehaviorSubject(c.queryParams), new rxjs.BehaviorSubject(c.fragment), new rxjs.BehaviorSubject(c.data), c.outlet, c.component, c);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createUrlTree(route, urlTree, commands, queryParams, fragment) {\n if (commands.length === 0) {\n return tree(urlTree.root, urlTree.root, urlTree, queryParams, fragment);\n }\n var nav = computeNavigation(commands);\n if (nav.toRoot()) {\n return tree(urlTree.root, new UrlSegmentGroup([], {}), urlTree, queryParams, fragment);\n }\n var startingPosition = findStartingPosition(nav, urlTree, route);\n var segmentGroup = startingPosition.processChildren ?\n updateSegmentGroupChildren(startingPosition.segmentGroup, startingPosition.index, nav.commands) :\n updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);\n return tree(startingPosition.segmentGroup, segmentGroup, urlTree, queryParams, fragment);\n}\nfunction isMatrixParams(command) {\n return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\nfunction tree(oldSegmentGroup, newSegmentGroup, urlTree, queryParams, fragment) {\n var qp = {};\n if (queryParams) {\n forEach(queryParams, function (value, name) {\n qp[name] = Array.isArray(value) ? value.map(function (v) { return \"\" + v; }) : \"\" + value;\n });\n }\n if (urlTree.root === oldSegmentGroup) {\n return new UrlTree(newSegmentGroup, qp, fragment);\n }\n return new UrlTree(replaceSegment(urlTree.root, oldSegmentGroup, newSegmentGroup), qp, fragment);\n}\nfunction replaceSegment(current, oldSegment, newSegment) {\n var children = {};\n forEach(current.children, function (c, outletName) {\n if (c === oldSegment) {\n children[outletName] = newSegment;\n }\n else {\n children[outletName] = replaceSegment(c, oldSegment, newSegment);\n }\n });\n return new UrlSegmentGroup(current.segments, children);\n}\nvar Navigation = /** @class */ (function () {\n function Navigation(isAbsolute, numberOfDoubleDots, commands) {\n this.isAbsolute = isAbsolute;\n this.numberOfDoubleDots = numberOfDoubleDots;\n this.commands = commands;\n if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n throw new Error('Root segment cannot have matrix parameters');\n }\n var cmdWithOutlet = commands.find(function (c) { return typeof c === 'object' && c != null && c.outlets; });\n if (cmdWithOutlet && cmdWithOutlet !== last$1(commands)) {\n throw new Error('{outlets:{}} has to be the last command');\n }\n }\n Navigation.prototype.toRoot = function () {\n return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n };\n return Navigation;\n}());\n/** Transforms commands to a normalized `Navigation` */\nfunction computeNavigation(commands) {\n if ((typeof commands[0] === 'string') && commands.length === 1 && commands[0] === '/') {\n return new Navigation(true, 0, commands);\n }\n var numberOfDoubleDots = 0;\n var isAbsolute = false;\n var res = commands.reduce(function (res, cmd, cmdIdx) {\n if (typeof cmd === 'object' && cmd != null) {\n if (cmd.outlets) {\n var outlets_1 = {};\n forEach(cmd.outlets, function (commands, name) {\n outlets_1[name] = typeof commands === 'string' ? commands.split('/') : commands;\n });\n return __spread(res, [{ outlets: outlets_1 }]);\n }\n if (cmd.segmentPath) {\n return __spread(res, [cmd.segmentPath]);\n }\n }\n if (!(typeof cmd === 'string')) {\n return __spread(res, [cmd]);\n }\n if (cmdIdx === 0) {\n cmd.split('/').forEach(function (urlPart, partIndex) {\n if (partIndex == 0 && urlPart === '.') {\n // skip './a'\n }\n else if (partIndex == 0 && urlPart === '') {\n // '/a'\n isAbsolute = true;\n }\n else if (urlPart === '..') {\n // '../a'\n numberOfDoubleDots++;\n }\n else if (urlPart != '') {\n res.push(urlPart);\n }\n });\n return res;\n }\n return __spread(res, [cmd]);\n }, []);\n return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\nvar Position = /** @class */ (function () {\n function Position(segmentGroup, processChildren, index) {\n this.segmentGroup = segmentGroup;\n this.processChildren = processChildren;\n this.index = index;\n }\n return Position;\n}());\nfunction findStartingPosition(nav, tree, route) {\n if (nav.isAbsolute) {\n return new Position(tree.root, true, 0);\n }\n if (route.snapshot._lastPathIndex === -1) {\n return new Position(route.snapshot._urlSegment, true, 0);\n }\n var modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n var index = route.snapshot._lastPathIndex + modifier;\n return createPositionApplyingDoubleDots(route.snapshot._urlSegment, index, nav.numberOfDoubleDots);\n}\nfunction createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {\n var g = group;\n var ci = index;\n var dd = numberOfDoubleDots;\n while (dd > ci) {\n dd -= ci;\n g = (g.parent);\n if (!g) {\n throw new Error('Invalid number of \\'../\\'');\n }\n ci = g.segments.length;\n }\n return new Position(g, false, ci - dd);\n}\nfunction getPath(command) {\n if (typeof command === 'object' && command != null && command.outlets) {\n return command.outlets[PRIMARY_OUTLET];\n }\n return \"\" + command;\n}\nfunction getOutlets(commands) {\n if (!(typeof commands[0] === 'object'))\n return _a = {}, _a[PRIMARY_OUTLET] = commands, _a;\n if (commands[0].outlets === undefined)\n return _b = {}, _b[PRIMARY_OUTLET] = commands, _b;\n return commands[0].outlets;\n var _a, _b;\n}\nfunction updateSegmentGroup(segmentGroup, startIndex, commands) {\n if (!segmentGroup) {\n segmentGroup = new UrlSegmentGroup([], {});\n }\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n }\n var m = prefixedWith(segmentGroup, startIndex, commands);\n var slicedCommands = commands.slice(m.commandIndex);\n if (m.match && m.pathIndex < segmentGroup.segments.length) {\n var g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n g.children[PRIMARY_OUTLET] =\n new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n return updateSegmentGroupChildren(g, 0, slicedCommands);\n }\n else if (m.match && slicedCommands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n }\n else if (m.match && !segmentGroup.hasChildren()) {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n else if (m.match) {\n return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n }\n else {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n}\nfunction updateSegmentGroupChildren(segmentGroup, startIndex, commands) {\n if (commands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n }\n else {\n var outlets_2 = getOutlets(commands);\n var children_1 = {};\n forEach(outlets_2, function (commands, outlet) {\n if (commands !== null) {\n children_1[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n }\n });\n forEach(segmentGroup.children, function (child, childOutlet) {\n if (outlets_2[childOutlet] === undefined) {\n children_1[childOutlet] = child;\n }\n });\n return new UrlSegmentGroup(segmentGroup.segments, children_1);\n }\n}\nfunction prefixedWith(segmentGroup, startIndex, commands) {\n var currentCommandIndex = 0;\n var currentPathIndex = startIndex;\n var noMatch = { match: false, pathIndex: 0, commandIndex: 0 };\n while (currentPathIndex < segmentGroup.segments.length) {\n if (currentCommandIndex >= commands.length)\n return noMatch;\n var path = segmentGroup.segments[currentPathIndex];\n var curr = getPath(commands[currentCommandIndex]);\n var next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n if (currentPathIndex > 0 && curr === undefined)\n break;\n if (curr && next && (typeof next === 'object') && next.outlets === undefined) {\n if (!compare(curr, next, path))\n return noMatch;\n currentCommandIndex += 2;\n }\n else {\n if (!compare(curr, {}, path))\n return noMatch;\n currentCommandIndex++;\n }\n currentPathIndex++;\n }\n return { match: true, pathIndex: currentPathIndex, commandIndex: currentCommandIndex };\n}\nfunction createNewSegmentGroup(segmentGroup, startIndex, commands) {\n var paths = segmentGroup.segments.slice(0, startIndex);\n var i = 0;\n while (i < commands.length) {\n if (typeof commands[i] === 'object' && commands[i].outlets !== undefined) {\n var children = createNewSegmentChildren(commands[i].outlets);\n return new UrlSegmentGroup(paths, children);\n }\n // if we start with an object literal, we need to reuse the path part from the segment\n if (i === 0 && isMatrixParams(commands[0])) {\n var p = segmentGroup.segments[startIndex];\n paths.push(new UrlSegment(p.path, commands[0]));\n i++;\n continue;\n }\n var curr = getPath(commands[i]);\n var next = (i < commands.length - 1) ? commands[i + 1] : null;\n if (curr && next && isMatrixParams(next)) {\n paths.push(new UrlSegment(curr, stringify(next)));\n i += 2;\n }\n else {\n paths.push(new UrlSegment(curr, {}));\n i++;\n }\n }\n return new UrlSegmentGroup(paths, {});\n}\nfunction createNewSegmentChildren(outlets) {\n var children = {};\n forEach(outlets, function (commands, outlet) {\n if (commands !== null) {\n children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n }\n });\n return children;\n}\nfunction stringify(params) {\n var res = {};\n forEach(params, function (v, k) { return res[k] = \"\" + v; });\n return res;\n}\nfunction compare(path, params, segment) {\n return path == segment.path && shallowEqual(params, segment.parameters);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar CanActivate = /** @class */ (function () {\n function CanActivate(path) {\n this.path = path;\n this.route = this.path[this.path.length - 1];\n }\n return CanActivate;\n}());\nvar CanDeactivate = /** @class */ (function () {\n function CanDeactivate(component, route) {\n this.component = component;\n this.route = route;\n }\n return CanDeactivate;\n}());\n/**\n * This class bundles the actions involved in preactivation of a route.\n */\nvar PreActivation = /** @class */ (function () {\n function PreActivation(future, curr, moduleInjector, forwardEvent) {\n this.future = future;\n this.curr = curr;\n this.moduleInjector = moduleInjector;\n this.forwardEvent = forwardEvent;\n this.canActivateChecks = [];\n this.canDeactivateChecks = [];\n }\n PreActivation.prototype.initialize = function (parentContexts) {\n var futureRoot = this.future._root;\n var currRoot = this.curr ? this.curr._root : null;\n this.setupChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n };\n PreActivation.prototype.checkGuards = function () {\n var _this = this;\n if (!this.isDeactivating() && !this.isActivating()) {\n return rxjs.of(true);\n }\n var canDeactivate$ = this.runCanDeactivateChecks();\n return canDeactivate$.pipe(operators.mergeMap(function (canDeactivate) { return canDeactivate ? _this.runCanActivateChecks() : rxjs.of(false); }));\n };\n PreActivation.prototype.resolveData = function (paramsInheritanceStrategy) {\n var _this = this;\n if (!this.isActivating())\n return rxjs.of(null);\n return rxjs.from(this.canActivateChecks)\n .pipe(operators.concatMap(function (check) { return _this.runResolve(check.route, paramsInheritanceStrategy); }), operators.reduce(function (_, __) { return _; }));\n };\n PreActivation.prototype.isDeactivating = function () { return this.canDeactivateChecks.length !== 0; };\n PreActivation.prototype.isActivating = function () { return this.canActivateChecks.length !== 0; };\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n PreActivation.prototype.setupChildRouteGuards = /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n function (futureNode, currNode, contexts, futurePath) {\n var _this = this;\n var prevChildren = nodeChildrenAsMap(currNode);\n // Process the children of the future route\n futureNode.children.forEach(function (c) {\n _this.setupRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]));\n delete prevChildren[c.value.outlet];\n });\n // Process any children left from the current route (not active for the future route)\n forEach(prevChildren, function (v, k) {\n return _this.deactivateRouteAndItsChildren(v, contexts.getContext(k));\n });\n };\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n PreActivation.prototype.setupRouteGuards = /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n function (futureNode, currNode, parentContexts, futurePath) {\n var future = futureNode.value;\n var curr = currNode ? currNode.value : null;\n var context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n // reusing the node\n if (curr && future.routeConfig === curr.routeConfig) {\n var shouldRunGuardsAndResolvers = this.shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);\n if (shouldRunGuardsAndResolvers) {\n this.canActivateChecks.push(new CanActivate(futurePath));\n }\n else {\n // we need to set the data\n future.data = curr.data;\n future._resolvedData = curr._resolvedData;\n }\n // If we have a component, we need to go through an outlet.\n if (future.component) {\n this.setupChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath);\n // if we have a componentless route, we recurse but keep the same outlet map.\n }\n else {\n this.setupChildRouteGuards(futureNode, currNode, parentContexts, futurePath);\n }\n if (shouldRunGuardsAndResolvers) {\n var outlet = (context.outlet);\n this.canDeactivateChecks.push(new CanDeactivate(outlet.component, curr));\n }\n }\n else {\n if (curr) {\n this.deactivateRouteAndItsChildren(currNode, context);\n }\n this.canActivateChecks.push(new CanActivate(futurePath));\n // If we have a component, we need to go through an outlet.\n if (future.component) {\n this.setupChildRouteGuards(futureNode, null, context ? context.children : null, futurePath);\n // if we have a componentless route, we recurse but keep the same outlet map.\n }\n else {\n this.setupChildRouteGuards(futureNode, null, parentContexts, futurePath);\n }\n }\n };\n PreActivation.prototype.shouldRunGuardsAndResolvers = function (curr, future, mode) {\n switch (mode) {\n case 'always':\n return true;\n case 'paramsOrQueryParamsChange':\n return !equalParamsAndUrlSegments(curr, future) ||\n !shallowEqual(curr.queryParams, future.queryParams);\n case 'paramsChange':\n default:\n return !equalParamsAndUrlSegments(curr, future);\n }\n };\n PreActivation.prototype.deactivateRouteAndItsChildren = function (route, context) {\n var _this = this;\n var children = nodeChildrenAsMap(route);\n var r = route.value;\n forEach(children, function (node, childName) {\n if (!r.component) {\n _this.deactivateRouteAndItsChildren(node, context);\n }\n else if (context) {\n _this.deactivateRouteAndItsChildren(node, context.children.getContext(childName));\n }\n else {\n _this.deactivateRouteAndItsChildren(node, null);\n }\n });\n if (!r.component) {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n else if (context && context.outlet && context.outlet.isActivated) {\n this.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n }\n else {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n };\n PreActivation.prototype.runCanDeactivateChecks = function () {\n var _this = this;\n return rxjs.from(this.canDeactivateChecks)\n .pipe(operators.mergeMap(function (check) { return _this.runCanDeactivate(check.component, check.route); }), operators.every(function (result) { return result === true; }));\n };\n PreActivation.prototype.runCanActivateChecks = function () {\n var _this = this;\n return rxjs.from(this.canActivateChecks)\n .pipe(operators.concatMap(function (check) {\n return andObservables(rxjs.from([\n _this.fireChildActivationStart(check.route.parent),\n _this.fireActivationStart(check.route), _this.runCanActivateChild(check.path),\n _this.runCanActivate(check.route)\n ]));\n }), operators.every(function (result) { return result === true; }));\n // this.fireChildActivationStart(check.path),\n };\n /**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n /**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n PreActivation.prototype.fireActivationStart = /**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n function (snapshot) {\n if (snapshot !== null && this.forwardEvent) {\n this.forwardEvent(new ActivationStart(snapshot));\n }\n return rxjs.of(true);\n };\n /**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n /**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n PreActivation.prototype.fireChildActivationStart = /**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n function (snapshot) {\n if (snapshot !== null && this.forwardEvent) {\n this.forwardEvent(new ChildActivationStart(snapshot));\n }\n return rxjs.of(true);\n };\n PreActivation.prototype.runCanActivate = function (future) {\n var _this = this;\n var canActivate = future.routeConfig ? future.routeConfig.canActivate : null;\n if (!canActivate || canActivate.length === 0)\n return rxjs.of(true);\n var obs = rxjs.from(canActivate).pipe(operators.map(function (c) {\n var guard = _this.getToken(c, future);\n var observable;\n if (guard.canActivate) {\n observable = wrapIntoObservable(guard.canActivate(future, _this.future));\n }\n else {\n observable = wrapIntoObservable(guard(future, _this.future));\n }\n return observable.pipe(operators.first());\n }));\n return andObservables(obs);\n };\n PreActivation.prototype.runCanActivateChild = function (path) {\n var _this = this;\n var future = path[path.length - 1];\n var canActivateChildGuards = path.slice(0, path.length - 1)\n .reverse()\n .map(function (p) { return _this.extractCanActivateChild(p); })\n .filter(function (_) { return _ !== null; });\n return andObservables(rxjs.from(canActivateChildGuards).pipe(operators.map(function (d) {\n var obs = rxjs.from(d.guards).pipe(operators.map(function (c) {\n var guard = _this.getToken(c, d.node);\n var observable;\n if (guard.canActivateChild) {\n observable = wrapIntoObservable(guard.canActivateChild(future, _this.future));\n }\n else {\n observable = wrapIntoObservable(guard(future, _this.future));\n }\n return observable.pipe(operators.first());\n }));\n return andObservables(obs);\n })));\n };\n PreActivation.prototype.extractCanActivateChild = function (p) {\n var canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n if (!canActivateChild || canActivateChild.length === 0)\n return null;\n return { node: p, guards: canActivateChild };\n };\n PreActivation.prototype.runCanDeactivate = function (component, curr) {\n var _this = this;\n var canDeactivate = curr && curr.routeConfig ? curr.routeConfig.canDeactivate : null;\n if (!canDeactivate || canDeactivate.length === 0)\n return rxjs.of(true);\n var canDeactivate$ = rxjs.from(canDeactivate).pipe(operators.mergeMap(function (c) {\n var guard = _this.getToken(c, curr);\n var observable;\n if (guard.canDeactivate) {\n observable =\n wrapIntoObservable(guard.canDeactivate(component, curr, _this.curr, _this.future));\n }\n else {\n observable = wrapIntoObservable(guard(component, curr, _this.curr, _this.future));\n }\n return observable.pipe(operators.first());\n }));\n return canDeactivate$.pipe(operators.every(function (result) { return result === true; }));\n };\n PreActivation.prototype.runResolve = function (future, paramsInheritanceStrategy) {\n var resolve = future._resolve;\n return this.resolveNode(resolve, future).pipe(operators.map(function (resolvedData) {\n future._resolvedData = resolvedData;\n future.data = __assign({}, future.data, inheritedParamsDataResolve(future, paramsInheritanceStrategy).resolve);\n return null;\n }));\n };\n PreActivation.prototype.resolveNode = function (resolve, future) {\n var _this = this;\n var keys = Object.keys(resolve);\n if (keys.length === 0) {\n return rxjs.of({});\n }\n if (keys.length === 1) {\n var key_1 = keys[0];\n return this.getResolver(resolve[key_1], future).pipe(operators.map(function (value) {\n return _a = {}, _a[key_1] = value, _a;\n var _a;\n }));\n }\n var data = {};\n var runningResolvers$ = rxjs.from(keys).pipe(operators.mergeMap(function (key) {\n return _this.getResolver(resolve[key], future).pipe(operators.map(function (value) {\n data[key] = value;\n return value;\n }));\n }));\n return runningResolvers$.pipe(operators.last(), operators.map(function () { return data; }));\n };\n PreActivation.prototype.getResolver = function (injectionToken, future) {\n var resolver = this.getToken(injectionToken, future);\n return resolver.resolve ? wrapIntoObservable(resolver.resolve(future, this.future)) :\n wrapIntoObservable(resolver(future, this.future));\n };\n PreActivation.prototype.getToken = function (token, snapshot) {\n var config = closestLoadedConfig(snapshot);\n var injector = config ? config.module.injector : this.moduleInjector;\n return injector.get(token);\n };\n return PreActivation;\n}());\nfunction closestLoadedConfig(snapshot) {\n if (!snapshot)\n return null;\n for (var s = snapshot.parent; s; s = s.parent) {\n var route = s.routeConfig;\n if (route && route._loadedConfig)\n return route._loadedConfig;\n }\n return null;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar NoMatch$1 = /** @class */ (function () {\n function NoMatch() {\n }\n return NoMatch;\n}());\nfunction recognize(rootComponentType, config, urlTree, url, paramsInheritanceStrategy) {\n if (paramsInheritanceStrategy === void 0) { paramsInheritanceStrategy = 'emptyOnly'; }\n return new Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy)\n .recognize();\n}\nvar Recognizer = /** @class */ (function () {\n function Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy) {\n this.rootComponentType = rootComponentType;\n this.config = config;\n this.urlTree = urlTree;\n this.url = url;\n this.paramsInheritanceStrategy = paramsInheritanceStrategy;\n }\n Recognizer.prototype.recognize = function () {\n try {\n var rootSegmentGroup = split$1(this.urlTree.root, [], [], this.config).segmentGroup;\n var children = this.processSegmentGroup(this.config, rootSegmentGroup, PRIMARY_OUTLET);\n var root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(this.urlTree.queryParams), (this.urlTree.fragment), {}, PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});\n var rootNode = new TreeNode(root, children);\n var routeState = new RouterStateSnapshot(this.url, rootNode);\n this.inheritParamsAndData(routeState._root);\n return rxjs.of(routeState);\n }\n catch (e) {\n return new rxjs.Observable(function (obs) { return obs.error(e); });\n }\n };\n Recognizer.prototype.inheritParamsAndData = function (routeNode) {\n var _this = this;\n var route = routeNode.value;\n var i = inheritedParamsDataResolve(route, this.paramsInheritanceStrategy);\n route.params = Object.freeze(i.params);\n route.data = Object.freeze(i.data);\n routeNode.children.forEach(function (n) { return _this.inheritParamsAndData(n); });\n };\n Recognizer.prototype.processSegmentGroup = function (config, segmentGroup, outlet) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(config, segmentGroup);\n }\n return this.processSegment(config, segmentGroup, segmentGroup.segments, outlet);\n };\n Recognizer.prototype.processChildren = function (config, segmentGroup) {\n var _this = this;\n var children = mapChildrenIntoArray(segmentGroup, function (child, childOutlet) { return _this.processSegmentGroup(config, child, childOutlet); });\n checkOutletNameUniqueness(children);\n sortActivatedRouteSnapshots(children);\n return children;\n };\n Recognizer.prototype.processSegment = function (config, segmentGroup, segments, outlet) {\n try {\n for (var config_1 = __values(config), config_1_1 = config_1.next(); !config_1_1.done; config_1_1 = config_1.next()) {\n var r = config_1_1.value;\n try {\n return this.processSegmentAgainstRoute(r, segmentGroup, segments, outlet);\n }\n catch (e) {\n if (!(e instanceof NoMatch$1))\n throw e;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (config_1_1 && !config_1_1.done && (_a = config_1.return)) _a.call(config_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return [];\n }\n throw new NoMatch$1();\n var e_1, _a;\n };\n Recognizer.prototype.noLeftoversInUrl = function (segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n };\n Recognizer.prototype.processSegmentAgainstRoute = function (route, rawSegment, segments, outlet) {\n if (route.redirectTo)\n throw new NoMatch$1();\n if ((route.outlet || PRIMARY_OUTLET) !== outlet)\n throw new NoMatch$1();\n var snapshot;\n var consumedSegments = [];\n var rawSlicedSegments = [];\n if (route.path === '**') {\n var params = segments.length > 0 ? last$1(segments).parameters : {};\n snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze(this.urlTree.queryParams), (this.urlTree.fragment), getData(route), outlet, (route.component), route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + segments.length, getResolve(route));\n }\n else {\n var result = match$1(rawSegment, route, segments);\n consumedSegments = result.consumedSegments;\n rawSlicedSegments = segments.slice(result.lastChild);\n snapshot = new ActivatedRouteSnapshot(consumedSegments, result.parameters, Object.freeze(this.urlTree.queryParams), (this.urlTree.fragment), getData(route), outlet, (route.component), route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + consumedSegments.length, getResolve(route));\n }\n var childConfig = getChildConfig(route);\n var _a = split$1(rawSegment, consumedSegments, rawSlicedSegments, childConfig), segmentGroup = _a.segmentGroup, slicedSegments = _a.slicedSegments;\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n var children_1 = this.processChildren(childConfig, segmentGroup);\n return [new TreeNode(snapshot, children_1)];\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return [new TreeNode(snapshot, [])];\n }\n var children = this.processSegment(childConfig, segmentGroup, slicedSegments, PRIMARY_OUTLET);\n return [new TreeNode(snapshot, children)];\n };\n return Recognizer;\n}());\nfunction sortActivatedRouteSnapshots(nodes) {\n nodes.sort(function (a, b) {\n if (a.value.outlet === PRIMARY_OUTLET)\n return -1;\n if (b.value.outlet === PRIMARY_OUTLET)\n return 1;\n return a.value.outlet.localeCompare(b.value.outlet);\n });\n}\nfunction getChildConfig(route) {\n if (route.children) {\n return route.children;\n }\n if (route.loadChildren) {\n return route._loadedConfig.routes;\n }\n return [];\n}\nfunction match$1(segmentGroup, route, segments) {\n if (route.path === '') {\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n throw new NoMatch$1();\n }\n return { consumedSegments: [], lastChild: 0, parameters: {} };\n }\n var matcher = route.matcher || defaultUrlMatcher;\n var res = matcher(segments, segmentGroup, route);\n if (!res)\n throw new NoMatch$1();\n var posParams = {};\n forEach((res.posParams), function (v, k) { posParams[k] = v.path; });\n var parameters = res.consumed.length > 0 ? __assign({}, posParams, res.consumed[res.consumed.length - 1].parameters) :\n posParams;\n return { consumedSegments: res.consumed, lastChild: res.consumed.length, parameters: parameters };\n}\nfunction checkOutletNameUniqueness(nodes) {\n var names = {};\n nodes.forEach(function (n) {\n var routeWithSameOutletName = names[n.value.outlet];\n if (routeWithSameOutletName) {\n var p = routeWithSameOutletName.url.map(function (s) { return s.toString(); }).join('/');\n var c = n.value.url.map(function (s) { return s.toString(); }).join('/');\n throw new Error(\"Two segments cannot have the same outlet name: '\" + p + \"' and '\" + c + \"'.\");\n }\n names[n.value.outlet] = n.value;\n });\n}\nfunction getSourceSegmentGroup(segmentGroup) {\n var s = segmentGroup;\n while (s._sourceSegment) {\n s = s._sourceSegment;\n }\n return s;\n}\nfunction getPathIndexShift(segmentGroup) {\n var s = segmentGroup;\n var res = (s._segmentIndexShift ? s._segmentIndexShift : 0);\n while (s._sourceSegment) {\n s = s._sourceSegment;\n res += (s._segmentIndexShift ? s._segmentIndexShift : 0);\n }\n return res - 1;\n}\nfunction split$1(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n var s_1 = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(segmentGroup, consumedSegments, config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n s_1._sourceSegment = segmentGroup;\n s_1._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s_1, slicedSegments: [] };\n }\n if (slicedSegments.length === 0 &&\n containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n var s_2 = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n s_2._sourceSegment = segmentGroup;\n s_2._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s_2, slicedSegments: slicedSegments };\n }\n var s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s, slicedSegments: slicedSegments };\n}\nfunction addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n var res = {};\n try {\n for (var routes_1 = __values(routes), routes_1_1 = routes_1.next(); !routes_1_1.done; routes_1_1 = routes_1.next()) {\n var r = routes_1_1.value;\n if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet$1(r)]) {\n var s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = segmentGroup.segments.length;\n res[getOutlet$1(r)] = s;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (routes_1_1 && !routes_1_1.done && (_a = routes_1.return)) _a.call(routes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return __assign({}, children, res);\n var e_2, _a;\n}\nfunction createChildrenForEmptyPaths(segmentGroup, consumedSegments, routes, primarySegment) {\n var res = {};\n res[PRIMARY_OUTLET] = primarySegment;\n primarySegment._sourceSegment = segmentGroup;\n primarySegment._segmentIndexShift = consumedSegments.length;\n try {\n for (var routes_2 = __values(routes), routes_2_1 = routes_2.next(); !routes_2_1.done; routes_2_1 = routes_2.next()) {\n var r = routes_2_1.value;\n if (r.path === '' && getOutlet$1(r) !== PRIMARY_OUTLET) {\n var s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n res[getOutlet$1(r)] = s;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (routes_2_1 && !routes_2_1.done && (_a = routes_2.return)) _a.call(routes_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return res;\n var e_3, _a;\n}\nfunction containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {\n return routes.some(function (r) { return emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet$1(r) !== PRIMARY_OUTLET; });\n}\nfunction containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {\n return routes.some(function (r) { return emptyPathMatch(segmentGroup, slicedSegments, r); });\n}\nfunction emptyPathMatch(segmentGroup, slicedSegments, r) {\n if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '' && r.redirectTo === undefined;\n}\nfunction getOutlet$1(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\nfunction getData(route) {\n return route.data || {};\n}\nfunction getResolve(route) {\n return route.resolve || {};\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Provides a way to customize when activated routes get reused.\n *\n * @experimental\n */\nvar RouteReuseStrategy = /** @class */ (function () {\n function RouteReuseStrategy() {\n }\n return RouteReuseStrategy;\n}());\n/**\n * Does not detach any subtrees. Reuses routes as long as their route config is the same.\n */\nvar DefaultRouteReuseStrategy = /** @class */ (function () {\n function DefaultRouteReuseStrategy() {\n }\n DefaultRouteReuseStrategy.prototype.shouldDetach = function (route) { return false; };\n DefaultRouteReuseStrategy.prototype.store = function (route, detachedTree) { };\n DefaultRouteReuseStrategy.prototype.shouldAttach = function (route) { return false; };\n DefaultRouteReuseStrategy.prototype.retrieve = function (route) { return null; };\n DefaultRouteReuseStrategy.prototype.shouldReuseRoute = function (future, curr) {\n return future.routeConfig === curr.routeConfig;\n };\n return DefaultRouteReuseStrategy;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @docsNotRequired\n * @experimental\n */\nvar ROUTES = new core.InjectionToken('ROUTES');\nvar RouterConfigLoader = /** @class */ (function () {\n function RouterConfigLoader(loader, compiler, onLoadStartListener, onLoadEndListener) {\n this.loader = loader;\n this.compiler = compiler;\n this.onLoadStartListener = onLoadStartListener;\n this.onLoadEndListener = onLoadEndListener;\n }\n RouterConfigLoader.prototype.load = function (parentInjector, route) {\n var _this = this;\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n var moduleFactory$ = this.loadModuleFactory((route.loadChildren));\n return moduleFactory$.pipe(operators.map(function (factory) {\n if (_this.onLoadEndListener) {\n _this.onLoadEndListener(route);\n }\n var module = factory.create(parentInjector);\n return new LoadedRouterConfig(flatten(module.injector.get(ROUTES)).map(copyConfig), module);\n }));\n };\n RouterConfigLoader.prototype.loadModuleFactory = function (loadChildren) {\n var _this = this;\n if (typeof loadChildren === 'string') {\n return rxjs.from(this.loader.load(loadChildren));\n }\n else {\n return wrapIntoObservable(loadChildren()).pipe(operators.mergeMap(function (t) {\n if (t instanceof core.NgModuleFactory) {\n return rxjs.of(t);\n }\n else {\n return rxjs.from(_this.compiler.compileModuleAsync(t));\n }\n }));\n }\n };\n return RouterConfigLoader;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Provides a way to migrate AngularJS applications to Angular.\n *\n * @experimental\n */\nvar UrlHandlingStrategy = /** @class */ (function () {\n function UrlHandlingStrategy() {\n }\n return UrlHandlingStrategy;\n}());\n/**\n * @experimental\n */\nvar DefaultUrlHandlingStrategy = /** @class */ (function () {\n function DefaultUrlHandlingStrategy() {\n }\n DefaultUrlHandlingStrategy.prototype.shouldProcessUrl = function (url) { return true; };\n DefaultUrlHandlingStrategy.prototype.extract = function (url) { return url; };\n DefaultUrlHandlingStrategy.prototype.merge = function (newUrlPart, wholeUrl) { return newUrlPart; };\n return DefaultUrlHandlingStrategy;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction defaultErrorHandler(error) {\n throw error;\n}\n/**\n * @internal\n */\nfunction defaultRouterHook(snapshot) {\n return rxjs.of(null);\n}\n/**\n * @description\n *\n * Provides the navigation and url manipulation capabilities.\n *\n * See `Routes` for more details and examples.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar Router = /** @class */ (function () {\n /**\n * Creates the router service.\n */\n // TODO: vsavkin make internal after the final is out.\n function Router(rootComponentType, urlSerializer, rootContexts, location, injector, loader, compiler, config) {\n var _this = this;\n this.rootComponentType = rootComponentType;\n this.urlSerializer = urlSerializer;\n this.rootContexts = rootContexts;\n this.location = location;\n this.config = config;\n this.navigations = new rxjs.BehaviorSubject((null));\n this.navigationId = 0;\n this.events = new rxjs.Subject();\n /**\n * Error handler that is invoked when a navigation errors.\n *\n * See `ErrorHandler` for more information.\n */\n this.errorHandler = defaultErrorHandler;\n /**\n * Indicates if at least one navigation happened.\n */\n this.navigated = false;\n this.lastSuccessfulId = -1;\n /**\n * Used by RouterModule. This allows us to\n * pause the navigation either before preactivation or after it.\n * @internal\n */\n this.hooks = {\n beforePreactivation: defaultRouterHook,\n afterPreactivation: defaultRouterHook\n };\n /**\n * Extracts and merges URLs. Used for AngularJS to Angular migrations.\n */\n this.urlHandlingStrategy = new DefaultUrlHandlingStrategy();\n this.routeReuseStrategy = new DefaultRouteReuseStrategy();\n /**\n * Define what the router should do if it receives a navigation request to the current URL.\n * By default, the router will ignore this navigation. However, this prevents features such\n * as a \"refresh\" button. Use this option to configure the behavior when navigating to the\n * current URL. Default is 'ignore'.\n */\n this.onSameUrlNavigation = 'ignore';\n /**\n * Defines how the router merges params, data and resolved data from parent to child\n * routes. Available options are:\n *\n * - `'emptyOnly'`, the default, only inherits parent params for path-less or component-less\n * routes.\n * - `'always'`, enables unconditional inheritance of parent params.\n */\n this.paramsInheritanceStrategy = 'emptyOnly';\n var onLoadStart = function (r) { return _this.triggerEvent(new RouteConfigLoadStart(r)); };\n var onLoadEnd = function (r) { return _this.triggerEvent(new RouteConfigLoadEnd(r)); };\n this.ngModule = injector.get(core.NgModuleRef);\n this.resetConfig(config);\n this.currentUrlTree = createEmptyUrlTree();\n this.rawUrlTree = this.currentUrlTree;\n this.configLoader = new RouterConfigLoader(loader, compiler, onLoadStart, onLoadEnd);\n this.routerState = createEmptyState(this.currentUrlTree, this.rootComponentType);\n this.processNavigations();\n }\n /**\n * @internal\n * TODO: this should be removed once the constructor of the router made internal\n */\n /**\n * @internal\n * TODO: this should be removed once the constructor of the router made internal\n */\n Router.prototype.resetRootComponentType = /**\n * @internal\n * TODO: this should be removed once the constructor of the router made internal\n */\n function (rootComponentType) {\n this.rootComponentType = rootComponentType;\n // TODO: vsavkin router 4.0 should make the root component set to null\n // this will simplify the lifecycle of the router.\n this.routerState.root.component = this.rootComponentType;\n };\n /**\n * Sets up the location change listener and performs the initial navigation.\n */\n /**\n * Sets up the location change listener and performs the initial navigation.\n */\n Router.prototype.initialNavigation = /**\n * Sets up the location change listener and performs the initial navigation.\n */\n function () {\n this.setUpLocationChangeListener();\n if (this.navigationId === 0) {\n this.navigateByUrl(this.location.path(true), { replaceUrl: true });\n }\n };\n /**\n * Sets up the location change listener.\n */\n /**\n * Sets up the location change listener.\n */\n Router.prototype.setUpLocationChangeListener = /**\n * Sets up the location change listener.\n */\n function () {\n var _this = this;\n // Don't need to use Zone.wrap any more, because zone.js\n // already patch onPopState, so location change callback will\n // run into ngZone\n if (!this.locationSubscription) {\n this.locationSubscription = this.location.subscribe(function (change) {\n var rawUrlTree = _this.urlSerializer.parse(change['url']);\n var source = change['type'] === 'popstate' ? 'popstate' : 'hashchange';\n var state = change.state && change.state.navigationId ?\n { navigationId: change.state.navigationId } :\n null;\n setTimeout(function () { _this.scheduleNavigation(rawUrlTree, source, state, { replaceUrl: true }); }, 0);\n });\n }\n };\n Object.defineProperty(Router.prototype, \"url\", {\n /** The current url */\n get: /** The current url */\n function () { return this.serializeUrl(this.currentUrlTree); },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n /** @internal */\n Router.prototype.triggerEvent = /** @internal */\n function (e) { this.events.next(e); };\n /**\n * Resets the configuration used for navigation and generating links.\n *\n * ### Usage\n *\n * ```\n * router.resetConfig([\n * { path: 'team/:id', component: TeamCmp, children: [\n * { path: 'simple', component: SimpleCmp },\n * { path: 'user/:name', component: UserCmp }\n * ]}\n * ]);\n * ```\n */\n /**\n * Resets the configuration used for navigation and generating links.\n *\n * ### Usage\n *\n * ```\n * router.resetConfig([\n * { path: 'team/:id', component: TeamCmp, children: [\n * { path: 'simple', component: SimpleCmp },\n * { path: 'user/:name', component: UserCmp }\n * ]}\n * ]);\n * ```\n */\n Router.prototype.resetConfig = /**\n * Resets the configuration used for navigation and generating links.\n *\n * ### Usage\n *\n * ```\n * router.resetConfig([\n * { path: 'team/:id', component: TeamCmp, children: [\n * { path: 'simple', component: SimpleCmp },\n * { path: 'user/:name', component: UserCmp }\n * ]}\n * ]);\n * ```\n */\n function (config) {\n validateConfig(config);\n this.config = config.map(copyConfig);\n this.navigated = false;\n this.lastSuccessfulId = -1;\n };\n /** @docsNotRequired */\n /** @docsNotRequired */\n Router.prototype.ngOnDestroy = /** @docsNotRequired */\n function () { this.dispose(); };\n /** Disposes of the router */\n /** Disposes of the router */\n Router.prototype.dispose = /** Disposes of the router */\n function () {\n if (this.locationSubscription) {\n this.locationSubscription.unsubscribe();\n this.locationSubscription = (null);\n }\n };\n /**\n * Applies an array of commands to the current url tree and creates a new url tree.\n *\n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n *\n * ### Usage\n *\n * ```\n * // create /team/33/user/11\n * router.createUrlTree(['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * router.createUrlTree(['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it, you\n * // can do the following:\n *\n * router.createUrlTree([{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n *\n * // remove the right secondary node\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n *\n * // navigate to /team/33/user/11/details\n * router.createUrlTree(['details'], {relativeTo: route});\n *\n * // navigate to /team/33/user/22\n * router.createUrlTree(['../22'], {relativeTo: route});\n *\n * // navigate to /team/44/user/22\n * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n * ```\n */\n /**\n * Applies an array of commands to the current url tree and creates a new url tree.\n *\n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n *\n * ### Usage\n *\n * ```\n * // create /team/33/user/11\n * router.createUrlTree(['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * router.createUrlTree(['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it, you\n * // can do the following:\n *\n * router.createUrlTree([{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n *\n * // remove the right secondary node\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n *\n * // navigate to /team/33/user/11/details\n * router.createUrlTree(['details'], {relativeTo: route});\n *\n * // navigate to /team/33/user/22\n * router.createUrlTree(['../22'], {relativeTo: route});\n *\n * // navigate to /team/44/user/22\n * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n * ```\n */\n Router.prototype.createUrlTree = /**\n * Applies an array of commands to the current url tree and creates a new url tree.\n *\n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n *\n * ### Usage\n *\n * ```\n * // create /team/33/user/11\n * router.createUrlTree(['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * router.createUrlTree(['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it, you\n * // can do the following:\n *\n * router.createUrlTree([{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n *\n * // remove the right secondary node\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n *\n * // navigate to /team/33/user/11/details\n * router.createUrlTree(['details'], {relativeTo: route});\n *\n * // navigate to /team/33/user/22\n * router.createUrlTree(['../22'], {relativeTo: route});\n *\n * // navigate to /team/44/user/22\n * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n * ```\n */\n function (commands, navigationExtras) {\n if (navigationExtras === void 0) { navigationExtras = {}; }\n var relativeTo = navigationExtras.relativeTo, queryParams = navigationExtras.queryParams, fragment = navigationExtras.fragment, preserveQueryParams = navigationExtras.preserveQueryParams, queryParamsHandling = navigationExtras.queryParamsHandling, preserveFragment = navigationExtras.preserveFragment;\n if (core.isDevMode() && preserveQueryParams && console && console.warn) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n var a = relativeTo || this.routerState.root;\n var f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n var q = null;\n if (queryParamsHandling) {\n switch (queryParamsHandling) {\n case 'merge':\n q = __assign({}, this.currentUrlTree.queryParams, queryParams);\n break;\n case 'preserve':\n q = this.currentUrlTree.queryParams;\n break;\n default:\n q = queryParams || null;\n }\n }\n else {\n q = preserveQueryParams ? this.currentUrlTree.queryParams : queryParams || null;\n }\n if (q !== null) {\n q = this.removeEmptyProps(q);\n }\n return createUrlTree(a, this.currentUrlTree, commands, (q), (f));\n };\n /**\n * Navigate based on the provided url. This navigation is always absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigateByUrl(\"/team/33/user/11\");\n *\n * // Navigate without updating the URL\n * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n * ```\n *\n * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n */\n /**\n * Navigate based on the provided url. This navigation is always absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigateByUrl(\"/team/33/user/11\");\n *\n * // Navigate without updating the URL\n * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n * ```\n *\n * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n */\n Router.prototype.navigateByUrl = /**\n * Navigate based on the provided url. This navigation is always absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigateByUrl(\"/team/33/user/11\");\n *\n * // Navigate without updating the URL\n * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n * ```\n *\n * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n */\n function (url, extras) {\n if (extras === void 0) { extras = { skipLocationChange: false }; }\n var urlTree = url instanceof UrlTree ? url : this.parseUrl(url);\n var mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n return this.scheduleNavigation(mergedTree, 'imperative', null, extras);\n };\n /**\n * Navigate based on the provided array of commands and a starting point.\n * If no starting route is provided, the navigation is absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n *\n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n *\n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n */\n /**\n * Navigate based on the provided array of commands and a starting point.\n * If no starting route is provided, the navigation is absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n *\n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n *\n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n */\n Router.prototype.navigate = /**\n * Navigate based on the provided array of commands and a starting point.\n * If no starting route is provided, the navigation is absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n *\n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n *\n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n */\n function (commands, extras) {\n if (extras === void 0) { extras = { skipLocationChange: false }; }\n validateCommands(commands);\n return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n };\n /** Serializes a `UrlTree` into a string */\n /** Serializes a `UrlTree` into a string */\n Router.prototype.serializeUrl = /** Serializes a `UrlTree` into a string */\n function (url) { return this.urlSerializer.serialize(url); };\n /** Parses a string into a `UrlTree` */\n /** Parses a string into a `UrlTree` */\n Router.prototype.parseUrl = /** Parses a string into a `UrlTree` */\n function (url) { return this.urlSerializer.parse(url); };\n /** Returns whether the url is activated */\n /** Returns whether the url is activated */\n Router.prototype.isActive = /** Returns whether the url is activated */\n function (url, exact) {\n if (url instanceof UrlTree) {\n return containsTree(this.currentUrlTree, url, exact);\n }\n var urlTree = this.urlSerializer.parse(url);\n return containsTree(this.currentUrlTree, urlTree, exact);\n };\n Router.prototype.removeEmptyProps = function (params) {\n return Object.keys(params).reduce(function (result, key) {\n var value = params[key];\n if (value !== null && value !== undefined) {\n result[key] = value;\n }\n return result;\n }, {});\n };\n Router.prototype.processNavigations = function () {\n var _this = this;\n this.navigations\n .pipe(operators.concatMap(function (nav) {\n if (nav) {\n _this.executeScheduledNavigation(nav);\n // a failed navigation should not stop the router from processing\n // further navigations => the catch\n return nav.promise.catch(function () { });\n }\n else {\n return rxjs.of(null);\n }\n }))\n .subscribe(function () { });\n };\n Router.prototype.scheduleNavigation = function (rawUrl, source, state, extras) {\n var lastNavigation = this.navigations.value;\n // If the user triggers a navigation imperatively (e.g., by using navigateByUrl),\n // and that navigation results in 'replaceState' that leads to the same URL,\n // we should skip those.\n if (lastNavigation && source !== 'imperative' && lastNavigation.source === 'imperative' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n // Because of a bug in IE and Edge, the location class fires two events (popstate and\n // hashchange) every single time. The second one should be ignored. Otherwise, the URL will\n // flicker. Handles the case when a popstate was emitted first.\n if (lastNavigation && source == 'hashchange' && lastNavigation.source === 'popstate' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n // Because of a bug in IE and Edge, the location class fires two events (popstate and\n // hashchange) every single time. The second one should be ignored. Otherwise, the URL will\n // flicker. Handles the case when a hashchange was emitted first.\n if (lastNavigation && source == 'popstate' && lastNavigation.source === 'hashchange' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n var resolve = null;\n var reject = null;\n var promise = new Promise(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n var id = ++this.navigationId;\n this.navigations.next({ id: id, source: source, state: state, rawUrl: rawUrl, extras: extras, resolve: resolve, reject: reject, promise: promise });\n // Make sure that the error is propagated even though `processNavigations` catch\n // handler does not rethrow\n return promise.catch(function (e) { return Promise.reject(e); });\n };\n Router.prototype.executeScheduledNavigation = function (_a) {\n var _this = this;\n var id = _a.id, rawUrl = _a.rawUrl, extras = _a.extras, resolve = _a.resolve, reject = _a.reject, source = _a.source, state = _a.state;\n var url = this.urlHandlingStrategy.extract(rawUrl);\n var urlTransition = !this.navigated || url.toString() !== this.currentUrlTree.toString();\n if ((this.onSameUrlNavigation === 'reload' ? true : urlTransition) &&\n this.urlHandlingStrategy.shouldProcessUrl(rawUrl)) {\n this.events\n .next(new NavigationStart(id, this.serializeUrl(url), source, state));\n Promise.resolve()\n .then(function (_) {\n return _this.runNavigate(url, rawUrl, !!extras.skipLocationChange, !!extras.replaceUrl, id, null);\n })\n .then(resolve, reject);\n // we cannot process the current URL, but we could process the previous one =>\n // we need to do some cleanup\n }\n else if (urlTransition && this.rawUrlTree &&\n this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)) {\n this.events\n .next(new NavigationStart(id, this.serializeUrl(url), source, state));\n Promise.resolve()\n .then(function (_) {\n return _this.runNavigate(url, rawUrl, false, false, id, createEmptyState(url, _this.rootComponentType).snapshot);\n })\n .then(resolve, reject);\n }\n else {\n this.rawUrlTree = rawUrl;\n resolve(null);\n }\n };\n Router.prototype.runNavigate = function (url, rawUrl, skipLocationChange, replaceUrl, id, precreatedState) {\n var _this = this;\n if (id !== this.navigationId) {\n this.events\n .next(new NavigationCancel(id, this.serializeUrl(url), \"Navigation ID \" + id + \" is not equal to the current navigation id \" + this.navigationId));\n return Promise.resolve(false);\n }\n return new Promise(function (resolvePromise, rejectPromise) {\n // create an observable of the url and route state snapshot\n // this operation do not result in any side effects\n var urlAndSnapshot$;\n if (!precreatedState) {\n var moduleInjector = _this.ngModule.injector;\n var redirectsApplied$ = applyRedirects(moduleInjector, _this.configLoader, _this.urlSerializer, url, _this.config);\n urlAndSnapshot$ = redirectsApplied$.pipe(operators.mergeMap(function (appliedUrl) {\n return recognize(_this.rootComponentType, _this.config, appliedUrl, _this.serializeUrl(appliedUrl), _this.paramsInheritanceStrategy)\n .pipe(operators.map(function (snapshot) {\n _this.events\n .next(new RoutesRecognized(id, _this.serializeUrl(url), _this.serializeUrl(appliedUrl), snapshot));\n return { appliedUrl: appliedUrl, snapshot: snapshot };\n }));\n }));\n }\n else {\n urlAndSnapshot$ = rxjs.of({ appliedUrl: url, snapshot: precreatedState });\n }\n var beforePreactivationDone$ = urlAndSnapshot$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean')\n return rxjs.of(p);\n return _this.hooks.beforePreactivation(p.snapshot).pipe(operators.map(function () { return p; }));\n }));\n // run preactivation: guards and data resolvers\n var preActivation;\n var preactivationSetup$ = beforePreactivationDone$.pipe(operators.map(function (p) {\n if (typeof p === 'boolean')\n return p;\n var appliedUrl = p.appliedUrl, snapshot = p.snapshot;\n var moduleInjector = _this.ngModule.injector;\n preActivation = new PreActivation(snapshot, _this.routerState.snapshot, moduleInjector, function (evt) { return _this.triggerEvent(evt); });\n preActivation.initialize(_this.rootContexts);\n return { appliedUrl: appliedUrl, snapshot: snapshot };\n }));\n var preactivationCheckGuards$ = preactivationSetup$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return rxjs.of(false);\n var appliedUrl = p.appliedUrl, snapshot = p.snapshot;\n _this.triggerEvent(new GuardsCheckStart(id, _this.serializeUrl(url), _this.serializeUrl(appliedUrl), snapshot));\n return preActivation.checkGuards().pipe(operators.map(function (shouldActivate) {\n _this.triggerEvent(new GuardsCheckEnd(id, _this.serializeUrl(url), _this.serializeUrl(appliedUrl), snapshot, shouldActivate));\n return { appliedUrl: appliedUrl, snapshot: snapshot, shouldActivate: shouldActivate };\n }));\n }));\n var preactivationResolveData$ = preactivationCheckGuards$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return rxjs.of(false);\n if (p.shouldActivate && preActivation.isActivating()) {\n _this.triggerEvent(new ResolveStart(id, _this.serializeUrl(url), _this.serializeUrl(p.appliedUrl), p.snapshot));\n return preActivation.resolveData(_this.paramsInheritanceStrategy).pipe(operators.map(function () {\n _this.triggerEvent(new ResolveEnd(id, _this.serializeUrl(url), _this.serializeUrl(p.appliedUrl), p.snapshot));\n return p;\n }));\n }\n else {\n return rxjs.of(p);\n }\n }));\n var preactivationDone$ = preactivationResolveData$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return rxjs.of(false);\n return _this.hooks.afterPreactivation(p.snapshot).pipe(operators.map(function () { return p; }));\n }));\n // create router state\n // this operation has side effects => route state is being affected\n var routerState$ = preactivationDone$.pipe(operators.map(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return false;\n var appliedUrl = p.appliedUrl, snapshot = p.snapshot, shouldActivate = p.shouldActivate;\n if (shouldActivate) {\n var state = createRouterState(_this.routeReuseStrategy, snapshot, _this.routerState);\n return { appliedUrl: appliedUrl, state: state, shouldActivate: shouldActivate };\n }\n else {\n return { appliedUrl: appliedUrl, state: null, shouldActivate: shouldActivate };\n }\n }));\n _this.activateRoutes(routerState$, _this.routerState, _this.currentUrlTree, id, url, rawUrl, skipLocationChange, replaceUrl, resolvePromise, rejectPromise);\n });\n };\n /**\n * Performs the logic of activating routes. This is a synchronous process by default. While this\n * is a private method, it could be overridden to make activation asynchronous.\n */\n /**\n * Performs the logic of activating routes. This is a synchronous process by default. While this\n * is a private method, it could be overridden to make activation asynchronous.\n */\n Router.prototype.activateRoutes = /**\n * Performs the logic of activating routes. This is a synchronous process by default. While this\n * is a private method, it could be overridden to make activation asynchronous.\n */\n function (state, storedState, storedUrl, id, url, rawUrl, skipLocationChange, replaceUrl, resolvePromise, rejectPromise) {\n var _this = this;\n // applied the new router state\n // this operation has side effects\n var navigationIsSuccessful;\n state\n .forEach(function (p) {\n if (typeof p === 'boolean' || !p.shouldActivate || id !== _this.navigationId || !p.state) {\n navigationIsSuccessful = false;\n return;\n }\n var appliedUrl = p.appliedUrl, state = p.state;\n _this.currentUrlTree = appliedUrl;\n _this.rawUrlTree = _this.urlHandlingStrategy.merge(_this.currentUrlTree, rawUrl);\n _this.routerState = state;\n if (!skipLocationChange) {\n var path = _this.urlSerializer.serialize(_this.rawUrlTree);\n if (_this.location.isCurrentPathEqualTo(path) || replaceUrl) {\n _this.location.replaceState(path, '', { navigationId: id });\n }\n else {\n _this.location.go(path, '', { navigationId: id });\n }\n }\n new ActivateRoutes(_this.routeReuseStrategy, state, storedState, function (evt) { return _this.triggerEvent(evt); })\n .activate(_this.rootContexts);\n navigationIsSuccessful = true;\n })\n .then(function () {\n if (navigationIsSuccessful) {\n _this.navigated = true;\n _this.lastSuccessfulId = id;\n _this.events\n .next(new NavigationEnd(id, _this.serializeUrl(url), _this.serializeUrl(_this.currentUrlTree)));\n resolvePromise(true);\n }\n else {\n _this.resetUrlToCurrentUrlTree();\n _this.events\n .next(new NavigationCancel(id, _this.serializeUrl(url), ''));\n resolvePromise(false);\n }\n }, function (e) {\n if (isNavigationCancelingError(e)) {\n _this.navigated = true;\n _this.resetStateAndUrl(storedState, storedUrl, rawUrl);\n _this.events\n .next(new NavigationCancel(id, _this.serializeUrl(url), e.message));\n resolvePromise(false);\n }\n else {\n _this.resetStateAndUrl(storedState, storedUrl, rawUrl);\n _this.events\n .next(new NavigationError(id, _this.serializeUrl(url), e));\n try {\n resolvePromise(_this.errorHandler(e));\n }\n catch (ee) {\n rejectPromise(ee);\n }\n }\n });\n };\n Router.prototype.resetStateAndUrl = function (storedState, storedUrl, rawUrl) {\n this.routerState = storedState;\n this.currentUrlTree = storedUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);\n this.resetUrlToCurrentUrlTree();\n };\n Router.prototype.resetUrlToCurrentUrlTree = function () {\n this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), '', { navigationId: this.lastSuccessfulId });\n };\n return Router;\n}());\nvar ActivateRoutes = /** @class */ (function () {\n function ActivateRoutes(routeReuseStrategy, futureState, currState, forwardEvent) {\n this.routeReuseStrategy = routeReuseStrategy;\n this.futureState = futureState;\n this.currState = currState;\n this.forwardEvent = forwardEvent;\n }\n ActivateRoutes.prototype.activate = function (parentContexts) {\n var futureRoot = this.futureState._root;\n var currRoot = this.currState ? this.currState._root : null;\n this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n advanceActivatedRoute(this.futureState.root);\n this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n };\n // De-activate the child route that are not re-used for the future state\n // De-activate the child route that are not re-used for the future state\n ActivateRoutes.prototype.deactivateChildRoutes = \n // De-activate the child route that are not re-used for the future state\n function (futureNode, currNode, contexts) {\n var _this = this;\n var children = nodeChildrenAsMap(currNode);\n // Recurse on the routes active in the future state to de-activate deeper children\n futureNode.children.forEach(function (futureChild) {\n var childOutletName = futureChild.value.outlet;\n _this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n delete children[childOutletName];\n });\n // De-activate the routes that will not be re-used\n forEach(children, function (v, childName) {\n _this.deactivateRouteAndItsChildren(v, contexts);\n });\n };\n ActivateRoutes.prototype.deactivateRoutes = function (futureNode, currNode, parentContext) {\n var future = futureNode.value;\n var curr = currNode ? currNode.value : null;\n if (future === curr) {\n // Reusing the node, check to see if the children need to be de-activated\n if (future.component) {\n // If we have a normal route, we need to go through an outlet.\n var context = parentContext.getContext(future.outlet);\n if (context) {\n this.deactivateChildRoutes(futureNode, currNode, context.children);\n }\n }\n else {\n // if we have a componentless route, we recurse but keep the same outlet map.\n this.deactivateChildRoutes(futureNode, currNode, parentContext);\n }\n }\n else {\n if (curr) {\n // Deactivate the current route which will not be re-used\n this.deactivateRouteAndItsChildren(currNode, parentContext);\n }\n }\n };\n ActivateRoutes.prototype.deactivateRouteAndItsChildren = function (route, parentContexts) {\n if (this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n this.detachAndStoreRouteSubtree(route, parentContexts);\n }\n else {\n this.deactivateRouteAndOutlet(route, parentContexts);\n }\n };\n ActivateRoutes.prototype.detachAndStoreRouteSubtree = function (route, parentContexts) {\n var context = parentContexts.getContext(route.value.outlet);\n if (context && context.outlet) {\n var componentRef = context.outlet.detach();\n var contexts = context.children.onOutletDeactivated();\n this.routeReuseStrategy.store(route.value.snapshot, { componentRef: componentRef, route: route, contexts: contexts });\n }\n };\n ActivateRoutes.prototype.deactivateRouteAndOutlet = function (route, parentContexts) {\n var _this = this;\n var context = parentContexts.getContext(route.value.outlet);\n if (context) {\n var children = nodeChildrenAsMap(route);\n var contexts_1 = route.value.component ? context.children : parentContexts;\n forEach(children, function (v, k) { return _this.deactivateRouteAndItsChildren(v, contexts_1); });\n if (context.outlet) {\n // Destroy the component\n context.outlet.deactivate();\n // Destroy the contexts for all the outlets that were in the component\n context.children.onOutletDeactivated();\n }\n }\n };\n ActivateRoutes.prototype.activateChildRoutes = function (futureNode, currNode, contexts) {\n var _this = this;\n var children = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(function (c) {\n _this.activateRoutes(c, children[c.value.outlet], contexts);\n _this.forwardEvent(new ActivationEnd(c.value.snapshot));\n });\n if (futureNode.children.length) {\n this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n }\n };\n ActivateRoutes.prototype.activateRoutes = function (futureNode, currNode, parentContexts) {\n var future = futureNode.value;\n var curr = currNode ? currNode.value : null;\n advanceActivatedRoute(future);\n // reusing the node\n if (future === curr) {\n if (future.component) {\n // If we have a normal route, we need to go through an outlet.\n var context = parentContexts.getOrCreateContext(future.outlet);\n this.activateChildRoutes(futureNode, currNode, context.children);\n }\n else {\n // if we have a componentless route, we recurse but keep the same outlet map.\n this.activateChildRoutes(futureNode, currNode, parentContexts);\n }\n }\n else {\n if (future.component) {\n // if we have a normal route, we need to place the component into the outlet and recurse.\n var context = parentContexts.getOrCreateContext(future.outlet);\n if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n var stored = this.routeReuseStrategy.retrieve(future.snapshot);\n this.routeReuseStrategy.store(future.snapshot, null);\n context.children.onOutletReAttached(stored.contexts);\n context.attachRef = stored.componentRef;\n context.route = stored.route.value;\n if (context.outlet) {\n // Attach right away when the outlet has already been instantiated\n // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated\n context.outlet.attach(stored.componentRef, stored.route.value);\n }\n advanceActivatedRouteNodeAndItsChildren(stored.route);\n }\n else {\n var config = parentLoadedConfig(future.snapshot);\n var cmpFactoryResolver = config ? config.module.componentFactoryResolver : null;\n context.route = future;\n context.resolver = cmpFactoryResolver;\n if (context.outlet) {\n // Activate the outlet when it has already been instantiated\n // Otherwise it will get activated from its `ngOnInit` when instantiated\n context.outlet.activateWith(future, cmpFactoryResolver);\n }\n this.activateChildRoutes(futureNode, null, context.children);\n }\n }\n else {\n // if we have a componentless route, we recurse but keep the same outlet map.\n this.activateChildRoutes(futureNode, null, parentContexts);\n }\n }\n };\n return ActivateRoutes;\n}());\nfunction advanceActivatedRouteNodeAndItsChildren(node) {\n advanceActivatedRoute(node.value);\n node.children.forEach(advanceActivatedRouteNodeAndItsChildren);\n}\nfunction parentLoadedConfig(snapshot) {\n for (var s = snapshot.parent; s; s = s.parent) {\n var route = s.routeConfig;\n if (route && route._loadedConfig)\n return route._loadedConfig;\n if (route && route.component)\n return null;\n }\n return null;\n}\nfunction validateCommands(commands) {\n for (var i = 0; i < commands.length; i++) {\n var cmd = commands[i];\n if (cmd == null) {\n throw new Error(\"The requested path contains \" + cmd + \" segment at index \" + i);\n }\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Lets you link to specific routes in your app.\n *\n * Consider the following route configuration:\n * `[{ path: 'user/:name', component: UserCmp }]`.\n * When linking to this `user/:name` route, you use the `RouterLink` directive.\n *\n * If the link is static, you can use the directive as follows:\n * `<a routerLink=\"/user/bob\">link to user component</a>`\n *\n * If you use dynamic values to generate the link, you can pass an array of path\n * segments, followed by the params for each segment.\n *\n * For instance `['/team', teamId, 'user', userName, {details: true}]`\n * means that we want to generate a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one\n * (e.g., `['/team/11/user', userName, {details: true}]`).\n *\n * The first segment name can be prepended with `/`, `./`, or `../`:\n * * If the first segment begins with `/`, the router will look up the route from the root of the\n * app.\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router will\n * instead look in the children of the current activated route.\n * * And if the first segment begins with `../`, the router will go up one level.\n *\n * You can set query params and fragment as follows:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n * link to user component\n * </a>\n * ```\n * RouterLink will use these to generate this link: `/user/bob#education?debug=true`.\n *\n * (Deprecated in v4.0.0 use `queryParamsHandling` instead) You can also tell the\n * directive to preserve the current query params and fragment:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" preserveQueryParams preserveFragment>\n * link to user component\n * </a>\n * ```\n *\n * You can tell the directive to how to handle queryParams, available options are:\n * - `'merge'`: merge the queryParams into the current queryParams\n * - `'preserve'`: preserve the current queryParams\n * - default/`''`: use the queryParams only\n *\n * Same options for {@link NavigationExtras#queryParamsHandling\n * NavigationExtras#queryParamsHandling}.\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n * link to user component\n * </a>\n * ```\n *\n * The router link directive always treats the provided input as a delta to the current url.\n *\n * For instance, if the current url is `/user/(box//aux:team)`.\n *\n * Then the following link `<a [routerLink]=\"['/user/jim']\">Jim</a>` will generate the link\n * `/user/(jim//aux:team)`.\n *\n * See {@link Router#createUrlTree createUrlTree} for more information.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar RouterLink = /** @class */ (function () {\n function RouterLink(router, route, tabIndex, renderer, el) {\n this.router = router;\n this.route = route;\n this.commands = [];\n if (tabIndex == null) {\n renderer.setAttribute(el.nativeElement, 'tabindex', '0');\n }\n }\n Object.defineProperty(RouterLink.prototype, \"routerLink\", {\n set: function (commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n }\n else {\n this.commands = [];\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterLink.prototype, \"preserveQueryParams\", {\n set: /**\n * @deprecated 4.0.0 use `queryParamsHandling` instead.\n */\n function (value) {\n if (core.isDevMode() && console && console.warn) {\n console.warn('preserveQueryParams is deprecated!, use queryParamsHandling instead.');\n }\n this.preserve = value;\n },\n enumerable: true,\n configurable: true\n });\n RouterLink.prototype.onClick = function () {\n var extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return true;\n };\n Object.defineProperty(RouterLink.prototype, \"urlTree\", {\n get: function () {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n },\n enumerable: true,\n configurable: true\n });\n RouterLink.decorators = [\n { type: core.Directive, args: [{ selector: ':not(a)[routerLink]' },] }\n ];\n /** @nocollapse */\n RouterLink.ctorParameters = function () { return [\n { type: Router, },\n { type: ActivatedRoute, },\n { type: undefined, decorators: [{ type: core.Attribute, args: ['tabindex',] },] },\n { type: core.Renderer2, },\n { type: core.ElementRef, },\n ]; };\n RouterLink.propDecorators = {\n \"queryParams\": [{ type: core.Input },],\n \"fragment\": [{ type: core.Input },],\n \"queryParamsHandling\": [{ type: core.Input },],\n \"preserveFragment\": [{ type: core.Input },],\n \"skipLocationChange\": [{ type: core.Input },],\n \"replaceUrl\": [{ type: core.Input },],\n \"routerLink\": [{ type: core.Input },],\n \"preserveQueryParams\": [{ type: core.Input },],\n \"onClick\": [{ type: core.HostListener, args: ['click',] },],\n };\n return RouterLink;\n}());\n/**\n * @description\n *\n * Lets you link to specific routes in your app.\n *\n * See `RouterLink` for more information.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar RouterLinkWithHref = /** @class */ (function () {\n function RouterLinkWithHref(router, route, locationStrategy) {\n var _this = this;\n this.router = router;\n this.route = route;\n this.locationStrategy = locationStrategy;\n this.commands = [];\n this.subscription = router.events.subscribe(function (s) {\n if (s instanceof NavigationEnd) {\n _this.updateTargetUrlAndHref();\n }\n });\n }\n Object.defineProperty(RouterLinkWithHref.prototype, \"routerLink\", {\n set: function (commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n }\n else {\n this.commands = [];\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterLinkWithHref.prototype, \"preserveQueryParams\", {\n set: function (value) {\n if (core.isDevMode() && console && console.warn) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n this.preserve = value;\n },\n enumerable: true,\n configurable: true\n });\n RouterLinkWithHref.prototype.ngOnChanges = function (changes) { this.updateTargetUrlAndHref(); };\n RouterLinkWithHref.prototype.ngOnDestroy = function () { this.subscription.unsubscribe(); };\n RouterLinkWithHref.prototype.onClick = function (button, ctrlKey, metaKey, shiftKey) {\n if (button !== 0 || ctrlKey || metaKey || shiftKey) {\n return true;\n }\n if (typeof this.target === 'string' && this.target != '_self') {\n return true;\n }\n var extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return false;\n };\n RouterLinkWithHref.prototype.updateTargetUrlAndHref = function () {\n this.href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree));\n };\n Object.defineProperty(RouterLinkWithHref.prototype, \"urlTree\", {\n get: function () {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n },\n enumerable: true,\n configurable: true\n });\n RouterLinkWithHref.decorators = [\n { type: core.Directive, args: [{ selector: 'a[routerLink]' },] }\n ];\n /** @nocollapse */\n RouterLinkWithHref.ctorParameters = function () { return [\n { type: Router, },\n { type: ActivatedRoute, },\n { type: common.LocationStrategy, },\n ]; };\n RouterLinkWithHref.propDecorators = {\n \"target\": [{ type: core.HostBinding, args: ['attr.target',] }, { type: core.Input },],\n \"queryParams\": [{ type: core.Input },],\n \"fragment\": [{ type: core.Input },],\n \"queryParamsHandling\": [{ type: core.Input },],\n \"preserveFragment\": [{ type: core.Input },],\n \"skipLocationChange\": [{ type: core.Input },],\n \"replaceUrl\": [{ type: core.Input },],\n \"href\": [{ type: core.HostBinding },],\n \"routerLink\": [{ type: core.Input },],\n \"preserveQueryParams\": [{ type: core.Input },],\n \"onClick\": [{ type: core.HostListener, args: ['click', ['$event.button', '$event.ctrlKey', '$event.metaKey', '$event.shiftKey'],] },],\n };\n return RouterLinkWithHref;\n}());\nfunction attrBoolValue(s) {\n return s === '' || !!s;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n *\n * @description\n *\n * Lets you add a CSS class to an element when the link's route becomes active.\n *\n * This directive lets you add a CSS class to an element when the link's route\n * becomes active.\n *\n * Consider the following example:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * When the url is either '/user' or '/user/bob', the active-link class will\n * be added to the `a` tag. If the url changes, the class will be removed.\n *\n * You can set more than one class, as follows:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * You can configure RouterLinkActive by passing `exact: true`. This will add the classes\n * only when the url matches the link exactly.\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\n * ```\n *\n * You can assign the RouterLinkActive instance to a template variable and directly check\n * the `isActive` status.\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n * Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\n * ```\n *\n * Finally, you can apply the RouterLinkActive directive to an ancestor of a RouterLink.\n *\n * ```\n * <div routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact: true}\">\n * <a routerLink=\"/user/jim\">Jim</a>\n * <a routerLink=\"/user/bob\">Bob</a>\n * </div>\n * ```\n *\n * This will set the active-link class on the div tag if the url is either '/user/jim' or\n * '/user/bob'.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar RouterLinkActive = /** @class */ (function () {\n function RouterLinkActive(router, element, renderer, cdr) {\n var _this = this;\n this.router = router;\n this.element = element;\n this.renderer = renderer;\n this.cdr = cdr;\n this.classes = [];\n this.isActive = false;\n this.routerLinkActiveOptions = { exact: false };\n this.subscription = router.events.subscribe(function (s) {\n if (s instanceof NavigationEnd) {\n _this.update();\n }\n });\n }\n RouterLinkActive.prototype.ngAfterContentInit = function () {\n var _this = this;\n this.links.changes.subscribe(function (_) { return _this.update(); });\n this.linksWithHrefs.changes.subscribe(function (_) { return _this.update(); });\n this.update();\n };\n Object.defineProperty(RouterLinkActive.prototype, \"routerLinkActive\", {\n set: function (data) {\n var classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter(function (c) { return !!c; });\n },\n enumerable: true,\n configurable: true\n });\n RouterLinkActive.prototype.ngOnChanges = function (changes) { this.update(); };\n RouterLinkActive.prototype.ngOnDestroy = function () { this.subscription.unsubscribe(); };\n RouterLinkActive.prototype.update = function () {\n var _this = this;\n if (!this.links || !this.linksWithHrefs || !this.router.navigated)\n return;\n Promise.resolve().then(function () {\n var hasActiveLinks = _this.hasActiveLinks();\n if (_this.isActive !== hasActiveLinks) {\n _this.isActive = hasActiveLinks;\n _this.classes.forEach(function (c) {\n if (hasActiveLinks) {\n _this.renderer.addClass(_this.element.nativeElement, c);\n }\n else {\n _this.renderer.removeClass(_this.element.nativeElement, c);\n }\n });\n }\n });\n };\n RouterLinkActive.prototype.isLinkActive = function (router) {\n var _this = this;\n return function (link) {\n return router.isActive(link.urlTree, _this.routerLinkActiveOptions.exact);\n };\n };\n RouterLinkActive.prototype.hasActiveLinks = function () {\n return this.links.some(this.isLinkActive(this.router)) ||\n this.linksWithHrefs.some(this.isLinkActive(this.router));\n };\n RouterLinkActive.decorators = [\n { type: core.Directive, args: [{\n selector: '[routerLinkActive]',\n exportAs: 'routerLinkActive',\n },] }\n ];\n /** @nocollapse */\n RouterLinkActive.ctorParameters = function () { return [\n { type: Router, },\n { type: core.ElementRef, },\n { type: core.Renderer2, },\n { type: core.ChangeDetectorRef, },\n ]; };\n RouterLinkActive.propDecorators = {\n \"links\": [{ type: core.ContentChildren, args: [RouterLink, { descendants: true },] },],\n \"linksWithHrefs\": [{ type: core.ContentChildren, args: [RouterLinkWithHref, { descendants: true },] },],\n \"routerLinkActiveOptions\": [{ type: core.Input },],\n \"routerLinkActive\": [{ type: core.Input },],\n };\n return RouterLinkActive;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Store contextual information about a `RouterOutlet`\n *\n *\n */\nvar OutletContext = /** @class */ (function () {\n function OutletContext() {\n this.outlet = null;\n this.route = null;\n this.resolver = null;\n this.children = new ChildrenOutletContexts();\n this.attachRef = null;\n }\n return OutletContext;\n}());\n/**\n * Store contextual information about the children (= nested) `RouterOutlet`\n *\n *\n */\nvar ChildrenOutletContexts = /** @class */ (function () {\n function ChildrenOutletContexts() {\n // contexts for child outlets, by name.\n this.contexts = new Map();\n }\n /** Called when a `RouterOutlet` directive is instantiated */\n /** Called when a `RouterOutlet` directive is instantiated */\n ChildrenOutletContexts.prototype.onChildOutletCreated = /** Called when a `RouterOutlet` directive is instantiated */\n function (childName, outlet) {\n var context = this.getOrCreateContext(childName);\n context.outlet = outlet;\n this.contexts.set(childName, context);\n };\n /**\n * Called when a `RouterOutlet` directive is destroyed.\n * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n * re-created later.\n */\n /**\n * Called when a `RouterOutlet` directive is destroyed.\n * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n * re-created later.\n */\n ChildrenOutletContexts.prototype.onChildOutletDestroyed = /**\n * Called when a `RouterOutlet` directive is destroyed.\n * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n * re-created later.\n */\n function (childName) {\n var context = this.getContext(childName);\n if (context) {\n context.outlet = null;\n }\n };\n /**\n * Called when the corresponding route is deactivated during navigation.\n * Because the component get destroyed, all children outlet are destroyed.\n */\n /**\n * Called when the corresponding route is deactivated during navigation.\n * Because the component get destroyed, all children outlet are destroyed.\n */\n ChildrenOutletContexts.prototype.onOutletDeactivated = /**\n * Called when the corresponding route is deactivated during navigation.\n * Because the component get destroyed, all children outlet are destroyed.\n */\n function () {\n var contexts = this.contexts;\n this.contexts = new Map();\n return contexts;\n };\n ChildrenOutletContexts.prototype.onOutletReAttached = function (contexts) { this.contexts = contexts; };\n ChildrenOutletContexts.prototype.getOrCreateContext = function (childName) {\n var context = this.getContext(childName);\n if (!context) {\n context = new OutletContext();\n this.contexts.set(childName, context);\n }\n return context;\n };\n ChildrenOutletContexts.prototype.getContext = function (childName) { return this.contexts.get(childName) || null; };\n return ChildrenOutletContexts;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * ```\n * <router-outlet></router-outlet>\n * <router-outlet name='left'></router-outlet>\n * <router-outlet name='right'></router-outlet>\n * ```\n *\n * A router outlet will emit an activate event any time a new component is being instantiated,\n * and a deactivate event when it is being destroyed.\n *\n * ```\n * <router-outlet\n * (activate)='onActivate($event)'\n * (deactivate)='onDeactivate($event)'></router-outlet>\n * ```\n * @ngModule RouterModule\n *\n *\n */\nvar RouterOutlet = /** @class */ (function () {\n function RouterOutlet(parentContexts, location, resolver, name, changeDetector) {\n this.parentContexts = parentContexts;\n this.location = location;\n this.resolver = resolver;\n this.changeDetector = changeDetector;\n this.activated = null;\n this._activatedRoute = null;\n this.activateEvents = new core.EventEmitter();\n this.deactivateEvents = new core.EventEmitter();\n this.name = name || PRIMARY_OUTLET;\n parentContexts.onChildOutletCreated(this.name, this);\n }\n RouterOutlet.prototype.ngOnDestroy = function () { this.parentContexts.onChildOutletDestroyed(this.name); };\n RouterOutlet.prototype.ngOnInit = function () {\n if (!this.activated) {\n // If the outlet was not instantiated at the time the route got activated we need to populate\n // the outlet when it is initialized (ie inside a NgIf)\n var context = this.parentContexts.getContext(this.name);\n if (context && context.route) {\n if (context.attachRef) {\n // `attachRef` is populated when there is an existing component to mount\n this.attach(context.attachRef, context.route);\n }\n else {\n // otherwise the component defined in the configuration is created\n this.activateWith(context.route, context.resolver || null);\n }\n }\n }\n };\n Object.defineProperty(RouterOutlet.prototype, \"isActivated\", {\n get: function () { return !!this.activated; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterOutlet.prototype, \"component\", {\n get: function () {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n return this.activated.instance;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterOutlet.prototype, \"activatedRoute\", {\n get: function () {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n return this._activatedRoute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterOutlet.prototype, \"activatedRouteData\", {\n get: function () {\n if (this._activatedRoute) {\n return this._activatedRoute.snapshot.data;\n }\n return {};\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Called when the `RouteReuseStrategy` instructs to detach the subtree\n */\n /**\n * Called when the `RouteReuseStrategy` instructs to detach the subtree\n */\n RouterOutlet.prototype.detach = /**\n * Called when the `RouteReuseStrategy` instructs to detach the subtree\n */\n function () {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n this.location.detach();\n var cmp = this.activated;\n this.activated = null;\n this._activatedRoute = null;\n return cmp;\n };\n /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n */\n /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n */\n RouterOutlet.prototype.attach = /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n */\n function (ref, activatedRoute) {\n this.activated = ref;\n this._activatedRoute = activatedRoute;\n this.location.insert(ref.hostView);\n };\n RouterOutlet.prototype.deactivate = function () {\n if (this.activated) {\n var c = this.component;\n this.activated.destroy();\n this.activated = null;\n this._activatedRoute = null;\n this.deactivateEvents.emit(c);\n }\n };\n RouterOutlet.prototype.activateWith = function (activatedRoute, resolver) {\n if (this.isActivated) {\n throw new Error('Cannot activate an already activated outlet');\n }\n this._activatedRoute = activatedRoute;\n var snapshot = activatedRoute._futureSnapshot;\n var component = snapshot.routeConfig.component;\n resolver = resolver || this.resolver;\n var factory = resolver.resolveComponentFactory(component);\n var childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n var injector = new OutletInjector(activatedRoute, childContexts, this.location.injector);\n this.activated = this.location.createComponent(factory, this.location.length, injector);\n // Calling `markForCheck` to make sure we will run the change detection when the\n // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.\n this.changeDetector.markForCheck();\n this.activateEvents.emit(this.activated.instance);\n };\n RouterOutlet.decorators = [\n { type: core.Directive, args: [{ selector: 'router-outlet', exportAs: 'outlet' },] }\n ];\n /** @nocollapse */\n RouterOutlet.ctorParameters = function () { return [\n { type: ChildrenOutletContexts, },\n { type: core.ViewContainerRef, },\n { type: core.ComponentFactoryResolver, },\n { type: undefined, decorators: [{ type: core.Attribute, args: ['name',] },] },\n { type: core.ChangeDetectorRef, },\n ]; };\n RouterOutlet.propDecorators = {\n \"activateEvents\": [{ type: core.Output, args: ['activate',] },],\n \"deactivateEvents\": [{ type: core.Output, args: ['deactivate',] },],\n };\n return RouterOutlet;\n}());\nvar OutletInjector = /** @class */ (function () {\n function OutletInjector(route, childContexts, parent) {\n this.route = route;\n this.childContexts = childContexts;\n this.parent = parent;\n }\n OutletInjector.prototype.get = function (token, notFoundValue) {\n if (token === ActivatedRoute) {\n return this.route;\n }\n if (token === ChildrenOutletContexts) {\n return this.childContexts;\n }\n return this.parent.get(token, notFoundValue);\n };\n return OutletInjector;\n}());\n\n/**\n*@license\n*Copyright Google Inc. All Rights Reserved.\n*\n*Use of this source code is governed by an MIT-style license that can be\n*found in the LICENSE file at https://angular.io/license\n*/\n/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @experimental\n */\nvar PreloadingStrategy = /** @class */ (function () {\n function PreloadingStrategy() {\n }\n return PreloadingStrategy;\n}());\n/**\n * @description\n *\n * Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * ```\n * RouteModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * @experimental\n */\nvar PreloadAllModules = /** @class */ (function () {\n function PreloadAllModules() {\n }\n PreloadAllModules.prototype.preload = function (route, fn) {\n return fn().pipe(operators.catchError(function () { return rxjs.of(null); }));\n };\n return PreloadAllModules;\n}());\n/**\n * @description\n *\n * Provides a preloading strategy that does not preload any modules.\n *\n * This strategy is enabled by default.\n *\n * @experimental\n */\nvar NoPreloading = /** @class */ (function () {\n function NoPreloading() {\n }\n NoPreloading.prototype.preload = function (route, fn) { return rxjs.of(null); };\n return NoPreloading;\n}());\n/**\n * The preloader optimistically loads all router configurations to\n * make navigations into lazily-loaded sections of the application faster.\n *\n * The preloader runs in the background. When the router bootstraps, the preloader\n * starts listening to all navigation events. After every such event, the preloader\n * will check if any configurations can be loaded lazily.\n *\n * If a route is protected by `canLoad` guards, the preloaded will not load it.\n *\n *\n */\nvar RouterPreloader = /** @class */ (function () {\n function RouterPreloader(router, moduleLoader, compiler, injector, preloadingStrategy) {\n this.router = router;\n this.injector = injector;\n this.preloadingStrategy = preloadingStrategy;\n var onStartLoad = function (r) { return router.triggerEvent(new RouteConfigLoadStart(r)); };\n var onEndLoad = function (r) { return router.triggerEvent(new RouteConfigLoadEnd(r)); };\n this.loader = new RouterConfigLoader(moduleLoader, compiler, onStartLoad, onEndLoad);\n }\n RouterPreloader.prototype.setUpPreloading = function () {\n var _this = this;\n this.subscription =\n this.router.events\n .pipe(operators.filter(function (e) { return e instanceof NavigationEnd; }), operators.concatMap(function () { return _this.preload(); }))\n .subscribe(function () { });\n };\n RouterPreloader.prototype.preload = function () {\n var ngModule = this.injector.get(core.NgModuleRef);\n return this.processRoutes(ngModule, this.router.config);\n };\n // TODO(jasonaden): This class relies on code external to the class to call setUpPreloading. If\n // this hasn't been done, ngOnDestroy will fail as this.subscription will be undefined. This\n // should be refactored.\n // TODO(jasonaden): This class relies on code external to the class to call setUpPreloading. If\n // this hasn't been done, ngOnDestroy will fail as this.subscription will be undefined. This\n // should be refactored.\n RouterPreloader.prototype.ngOnDestroy = \n // TODO(jasonaden): This class relies on code external to the class to call setUpPreloading. If\n // this hasn't been done, ngOnDestroy will fail as this.subscription will be undefined. This\n // should be refactored.\n function () { this.subscription.unsubscribe(); };\n RouterPreloader.prototype.processRoutes = function (ngModule, routes) {\n var res = [];\n try {\n for (var routes_1 = __values(routes), routes_1_1 = routes_1.next(); !routes_1_1.done; routes_1_1 = routes_1.next()) {\n var route = routes_1_1.value;\n // we already have the config loaded, just recurse\n if (route.loadChildren && !route.canLoad && route._loadedConfig) {\n var childConfig = route._loadedConfig;\n res.push(this.processRoutes(childConfig.module, childConfig.routes));\n // no config loaded, fetch the config\n }\n else if (route.loadChildren && !route.canLoad) {\n res.push(this.preloadConfig(ngModule, route));\n // recurse into children\n }\n else if (route.children) {\n res.push(this.processRoutes(ngModule, route.children));\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (routes_1_1 && !routes_1_1.done && (_a = routes_1.return)) _a.call(routes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return rxjs.from(res).pipe(operators.mergeAll(), operators.map(function (_) { return void 0; }));\n var e_1, _a;\n };\n RouterPreloader.prototype.preloadConfig = function (ngModule, route) {\n var _this = this;\n return this.preloadingStrategy.preload(route, function () {\n var loaded$ = _this.loader.load(ngModule.injector, route);\n return loaded$.pipe(operators.mergeMap(function (config) {\n route._loadedConfig = config;\n return _this.processRoutes(config.module, config.routes);\n }));\n });\n };\n RouterPreloader.decorators = [\n { type: core.Injectable }\n ];\n /** @nocollapse */\n RouterPreloader.ctorParameters = function () { return [\n { type: Router, },\n { type: core.NgModuleFactoryLoader, },\n { type: core.Compiler, },\n { type: core.Injector, },\n { type: PreloadingStrategy, },\n ]; };\n return RouterPreloader;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Contains a list of directives\n *\n *\n */\nvar ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive];\n/**\n * @description\n *\n * Is used in DI to configure the router.\n *\n *\n */\nvar ROUTER_CONFIGURATION = new core.InjectionToken('ROUTER_CONFIGURATION');\n/**\n * @docsNotRequired\n */\nvar ROUTER_FORROOT_GUARD = new core.InjectionToken('ROUTER_FORROOT_GUARD');\nvar ROUTER_PROVIDERS = [\n common.Location,\n { provide: UrlSerializer, useClass: DefaultUrlSerializer },\n {\n provide: Router,\n useFactory: setupRouter,\n deps: [\n core.ApplicationRef, UrlSerializer, ChildrenOutletContexts, common.Location, core.Injector,\n core.NgModuleFactoryLoader, core.Compiler, ROUTES, ROUTER_CONFIGURATION,\n [UrlHandlingStrategy, new core.Optional()], [RouteReuseStrategy, new core.Optional()]\n ]\n },\n ChildrenOutletContexts,\n { provide: ActivatedRoute, useFactory: rootRoute, deps: [Router] },\n { provide: core.NgModuleFactoryLoader, useClass: core.SystemJsNgModuleLoader },\n RouterPreloader,\n NoPreloading,\n PreloadAllModules,\n { provide: ROUTER_CONFIGURATION, useValue: { enableTracing: false } },\n];\nfunction routerNgProbeToken() {\n return new core.NgProbeToken('Router', Router);\n}\n/**\n * @usageNotes\n *\n * RouterModule can be imported multiple times: once per lazily-loaded bundle.\n * Since the router deals with a global shared resource--location, we cannot have\n * more than one router service active.\n *\n * That is why there are two ways to create the module: `RouterModule.forRoot` and\n * `RouterModule.forChild`.\n *\n * * `forRoot` creates a module that contains all the directives, the given routes, and the router\n * service itself.\n * * `forChild` creates a module that contains all the directives and the given routes, but does not\n * include the router service.\n *\n * When registered at the root, the module should be used as follows\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forRoot(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * For submodules and lazy loaded submodules the module should be used as follows:\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forChild(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * @description\n *\n * Adds router directives and providers.\n *\n * Managing state transitions is one of the hardest parts of building applications. This is\n * especially true on the web, where you also need to ensure that the state is reflected in the URL.\n * In addition, we often want to split applications into multiple bundles and load them on demand.\n * Doing this transparently is not trivial.\n *\n * The Angular router solves these problems. Using the router, you can declaratively specify\n * application states, manage state transitions while taking care of the URL, and load bundles on\n * demand.\n *\n * [Read this developer guide](https://angular.io/docs/ts/latest/guide/router.html) to get an\n * overview of how the router should be used.\n *\n *\n */\nvar RouterModule = /** @class */ (function () {\n // Note: We are injecting the Router so it gets created eagerly...\n function RouterModule(guard, router) {\n }\n /**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n *\n * Options (see `ExtraOptions`):\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * * `preloadingStrategy` configures a preloading strategy (see `PreloadAllModules`).\n * * `onSameUrlNavigation` configures how the router handles navigation to the current URL. See\n * `ExtraOptions` for more details.\n */\n /**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n *\n * Options (see `ExtraOptions`):\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * * `preloadingStrategy` configures a preloading strategy (see `PreloadAllModules`).\n * * `onSameUrlNavigation` configures how the router handles navigation to the current URL. See\n * `ExtraOptions` for more details.\n */\n RouterModule.forRoot = /**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n *\n * Options (see `ExtraOptions`):\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * * `preloadingStrategy` configures a preloading strategy (see `PreloadAllModules`).\n * * `onSameUrlNavigation` configures how the router handles navigation to the current URL. See\n * `ExtraOptions` for more details.\n */\n function (routes, config) {\n return {\n ngModule: RouterModule,\n providers: [\n ROUTER_PROVIDERS,\n provideRoutes(routes),\n {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard,\n deps: [[Router, new core.Optional(), new core.SkipSelf()]]\n },\n { provide: ROUTER_CONFIGURATION, useValue: config ? config : {} },\n {\n provide: common.LocationStrategy,\n useFactory: provideLocationStrategy,\n deps: [\n common.PlatformLocation, [new core.Inject(common.APP_BASE_HREF), new core.Optional()], ROUTER_CONFIGURATION\n ]\n },\n {\n provide: PreloadingStrategy,\n useExisting: config && config.preloadingStrategy ? config.preloadingStrategy :\n NoPreloading\n },\n { provide: core.NgProbeToken, multi: true, useFactory: routerNgProbeToken },\n provideRouterInitializer(),\n ],\n };\n };\n /**\n * Creates a module with all the router directives and a provider registering routes.\n */\n /**\n * Creates a module with all the router directives and a provider registering routes.\n */\n RouterModule.forChild = /**\n * Creates a module with all the router directives and a provider registering routes.\n */\n function (routes) {\n return { ngModule: RouterModule, providers: [provideRoutes(routes)] };\n };\n RouterModule.decorators = [\n { type: core.NgModule, args: [{ declarations: ROUTER_DIRECTIVES, exports: ROUTER_DIRECTIVES },] }\n ];\n /** @nocollapse */\n RouterModule.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: core.Optional }, { type: core.Inject, args: [ROUTER_FORROOT_GUARD,] },] },\n { type: Router, decorators: [{ type: core.Optional },] },\n ]; };\n return RouterModule;\n}());\nfunction provideLocationStrategy(platformLocationStrategy, baseHref, options) {\n if (options === void 0) { options = {}; }\n return options.useHash ? new common.HashLocationStrategy(platformLocationStrategy, baseHref) :\n new common.PathLocationStrategy(platformLocationStrategy, baseHref);\n}\nfunction provideForRootGuard(router) {\n if (router) {\n throw new Error(\"RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.\");\n }\n return 'guarded';\n}\n/**\n * @description\n *\n * Registers routes.\n *\n * ### Example\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forChild(ROUTES)],\n * providers: [provideRoutes(EXTRA_ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n *\n */\nfunction provideRoutes(routes) {\n return [\n { provide: core.ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes },\n { provide: ROUTES, multi: true, useValue: routes },\n ];\n}\nfunction setupRouter(ref, urlSerializer, contexts, location, injector, loader, compiler, config, opts, urlHandlingStrategy, routeReuseStrategy) {\n if (opts === void 0) { opts = {}; }\n var router = new Router(null, urlSerializer, contexts, location, injector, loader, compiler, flatten(config));\n if (urlHandlingStrategy) {\n router.urlHandlingStrategy = urlHandlingStrategy;\n }\n if (routeReuseStrategy) {\n router.routeReuseStrategy = routeReuseStrategy;\n }\n if (opts.errorHandler) {\n router.errorHandler = opts.errorHandler;\n }\n if (opts.enableTracing) {\n var dom_1 = platformBrowser.ɵgetDOM();\n router.events.subscribe(function (e) {\n dom_1.logGroup(\"Router Event: \" + e.constructor.name);\n dom_1.log(e.toString());\n dom_1.log(e);\n dom_1.logGroupEnd();\n });\n }\n if (opts.onSameUrlNavigation) {\n router.onSameUrlNavigation = opts.onSameUrlNavigation;\n }\n if (opts.paramsInheritanceStrategy) {\n router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;\n }\n return router;\n}\nfunction rootRoute(router) {\n return router.routerState.root;\n}\n/**\n * To initialize the router properly we need to do in two steps:\n *\n * We need to start the navigation in a APP_INITIALIZER to block the bootstrap if\n * a resolver or a guards executes asynchronously. Second, we need to actually run\n * activation in a BOOTSTRAP_LISTENER. We utilize the afterPreactivation\n * hook provided by the router to do that.\n *\n * The router navigation starts, reaches the point when preactivation is done, and then\n * pauses. It waits for the hook to be resolved. We then resolve it only in a bootstrap listener.\n */\nvar RouterInitializer = /** @class */ (function () {\n function RouterInitializer(injector) {\n this.injector = injector;\n this.initNavigation = false;\n this.resultOfPreactivationDone = new rxjs.Subject();\n }\n RouterInitializer.prototype.appInitializer = function () {\n var _this = this;\n var p = this.injector.get(common.LOCATION_INITIALIZED, Promise.resolve(null));\n return p.then(function () {\n var resolve = (null);\n var res = new Promise(function (r) { return resolve = r; });\n var router = _this.injector.get(Router);\n var opts = _this.injector.get(ROUTER_CONFIGURATION);\n if (_this.isLegacyDisabled(opts) || _this.isLegacyEnabled(opts)) {\n resolve(true);\n }\n else if (opts.initialNavigation === 'disabled') {\n router.setUpLocationChangeListener();\n resolve(true);\n }\n else if (opts.initialNavigation === 'enabled') {\n router.hooks.afterPreactivation = function () {\n // only the initial navigation should be delayed\n if (!_this.initNavigation) {\n _this.initNavigation = true;\n resolve(true);\n return _this.resultOfPreactivationDone;\n // subsequent navigations should not be delayed\n }\n else {\n return rxjs.of(null);\n }\n };\n router.initialNavigation();\n }\n else {\n throw new Error(\"Invalid initialNavigation options: '\" + opts.initialNavigation + \"'\");\n }\n return res;\n });\n };\n RouterInitializer.prototype.bootstrapListener = function (bootstrappedComponentRef) {\n var opts = this.injector.get(ROUTER_CONFIGURATION);\n var preloader = this.injector.get(RouterPreloader);\n var router = this.injector.get(Router);\n var ref = this.injector.get(core.ApplicationRef);\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n if (this.isLegacyEnabled(opts)) {\n router.initialNavigation();\n }\n else if (this.isLegacyDisabled(opts)) {\n router.setUpLocationChangeListener();\n }\n preloader.setUpPreloading();\n router.resetRootComponentType(ref.componentTypes[0]);\n this.resultOfPreactivationDone.next((null));\n this.resultOfPreactivationDone.complete();\n };\n RouterInitializer.prototype.isLegacyEnabled = function (opts) {\n return opts.initialNavigation === 'legacy_enabled' || opts.initialNavigation === true ||\n opts.initialNavigation === undefined;\n };\n RouterInitializer.prototype.isLegacyDisabled = function (opts) {\n return opts.initialNavigation === 'legacy_disabled' || opts.initialNavigation === false;\n };\n RouterInitializer.decorators = [\n { type: core.Injectable }\n ];\n /** @nocollapse */\n RouterInitializer.ctorParameters = function () { return [\n { type: core.Injector, },\n ]; };\n return RouterInitializer;\n}());\nfunction getAppInitializer(r) {\n return r.appInitializer.bind(r);\n}\nfunction getBootstrapListener(r) {\n return r.bootstrapListener.bind(r);\n}\n/**\n * A token for the router initializer that will be called after the app is bootstrapped.\n *\n * @experimental\n */\nvar ROUTER_INITIALIZER = new core.InjectionToken('Router Initializer');\nfunction provideRouterInitializer() {\n return [\n RouterInitializer,\n {\n provide: core.APP_INITIALIZER,\n multi: true,\n useFactory: getAppInitializer,\n deps: [RouterInitializer]\n },\n { provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener, deps: [RouterInitializer] },\n { provide: core.APP_BOOTSTRAP_LISTENER, multi: true, useExisting: ROUTER_INITIALIZER },\n ];\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n *\n */\nvar VERSION = new core.Version('6.0.0-rc.6');\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexports.ɵangular_packages_router_router_a = ROUTER_FORROOT_GUARD;\nexports.ɵangular_packages_router_router_g = RouterInitializer;\nexports.ɵangular_packages_router_router_h = getAppInitializer;\nexports.ɵangular_packages_router_router_i = getBootstrapListener;\nexports.ɵangular_packages_router_router_d = provideForRootGuard;\nexports.ɵangular_packages_router_router_c = provideLocationStrategy;\nexports.ɵangular_packages_router_router_j = provideRouterInitializer;\nexports.ɵangular_packages_router_router_f = rootRoute;\nexports.ɵangular_packages_router_router_b = routerNgProbeToken;\nexports.ɵangular_packages_router_router_e = setupRouter;\nexports.ɵangular_packages_router_router_k = Tree;\nexports.ɵangular_packages_router_router_l = TreeNode;\nexports.RouterLink = RouterLink;\nexports.RouterLinkWithHref = RouterLinkWithHref;\nexports.RouterLinkActive = RouterLinkActive;\nexports.RouterOutlet = RouterOutlet;\nexports.ActivationEnd = ActivationEnd;\nexports.ActivationStart = ActivationStart;\nexports.ChildActivationEnd = ChildActivationEnd;\nexports.ChildActivationStart = ChildActivationStart;\nexports.GuardsCheckEnd = GuardsCheckEnd;\nexports.GuardsCheckStart = GuardsCheckStart;\nexports.NavigationCancel = NavigationCancel;\nexports.NavigationEnd = NavigationEnd;\nexports.NavigationError = NavigationError;\nexports.NavigationStart = NavigationStart;\nexports.ResolveEnd = ResolveEnd;\nexports.ResolveStart = ResolveStart;\nexports.RouteConfigLoadEnd = RouteConfigLoadEnd;\nexports.RouteConfigLoadStart = RouteConfigLoadStart;\nexports.RouterEvent = RouterEvent;\nexports.RoutesRecognized = RoutesRecognized;\nexports.RouteReuseStrategy = RouteReuseStrategy;\nexports.Router = Router;\nexports.ROUTES = ROUTES;\nexports.ROUTER_CONFIGURATION = ROUTER_CONFIGURATION;\nexports.ROUTER_INITIALIZER = ROUTER_INITIALIZER;\nexports.RouterModule = RouterModule;\nexports.provideRoutes = provideRoutes;\nexports.ChildrenOutletContexts = ChildrenOutletContexts;\nexports.OutletContext = OutletContext;\nexports.NoPreloading = NoPreloading;\nexports.PreloadAllModules = PreloadAllModules;\nexports.PreloadingStrategy = PreloadingStrategy;\nexports.RouterPreloader = RouterPreloader;\nexports.ActivatedRoute = ActivatedRoute;\nexports.ActivatedRouteSnapshot = ActivatedRouteSnapshot;\nexports.RouterState = RouterState;\nexports.RouterStateSnapshot = RouterStateSnapshot;\nexports.PRIMARY_OUTLET = PRIMARY_OUTLET;\nexports.convertToParamMap = convertToParamMap;\nexports.UrlHandlingStrategy = UrlHandlingStrategy;\nexports.DefaultUrlSerializer = DefaultUrlSerializer;\nexports.UrlSegment = UrlSegment;\nexports.UrlSegmentGroup = UrlSegmentGroup;\nexports.UrlSerializer = UrlSerializer;\nexports.UrlTree = UrlTree;\nexports.VERSION = VERSION;\nexports.ɵROUTER_PROVIDERS = ROUTER_PROVIDERS;\nexports.ɵflatten = flatten;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=router.umd.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["packages/router/router.umd.js"],"names":["global","factory","exports","module","require","define","amd","ng","router","common","core","rxjs","operators","platformBrowser","this","extendStatics","Object","setPrototypeOf","__proto__","Array","d","b","p","hasOwnProperty","__extends","__","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","__values","o","m","Symbol","iterator","next","value","done","__read","r","e","ar","push","error","__spread","concat","RouterEvent","NavigationStart","_super","id","url","navigationTrigger","restoredState","_this","toString","NavigationEnd","urlAfterRedirects","NavigationCancel","reason","NavigationError","RoutesRecognized","state","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","route","path","RouteConfigLoadEnd","ChildActivationStart","snapshot","routeConfig","ChildActivationEnd","ActivationStart","ActivationEnd","PRIMARY_OUTLET","ParamsAsMap","params","has","name","get","v","isArray","getAll","defineProperty","keys","enumerable","configurable","convertToParamMap","defaultUrlMatcher","segments","segmentGroup","parts","split","pathMatch","hasChildren","posParams","index","part","segment","startsWith","substring","consumed","slice","LoadedRouterConfig","routes","validateConfig","config","parentPath","validateNode","getFullPath","fullPath","Error","component","outlet","redirectTo","children","loadChildren","matcher","charAt","currentRoute","copyConfig","map","shallowEqual","a","key","k1","k2","flatten","arr","apply","last$1","forEach","map$$1","callback","prop","andObservables","observables","pipe","mergeAll","every","result","wrapIntoObservable","ɵisObservable","ɵisPromise","from","Promise","resolve","of","containsTree","container","containee","exact","equalQueryParams","queryParams","equalSegmentGroups","equalPath","numberOfChildren","c","root","containsQueryParams","containsSegmentGroup","containsSegmentGroupHelper","containeePaths","current","UrlTree","fragment","_queryParamMap","DEFAULT_SERIALIZER","serialize","UrlSegmentGroup","parent","k","serializePaths","UrlSegment","parameters","_parameterMap","serializePath","as","bs","mapChildrenIntoArray","fn","res","child","childOutlet","UrlSerializer","DefaultUrlSerializer","parse","UrlParser","parseRootSegment","parseQueryParams","parseFragment","tree","serializeSegment","primary","children_1","join","serializeQueryParams","strParams","encodeUriQuery","encodeUriFragment","encodeURI","encodeUriString","encodeURIComponent","replace","encodeUriSegment","decode","decodeURIComponent","decodeQuery","serializeMatrixParams","SEGMENT_RE","matchSegments","str","match","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","remaining","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","capture","parseParens","parseMatrixParams","parseParam","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodedVal","currentVal","allowPrimary","outletName","indexOf","substr","NoMatch","AbsoluteRedirect","urlTree","noMatch","Observable","obs","absoluteRedirect","newTree","namedOutletsRedirect","ApplyRedirects","moduleInjector","configLoader","urlSerializer","allowRedirects","ngModule","NgModuleRef","expandSegmentGroup","rootSegmentGroup","createUrlTree","catchError","noMatchError","rootCandidate","_a","expandChildren","expandSegment","waitForMap","obj","waitHead","waitTail","mapped","concatAll","last","expandSegmentAgainstRoute","first","_","EmptyError","noLeftoversInUrl","paths","getOutlet","undefined","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","lineralizeSegments","mergeMap","newSegments","group","consumedSegments","lastChild","positionalParamSegments","matched","rawSegmentGroup","load","injector","cfg","_loadedConfig","rawSlicedSegments","getChildConfig","routerConfig","childModule","childConfig","slicedSegments","containsEmptyPathRedirectsWithNamedOutlets","some","isEmptyPathRedirect","mergeTrivialChildren","createChildrenForEmptySegments","primarySegmentGroup","e_3","routes_2","routes_2_1","e_3_1","return","containsEmptyPathRedirects","addEmptySegmentsToChildrenIfNeeded","e_2","routes_1","routes_1_1","e_2_1","cs","runCanLoadGuard","canLoad","injectionToken","guard","shouldLoad","canLoadFails","navigationCancelingError","message","applyRedirectCreatreUrlTree","newRoot","createSegmentGroup","createQueryParams","redirectToParams","actualParams","sourceName","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","pos","e_1","idx","actualSegments_1","actualSegments_1_1","splice","e_1_1","Tree","_root","pathFromRoot","findNode","firstChild","siblings","findPath","filter","cc","node","_b","node_1","_c","unshift","TreeNode","nodeChildrenAsMap","RouterState","setRouterState","createEmptyState","rootComponent","createEmptyStateSnapshot","activated","ActivatedRouteSnapshot","RouterStateSnapshot","emptyUrl","BehaviorSubject","emptyParams","emptyData","emptyQueryParams","ActivatedRoute","data","futureSnapshot","_futureSnapshot","_routerState","_paramMap","inheritedParamsDataResolve","paramsInheritanceStrategy","inheritingStartingFrom","parent_1","flattenInherited","reduce","curr","_resolvedData","urlSegment","lastPathIndex","_urlSegment","_lastPathIndex","_resolve","serializeNode","advanceActivatedRoute","currentSnapshot","nextSnapshot","shallowEqualArrays","equalParamsAndUrlSegments","equalSegments","isMatrixParams","command","outlets","segmentPath","oldSegmentGroup","newSegmentGroup","qp","replaceSegment","oldSegment","newSegment","Navigation","isAbsolute","numberOfDoubleDots","commands","cmdWithOutlet","find","toRoot","Position","processChildren","getPath","updateSegmentGroup","startIndex","updateSegmentGroupChildren","prefixedWith","currentCommandIndex","currentPathIndex","pathIndex","commandIndex","compare","slicedCommands","g","createNewSegmentGroup","outlets_2","getOutlets","createNewSegmentChildren","stringify","CanActivate","CanDeactivate","PreActivation","future","forwardEvent","canActivateChecks","canDeactivateChecks","initialize","parentContexts","futureRoot","setupChildRouteGuards","checkGuards","isDeactivating","isActivating","runCanDeactivateChecks","canDeactivate","runCanActivateChecks","resolveData","concatMap","check","runResolve","futureNode","currNode","contexts","futurePath","prevChildren","setupRouteGuards","deactivateRouteAndItsChildren","getContext","context","shouldRunGuardsAndResolvers","runGuardsAndResolvers","mode","childName","isActivated","runCanDeactivate","fireChildActivationStart","fireActivationStart","runCanActivateChild","runCanActivate","canActivate","getToken","canActivateChildGuards","reverse","extractCanActivateChild","guards","canActivateChild","resolveNode","resolvedData","key_1","getResolver","resolver","token","closestLoadedConfig","NoMatch$1","Recognizer","rootComponentType","recognize","split$1","processSegmentGroup","freeze","rootNode","routeState","inheritParamsAndData","routeNode","processSegment","checkOutletNameUniqueness","nodes","names","routeWithSameOutletName","sortActivatedRouteSnapshots","sort","localeCompare","config_1","config_1_1","processSegmentAgainstRoute","rawSegment","getData","getSourceSegmentGroup","getPathIndexShift","getResolve","match$1","_sourceSegment","_segmentIndexShift","containsEmptyPathMatchesWithNamedOutlets","emptyPathMatch","getOutlet$1","s_1","createChildrenForEmptyPaths","primarySegment","containsEmptyPathMatches","s_2","addEmptyPathsToChildrenIfNeeded","RouteReuseStrategy","DefaultRouteReuseStrategy","shouldDetach","store","detachedTree","shouldAttach","retrieve","shouldReuseRoute","ROUTES","InjectionToken","RouterConfigLoader","loader","compiler","onLoadStartListener","onLoadEndListener","parentInjector","loadModuleFactory","NgModuleFactory","compileModuleAsync","UrlHandlingStrategy","DefaultUrlHandlingStrategy","shouldProcessUrl","extract","merge","newUrlPart","wholeUrl","defaultErrorHandler","defaultRouterHook","Router","rootContexts","location","navigations","navigationId","events","Subject","errorHandler","navigated","lastSuccessfulId","hooks","beforePreactivation","afterPreactivation","urlHandlingStrategy","routeReuseStrategy","onSameUrlNavigation","resetConfig","currentUrlTree","createEmptyUrlTree","rawUrlTree","triggerEvent","routerState","processNavigations","resetRootComponentType","initialNavigation","setUpLocationChangeListener","navigateByUrl","replaceUrl","locationSubscription","subscribe","change","source","setTimeout","scheduleNavigation","serializeUrl","ngOnDestroy","dispose","unsubscribe","navigationExtras","relativeTo","preserveQueryParams","queryParamsHandling","preserveFragment","isDevMode","console","warn","f","q","removeEmptyProps","nav","computeNavigation","cmd","cmdIdx","outlets_1","urlPart","partIndex","startingPosition","findStartingPosition","modifier","createPositionApplyingDoubleDots","ci","dd","extras","skipLocationChange","parseUrl","mergedTree","navigate","validateCommands","isActive","executeScheduledNavigation","promise","catch","rawUrl","lastNavigation","reject","rej","urlTransition","then","runNavigate","precreatedState","resolvePromise","rejectPromise","preActivation","routerState$","appliedUrl","applyRedirects","evt","createRouterState","prevState","createNode","createOrReuseChildren","detachedRouteHandle","setFutureSnapshotsOfActivatedRoutes","createActivatedRoute","activateRoutes","storedState","storedUrl","navigationIsSuccessful","isCurrentPathEqualTo","replaceState","go","ActivateRoutes","activate","resetUrlToCurrentUrlTree","isNavigationCancelingError","resetStateAndUrl","ee","futureState","currState","currRoot","deactivateChildRoutes","activateChildRoutes","futureChild","childOutletName","deactivateRoutes","parentContext","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","componentRef","detach","onOutletDeactivated","contexts_1","deactivate","getOrCreateContext","stored","onOutletReAttached","attachRef","attach","advanceActivatedRouteNodeAndItsChildren","parentLoadedConfig","cmpFactoryResolver","componentFactoryResolver","activateWith","RouterLink","tabIndex","renderer","el","setAttribute","nativeElement","set","preserve","onClick","attrBoolValue","decorators","type","Directive","args","selector","ctorParameters","Attribute","Renderer2","ElementRef","propDecorators","Input","routerLink","HostListener","RouterLinkWithHref","locationStrategy","subscription","updateTargetUrlAndHref","ngOnChanges","changes","button","ctrlKey","metaKey","shiftKey","target","href","prepareExternalUrl","LocationStrategy","HostBinding","RouterLinkActive","element","cdr","classes","routerLinkActiveOptions","update","ngAfterContentInit","links","linksWithHrefs","hasActiveLinks","addClass","removeClass","isLinkActive","link","exportAs","ChangeDetectorRef","ContentChildren","descendants","routerLinkActive","OutletContext","ChildrenOutletContexts","Map","onChildOutletCreated","onChildOutletDestroyed","RouterOutlet","changeDetector","_activatedRoute","activateEvents","EventEmitter","deactivateEvents","ngOnInit","instance","cmp","ref","activatedRoute","insert","hostView","destroy","emit","resolveComponentFactory","childContexts","OutletInjector","createComponent","markForCheck","ViewContainerRef","ComponentFactoryResolver","Output","notFoundValue","PreloadingStrategy","PreloadAllModules","preload","NoPreloading","RouterPreloader","moduleLoader","preloadingStrategy","setUpPreloading","processRoutes","preloadConfig","Injectable","NgModuleFactoryLoader","Compiler","Injector","ROUTER_DIRECTIVES","ROUTER_CONFIGURATION","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","Location","provide","useClass","useFactory","setupRouter","deps","ApplicationRef","Optional","rootRoute","SystemJsNgModuleLoader","useValue","enableTracing","routerNgProbeToken","NgProbeToken","RouterModule","forRoot","providers","provideRoutes","provideForRootGuard","SkipSelf","provideLocationStrategy","PlatformLocation","Inject","APP_BASE_HREF","useExisting","multi","provideRouterInitializer","forChild","NgModule","declarations","platformLocationStrategy","baseHref","options","useHash","HashLocationStrategy","PathLocationStrategy","ANALYZE_FOR_ENTRY_COMPONENTS","opts","dom_1","ɵgetDOM","logGroup","log","logGroupEnd","RouterInitializer","initNavigation","resultOfPreactivationDone","appInitializer","LOCATION_INITIALIZED","isLegacyDisabled","isLegacyEnabled","bootstrapListener","bootstrappedComponentRef","preloader","components","componentTypes","complete","getAppInitializer","bind","getBootstrapListener","ROUTER_INITIALIZER","APP_INITIALIZER","APP_BOOTSTRAP_LISTENER","VERSION","Version","ɵangular_packages_router_router_a","ɵangular_packages_router_router_g","ɵangular_packages_router_router_h","ɵangular_packages_router_router_i","ɵangular_packages_router_router_d","ɵangular_packages_router_router_c","ɵangular_packages_router_router_j","ɵangular_packages_router_router_f","ɵangular_packages_router_router_b","ɵangular_packages_router_router_e","ɵangular_packages_router_router_k","ɵangular_packages_router_router_l","ɵROUTER_PROVIDERS","ɵflatten"],"mappings":"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","sourcesContent":["/**\n * @license Angular v6.0.0\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/platform-browser')) :\n\ttypeof define === 'function' && define.amd ? define('@angular/router', ['exports', '@angular/common', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/platform-browser'], factory) :\n\t(factory((global.ng = global.ng || {}, global.ng.router = {}),global.ng.common,global.ng.core,global.rxjs,global.rxjs.operators,global.ng.platformBrowser));\n}(this, (function (exports,common,core,rxjs,operators,platformBrowser) { 'use strict';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Base for events the Router goes through, as opposed to events tied to a specific\n * Route. `RouterEvent`s will only be fired one time for any given navigation.\n *\n * Example:\n *\n * ```\n * class MyService {\n * constructor(public router: Router, logger: Logger) {\n * router.events.filter(e => e instanceof RouterEvent).subscribe(e => {\n * logger.log(e.id, e.url);\n * });\n * }\n * }\n * ```\n *\n * @experimental\n */\nvar RouterEvent = /** @class */ (function () {\n function RouterEvent(/** @docsNotRequired */\n id, /** @docsNotRequired */\n url) {\n this.id = id;\n this.url = url;\n }\n return RouterEvent;\n}());\n/**\n * @description\n *\n * Represents an event triggered when a navigation starts.\n *\n *\n */\nvar NavigationStart = /** @class */ (function (_super) {\n __extends(NavigationStart, _super);\n function NavigationStart(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n /** @docsNotRequired */\n navigationTrigger, /** @docsNotRequired */\n /** @docsNotRequired */\n restoredState) {\n /** @docsNotRequired */\n if (navigationTrigger === void 0) { navigationTrigger = 'imperative'; }\n /** @docsNotRequired */\n if (restoredState === void 0) { restoredState = null; }\n var _this = _super.call(this, id, url) || this;\n _this.navigationTrigger = navigationTrigger;\n _this.restoredState = restoredState;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationStart.prototype.toString = /** @docsNotRequired */\n function () { return \"NavigationStart(id: \" + this.id + \", url: '\" + this.url + \"')\"; };\n return NavigationStart;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when a navigation ends successfully.\n *\n *\n */\nvar NavigationEnd = /** @class */ (function (_super) {\n __extends(NavigationEnd, _super);\n function NavigationEnd(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationEnd.prototype.toString = /** @docsNotRequired */\n function () {\n return \"NavigationEnd(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"')\";\n };\n return NavigationEnd;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when a navigation is canceled.\n *\n *\n */\nvar NavigationCancel = /** @class */ (function (_super) {\n __extends(NavigationCancel, _super);\n function NavigationCancel(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n reason) {\n var _this = _super.call(this, id, url) || this;\n _this.reason = reason;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationCancel.prototype.toString = /** @docsNotRequired */\n function () { return \"NavigationCancel(id: \" + this.id + \", url: '\" + this.url + \"')\"; };\n return NavigationCancel;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when a navigation fails due to an unexpected error.\n *\n *\n */\nvar NavigationError = /** @class */ (function (_super) {\n __extends(NavigationError, _super);\n function NavigationError(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n error) {\n var _this = _super.call(this, id, url) || this;\n _this.error = error;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n NavigationError.prototype.toString = /** @docsNotRequired */\n function () {\n return \"NavigationError(id: \" + this.id + \", url: '\" + this.url + \"', error: \" + this.error + \")\";\n };\n return NavigationError;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered when routes are recognized.\n *\n *\n */\nvar RoutesRecognized = /** @class */ (function (_super) {\n __extends(RoutesRecognized, _super);\n function RoutesRecognized(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n /** @docsNotRequired */\n /** @docsNotRequired */\n RoutesRecognized.prototype.toString = /** @docsNotRequired */\n function () {\n return \"RoutesRecognized(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return RoutesRecognized;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the start of the Guard phase of routing.\n *\n * @experimental\n */\nvar GuardsCheckStart = /** @class */ (function (_super) {\n __extends(GuardsCheckStart, _super);\n function GuardsCheckStart(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n GuardsCheckStart.prototype.toString = function () {\n return \"GuardsCheckStart(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return GuardsCheckStart;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the end of the Guard phase of routing.\n *\n * @experimental\n */\nvar GuardsCheckEnd = /** @class */ (function (_super) {\n __extends(GuardsCheckEnd, _super);\n function GuardsCheckEnd(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state, /** @docsNotRequired */\n shouldActivate) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n _this.shouldActivate = shouldActivate;\n return _this;\n }\n GuardsCheckEnd.prototype.toString = function () {\n return \"GuardsCheckEnd(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \", shouldActivate: \" + this.shouldActivate + \")\";\n };\n return GuardsCheckEnd;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the start of the Resolve phase of routing. The timing of this\n * event may change, thus it's experimental. In the current iteration it will run\n * in the \"resolve\" phase whether there's things to resolve or not. In the future this\n * behavior may change to only run when there are things to be resolved.\n *\n * @experimental\n */\nvar ResolveStart = /** @class */ (function (_super) {\n __extends(ResolveStart, _super);\n function ResolveStart(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n ResolveStart.prototype.toString = function () {\n return \"ResolveStart(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return ResolveStart;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents the end of the Resolve phase of routing. See note on\n * `ResolveStart` for use of this experimental API.\n *\n * @experimental\n */\nvar ResolveEnd = /** @class */ (function (_super) {\n __extends(ResolveEnd, _super);\n function ResolveEnd(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, /** @docsNotRequired */\n urlAfterRedirects, /** @docsNotRequired */\n state) {\n var _this = _super.call(this, id, url) || this;\n _this.urlAfterRedirects = urlAfterRedirects;\n _this.state = state;\n return _this;\n }\n ResolveEnd.prototype.toString = function () {\n return \"ResolveEnd(id: \" + this.id + \", url: '\" + this.url + \"', urlAfterRedirects: '\" + this.urlAfterRedirects + \"', state: \" + this.state + \")\";\n };\n return ResolveEnd;\n}(RouterEvent));\n/**\n * @description\n *\n * Represents an event triggered before lazy loading a route config.\n *\n * @experimental\n */\nvar RouteConfigLoadStart = /** @class */ (function () {\n function RouteConfigLoadStart(/** @docsNotRequired */\n route) {\n this.route = route;\n }\n RouteConfigLoadStart.prototype.toString = function () { return \"RouteConfigLoadStart(path: \" + this.route.path + \")\"; };\n return RouteConfigLoadStart;\n}());\n/**\n * @description\n *\n * Represents an event triggered when a route has been lazy loaded.\n *\n * @experimental\n */\nvar RouteConfigLoadEnd = /** @class */ (function () {\n function RouteConfigLoadEnd(/** @docsNotRequired */\n route) {\n this.route = route;\n }\n RouteConfigLoadEnd.prototype.toString = function () { return \"RouteConfigLoadEnd(path: \" + this.route.path + \")\"; };\n return RouteConfigLoadEnd;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ChildActivationEnd` for use of this experimental API.\n *\n * @experimental\n */\nvar ChildActivationStart = /** @class */ (function () {\n function ChildActivationStart(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ChildActivationStart.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ChildActivationStart(path: '\" + path + \"')\";\n };\n return ChildActivationStart;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ChildActivationStart` for use of this experimental API.\n *\n * @experimental\n */\nvar ChildActivationEnd = /** @class */ (function () {\n function ChildActivationEnd(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ChildActivationEnd.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ChildActivationEnd(path: '\" + path + \"')\";\n };\n return ChildActivationEnd;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ActivationEnd` for use of this experimental API.\n *\n * @experimental\n */\nvar ActivationStart = /** @class */ (function () {\n function ActivationStart(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ActivationStart.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ActivationStart(path: '\" + path + \"')\";\n };\n return ActivationStart;\n}());\n/**\n * @description\n *\n * Represents the start of end of the Resolve phase of routing. See note on\n * `ActivationStart` for use of this experimental API.\n *\n * @experimental\n */\nvar ActivationEnd = /** @class */ (function () {\n function ActivationEnd(/** @docsNotRequired */\n snapshot) {\n this.snapshot = snapshot;\n }\n ActivationEnd.prototype.toString = function () {\n var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return \"ActivationEnd(path: '\" + path + \"')\";\n };\n return ActivationEnd;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Name of the primary outlet.\n *\n *\n */\nvar PRIMARY_OUTLET = 'primary';\nvar ParamsAsMap = /** @class */ (function () {\n function ParamsAsMap(params) {\n this.params = params || {};\n }\n ParamsAsMap.prototype.has = function (name) { return this.params.hasOwnProperty(name); };\n ParamsAsMap.prototype.get = function (name) {\n if (this.has(name)) {\n var v = this.params[name];\n return Array.isArray(v) ? v[0] : v;\n }\n return null;\n };\n ParamsAsMap.prototype.getAll = function (name) {\n if (this.has(name)) {\n var v = this.params[name];\n return Array.isArray(v) ? v : [v];\n }\n return [];\n };\n Object.defineProperty(ParamsAsMap.prototype, \"keys\", {\n get: function () { return Object.keys(this.params); },\n enumerable: true,\n configurable: true\n });\n return ParamsAsMap;\n}());\n/**\n * Convert a `Params` instance to a `ParamMap`.\n *\n *\n */\nfunction convertToParamMap(params) {\n return new ParamsAsMap(params);\n}\nvar NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\nfunction navigationCancelingError(message) {\n var error = Error('NavigationCancelingError: ' + message);\n error[NAVIGATION_CANCELING_ERROR] = true;\n return error;\n}\nfunction isNavigationCancelingError(error) {\n return error && error[NAVIGATION_CANCELING_ERROR];\n}\n// Matches the route configuration (`route`) against the actual URL (`segments`).\nfunction defaultUrlMatcher(segments, segmentGroup, route) {\n var parts = route.path.split('/');\n if (parts.length > segments.length) {\n // The actual URL is shorter than the config, no match\n return null;\n }\n if (route.pathMatch === 'full' &&\n (segmentGroup.hasChildren() || parts.length < segments.length)) {\n // The config is longer than the actual URL but we are looking for a full match, return null\n return null;\n }\n var posParams = {};\n // Check each config part against the actual URL\n for (var index = 0; index < parts.length; index++) {\n var part = parts[index];\n var segment = segments[index];\n var isParameter = part.startsWith(':');\n if (isParameter) {\n posParams[part.substring(1)] = segment;\n }\n else if (part !== segment.path) {\n // The actual URL part does not match the config, no match\n return null;\n }\n }\n return { consumed: segments.slice(0, parts.length), posParams: posParams };\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar LoadedRouterConfig = /** @class */ (function () {\n function LoadedRouterConfig(routes, module) {\n this.routes = routes;\n this.module = module;\n }\n return LoadedRouterConfig;\n}());\nfunction validateConfig(config, parentPath) {\n if (parentPath === void 0) { parentPath = ''; }\n // forEach doesn't iterate undefined values\n for (var i = 0; i < config.length; i++) {\n var route = config[i];\n var fullPath = getFullPath(parentPath, route);\n validateNode(route, fullPath);\n }\n}\nfunction validateNode(route, fullPath) {\n if (!route) {\n throw new Error(\"\\n Invalid configuration of route '\" + fullPath + \"': Encountered undefined route.\\n The reason might be an extra comma.\\n\\n Example:\\n const routes: Routes = [\\n { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\\n { path: 'dashboard', component: DashboardComponent },, << two commas\\n { path: 'detail/:id', component: HeroDetailComponent }\\n ];\\n \");\n }\n if (Array.isArray(route)) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': Array cannot be specified\");\n }\n if (!route.component && (route.outlet && route.outlet !== PRIMARY_OUTLET)) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': a componentless route cannot have a named outlet set\");\n }\n if (route.redirectTo && route.children) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': redirectTo and children cannot be used together\");\n }\n if (route.redirectTo && route.loadChildren) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': redirectTo and loadChildren cannot be used together\");\n }\n if (route.children && route.loadChildren) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': children and loadChildren cannot be used together\");\n }\n if (route.redirectTo && route.component) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': redirectTo and component cannot be used together\");\n }\n if (route.path && route.matcher) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': path and matcher cannot be used together\");\n }\n if (route.redirectTo === void 0 && !route.component && !route.children && !route.loadChildren) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"'. One of the following must be provided: component, redirectTo, children or loadChildren\");\n }\n if (route.path === void 0 && route.matcher === void 0) {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': routes must have either a path or a matcher specified\");\n }\n if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': path cannot start with a slash\");\n }\n if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n var exp = \"The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.\";\n throw new Error(\"Invalid configuration of route '{path: \\\"\" + fullPath + \"\\\", redirectTo: \\\"\" + route.redirectTo + \"\\\"}': please provide 'pathMatch'. \" + exp);\n }\n if (route.pathMatch !== void 0 && route.pathMatch !== 'full' && route.pathMatch !== 'prefix') {\n throw new Error(\"Invalid configuration of route '\" + fullPath + \"': pathMatch can only be set to 'prefix' or 'full'\");\n }\n if (route.children) {\n validateConfig(route.children, fullPath);\n }\n}\nfunction getFullPath(parentPath, currentRoute) {\n if (!currentRoute) {\n return parentPath;\n }\n if (!parentPath && !currentRoute.path) {\n return '';\n }\n else if (parentPath && !currentRoute.path) {\n return parentPath + \"/\";\n }\n else if (!parentPath && currentRoute.path) {\n return currentRoute.path;\n }\n else {\n return parentPath + \"/\" + currentRoute.path;\n }\n}\nfunction copyConfig(r) {\n var children = r.children && r.children.map(copyConfig);\n return children ? __assign({}, r, { children: children }) : __assign({}, r);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction shallowEqualArrays(a, b) {\n if (a.length !== b.length)\n return false;\n for (var i = 0; i < a.length; ++i) {\n if (!shallowEqual(a[i], b[i]))\n return false;\n }\n return true;\n}\nfunction shallowEqual(a, b) {\n var k1 = Object.keys(a);\n var k2 = Object.keys(b);\n if (k1.length != k2.length) {\n return false;\n }\n var key;\n for (var i = 0; i < k1.length; i++) {\n key = k1[i];\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Flattens single-level nested arrays.\n */\nfunction flatten(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n/**\n * Return the last element of an array.\n */\nfunction last$1(a) {\n return a.length > 0 ? a[a.length - 1] : null;\n}\n/**\n * Verifys all booleans in an array are `true`.\n */\n\nfunction forEach(map$$1, callback) {\n for (var prop in map$$1) {\n if (map$$1.hasOwnProperty(prop)) {\n callback(map$$1[prop], prop);\n }\n }\n}\nfunction waitForMap(obj, fn) {\n if (Object.keys(obj).length === 0) {\n return rxjs.of({});\n }\n var waitHead = [];\n var waitTail = [];\n var res = {};\n forEach(obj, function (a, k) {\n var mapped = fn(k, a).pipe(operators.map(function (r) { return res[k] = r; }));\n if (k === PRIMARY_OUTLET) {\n waitHead.push(mapped);\n }\n else {\n waitTail.push(mapped);\n }\n });\n // Closure compiler has problem with using spread operator here. So just using Array.concat.\n return rxjs.of.apply(null, waitHead.concat(waitTail)).pipe(operators.concatAll(), operators.last(), operators.map(function () { return res; }));\n}\n/**\n * ANDs Observables by merging all input observables, reducing to an Observable verifying all\n * input Observables return `true`.\n */\nfunction andObservables(observables) {\n return observables.pipe(operators.mergeAll(), operators.every(function (result) { return result === true; }));\n}\nfunction wrapIntoObservable(value) {\n if (core.ɵisObservable(value)) {\n return value;\n }\n if (core.ɵisPromise(value)) {\n // Use `Promise.resolve()` to wrap promise-like instances.\n // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the\n // change detection.\n return rxjs.from(Promise.resolve(value));\n }\n return rxjs.of(value);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createEmptyUrlTree() {\n return new UrlTree(new UrlSegmentGroup([], {}), {}, null);\n}\nfunction containsTree(container, containee, exact) {\n if (exact) {\n return equalQueryParams(container.queryParams, containee.queryParams) &&\n equalSegmentGroups(container.root, containee.root);\n }\n return containsQueryParams(container.queryParams, containee.queryParams) &&\n containsSegmentGroup(container.root, containee.root);\n}\nfunction equalQueryParams(container, containee) {\n return shallowEqual(container, containee);\n}\nfunction equalSegmentGroups(container, containee) {\n if (!equalPath(container.segments, containee.segments))\n return false;\n if (container.numberOfChildren !== containee.numberOfChildren)\n return false;\n for (var c in containee.children) {\n if (!container.children[c])\n return false;\n if (!equalSegmentGroups(container.children[c], containee.children[c]))\n return false;\n }\n return true;\n}\nfunction containsQueryParams(container, containee) {\n return Object.keys(containee).length <= Object.keys(container).length &&\n Object.keys(containee).every(function (key) { return containee[key] === container[key]; });\n}\nfunction containsSegmentGroup(container, containee) {\n return containsSegmentGroupHelper(container, containee, containee.segments);\n}\nfunction containsSegmentGroupHelper(container, containee, containeePaths) {\n if (container.segments.length > containeePaths.length) {\n var current = container.segments.slice(0, containeePaths.length);\n if (!equalPath(current, containeePaths))\n return false;\n if (containee.hasChildren())\n return false;\n return true;\n }\n else if (container.segments.length === containeePaths.length) {\n if (!equalPath(container.segments, containeePaths))\n return false;\n for (var c in containee.children) {\n if (!container.children[c])\n return false;\n if (!containsSegmentGroup(container.children[c], containee.children[c]))\n return false;\n }\n return true;\n }\n else {\n var current = containeePaths.slice(0, container.segments.length);\n var next = containeePaths.slice(container.segments.length);\n if (!equalPath(container.segments, current))\n return false;\n if (!container.children[PRIMARY_OUTLET])\n return false;\n return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next);\n }\n}\n/**\n * @description\n *\n * Represents the parsed URL.\n *\n * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a\n * serialized tree.\n * UrlTree is a data structure that provides a lot of affordances in dealing with URLs\n *\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const tree: UrlTree =\n * router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');\n * const f = tree.fragment; // return 'fragment'\n * const q = tree.queryParams; // returns {debug: 'true'}\n * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n * const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'\n * g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'\n * g.children['support'].segments; // return 1 segment 'help'\n * }\n * }\n * ```\n *\n *\n */\nvar UrlTree = /** @class */ (function () {\n /** @internal */\n function UrlTree(/** The root segment group of the URL tree */\n root, /** The query params of the URL */\n queryParams, /** The fragment of the URL */\n fragment) {\n this.root = root;\n this.queryParams = queryParams;\n this.fragment = fragment;\n }\n Object.defineProperty(UrlTree.prototype, \"queryParamMap\", {\n get: function () {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n },\n enumerable: true,\n configurable: true\n });\n /** @docsNotRequired */\n /** @docsNotRequired */\n UrlTree.prototype.toString = /** @docsNotRequired */\n function () { return DEFAULT_SERIALIZER.serialize(this); };\n return UrlTree;\n}());\n/**\n * @description\n *\n * Represents the parsed URL segment group.\n *\n * See `UrlTree` for more information.\n *\n *\n */\nvar UrlSegmentGroup = /** @class */ (function () {\n function UrlSegmentGroup(/** The URL segments of this group. See `UrlSegment` for more information */\n segments, /** The list of children of this group */\n children) {\n var _this = this;\n this.segments = segments;\n this.children = children;\n /** The parent node in the url tree */\n this.parent = null;\n forEach(children, function (v, k) { return v.parent = _this; });\n }\n /** Whether the segment has child segments */\n /** Whether the segment has child segments */\n UrlSegmentGroup.prototype.hasChildren = /** Whether the segment has child segments */\n function () { return this.numberOfChildren > 0; };\n Object.defineProperty(UrlSegmentGroup.prototype, \"numberOfChildren\", {\n /** Number of child segments */\n get: /** Number of child segments */\n function () { return Object.keys(this.children).length; },\n enumerable: true,\n configurable: true\n });\n /** @docsNotRequired */\n /** @docsNotRequired */\n UrlSegmentGroup.prototype.toString = /** @docsNotRequired */\n function () { return serializePaths(this); };\n return UrlSegmentGroup;\n}());\n/**\n * @description\n *\n * Represents a single URL segment.\n *\n * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix\n * parameters associated with the segment.\n *\n * ## Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const tree: UrlTree = router.parseUrl('/team;id=33');\n * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n * const s: UrlSegment[] = g.segments;\n * s[0].path; // returns 'team'\n * s[0].parameters; // returns {id: 33}\n * }\n * }\n * ```\n *\n *\n */\nvar UrlSegment = /** @class */ (function () {\n function UrlSegment(/** The path part of a URL segment */\n path, /** The matrix parameters associated with a segment */\n parameters) {\n this.path = path;\n this.parameters = parameters;\n }\n Object.defineProperty(UrlSegment.prototype, \"parameterMap\", {\n get: function () {\n if (!this._parameterMap) {\n this._parameterMap = convertToParamMap(this.parameters);\n }\n return this._parameterMap;\n },\n enumerable: true,\n configurable: true\n });\n /** @docsNotRequired */\n /** @docsNotRequired */\n UrlSegment.prototype.toString = /** @docsNotRequired */\n function () { return serializePath(this); };\n return UrlSegment;\n}());\nfunction equalSegments(as, bs) {\n return equalPath(as, bs) && as.every(function (a, i) { return shallowEqual(a.parameters, bs[i].parameters); });\n}\nfunction equalPath(as, bs) {\n if (as.length !== bs.length)\n return false;\n return as.every(function (a, i) { return a.path === bs[i].path; });\n}\nfunction mapChildrenIntoArray(segment, fn) {\n var res = [];\n forEach(segment.children, function (child, childOutlet) {\n if (childOutlet === PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n forEach(segment.children, function (child, childOutlet) {\n if (childOutlet !== PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n return res;\n}\n/**\n * @description\n *\n * Serializes and deserializes a URL string into a URL tree.\n *\n * The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n *\n * See `DefaultUrlSerializer` for an example of a URL serializer.\n *\n *\n */\nvar UrlSerializer = /** @class */ (function () {\n function UrlSerializer() {\n }\n return UrlSerializer;\n}());\n/**\n * @description\n *\n * A default implementation of the `UrlSerializer`.\n *\n * Example URLs:\n *\n * ```\n * /inbox/33(popup:compose)\n * /inbox/33;open=true/messages/44\n * ```\n *\n * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the\n * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to\n * specify route specific parameters.\n *\n *\n */\nvar DefaultUrlSerializer = /** @class */ (function () {\n function DefaultUrlSerializer() {\n }\n /** Parses a url into a `UrlTree` */\n /** Parses a url into a `UrlTree` */\n DefaultUrlSerializer.prototype.parse = /** Parses a url into a `UrlTree` */\n function (url) {\n var p = new UrlParser(url);\n return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n };\n /** Converts a `UrlTree` into a url */\n /** Converts a `UrlTree` into a url */\n DefaultUrlSerializer.prototype.serialize = /** Converts a `UrlTree` into a url */\n function (tree) {\n var segment = \"/\" + serializeSegment(tree.root, true);\n var query = serializeQueryParams(tree.queryParams);\n var fragment = typeof tree.fragment === \"string\" ? \"#\" + encodeUriFragment((tree.fragment)) : '';\n return \"\" + segment + query + fragment;\n };\n return DefaultUrlSerializer;\n}());\nvar DEFAULT_SERIALIZER = new DefaultUrlSerializer();\nfunction serializePaths(segment) {\n return segment.segments.map(function (p) { return serializePath(p); }).join('/');\n}\nfunction serializeSegment(segment, root) {\n if (!segment.hasChildren()) {\n return serializePaths(segment);\n }\n if (root) {\n var primary = segment.children[PRIMARY_OUTLET] ?\n serializeSegment(segment.children[PRIMARY_OUTLET], false) :\n '';\n var children_1 = [];\n forEach(segment.children, function (v, k) {\n if (k !== PRIMARY_OUTLET) {\n children_1.push(k + \":\" + serializeSegment(v, false));\n }\n });\n return children_1.length > 0 ? primary + \"(\" + children_1.join('//') + \")\" : primary;\n }\n else {\n var children = mapChildrenIntoArray(segment, function (v, k) {\n if (k === PRIMARY_OUTLET) {\n return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n }\n return [k + \":\" + serializeSegment(v, false)];\n });\n return serializePaths(segment) + \"/(\" + children.join('//') + \")\";\n }\n}\n/**\n * Encodes a URI string with the default encoding. This function will only ever be called from\n * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need\n * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't\n * have to be encoded per https://url.spec.whatwg.org.\n */\nfunction encodeUriString(s) {\n return encodeURIComponent(s)\n .replace(/%40/g, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',');\n}\n/**\n * This function should be used to encode both keys and values in a query string key/value. In\n * the following URL, you need to call encodeUriQuery on \"k\" and \"v\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriQuery(s) {\n return encodeUriString(s).replace(/%3B/gi, ';');\n}\n/**\n * This function should be used to encode a URL fragment. In the following URL, you need to call\n * encodeUriFragment on \"f\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriFragment(s) {\n return encodeURI(s);\n}\n/**\n * This function should be run on any URI segment as well as the key and value in a key/value\n * pair for matrix params. In the following URL, you need to call encodeUriSegment on \"html\",\n * \"mk\", and \"mv\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriSegment(s) {\n return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\nfunction decode(s) {\n return decodeURIComponent(s);\n}\n// Query keys/values should have the \"+\" replaced first, as \"+\" in a query string is \" \".\n// decodeURIComponent function will not decode \"+\" as a space.\nfunction decodeQuery(s) {\n return decode(s.replace(/\\+/g, '%20'));\n}\nfunction serializePath(path) {\n return \"\" + encodeUriSegment(path.path) + serializeMatrixParams(path.parameters);\n}\nfunction serializeMatrixParams(params) {\n return Object.keys(params)\n .map(function (key) { return \";\" + encodeUriSegment(key) + \"=\" + encodeUriSegment(params[key]); })\n .join('');\n}\nfunction serializeQueryParams(params) {\n var strParams = Object.keys(params).map(function (name) {\n var value = params[name];\n return Array.isArray(value) ?\n value.map(function (v) { return encodeUriQuery(name) + \"=\" + encodeUriQuery(v); }).join('&') :\n encodeUriQuery(name) + \"=\" + encodeUriQuery(value);\n });\n return strParams.length ? \"?\" + strParams.join(\"&\") : '';\n}\nvar SEGMENT_RE = /^[^\\/()?;=&#]+/;\nfunction matchSegments(str) {\n var match = str.match(SEGMENT_RE);\n return match ? match[0] : '';\n}\nvar QUERY_PARAM_RE = /^[^=?&#]+/;\n// Return the name of the query param at the start of the string or an empty string\nfunction matchQueryParams(str) {\n var match = str.match(QUERY_PARAM_RE);\n return match ? match[0] : '';\n}\nvar QUERY_PARAM_VALUE_RE = /^[^?&#]+/;\n// Return the value of the query param at the start of the string or an empty string\nfunction matchUrlQueryParamValue(str) {\n var match = str.match(QUERY_PARAM_VALUE_RE);\n return match ? match[0] : '';\n}\nvar UrlParser = /** @class */ (function () {\n function UrlParser(url) {\n this.url = url;\n this.remaining = url;\n }\n UrlParser.prototype.parseRootSegment = function () {\n this.consumeOptional('/');\n if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n return new UrlSegmentGroup([], {});\n }\n // The root segment group never has segments\n return new UrlSegmentGroup([], this.parseChildren());\n };\n UrlParser.prototype.parseQueryParams = function () {\n var params = {};\n if (this.consumeOptional('?')) {\n do {\n this.parseQueryParam(params);\n } while (this.consumeOptional('&'));\n }\n return params;\n };\n UrlParser.prototype.parseFragment = function () {\n return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n };\n UrlParser.prototype.parseChildren = function () {\n if (this.remaining === '') {\n return {};\n }\n this.consumeOptional('/');\n var segments = [];\n if (!this.peekStartsWith('(')) {\n segments.push(this.parseSegment());\n }\n while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n this.capture('/');\n segments.push(this.parseSegment());\n }\n var children = {};\n if (this.peekStartsWith('/(')) {\n this.capture('/');\n children = this.parseParens(true);\n }\n var res = {};\n if (this.peekStartsWith('(')) {\n res = this.parseParens(false);\n }\n if (segments.length > 0 || Object.keys(children).length > 0) {\n res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n }\n return res;\n };\n // parse a segment with its matrix parameters\n // ie `name;k1=v1;k2`\n // parse a segment with its matrix parameters\n // ie `name;k1=v1;k2`\n UrlParser.prototype.parseSegment = \n // parse a segment with its matrix parameters\n // ie `name;k1=v1;k2`\n function () {\n var path = matchSegments(this.remaining);\n if (path === '' && this.peekStartsWith(';')) {\n throw new Error(\"Empty path url segment cannot have parameters: '\" + this.remaining + \"'.\");\n }\n this.capture(path);\n return new UrlSegment(decode(path), this.parseMatrixParams());\n };\n UrlParser.prototype.parseMatrixParams = function () {\n var params = {};\n while (this.consumeOptional(';')) {\n this.parseParam(params);\n }\n return params;\n };\n UrlParser.prototype.parseParam = function (params) {\n var key = matchSegments(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n var value = '';\n if (this.consumeOptional('=')) {\n var valueMatch = matchSegments(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n params[decode(key)] = decode(value);\n };\n // Parse a single query parameter `name[=value]`\n // Parse a single query parameter `name[=value]`\n UrlParser.prototype.parseQueryParam = \n // Parse a single query parameter `name[=value]`\n function (params) {\n var key = matchQueryParams(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n var value = '';\n if (this.consumeOptional('=')) {\n var valueMatch = matchUrlQueryParamValue(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n var decodedKey = decodeQuery(key);\n var decodedVal = decodeQuery(value);\n if (params.hasOwnProperty(decodedKey)) {\n // Append to existing values\n var currentVal = params[decodedKey];\n if (!Array.isArray(currentVal)) {\n currentVal = [currentVal];\n params[decodedKey] = currentVal;\n }\n currentVal.push(decodedVal);\n }\n else {\n // Create a new value\n params[decodedKey] = decodedVal;\n }\n };\n // parse `(a/b//outlet_name:c/d)`\n // parse `(a/b//outlet_name:c/d)`\n UrlParser.prototype.parseParens = \n // parse `(a/b//outlet_name:c/d)`\n function (allowPrimary) {\n var segments = {};\n this.capture('(');\n while (!this.consumeOptional(')') && this.remaining.length > 0) {\n var path = matchSegments(this.remaining);\n var next = this.remaining[path.length];\n // if is is not one of these characters, then the segment was unescaped\n // or the group was not closed\n if (next !== '/' && next !== ')' && next !== ';') {\n throw new Error(\"Cannot parse url '\" + this.url + \"'\");\n }\n var outletName = (undefined);\n if (path.indexOf(':') > -1) {\n outletName = path.substr(0, path.indexOf(':'));\n this.capture(outletName);\n this.capture(':');\n }\n else if (allowPrimary) {\n outletName = PRIMARY_OUTLET;\n }\n var children = this.parseChildren();\n segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] :\n new UrlSegmentGroup([], children);\n this.consumeOptional('//');\n }\n return segments;\n };\n UrlParser.prototype.peekStartsWith = function (str) { return this.remaining.startsWith(str); };\n // Consumes the prefix when it is present and returns whether it has been consumed\n // Consumes the prefix when it is present and returns whether it has been consumed\n UrlParser.prototype.consumeOptional = \n // Consumes the prefix when it is present and returns whether it has been consumed\n function (str) {\n if (this.peekStartsWith(str)) {\n this.remaining = this.remaining.substring(str.length);\n return true;\n }\n return false;\n };\n UrlParser.prototype.capture = function (str) {\n if (!this.consumeOptional(str)) {\n throw new Error(\"Expected \\\"\" + str + \"\\\".\");\n }\n };\n return UrlParser;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar NoMatch = /** @class */ (function () {\n function NoMatch(segmentGroup) {\n this.segmentGroup = segmentGroup || null;\n }\n return NoMatch;\n}());\nvar AbsoluteRedirect = /** @class */ (function () {\n function AbsoluteRedirect(urlTree) {\n this.urlTree = urlTree;\n }\n return AbsoluteRedirect;\n}());\nfunction noMatch(segmentGroup) {\n return new rxjs.Observable(function (obs) { return obs.error(new NoMatch(segmentGroup)); });\n}\nfunction absoluteRedirect(newTree) {\n return new rxjs.Observable(function (obs) { return obs.error(new AbsoluteRedirect(newTree)); });\n}\nfunction namedOutletsRedirect(redirectTo) {\n return new rxjs.Observable(function (obs) {\n return obs.error(new Error(\"Only absolute redirects can have named outlets. redirectTo: '\" + redirectTo + \"'\"));\n });\n}\nfunction canLoadFails(route) {\n return new rxjs.Observable(function (obs) {\n return obs.error(navigationCancelingError(\"Cannot load children because the guard of the route \\\"path: '\" + route.path + \"'\\\" returned false\"));\n });\n}\n/**\n * Returns the `UrlTree` with the redirection applied.\n *\n * Lazy modules are loaded along the way.\n */\nfunction applyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {\n return new ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config).apply();\n}\nvar ApplyRedirects = /** @class */ (function () {\n function ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {\n this.configLoader = configLoader;\n this.urlSerializer = urlSerializer;\n this.urlTree = urlTree;\n this.config = config;\n this.allowRedirects = true;\n this.ngModule = moduleInjector.get(core.NgModuleRef);\n }\n ApplyRedirects.prototype.apply = function () {\n var _this = this;\n var expanded$ = this.expandSegmentGroup(this.ngModule, this.config, this.urlTree.root, PRIMARY_OUTLET);\n var urlTrees$ = expanded$.pipe(operators.map(function (rootSegmentGroup) {\n return _this.createUrlTree(rootSegmentGroup, _this.urlTree.queryParams, (_this.urlTree.fragment));\n }));\n return urlTrees$.pipe(operators.catchError(function (e) {\n if (e instanceof AbsoluteRedirect) {\n // after an absolute redirect we do not apply any more redirects!\n // after an absolute redirect we do not apply any more redirects!\n _this.allowRedirects = false;\n // we need to run matching, so we can fetch all lazy-loaded modules\n return _this.match(e.urlTree);\n }\n if (e instanceof NoMatch) {\n throw _this.noMatchError(e);\n }\n throw e;\n }));\n };\n ApplyRedirects.prototype.match = function (tree) {\n var _this = this;\n var expanded$ = this.expandSegmentGroup(this.ngModule, this.config, tree.root, PRIMARY_OUTLET);\n var mapped$ = expanded$.pipe(operators.map(function (rootSegmentGroup) {\n return _this.createUrlTree(rootSegmentGroup, tree.queryParams, (tree.fragment));\n }));\n return mapped$.pipe(operators.catchError(function (e) {\n if (e instanceof NoMatch) {\n throw _this.noMatchError(e);\n }\n throw e;\n }));\n };\n ApplyRedirects.prototype.noMatchError = function (e) {\n return new Error(\"Cannot match any routes. URL Segment: '\" + e.segmentGroup + \"'\");\n };\n ApplyRedirects.prototype.createUrlTree = function (rootCandidate, queryParams, fragment) {\n var root = rootCandidate.segments.length > 0 ?\n new UrlSegmentGroup([], (_a = {}, _a[PRIMARY_OUTLET] = rootCandidate, _a)) :\n rootCandidate;\n return new UrlTree(root, queryParams, fragment);\n var _a;\n };\n ApplyRedirects.prototype.expandSegmentGroup = function (ngModule, routes, segmentGroup, outlet) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.expandChildren(ngModule, routes, segmentGroup)\n .pipe(operators.map(function (children) { return new UrlSegmentGroup([], children); }));\n }\n return this.expandSegment(ngModule, segmentGroup, routes, segmentGroup.segments, outlet, true);\n };\n // Recursively expand segment groups for all the child outlets\n // Recursively expand segment groups for all the child outlets\n ApplyRedirects.prototype.expandChildren = \n // Recursively expand segment groups for all the child outlets\n function (ngModule, routes, segmentGroup) {\n var _this = this;\n return waitForMap(segmentGroup.children, function (childOutlet, child) { return _this.expandSegmentGroup(ngModule, routes, child, childOutlet); });\n };\n ApplyRedirects.prototype.expandSegment = function (ngModule, segmentGroup, routes, segments, outlet, allowRedirects) {\n var _this = this;\n return rxjs.of.apply(void 0, __spread(routes)).pipe(operators.map(function (r) {\n var expanded$ = _this.expandSegmentAgainstRoute(ngModule, segmentGroup, routes, r, segments, outlet, allowRedirects);\n return expanded$.pipe(operators.catchError(function (e) {\n if (e instanceof NoMatch) {\n // TODO(i): this return type doesn't match the declared Observable<UrlSegmentGroup> -\n // talk to Jason\n return rxjs.of(null);\n }\n throw e;\n }));\n }), operators.concatAll(), operators.first(function (s) { return !!s; }), operators.catchError(function (e, _) {\n if (e instanceof rxjs.EmptyError || e.name === 'EmptyError') {\n if (_this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return rxjs.of(new UrlSegmentGroup([], {}));\n }\n throw new NoMatch(segmentGroup);\n }\n throw e;\n }));\n };\n ApplyRedirects.prototype.noLeftoversInUrl = function (segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n };\n ApplyRedirects.prototype.expandSegmentAgainstRoute = function (ngModule, segmentGroup, routes, route, paths, outlet, allowRedirects) {\n if (getOutlet(route) !== outlet) {\n return noMatch(segmentGroup);\n }\n if (route.redirectTo === undefined) {\n return this.matchSegmentAgainstRoute(ngModule, segmentGroup, route, paths);\n }\n if (allowRedirects && this.allowRedirects) {\n return this.expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, paths, outlet);\n }\n return noMatch(segmentGroup);\n };\n ApplyRedirects.prototype.expandSegmentAgainstRouteUsingRedirect = function (ngModule, segmentGroup, routes, route, segments, outlet) {\n if (route.path === '**') {\n return this.expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet);\n }\n return this.expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet);\n };\n ApplyRedirects.prototype.expandWildCardWithParamsAgainstRouteUsingRedirect = function (ngModule, routes, route, outlet) {\n var _this = this;\n var newTree = this.applyRedirectCommands([], (route.redirectTo), {});\n if (route.redirectTo.startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n return this.lineralizeSegments(route, newTree).pipe(operators.mergeMap(function (newSegments) {\n var group = new UrlSegmentGroup(newSegments, {});\n return _this.expandSegment(ngModule, group, routes, newSegments, outlet, false);\n }));\n };\n ApplyRedirects.prototype.expandRegularSegmentAgainstRouteUsingRedirect = function (ngModule, segmentGroup, routes, route, segments, outlet) {\n var _this = this;\n var _a = match(segmentGroup, route, segments), matched = _a.matched, consumedSegments = _a.consumedSegments, lastChild = _a.lastChild, positionalParamSegments = _a.positionalParamSegments;\n if (!matched)\n return noMatch(segmentGroup);\n var newTree = this.applyRedirectCommands(consumedSegments, (route.redirectTo), positionalParamSegments);\n if (route.redirectTo.startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n return this.lineralizeSegments(route, newTree).pipe(operators.mergeMap(function (newSegments) {\n return _this.expandSegment(ngModule, segmentGroup, routes, newSegments.concat(segments.slice(lastChild)), outlet, false);\n }));\n };\n ApplyRedirects.prototype.matchSegmentAgainstRoute = function (ngModule, rawSegmentGroup, route, segments) {\n var _this = this;\n if (route.path === '**') {\n if (route.loadChildren) {\n return this.configLoader.load(ngModule.injector, route)\n .pipe(operators.map(function (cfg) {\n route._loadedConfig = cfg;\n return new UrlSegmentGroup(segments, {});\n }));\n }\n return rxjs.of(new UrlSegmentGroup(segments, {}));\n }\n var _a = match(rawSegmentGroup, route, segments), matched = _a.matched, consumedSegments = _a.consumedSegments, lastChild = _a.lastChild;\n if (!matched)\n return noMatch(rawSegmentGroup);\n var rawSlicedSegments = segments.slice(lastChild);\n var childConfig$ = this.getChildConfig(ngModule, route);\n return childConfig$.pipe(operators.mergeMap(function (routerConfig) {\n var childModule = routerConfig.module;\n var childConfig = routerConfig.routes;\n var _a = split(rawSegmentGroup, consumedSegments, rawSlicedSegments, childConfig), segmentGroup = _a.segmentGroup, slicedSegments = _a.slicedSegments;\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n var expanded$_1 = _this.expandChildren(childModule, childConfig, segmentGroup);\n return expanded$_1.pipe(operators.map(function (children) { return new UrlSegmentGroup(consumedSegments, children); }));\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return rxjs.of(new UrlSegmentGroup(consumedSegments, {}));\n }\n var expanded$ = _this.expandSegment(childModule, segmentGroup, childConfig, slicedSegments, PRIMARY_OUTLET, true);\n return expanded$.pipe(operators.map(function (cs) {\n return new UrlSegmentGroup(consumedSegments.concat(cs.segments), cs.children);\n }));\n }));\n };\n ApplyRedirects.prototype.getChildConfig = function (ngModule, route) {\n var _this = this;\n if (route.children) {\n // The children belong to the same module\n return rxjs.of(new LoadedRouterConfig(route.children, ngModule));\n }\n if (route.loadChildren) {\n // lazy children belong to the loaded module\n if (route._loadedConfig !== undefined) {\n return rxjs.of(route._loadedConfig);\n }\n return runCanLoadGuard(ngModule.injector, route).pipe(operators.mergeMap(function (shouldLoad) {\n if (shouldLoad) {\n return _this.configLoader.load(ngModule.injector, route)\n .pipe(operators.map(function (cfg) {\n route._loadedConfig = cfg;\n return cfg;\n }));\n }\n return canLoadFails(route);\n }));\n }\n return rxjs.of(new LoadedRouterConfig([], ngModule));\n };\n ApplyRedirects.prototype.lineralizeSegments = function (route, urlTree) {\n var res = [];\n var c = urlTree.root;\n while (true) {\n res = res.concat(c.segments);\n if (c.numberOfChildren === 0) {\n return rxjs.of(res);\n }\n if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n return namedOutletsRedirect((route.redirectTo));\n }\n c = c.children[PRIMARY_OUTLET];\n }\n };\n ApplyRedirects.prototype.applyRedirectCommands = function (segments, redirectTo, posParams) {\n return this.applyRedirectCreatreUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n };\n ApplyRedirects.prototype.applyRedirectCreatreUrlTree = function (redirectTo, urlTree, segments, posParams) {\n var newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);\n };\n ApplyRedirects.prototype.createQueryParams = function (redirectToParams, actualParams) {\n var res = {};\n forEach(redirectToParams, function (v, k) {\n var copySourceValue = typeof v === 'string' && v.startsWith(':');\n if (copySourceValue) {\n var sourceName = v.substring(1);\n res[k] = actualParams[sourceName];\n }\n else {\n res[k] = v;\n }\n });\n return res;\n };\n ApplyRedirects.prototype.createSegmentGroup = function (redirectTo, group, segments, posParams) {\n var _this = this;\n var updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n var children = {};\n forEach(group.children, function (child, name) {\n children[name] = _this.createSegmentGroup(redirectTo, child, segments, posParams);\n });\n return new UrlSegmentGroup(updatedSegments, children);\n };\n ApplyRedirects.prototype.createSegments = function (redirectTo, redirectToSegments, actualSegments, posParams) {\n var _this = this;\n return redirectToSegments.map(function (s) {\n return s.path.startsWith(':') ? _this.findPosParam(redirectTo, s, posParams) :\n _this.findOrReturn(s, actualSegments);\n });\n };\n ApplyRedirects.prototype.findPosParam = function (redirectTo, redirectToUrlSegment, posParams) {\n var pos = posParams[redirectToUrlSegment.path.substring(1)];\n if (!pos)\n throw new Error(\"Cannot redirect to '\" + redirectTo + \"'. Cannot find '\" + redirectToUrlSegment.path + \"'.\");\n return pos;\n };\n ApplyRedirects.prototype.findOrReturn = function (redirectToUrlSegment, actualSegments) {\n var idx = 0;\n try {\n for (var actualSegments_1 = __values(actualSegments), actualSegments_1_1 = actualSegments_1.next(); !actualSegments_1_1.done; actualSegments_1_1 = actualSegments_1.next()) {\n var s = actualSegments_1_1.value;\n if (s.path === redirectToUrlSegment.path) {\n actualSegments.splice(idx);\n return s;\n }\n idx++;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (actualSegments_1_1 && !actualSegments_1_1.done && (_a = actualSegments_1.return)) _a.call(actualSegments_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return redirectToUrlSegment;\n var e_1, _a;\n };\n return ApplyRedirects;\n}());\nfunction runCanLoadGuard(moduleInjector, route) {\n var canLoad = route.canLoad;\n if (!canLoad || canLoad.length === 0)\n return rxjs.of(true);\n var obs = rxjs.from(canLoad).pipe(operators.map(function (injectionToken) {\n var guard = moduleInjector.get(injectionToken);\n return wrapIntoObservable(guard.canLoad ? guard.canLoad(route) : guard(route));\n }));\n return andObservables(obs);\n}\nfunction match(segmentGroup, route, segments) {\n if (route.path === '') {\n if ((route.pathMatch === 'full') && (segmentGroup.hasChildren() || segments.length > 0)) {\n return { matched: false, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };\n }\n return { matched: true, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };\n }\n var matcher = route.matcher || defaultUrlMatcher;\n var res = matcher(segments, segmentGroup, route);\n if (!res) {\n return {\n matched: false,\n consumedSegments: [],\n lastChild: 0,\n positionalParamSegments: {},\n };\n }\n return {\n matched: true,\n consumedSegments: (res.consumed),\n lastChild: (res.consumed.length),\n positionalParamSegments: (res.posParams),\n };\n}\nfunction split(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n var s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptySegments(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n return { segmentGroup: mergeTrivialChildren(s), slicedSegments: [] };\n }\n if (slicedSegments.length === 0 &&\n containsEmptyPathRedirects(segmentGroup, slicedSegments, config)) {\n var s = new UrlSegmentGroup(segmentGroup.segments, addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n return { segmentGroup: mergeTrivialChildren(s), slicedSegments: slicedSegments };\n }\n return { segmentGroup: segmentGroup, slicedSegments: slicedSegments };\n}\nfunction mergeTrivialChildren(s) {\n if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n var c = s.children[PRIMARY_OUTLET];\n return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n }\n return s;\n}\nfunction addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n var res = {};\n try {\n for (var routes_1 = __values(routes), routes_1_1 = routes_1.next(); !routes_1_1.done; routes_1_1 = routes_1.next()) {\n var r = routes_1_1.value;\n if (isEmptyPathRedirect(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (routes_1_1 && !routes_1_1.done && (_a = routes_1.return)) _a.call(routes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return __assign({}, children, res);\n var e_2, _a;\n}\nfunction createChildrenForEmptySegments(routes, primarySegmentGroup) {\n var res = {};\n res[PRIMARY_OUTLET] = primarySegmentGroup;\n try {\n for (var routes_2 = __values(routes), routes_2_1 = routes_2.next(); !routes_2_1.done; routes_2_1 = routes_2.next()) {\n var r = routes_2_1.value;\n if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (routes_2_1 && !routes_2_1.done && (_a = routes_2.return)) _a.call(routes_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return res;\n var e_3, _a;\n}\nfunction containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, segments, routes) {\n return routes.some(function (r) { return isEmptyPathRedirect(segmentGroup, segments, r) && getOutlet(r) !== PRIMARY_OUTLET; });\n}\nfunction containsEmptyPathRedirects(segmentGroup, segments, routes) {\n return routes.some(function (r) { return isEmptyPathRedirect(segmentGroup, segments, r); });\n}\nfunction isEmptyPathRedirect(segmentGroup, segments, r) {\n if ((segmentGroup.hasChildren() || segments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '' && r.redirectTo !== undefined;\n}\nfunction getOutlet(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar Tree = /** @class */ (function () {\n function Tree(root) {\n this._root = root;\n }\n Object.defineProperty(Tree.prototype, \"root\", {\n get: function () { return this._root.value; },\n enumerable: true,\n configurable: true\n });\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.parent = /**\n * @internal\n */\n function (t) {\n var p = this.pathFromRoot(t);\n return p.length > 1 ? p[p.length - 2] : null;\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.children = /**\n * @internal\n */\n function (t) {\n var n = findNode(t, this._root);\n return n ? n.children.map(function (t) { return t.value; }) : [];\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.firstChild = /**\n * @internal\n */\n function (t) {\n var n = findNode(t, this._root);\n return n && n.children.length > 0 ? n.children[0].value : null;\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.siblings = /**\n * @internal\n */\n function (t) {\n var p = findPath(t, this._root);\n if (p.length < 2)\n return [];\n var c = p[p.length - 2].children.map(function (c) { return c.value; });\n return c.filter(function (cc) { return cc !== t; });\n };\n /**\n * @internal\n */\n /**\n * @internal\n */\n Tree.prototype.pathFromRoot = /**\n * @internal\n */\n function (t) { return findPath(t, this._root).map(function (s) { return s.value; }); };\n return Tree;\n}());\n// DFS for the node matching the value\nfunction findNode(value, node) {\n if (value === node.value)\n return node;\n try {\n for (var _a = __values(node.children), _b = _a.next(); !_b.done; _b = _a.next()) {\n var child = _b.value;\n var node_1 = findNode(value, child);\n if (node_1)\n return node_1;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return null;\n var e_1, _c;\n}\n// Return the path to the node with the given value using DFS\nfunction findPath(value, node) {\n if (value === node.value)\n return [node];\n try {\n for (var _a = __values(node.children), _b = _a.next(); !_b.done; _b = _a.next()) {\n var child = _b.value;\n var path = findPath(value, child);\n if (path.length) {\n path.unshift(node);\n return path;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return [];\n var e_2, _c;\n}\nvar TreeNode = /** @class */ (function () {\n function TreeNode(value, children) {\n this.value = value;\n this.children = children;\n }\n TreeNode.prototype.toString = function () { return \"TreeNode(\" + this.value + \")\"; };\n return TreeNode;\n}());\n// Return the list of T indexed by outlet name\nfunction nodeChildrenAsMap(node) {\n var map$$1 = {};\n if (node) {\n node.children.forEach(function (child) { return map$$1[child.value.outlet] = child; });\n }\n return map$$1;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Represents the state of the router.\n *\n * RouterState is a tree of activated routes. Every node in this tree knows about the \"consumed\" URL\n * segments, the extracted parameters, and the resolved data.\n *\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const state: RouterState = router.routerState;\n * const root: ActivatedRoute = state.root;\n * const child = root.firstChild;\n * const id: Observable<string> = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n *\n * See `ActivatedRoute` for more information.\n *\n *\n */\nvar RouterState = /** @class */ (function (_super) {\n __extends(RouterState, _super);\n /** @internal */\n function RouterState(root, /** The current snapshot of the router state */\n snapshot) {\n var _this = _super.call(this, root) || this;\n _this.snapshot = snapshot;\n setRouterState(_this, root);\n return _this;\n }\n RouterState.prototype.toString = function () { return this.snapshot.toString(); };\n return RouterState;\n}(Tree));\nfunction createEmptyState(urlTree, rootComponent) {\n var snapshot = createEmptyStateSnapshot(urlTree, rootComponent);\n var emptyUrl = new rxjs.BehaviorSubject([new UrlSegment('', {})]);\n var emptyParams = new rxjs.BehaviorSubject({});\n var emptyData = new rxjs.BehaviorSubject({});\n var emptyQueryParams = new rxjs.BehaviorSubject({});\n var fragment = new rxjs.BehaviorSubject('');\n var activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);\n activated.snapshot = snapshot.root;\n return new RouterState(new TreeNode(activated, []), snapshot);\n}\nfunction createEmptyStateSnapshot(urlTree, rootComponent) {\n var emptyParams = {};\n var emptyData = {};\n var emptyQueryParams = {};\n var fragment = '';\n var activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, urlTree.root, -1, {});\n return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet. An `ActivatedRoute` can also be used to traverse the router state tree.\n *\n * ```\n * @Component({...})\n * class MyComponent {\n * constructor(route: ActivatedRoute) {\n * const id: Observable<string> = route.params.map(p => p.id);\n * const url: Observable<string> = route.url.map(segments => segments.join(''));\n * // route.data includes both `data` and `resolve`\n * const user = route.data.map(d => d.user);\n * }\n * }\n * ```\n *\n *\n */\nvar ActivatedRoute = /** @class */ (function () {\n /** @internal */\n function ActivatedRoute(/** An observable of the URL segments matched by this route */\n url, /** An observable of the matrix parameters scoped to this route */\n params, /** An observable of the query parameters shared by all the routes */\n queryParams, /** An observable of the URL fragment shared by all the routes */\n fragment, /** An observable of the static and resolved data of this route. */\n data, /** The outlet name of the route. It's a constant */\n outlet, /** The component of the route. It's a constant */\n // TODO(vsavkin): remove |string\n component, futureSnapshot) {\n this.url = url;\n this.params = params;\n this.queryParams = queryParams;\n this.fragment = fragment;\n this.data = data;\n this.outlet = outlet;\n this.component = component;\n this._futureSnapshot = futureSnapshot;\n }\n Object.defineProperty(ActivatedRoute.prototype, \"routeConfig\", {\n /** The configuration used to match this route */\n get: /** The configuration used to match this route */\n function () { return this._futureSnapshot.routeConfig; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"root\", {\n /** The root of the router state */\n get: /** The root of the router state */\n function () { return this._routerState.root; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"parent\", {\n /** The parent of this route in the router state tree */\n get: /** The parent of this route in the router state tree */\n function () { return this._routerState.parent(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"firstChild\", {\n /** The first child of this route in the router state tree */\n get: /** The first child of this route in the router state tree */\n function () { return this._routerState.firstChild(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"children\", {\n /** The children of this route in the router state tree */\n get: /** The children of this route in the router state tree */\n function () { return this._routerState.children(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"pathFromRoot\", {\n /** The path from the root of the router state tree to this route */\n get: /** The path from the root of the router state tree to this route */\n function () { return this._routerState.pathFromRoot(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"paramMap\", {\n get: function () {\n if (!this._paramMap) {\n this._paramMap = this.params.pipe(operators.map(function (p) { return convertToParamMap(p); }));\n }\n return this._paramMap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRoute.prototype, \"queryParamMap\", {\n get: function () {\n if (!this._queryParamMap) {\n this._queryParamMap =\n this.queryParams.pipe(operators.map(function (p) { return convertToParamMap(p); }));\n }\n return this._queryParamMap;\n },\n enumerable: true,\n configurable: true\n });\n ActivatedRoute.prototype.toString = function () {\n return this.snapshot ? this.snapshot.toString() : \"Future(\" + this._futureSnapshot + \")\";\n };\n return ActivatedRoute;\n}());\n/**\n * Returns the inherited params, data, and resolve for a given route.\n * By default, this only inherits values up to the nearest path-less or component-less route.\n * @internal\n */\nfunction inheritedParamsDataResolve(route, paramsInheritanceStrategy) {\n if (paramsInheritanceStrategy === void 0) { paramsInheritanceStrategy = 'emptyOnly'; }\n var pathFromRoot = route.pathFromRoot;\n var inheritingStartingFrom = 0;\n if (paramsInheritanceStrategy !== 'always') {\n inheritingStartingFrom = pathFromRoot.length - 1;\n while (inheritingStartingFrom >= 1) {\n var current = pathFromRoot[inheritingStartingFrom];\n var parent_1 = pathFromRoot[inheritingStartingFrom - 1];\n // current route is an empty path => inherits its parent's params and data\n if (current.routeConfig && current.routeConfig.path === '') {\n inheritingStartingFrom--;\n // parent is componentless => current route should inherit its params and data\n }\n else if (!parent_1.component) {\n inheritingStartingFrom--;\n }\n else {\n break;\n }\n }\n }\n return flattenInherited(pathFromRoot.slice(inheritingStartingFrom));\n}\n/** @internal */\nfunction flattenInherited(pathFromRoot) {\n return pathFromRoot.reduce(function (res, curr) {\n var params = __assign({}, res.params, curr.params);\n var data = __assign({}, res.data, curr.data);\n var resolve = __assign({}, res.resolve, curr._resolvedData);\n return { params: params, data: data, resolve: resolve };\n }, { params: {}, data: {}, resolve: {} });\n}\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to\n * traverse the router state tree.\n *\n * ```\n * @Component({templateUrl:'./my-component.html'})\n * class MyComponent {\n * constructor(route: ActivatedRoute) {\n * const id: string = route.snapshot.params.id;\n * const url: string = route.snapshot.url.join('');\n * const user = route.snapshot.data.user;\n * }\n * }\n * ```\n *\n *\n */\nvar ActivatedRouteSnapshot = /** @class */ (function () {\n /** @internal */\n function ActivatedRouteSnapshot(/** The URL segments matched by this route */\n url, /** The matrix parameters scoped to this route */\n params, /** The query parameters shared by all the routes */\n queryParams, /** The URL fragment shared by all the routes */\n fragment, /** The static and resolved data of this route */\n data, /** The outlet name of the route */\n outlet, /** The component of the route */\n component, routeConfig, urlSegment, lastPathIndex, resolve) {\n this.url = url;\n this.params = params;\n this.queryParams = queryParams;\n this.fragment = fragment;\n this.data = data;\n this.outlet = outlet;\n this.component = component;\n this.routeConfig = routeConfig;\n this._urlSegment = urlSegment;\n this._lastPathIndex = lastPathIndex;\n this._resolve = resolve;\n }\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"root\", {\n /** The root of the router state */\n get: /** The root of the router state */\n function () { return this._routerState.root; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"parent\", {\n /** The parent of this route in the router state tree */\n get: /** The parent of this route in the router state tree */\n function () { return this._routerState.parent(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"firstChild\", {\n /** The first child of this route in the router state tree */\n get: /** The first child of this route in the router state tree */\n function () { return this._routerState.firstChild(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"children\", {\n /** The children of this route in the router state tree */\n get: /** The children of this route in the router state tree */\n function () { return this._routerState.children(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"pathFromRoot\", {\n /** The path from the root of the router state tree to this route */\n get: /** The path from the root of the router state tree to this route */\n function () { return this._routerState.pathFromRoot(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"paramMap\", {\n get: function () {\n if (!this._paramMap) {\n this._paramMap = convertToParamMap(this.params);\n }\n return this._paramMap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ActivatedRouteSnapshot.prototype, \"queryParamMap\", {\n get: function () {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n },\n enumerable: true,\n configurable: true\n });\n ActivatedRouteSnapshot.prototype.toString = function () {\n var url = this.url.map(function (segment) { return segment.toString(); }).join('/');\n var matched = this.routeConfig ? this.routeConfig.path : '';\n return \"Route(url:'\" + url + \"', path:'\" + matched + \"')\";\n };\n return ActivatedRouteSnapshot;\n}());\n/**\n * @description\n *\n * Represents the state of the router at a moment in time.\n *\n * This is a tree of activated route snapshots. Every node in this tree knows about\n * the \"consumed\" URL segments, the extracted parameters, and the resolved data.\n *\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n * constructor(router: Router) {\n * const state: RouterState = router.routerState;\n * const snapshot: RouterStateSnapshot = state.snapshot;\n * const root: ActivatedRouteSnapshot = snapshot.root;\n * const child = root.firstChild;\n * const id: Observable<string> = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n *\n *\n */\nvar RouterStateSnapshot = /** @class */ (function (_super) {\n __extends(RouterStateSnapshot, _super);\n /** @internal */\n function RouterStateSnapshot(/** The url from which this snapshot was created */\n url, root) {\n var _this = _super.call(this, root) || this;\n _this.url = url;\n setRouterState(_this, root);\n return _this;\n }\n RouterStateSnapshot.prototype.toString = function () { return serializeNode(this._root); };\n return RouterStateSnapshot;\n}(Tree));\nfunction setRouterState(state, node) {\n node.value._routerState = state;\n node.children.forEach(function (c) { return setRouterState(state, c); });\n}\nfunction serializeNode(node) {\n var c = node.children.length > 0 ? \" { \" + node.children.map(serializeNode).join(', ') + \" } \" : '';\n return \"\" + node.value + c;\n}\n/**\n * The expectation is that the activate route is created with the right set of parameters.\n * So we push new values into the observables only when they are not the initial values.\n * And we detect that by checking if the snapshot field is set.\n */\nfunction advanceActivatedRoute(route) {\n if (route.snapshot) {\n var currentSnapshot = route.snapshot;\n var nextSnapshot = route._futureSnapshot;\n route.snapshot = nextSnapshot;\n if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n route.queryParams.next(nextSnapshot.queryParams);\n }\n if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n route.fragment.next(nextSnapshot.fragment);\n }\n if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n route.params.next(nextSnapshot.params);\n }\n if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n route.url.next(nextSnapshot.url);\n }\n if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n route.data.next(nextSnapshot.data);\n }\n }\n else {\n route.snapshot = route._futureSnapshot;\n // this is for resolved data\n // this is for resolved data\n route.data.next(route._futureSnapshot.data);\n }\n}\nfunction equalParamsAndUrlSegments(a, b) {\n var equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n var parentsMismatch = !a.parent !== !b.parent;\n return equalUrlParams && !parentsMismatch &&\n (!a.parent || equalParamsAndUrlSegments(a.parent, (b.parent)));\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createRouterState(routeReuseStrategy, curr, prevState) {\n var root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n return new RouterState(root, curr);\n}\nfunction createNode(routeReuseStrategy, curr, prevState) {\n // reuse an activated route that is currently displayed on the screen\n if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n var value = prevState.value;\n value._futureSnapshot = curr.value;\n var children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n return new TreeNode(value, children);\n // retrieve an activated route that is used to be displayed, but is not currently displayed\n }\n else {\n var detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n if (detachedRouteHandle) {\n var tree = detachedRouteHandle.route;\n setFutureSnapshotsOfActivatedRoutes(curr, tree);\n return tree;\n }\n else {\n var value = createActivatedRoute(curr.value);\n var children = curr.children.map(function (c) { return createNode(routeReuseStrategy, c); });\n return new TreeNode(value, children);\n }\n }\n}\nfunction setFutureSnapshotsOfActivatedRoutes(curr, result) {\n if (curr.value.routeConfig !== result.value.routeConfig) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot created from a different route');\n }\n if (curr.children.length !== result.children.length) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot with a different number of children');\n }\n result.value._futureSnapshot = curr.value;\n for (var i = 0; i < curr.children.length; ++i) {\n setFutureSnapshotsOfActivatedRoutes(curr.children[i], result.children[i]);\n }\n}\nfunction createOrReuseChildren(routeReuseStrategy, curr, prevState) {\n return curr.children.map(function (child) {\n try {\n for (var _a = __values(prevState.children), _b = _a.next(); !_b.done; _b = _a.next()) {\n var p = _b.value;\n if (routeReuseStrategy.shouldReuseRoute(p.value.snapshot, child.value)) {\n return createNode(routeReuseStrategy, child, p);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return createNode(routeReuseStrategy, child);\n var e_1, _c;\n });\n}\nfunction createActivatedRoute(c) {\n return new ActivatedRoute(new rxjs.BehaviorSubject(c.url), new rxjs.BehaviorSubject(c.params), new rxjs.BehaviorSubject(c.queryParams), new rxjs.BehaviorSubject(c.fragment), new rxjs.BehaviorSubject(c.data), c.outlet, c.component, c);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createUrlTree(route, urlTree, commands, queryParams, fragment) {\n if (commands.length === 0) {\n return tree(urlTree.root, urlTree.root, urlTree, queryParams, fragment);\n }\n var nav = computeNavigation(commands);\n if (nav.toRoot()) {\n return tree(urlTree.root, new UrlSegmentGroup([], {}), urlTree, queryParams, fragment);\n }\n var startingPosition = findStartingPosition(nav, urlTree, route);\n var segmentGroup = startingPosition.processChildren ?\n updateSegmentGroupChildren(startingPosition.segmentGroup, startingPosition.index, nav.commands) :\n updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);\n return tree(startingPosition.segmentGroup, segmentGroup, urlTree, queryParams, fragment);\n}\nfunction isMatrixParams(command) {\n return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\nfunction tree(oldSegmentGroup, newSegmentGroup, urlTree, queryParams, fragment) {\n var qp = {};\n if (queryParams) {\n forEach(queryParams, function (value, name) {\n qp[name] = Array.isArray(value) ? value.map(function (v) { return \"\" + v; }) : \"\" + value;\n });\n }\n if (urlTree.root === oldSegmentGroup) {\n return new UrlTree(newSegmentGroup, qp, fragment);\n }\n return new UrlTree(replaceSegment(urlTree.root, oldSegmentGroup, newSegmentGroup), qp, fragment);\n}\nfunction replaceSegment(current, oldSegment, newSegment) {\n var children = {};\n forEach(current.children, function (c, outletName) {\n if (c === oldSegment) {\n children[outletName] = newSegment;\n }\n else {\n children[outletName] = replaceSegment(c, oldSegment, newSegment);\n }\n });\n return new UrlSegmentGroup(current.segments, children);\n}\nvar Navigation = /** @class */ (function () {\n function Navigation(isAbsolute, numberOfDoubleDots, commands) {\n this.isAbsolute = isAbsolute;\n this.numberOfDoubleDots = numberOfDoubleDots;\n this.commands = commands;\n if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n throw new Error('Root segment cannot have matrix parameters');\n }\n var cmdWithOutlet = commands.find(function (c) { return typeof c === 'object' && c != null && c.outlets; });\n if (cmdWithOutlet && cmdWithOutlet !== last$1(commands)) {\n throw new Error('{outlets:{}} has to be the last command');\n }\n }\n Navigation.prototype.toRoot = function () {\n return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n };\n return Navigation;\n}());\n/** Transforms commands to a normalized `Navigation` */\nfunction computeNavigation(commands) {\n if ((typeof commands[0] === 'string') && commands.length === 1 && commands[0] === '/') {\n return new Navigation(true, 0, commands);\n }\n var numberOfDoubleDots = 0;\n var isAbsolute = false;\n var res = commands.reduce(function (res, cmd, cmdIdx) {\n if (typeof cmd === 'object' && cmd != null) {\n if (cmd.outlets) {\n var outlets_1 = {};\n forEach(cmd.outlets, function (commands, name) {\n outlets_1[name] = typeof commands === 'string' ? commands.split('/') : commands;\n });\n return __spread(res, [{ outlets: outlets_1 }]);\n }\n if (cmd.segmentPath) {\n return __spread(res, [cmd.segmentPath]);\n }\n }\n if (!(typeof cmd === 'string')) {\n return __spread(res, [cmd]);\n }\n if (cmdIdx === 0) {\n cmd.split('/').forEach(function (urlPart, partIndex) {\n if (partIndex == 0 && urlPart === '.') {\n // skip './a'\n }\n else if (partIndex == 0 && urlPart === '') {\n // '/a'\n isAbsolute = true;\n }\n else if (urlPart === '..') {\n // '../a'\n numberOfDoubleDots++;\n }\n else if (urlPart != '') {\n res.push(urlPart);\n }\n });\n return res;\n }\n return __spread(res, [cmd]);\n }, []);\n return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\nvar Position = /** @class */ (function () {\n function Position(segmentGroup, processChildren, index) {\n this.segmentGroup = segmentGroup;\n this.processChildren = processChildren;\n this.index = index;\n }\n return Position;\n}());\nfunction findStartingPosition(nav, tree, route) {\n if (nav.isAbsolute) {\n return new Position(tree.root, true, 0);\n }\n if (route.snapshot._lastPathIndex === -1) {\n return new Position(route.snapshot._urlSegment, true, 0);\n }\n var modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n var index = route.snapshot._lastPathIndex + modifier;\n return createPositionApplyingDoubleDots(route.snapshot._urlSegment, index, nav.numberOfDoubleDots);\n}\nfunction createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {\n var g = group;\n var ci = index;\n var dd = numberOfDoubleDots;\n while (dd > ci) {\n dd -= ci;\n g = (g.parent);\n if (!g) {\n throw new Error('Invalid number of \\'../\\'');\n }\n ci = g.segments.length;\n }\n return new Position(g, false, ci - dd);\n}\nfunction getPath(command) {\n if (typeof command === 'object' && command != null && command.outlets) {\n return command.outlets[PRIMARY_OUTLET];\n }\n return \"\" + command;\n}\nfunction getOutlets(commands) {\n if (!(typeof commands[0] === 'object'))\n return _a = {}, _a[PRIMARY_OUTLET] = commands, _a;\n if (commands[0].outlets === undefined)\n return _b = {}, _b[PRIMARY_OUTLET] = commands, _b;\n return commands[0].outlets;\n var _a, _b;\n}\nfunction updateSegmentGroup(segmentGroup, startIndex, commands) {\n if (!segmentGroup) {\n segmentGroup = new UrlSegmentGroup([], {});\n }\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n }\n var m = prefixedWith(segmentGroup, startIndex, commands);\n var slicedCommands = commands.slice(m.commandIndex);\n if (m.match && m.pathIndex < segmentGroup.segments.length) {\n var g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n g.children[PRIMARY_OUTLET] =\n new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n return updateSegmentGroupChildren(g, 0, slicedCommands);\n }\n else if (m.match && slicedCommands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n }\n else if (m.match && !segmentGroup.hasChildren()) {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n else if (m.match) {\n return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n }\n else {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n}\nfunction updateSegmentGroupChildren(segmentGroup, startIndex, commands) {\n if (commands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n }\n else {\n var outlets_2 = getOutlets(commands);\n var children_1 = {};\n forEach(outlets_2, function (commands, outlet) {\n if (commands !== null) {\n children_1[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n }\n });\n forEach(segmentGroup.children, function (child, childOutlet) {\n if (outlets_2[childOutlet] === undefined) {\n children_1[childOutlet] = child;\n }\n });\n return new UrlSegmentGroup(segmentGroup.segments, children_1);\n }\n}\nfunction prefixedWith(segmentGroup, startIndex, commands) {\n var currentCommandIndex = 0;\n var currentPathIndex = startIndex;\n var noMatch = { match: false, pathIndex: 0, commandIndex: 0 };\n while (currentPathIndex < segmentGroup.segments.length) {\n if (currentCommandIndex >= commands.length)\n return noMatch;\n var path = segmentGroup.segments[currentPathIndex];\n var curr = getPath(commands[currentCommandIndex]);\n var next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n if (currentPathIndex > 0 && curr === undefined)\n break;\n if (curr && next && (typeof next === 'object') && next.outlets === undefined) {\n if (!compare(curr, next, path))\n return noMatch;\n currentCommandIndex += 2;\n }\n else {\n if (!compare(curr, {}, path))\n return noMatch;\n currentCommandIndex++;\n }\n currentPathIndex++;\n }\n return { match: true, pathIndex: currentPathIndex, commandIndex: currentCommandIndex };\n}\nfunction createNewSegmentGroup(segmentGroup, startIndex, commands) {\n var paths = segmentGroup.segments.slice(0, startIndex);\n var i = 0;\n while (i < commands.length) {\n if (typeof commands[i] === 'object' && commands[i].outlets !== undefined) {\n var children = createNewSegmentChildren(commands[i].outlets);\n return new UrlSegmentGroup(paths, children);\n }\n // if we start with an object literal, we need to reuse the path part from the segment\n if (i === 0 && isMatrixParams(commands[0])) {\n var p = segmentGroup.segments[startIndex];\n paths.push(new UrlSegment(p.path, commands[0]));\n i++;\n continue;\n }\n var curr = getPath(commands[i]);\n var next = (i < commands.length - 1) ? commands[i + 1] : null;\n if (curr && next && isMatrixParams(next)) {\n paths.push(new UrlSegment(curr, stringify(next)));\n i += 2;\n }\n else {\n paths.push(new UrlSegment(curr, {}));\n i++;\n }\n }\n return new UrlSegmentGroup(paths, {});\n}\nfunction createNewSegmentChildren(outlets) {\n var children = {};\n forEach(outlets, function (commands, outlet) {\n if (commands !== null) {\n children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n }\n });\n return children;\n}\nfunction stringify(params) {\n var res = {};\n forEach(params, function (v, k) { return res[k] = \"\" + v; });\n return res;\n}\nfunction compare(path, params, segment) {\n return path == segment.path && shallowEqual(params, segment.parameters);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar CanActivate = /** @class */ (function () {\n function CanActivate(path) {\n this.path = path;\n this.route = this.path[this.path.length - 1];\n }\n return CanActivate;\n}());\nvar CanDeactivate = /** @class */ (function () {\n function CanDeactivate(component, route) {\n this.component = component;\n this.route = route;\n }\n return CanDeactivate;\n}());\n/**\n * This class bundles the actions involved in preactivation of a route.\n */\nvar PreActivation = /** @class */ (function () {\n function PreActivation(future, curr, moduleInjector, forwardEvent) {\n this.future = future;\n this.curr = curr;\n this.moduleInjector = moduleInjector;\n this.forwardEvent = forwardEvent;\n this.canActivateChecks = [];\n this.canDeactivateChecks = [];\n }\n PreActivation.prototype.initialize = function (parentContexts) {\n var futureRoot = this.future._root;\n var currRoot = this.curr ? this.curr._root : null;\n this.setupChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n };\n PreActivation.prototype.checkGuards = function () {\n var _this = this;\n if (!this.isDeactivating() && !this.isActivating()) {\n return rxjs.of(true);\n }\n var canDeactivate$ = this.runCanDeactivateChecks();\n return canDeactivate$.pipe(operators.mergeMap(function (canDeactivate) { return canDeactivate ? _this.runCanActivateChecks() : rxjs.of(false); }));\n };\n PreActivation.prototype.resolveData = function (paramsInheritanceStrategy) {\n var _this = this;\n if (!this.isActivating())\n return rxjs.of(null);\n return rxjs.from(this.canActivateChecks)\n .pipe(operators.concatMap(function (check) { return _this.runResolve(check.route, paramsInheritanceStrategy); }), operators.reduce(function (_, __) { return _; }));\n };\n PreActivation.prototype.isDeactivating = function () { return this.canDeactivateChecks.length !== 0; };\n PreActivation.prototype.isActivating = function () { return this.canActivateChecks.length !== 0; };\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n PreActivation.prototype.setupChildRouteGuards = /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n function (futureNode, currNode, contexts, futurePath) {\n var _this = this;\n var prevChildren = nodeChildrenAsMap(currNode);\n // Process the children of the future route\n futureNode.children.forEach(function (c) {\n _this.setupRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]));\n delete prevChildren[c.value.outlet];\n });\n // Process any children left from the current route (not active for the future route)\n forEach(prevChildren, function (v, k) {\n return _this.deactivateRouteAndItsChildren(v, contexts.getContext(k));\n });\n };\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n PreActivation.prototype.setupRouteGuards = /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n */\n function (futureNode, currNode, parentContexts, futurePath) {\n var future = futureNode.value;\n var curr = currNode ? currNode.value : null;\n var context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n // reusing the node\n if (curr && future.routeConfig === curr.routeConfig) {\n var shouldRunGuardsAndResolvers = this.shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);\n if (shouldRunGuardsAndResolvers) {\n this.canActivateChecks.push(new CanActivate(futurePath));\n }\n else {\n // we need to set the data\n future.data = curr.data;\n future._resolvedData = curr._resolvedData;\n }\n // If we have a component, we need to go through an outlet.\n if (future.component) {\n this.setupChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath);\n // if we have a componentless route, we recurse but keep the same outlet map.\n }\n else {\n this.setupChildRouteGuards(futureNode, currNode, parentContexts, futurePath);\n }\n if (shouldRunGuardsAndResolvers) {\n var outlet = (context.outlet);\n this.canDeactivateChecks.push(new CanDeactivate(outlet.component, curr));\n }\n }\n else {\n if (curr) {\n this.deactivateRouteAndItsChildren(currNode, context);\n }\n this.canActivateChecks.push(new CanActivate(futurePath));\n // If we have a component, we need to go through an outlet.\n if (future.component) {\n this.setupChildRouteGuards(futureNode, null, context ? context.children : null, futurePath);\n // if we have a componentless route, we recurse but keep the same outlet map.\n }\n else {\n this.setupChildRouteGuards(futureNode, null, parentContexts, futurePath);\n }\n }\n };\n PreActivation.prototype.shouldRunGuardsAndResolvers = function (curr, future, mode) {\n switch (mode) {\n case 'always':\n return true;\n case 'paramsOrQueryParamsChange':\n return !equalParamsAndUrlSegments(curr, future) ||\n !shallowEqual(curr.queryParams, future.queryParams);\n case 'paramsChange':\n default:\n return !equalParamsAndUrlSegments(curr, future);\n }\n };\n PreActivation.prototype.deactivateRouteAndItsChildren = function (route, context) {\n var _this = this;\n var children = nodeChildrenAsMap(route);\n var r = route.value;\n forEach(children, function (node, childName) {\n if (!r.component) {\n _this.deactivateRouteAndItsChildren(node, context);\n }\n else if (context) {\n _this.deactivateRouteAndItsChildren(node, context.children.getContext(childName));\n }\n else {\n _this.deactivateRouteAndItsChildren(node, null);\n }\n });\n if (!r.component) {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n else if (context && context.outlet && context.outlet.isActivated) {\n this.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n }\n else {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n };\n PreActivation.prototype.runCanDeactivateChecks = function () {\n var _this = this;\n return rxjs.from(this.canDeactivateChecks)\n .pipe(operators.mergeMap(function (check) { return _this.runCanDeactivate(check.component, check.route); }), operators.every(function (result) { return result === true; }));\n };\n PreActivation.prototype.runCanActivateChecks = function () {\n var _this = this;\n return rxjs.from(this.canActivateChecks)\n .pipe(operators.concatMap(function (check) {\n return andObservables(rxjs.from([\n _this.fireChildActivationStart(check.route.parent),\n _this.fireActivationStart(check.route), _this.runCanActivateChild(check.path),\n _this.runCanActivate(check.route)\n ]));\n }), operators.every(function (result) { return result === true; }));\n // this.fireChildActivationStart(check.path),\n };\n /**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n /**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n PreActivation.prototype.fireActivationStart = /**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n function (snapshot) {\n if (snapshot !== null && this.forwardEvent) {\n this.forwardEvent(new ActivationStart(snapshot));\n }\n return rxjs.of(true);\n };\n /**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n /**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n PreActivation.prototype.fireChildActivationStart = /**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\n function (snapshot) {\n if (snapshot !== null && this.forwardEvent) {\n this.forwardEvent(new ChildActivationStart(snapshot));\n }\n return rxjs.of(true);\n };\n PreActivation.prototype.runCanActivate = function (future) {\n var _this = this;\n var canActivate = future.routeConfig ? future.routeConfig.canActivate : null;\n if (!canActivate || canActivate.length === 0)\n return rxjs.of(true);\n var obs = rxjs.from(canActivate).pipe(operators.map(function (c) {\n var guard = _this.getToken(c, future);\n var observable;\n if (guard.canActivate) {\n observable = wrapIntoObservable(guard.canActivate(future, _this.future));\n }\n else {\n observable = wrapIntoObservable(guard(future, _this.future));\n }\n return observable.pipe(operators.first());\n }));\n return andObservables(obs);\n };\n PreActivation.prototype.runCanActivateChild = function (path) {\n var _this = this;\n var future = path[path.length - 1];\n var canActivateChildGuards = path.slice(0, path.length - 1)\n .reverse()\n .map(function (p) { return _this.extractCanActivateChild(p); })\n .filter(function (_) { return _ !== null; });\n return andObservables(rxjs.from(canActivateChildGuards).pipe(operators.map(function (d) {\n var obs = rxjs.from(d.guards).pipe(operators.map(function (c) {\n var guard = _this.getToken(c, d.node);\n var observable;\n if (guard.canActivateChild) {\n observable = wrapIntoObservable(guard.canActivateChild(future, _this.future));\n }\n else {\n observable = wrapIntoObservable(guard(future, _this.future));\n }\n return observable.pipe(operators.first());\n }));\n return andObservables(obs);\n })));\n };\n PreActivation.prototype.extractCanActivateChild = function (p) {\n var canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n if (!canActivateChild || canActivateChild.length === 0)\n return null;\n return { node: p, guards: canActivateChild };\n };\n PreActivation.prototype.runCanDeactivate = function (component, curr) {\n var _this = this;\n var canDeactivate = curr && curr.routeConfig ? curr.routeConfig.canDeactivate : null;\n if (!canDeactivate || canDeactivate.length === 0)\n return rxjs.of(true);\n var canDeactivate$ = rxjs.from(canDeactivate).pipe(operators.mergeMap(function (c) {\n var guard = _this.getToken(c, curr);\n var observable;\n if (guard.canDeactivate) {\n observable =\n wrapIntoObservable(guard.canDeactivate(component, curr, _this.curr, _this.future));\n }\n else {\n observable = wrapIntoObservable(guard(component, curr, _this.curr, _this.future));\n }\n return observable.pipe(operators.first());\n }));\n return canDeactivate$.pipe(operators.every(function (result) { return result === true; }));\n };\n PreActivation.prototype.runResolve = function (future, paramsInheritanceStrategy) {\n var resolve = future._resolve;\n return this.resolveNode(resolve, future).pipe(operators.map(function (resolvedData) {\n future._resolvedData = resolvedData;\n future.data = __assign({}, future.data, inheritedParamsDataResolve(future, paramsInheritanceStrategy).resolve);\n return null;\n }));\n };\n PreActivation.prototype.resolveNode = function (resolve, future) {\n var _this = this;\n var keys = Object.keys(resolve);\n if (keys.length === 0) {\n return rxjs.of({});\n }\n if (keys.length === 1) {\n var key_1 = keys[0];\n return this.getResolver(resolve[key_1], future).pipe(operators.map(function (value) {\n return _a = {}, _a[key_1] = value, _a;\n var _a;\n }));\n }\n var data = {};\n var runningResolvers$ = rxjs.from(keys).pipe(operators.mergeMap(function (key) {\n return _this.getResolver(resolve[key], future).pipe(operators.map(function (value) {\n data[key] = value;\n return value;\n }));\n }));\n return runningResolvers$.pipe(operators.last(), operators.map(function () { return data; }));\n };\n PreActivation.prototype.getResolver = function (injectionToken, future) {\n var resolver = this.getToken(injectionToken, future);\n return resolver.resolve ? wrapIntoObservable(resolver.resolve(future, this.future)) :\n wrapIntoObservable(resolver(future, this.future));\n };\n PreActivation.prototype.getToken = function (token, snapshot) {\n var config = closestLoadedConfig(snapshot);\n var injector = config ? config.module.injector : this.moduleInjector;\n return injector.get(token);\n };\n return PreActivation;\n}());\nfunction closestLoadedConfig(snapshot) {\n if (!snapshot)\n return null;\n for (var s = snapshot.parent; s; s = s.parent) {\n var route = s.routeConfig;\n if (route && route._loadedConfig)\n return route._loadedConfig;\n }\n return null;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar NoMatch$1 = /** @class */ (function () {\n function NoMatch() {\n }\n return NoMatch;\n}());\nfunction recognize(rootComponentType, config, urlTree, url, paramsInheritanceStrategy) {\n if (paramsInheritanceStrategy === void 0) { paramsInheritanceStrategy = 'emptyOnly'; }\n return new Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy)\n .recognize();\n}\nvar Recognizer = /** @class */ (function () {\n function Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy) {\n this.rootComponentType = rootComponentType;\n this.config = config;\n this.urlTree = urlTree;\n this.url = url;\n this.paramsInheritanceStrategy = paramsInheritanceStrategy;\n }\n Recognizer.prototype.recognize = function () {\n try {\n var rootSegmentGroup = split$1(this.urlTree.root, [], [], this.config).segmentGroup;\n var children = this.processSegmentGroup(this.config, rootSegmentGroup, PRIMARY_OUTLET);\n var root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(this.urlTree.queryParams), (this.urlTree.fragment), {}, PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});\n var rootNode = new TreeNode(root, children);\n var routeState = new RouterStateSnapshot(this.url, rootNode);\n this.inheritParamsAndData(routeState._root);\n return rxjs.of(routeState);\n }\n catch (e) {\n return new rxjs.Observable(function (obs) { return obs.error(e); });\n }\n };\n Recognizer.prototype.inheritParamsAndData = function (routeNode) {\n var _this = this;\n var route = routeNode.value;\n var i = inheritedParamsDataResolve(route, this.paramsInheritanceStrategy);\n route.params = Object.freeze(i.params);\n route.data = Object.freeze(i.data);\n routeNode.children.forEach(function (n) { return _this.inheritParamsAndData(n); });\n };\n Recognizer.prototype.processSegmentGroup = function (config, segmentGroup, outlet) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(config, segmentGroup);\n }\n return this.processSegment(config, segmentGroup, segmentGroup.segments, outlet);\n };\n Recognizer.prototype.processChildren = function (config, segmentGroup) {\n var _this = this;\n var children = mapChildrenIntoArray(segmentGroup, function (child, childOutlet) { return _this.processSegmentGroup(config, child, childOutlet); });\n checkOutletNameUniqueness(children);\n sortActivatedRouteSnapshots(children);\n return children;\n };\n Recognizer.prototype.processSegment = function (config, segmentGroup, segments, outlet) {\n try {\n for (var config_1 = __values(config), config_1_1 = config_1.next(); !config_1_1.done; config_1_1 = config_1.next()) {\n var r = config_1_1.value;\n try {\n return this.processSegmentAgainstRoute(r, segmentGroup, segments, outlet);\n }\n catch (e) {\n if (!(e instanceof NoMatch$1))\n throw e;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (config_1_1 && !config_1_1.done && (_a = config_1.return)) _a.call(config_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return [];\n }\n throw new NoMatch$1();\n var e_1, _a;\n };\n Recognizer.prototype.noLeftoversInUrl = function (segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n };\n Recognizer.prototype.processSegmentAgainstRoute = function (route, rawSegment, segments, outlet) {\n if (route.redirectTo)\n throw new NoMatch$1();\n if ((route.outlet || PRIMARY_OUTLET) !== outlet)\n throw new NoMatch$1();\n var snapshot;\n var consumedSegments = [];\n var rawSlicedSegments = [];\n if (route.path === '**') {\n var params = segments.length > 0 ? last$1(segments).parameters : {};\n snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze(this.urlTree.queryParams), (this.urlTree.fragment), getData(route), outlet, (route.component), route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + segments.length, getResolve(route));\n }\n else {\n var result = match$1(rawSegment, route, segments);\n consumedSegments = result.consumedSegments;\n rawSlicedSegments = segments.slice(result.lastChild);\n snapshot = new ActivatedRouteSnapshot(consumedSegments, result.parameters, Object.freeze(this.urlTree.queryParams), (this.urlTree.fragment), getData(route), outlet, (route.component), route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + consumedSegments.length, getResolve(route));\n }\n var childConfig = getChildConfig(route);\n var _a = split$1(rawSegment, consumedSegments, rawSlicedSegments, childConfig), segmentGroup = _a.segmentGroup, slicedSegments = _a.slicedSegments;\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n var children_1 = this.processChildren(childConfig, segmentGroup);\n return [new TreeNode(snapshot, children_1)];\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return [new TreeNode(snapshot, [])];\n }\n var children = this.processSegment(childConfig, segmentGroup, slicedSegments, PRIMARY_OUTLET);\n return [new TreeNode(snapshot, children)];\n };\n return Recognizer;\n}());\nfunction sortActivatedRouteSnapshots(nodes) {\n nodes.sort(function (a, b) {\n if (a.value.outlet === PRIMARY_OUTLET)\n return -1;\n if (b.value.outlet === PRIMARY_OUTLET)\n return 1;\n return a.value.outlet.localeCompare(b.value.outlet);\n });\n}\nfunction getChildConfig(route) {\n if (route.children) {\n return route.children;\n }\n if (route.loadChildren) {\n return route._loadedConfig.routes;\n }\n return [];\n}\nfunction match$1(segmentGroup, route, segments) {\n if (route.path === '') {\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n throw new NoMatch$1();\n }\n return { consumedSegments: [], lastChild: 0, parameters: {} };\n }\n var matcher = route.matcher || defaultUrlMatcher;\n var res = matcher(segments, segmentGroup, route);\n if (!res)\n throw new NoMatch$1();\n var posParams = {};\n forEach((res.posParams), function (v, k) { posParams[k] = v.path; });\n var parameters = res.consumed.length > 0 ? __assign({}, posParams, res.consumed[res.consumed.length - 1].parameters) :\n posParams;\n return { consumedSegments: res.consumed, lastChild: res.consumed.length, parameters: parameters };\n}\nfunction checkOutletNameUniqueness(nodes) {\n var names = {};\n nodes.forEach(function (n) {\n var routeWithSameOutletName = names[n.value.outlet];\n if (routeWithSameOutletName) {\n var p = routeWithSameOutletName.url.map(function (s) { return s.toString(); }).join('/');\n var c = n.value.url.map(function (s) { return s.toString(); }).join('/');\n throw new Error(\"Two segments cannot have the same outlet name: '\" + p + \"' and '\" + c + \"'.\");\n }\n names[n.value.outlet] = n.value;\n });\n}\nfunction getSourceSegmentGroup(segmentGroup) {\n var s = segmentGroup;\n while (s._sourceSegment) {\n s = s._sourceSegment;\n }\n return s;\n}\nfunction getPathIndexShift(segmentGroup) {\n var s = segmentGroup;\n var res = (s._segmentIndexShift ? s._segmentIndexShift : 0);\n while (s._sourceSegment) {\n s = s._sourceSegment;\n res += (s._segmentIndexShift ? s._segmentIndexShift : 0);\n }\n return res - 1;\n}\nfunction split$1(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n var s_1 = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(segmentGroup, consumedSegments, config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n s_1._sourceSegment = segmentGroup;\n s_1._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s_1, slicedSegments: [] };\n }\n if (slicedSegments.length === 0 &&\n containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n var s_2 = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n s_2._sourceSegment = segmentGroup;\n s_2._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s_2, slicedSegments: slicedSegments };\n }\n var s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s, slicedSegments: slicedSegments };\n}\nfunction addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n var res = {};\n try {\n for (var routes_1 = __values(routes), routes_1_1 = routes_1.next(); !routes_1_1.done; routes_1_1 = routes_1.next()) {\n var r = routes_1_1.value;\n if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet$1(r)]) {\n var s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = segmentGroup.segments.length;\n res[getOutlet$1(r)] = s;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (routes_1_1 && !routes_1_1.done && (_a = routes_1.return)) _a.call(routes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return __assign({}, children, res);\n var e_2, _a;\n}\nfunction createChildrenForEmptyPaths(segmentGroup, consumedSegments, routes, primarySegment) {\n var res = {};\n res[PRIMARY_OUTLET] = primarySegment;\n primarySegment._sourceSegment = segmentGroup;\n primarySegment._segmentIndexShift = consumedSegments.length;\n try {\n for (var routes_2 = __values(routes), routes_2_1 = routes_2.next(); !routes_2_1.done; routes_2_1 = routes_2.next()) {\n var r = routes_2_1.value;\n if (r.path === '' && getOutlet$1(r) !== PRIMARY_OUTLET) {\n var s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n res[getOutlet$1(r)] = s;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (routes_2_1 && !routes_2_1.done && (_a = routes_2.return)) _a.call(routes_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return res;\n var e_3, _a;\n}\nfunction containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {\n return routes.some(function (r) { return emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet$1(r) !== PRIMARY_OUTLET; });\n}\nfunction containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {\n return routes.some(function (r) { return emptyPathMatch(segmentGroup, slicedSegments, r); });\n}\nfunction emptyPathMatch(segmentGroup, slicedSegments, r) {\n if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '' && r.redirectTo === undefined;\n}\nfunction getOutlet$1(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\nfunction getData(route) {\n return route.data || {};\n}\nfunction getResolve(route) {\n return route.resolve || {};\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Provides a way to customize when activated routes get reused.\n *\n * @experimental\n */\nvar RouteReuseStrategy = /** @class */ (function () {\n function RouteReuseStrategy() {\n }\n return RouteReuseStrategy;\n}());\n/**\n * Does not detach any subtrees. Reuses routes as long as their route config is the same.\n */\nvar DefaultRouteReuseStrategy = /** @class */ (function () {\n function DefaultRouteReuseStrategy() {\n }\n DefaultRouteReuseStrategy.prototype.shouldDetach = function (route) { return false; };\n DefaultRouteReuseStrategy.prototype.store = function (route, detachedTree) { };\n DefaultRouteReuseStrategy.prototype.shouldAttach = function (route) { return false; };\n DefaultRouteReuseStrategy.prototype.retrieve = function (route) { return null; };\n DefaultRouteReuseStrategy.prototype.shouldReuseRoute = function (future, curr) {\n return future.routeConfig === curr.routeConfig;\n };\n return DefaultRouteReuseStrategy;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @docsNotRequired\n * @experimental\n */\nvar ROUTES = new core.InjectionToken('ROUTES');\nvar RouterConfigLoader = /** @class */ (function () {\n function RouterConfigLoader(loader, compiler, onLoadStartListener, onLoadEndListener) {\n this.loader = loader;\n this.compiler = compiler;\n this.onLoadStartListener = onLoadStartListener;\n this.onLoadEndListener = onLoadEndListener;\n }\n RouterConfigLoader.prototype.load = function (parentInjector, route) {\n var _this = this;\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n var moduleFactory$ = this.loadModuleFactory((route.loadChildren));\n return moduleFactory$.pipe(operators.map(function (factory) {\n if (_this.onLoadEndListener) {\n _this.onLoadEndListener(route);\n }\n var module = factory.create(parentInjector);\n return new LoadedRouterConfig(flatten(module.injector.get(ROUTES)).map(copyConfig), module);\n }));\n };\n RouterConfigLoader.prototype.loadModuleFactory = function (loadChildren) {\n var _this = this;\n if (typeof loadChildren === 'string') {\n return rxjs.from(this.loader.load(loadChildren));\n }\n else {\n return wrapIntoObservable(loadChildren()).pipe(operators.mergeMap(function (t) {\n if (t instanceof core.NgModuleFactory) {\n return rxjs.of(t);\n }\n else {\n return rxjs.from(_this.compiler.compileModuleAsync(t));\n }\n }));\n }\n };\n return RouterConfigLoader;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Provides a way to migrate AngularJS applications to Angular.\n *\n * @experimental\n */\nvar UrlHandlingStrategy = /** @class */ (function () {\n function UrlHandlingStrategy() {\n }\n return UrlHandlingStrategy;\n}());\n/**\n * @experimental\n */\nvar DefaultUrlHandlingStrategy = /** @class */ (function () {\n function DefaultUrlHandlingStrategy() {\n }\n DefaultUrlHandlingStrategy.prototype.shouldProcessUrl = function (url) { return true; };\n DefaultUrlHandlingStrategy.prototype.extract = function (url) { return url; };\n DefaultUrlHandlingStrategy.prototype.merge = function (newUrlPart, wholeUrl) { return newUrlPart; };\n return DefaultUrlHandlingStrategy;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction defaultErrorHandler(error) {\n throw error;\n}\n/**\n * @internal\n */\nfunction defaultRouterHook(snapshot) {\n return rxjs.of(null);\n}\n/**\n * @description\n *\n * Provides the navigation and url manipulation capabilities.\n *\n * See `Routes` for more details and examples.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar Router = /** @class */ (function () {\n /**\n * Creates the router service.\n */\n // TODO: vsavkin make internal after the final is out.\n function Router(rootComponentType, urlSerializer, rootContexts, location, injector, loader, compiler, config) {\n var _this = this;\n this.rootComponentType = rootComponentType;\n this.urlSerializer = urlSerializer;\n this.rootContexts = rootContexts;\n this.location = location;\n this.config = config;\n this.navigations = new rxjs.BehaviorSubject((null));\n this.navigationId = 0;\n this.events = new rxjs.Subject();\n /**\n * Error handler that is invoked when a navigation errors.\n *\n * See `ErrorHandler` for more information.\n */\n this.errorHandler = defaultErrorHandler;\n /**\n * Indicates if at least one navigation happened.\n */\n this.navigated = false;\n this.lastSuccessfulId = -1;\n /**\n * Used by RouterModule. This allows us to\n * pause the navigation either before preactivation or after it.\n * @internal\n */\n this.hooks = {\n beforePreactivation: defaultRouterHook,\n afterPreactivation: defaultRouterHook\n };\n /**\n * Extracts and merges URLs. Used for AngularJS to Angular migrations.\n */\n this.urlHandlingStrategy = new DefaultUrlHandlingStrategy();\n this.routeReuseStrategy = new DefaultRouteReuseStrategy();\n /**\n * Define what the router should do if it receives a navigation request to the current URL.\n * By default, the router will ignore this navigation. However, this prevents features such\n * as a \"refresh\" button. Use this option to configure the behavior when navigating to the\n * current URL. Default is 'ignore'.\n */\n this.onSameUrlNavigation = 'ignore';\n /**\n * Defines how the router merges params, data and resolved data from parent to child\n * routes. Available options are:\n *\n * - `'emptyOnly'`, the default, only inherits parent params for path-less or component-less\n * routes.\n * - `'always'`, enables unconditional inheritance of parent params.\n */\n this.paramsInheritanceStrategy = 'emptyOnly';\n var onLoadStart = function (r) { return _this.triggerEvent(new RouteConfigLoadStart(r)); };\n var onLoadEnd = function (r) { return _this.triggerEvent(new RouteConfigLoadEnd(r)); };\n this.ngModule = injector.get(core.NgModuleRef);\n this.resetConfig(config);\n this.currentUrlTree = createEmptyUrlTree();\n this.rawUrlTree = this.currentUrlTree;\n this.configLoader = new RouterConfigLoader(loader, compiler, onLoadStart, onLoadEnd);\n this.routerState = createEmptyState(this.currentUrlTree, this.rootComponentType);\n this.processNavigations();\n }\n /**\n * @internal\n * TODO: this should be removed once the constructor of the router made internal\n */\n /**\n * @internal\n * TODO: this should be removed once the constructor of the router made internal\n */\n Router.prototype.resetRootComponentType = /**\n * @internal\n * TODO: this should be removed once the constructor of the router made internal\n */\n function (rootComponentType) {\n this.rootComponentType = rootComponentType;\n // TODO: vsavkin router 4.0 should make the root component set to null\n // this will simplify the lifecycle of the router.\n this.routerState.root.component = this.rootComponentType;\n };\n /**\n * Sets up the location change listener and performs the initial navigation.\n */\n /**\n * Sets up the location change listener and performs the initial navigation.\n */\n Router.prototype.initialNavigation = /**\n * Sets up the location change listener and performs the initial navigation.\n */\n function () {\n this.setUpLocationChangeListener();\n if (this.navigationId === 0) {\n this.navigateByUrl(this.location.path(true), { replaceUrl: true });\n }\n };\n /**\n * Sets up the location change listener.\n */\n /**\n * Sets up the location change listener.\n */\n Router.prototype.setUpLocationChangeListener = /**\n * Sets up the location change listener.\n */\n function () {\n var _this = this;\n // Don't need to use Zone.wrap any more, because zone.js\n // already patch onPopState, so location change callback will\n // run into ngZone\n if (!this.locationSubscription) {\n this.locationSubscription = this.location.subscribe(function (change) {\n var rawUrlTree = _this.urlSerializer.parse(change['url']);\n var source = change['type'] === 'popstate' ? 'popstate' : 'hashchange';\n var state = change.state && change.state.navigationId ?\n { navigationId: change.state.navigationId } :\n null;\n setTimeout(function () { _this.scheduleNavigation(rawUrlTree, source, state, { replaceUrl: true }); }, 0);\n });\n }\n };\n Object.defineProperty(Router.prototype, \"url\", {\n /** The current url */\n get: /** The current url */\n function () { return this.serializeUrl(this.currentUrlTree); },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n /** @internal */\n Router.prototype.triggerEvent = /** @internal */\n function (e) { this.events.next(e); };\n /**\n * Resets the configuration used for navigation and generating links.\n *\n * ### Usage\n *\n * ```\n * router.resetConfig([\n * { path: 'team/:id', component: TeamCmp, children: [\n * { path: 'simple', component: SimpleCmp },\n * { path: 'user/:name', component: UserCmp }\n * ]}\n * ]);\n * ```\n */\n /**\n * Resets the configuration used for navigation and generating links.\n *\n * ### Usage\n *\n * ```\n * router.resetConfig([\n * { path: 'team/:id', component: TeamCmp, children: [\n * { path: 'simple', component: SimpleCmp },\n * { path: 'user/:name', component: UserCmp }\n * ]}\n * ]);\n * ```\n */\n Router.prototype.resetConfig = /**\n * Resets the configuration used for navigation and generating links.\n *\n * ### Usage\n *\n * ```\n * router.resetConfig([\n * { path: 'team/:id', component: TeamCmp, children: [\n * { path: 'simple', component: SimpleCmp },\n * { path: 'user/:name', component: UserCmp }\n * ]}\n * ]);\n * ```\n */\n function (config) {\n validateConfig(config);\n this.config = config.map(copyConfig);\n this.navigated = false;\n this.lastSuccessfulId = -1;\n };\n /** @docsNotRequired */\n /** @docsNotRequired */\n Router.prototype.ngOnDestroy = /** @docsNotRequired */\n function () { this.dispose(); };\n /** Disposes of the router */\n /** Disposes of the router */\n Router.prototype.dispose = /** Disposes of the router */\n function () {\n if (this.locationSubscription) {\n this.locationSubscription.unsubscribe();\n this.locationSubscription = (null);\n }\n };\n /**\n * Applies an array of commands to the current url tree and creates a new url tree.\n *\n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n *\n * ### Usage\n *\n * ```\n * // create /team/33/user/11\n * router.createUrlTree(['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * router.createUrlTree(['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it, you\n * // can do the following:\n *\n * router.createUrlTree([{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n *\n * // remove the right secondary node\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n *\n * // navigate to /team/33/user/11/details\n * router.createUrlTree(['details'], {relativeTo: route});\n *\n * // navigate to /team/33/user/22\n * router.createUrlTree(['../22'], {relativeTo: route});\n *\n * // navigate to /team/44/user/22\n * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n * ```\n */\n /**\n * Applies an array of commands to the current url tree and creates a new url tree.\n *\n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n *\n * ### Usage\n *\n * ```\n * // create /team/33/user/11\n * router.createUrlTree(['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * router.createUrlTree(['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it, you\n * // can do the following:\n *\n * router.createUrlTree([{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n *\n * // remove the right secondary node\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n *\n * // navigate to /team/33/user/11/details\n * router.createUrlTree(['details'], {relativeTo: route});\n *\n * // navigate to /team/33/user/22\n * router.createUrlTree(['../22'], {relativeTo: route});\n *\n * // navigate to /team/44/user/22\n * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n * ```\n */\n Router.prototype.createUrlTree = /**\n * Applies an array of commands to the current url tree and creates a new url tree.\n *\n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n *\n * ### Usage\n *\n * ```\n * // create /team/33/user/11\n * router.createUrlTree(['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * router.createUrlTree(['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it, you\n * // can do the following:\n *\n * router.createUrlTree([{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n *\n * // remove the right secondary node\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n *\n * // navigate to /team/33/user/11/details\n * router.createUrlTree(['details'], {relativeTo: route});\n *\n * // navigate to /team/33/user/22\n * router.createUrlTree(['../22'], {relativeTo: route});\n *\n * // navigate to /team/44/user/22\n * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n * ```\n */\n function (commands, navigationExtras) {\n if (navigationExtras === void 0) { navigationExtras = {}; }\n var relativeTo = navigationExtras.relativeTo, queryParams = navigationExtras.queryParams, fragment = navigationExtras.fragment, preserveQueryParams = navigationExtras.preserveQueryParams, queryParamsHandling = navigationExtras.queryParamsHandling, preserveFragment = navigationExtras.preserveFragment;\n if (core.isDevMode() && preserveQueryParams && console && console.warn) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n var a = relativeTo || this.routerState.root;\n var f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n var q = null;\n if (queryParamsHandling) {\n switch (queryParamsHandling) {\n case 'merge':\n q = __assign({}, this.currentUrlTree.queryParams, queryParams);\n break;\n case 'preserve':\n q = this.currentUrlTree.queryParams;\n break;\n default:\n q = queryParams || null;\n }\n }\n else {\n q = preserveQueryParams ? this.currentUrlTree.queryParams : queryParams || null;\n }\n if (q !== null) {\n q = this.removeEmptyProps(q);\n }\n return createUrlTree(a, this.currentUrlTree, commands, (q), (f));\n };\n /**\n * Navigate based on the provided url. This navigation is always absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigateByUrl(\"/team/33/user/11\");\n *\n * // Navigate without updating the URL\n * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n * ```\n *\n * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n */\n /**\n * Navigate based on the provided url. This navigation is always absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigateByUrl(\"/team/33/user/11\");\n *\n * // Navigate without updating the URL\n * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n * ```\n *\n * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n */\n Router.prototype.navigateByUrl = /**\n * Navigate based on the provided url. This navigation is always absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigateByUrl(\"/team/33/user/11\");\n *\n * // Navigate without updating the URL\n * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n * ```\n *\n * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n */\n function (url, extras) {\n if (extras === void 0) { extras = { skipLocationChange: false }; }\n var urlTree = url instanceof UrlTree ? url : this.parseUrl(url);\n var mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n return this.scheduleNavigation(mergedTree, 'imperative', null, extras);\n };\n /**\n * Navigate based on the provided array of commands and a starting point.\n * If no starting route is provided, the navigation is absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n *\n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n *\n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n */\n /**\n * Navigate based on the provided array of commands and a starting point.\n * If no starting route is provided, the navigation is absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n *\n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n *\n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n */\n Router.prototype.navigate = /**\n * Navigate based on the provided array of commands and a starting point.\n * If no starting route is provided, the navigation is absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n *\n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n *\n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n */\n function (commands, extras) {\n if (extras === void 0) { extras = { skipLocationChange: false }; }\n validateCommands(commands);\n return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n };\n /** Serializes a `UrlTree` into a string */\n /** Serializes a `UrlTree` into a string */\n Router.prototype.serializeUrl = /** Serializes a `UrlTree` into a string */\n function (url) { return this.urlSerializer.serialize(url); };\n /** Parses a string into a `UrlTree` */\n /** Parses a string into a `UrlTree` */\n Router.prototype.parseUrl = /** Parses a string into a `UrlTree` */\n function (url) { return this.urlSerializer.parse(url); };\n /** Returns whether the url is activated */\n /** Returns whether the url is activated */\n Router.prototype.isActive = /** Returns whether the url is activated */\n function (url, exact) {\n if (url instanceof UrlTree) {\n return containsTree(this.currentUrlTree, url, exact);\n }\n var urlTree = this.urlSerializer.parse(url);\n return containsTree(this.currentUrlTree, urlTree, exact);\n };\n Router.prototype.removeEmptyProps = function (params) {\n return Object.keys(params).reduce(function (result, key) {\n var value = params[key];\n if (value !== null && value !== undefined) {\n result[key] = value;\n }\n return result;\n }, {});\n };\n Router.prototype.processNavigations = function () {\n var _this = this;\n this.navigations\n .pipe(operators.concatMap(function (nav) {\n if (nav) {\n _this.executeScheduledNavigation(nav);\n // a failed navigation should not stop the router from processing\n // further navigations => the catch\n return nav.promise.catch(function () { });\n }\n else {\n return rxjs.of(null);\n }\n }))\n .subscribe(function () { });\n };\n Router.prototype.scheduleNavigation = function (rawUrl, source, state, extras) {\n var lastNavigation = this.navigations.value;\n // If the user triggers a navigation imperatively (e.g., by using navigateByUrl),\n // and that navigation results in 'replaceState' that leads to the same URL,\n // we should skip those.\n if (lastNavigation && source !== 'imperative' && lastNavigation.source === 'imperative' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n // Because of a bug in IE and Edge, the location class fires two events (popstate and\n // hashchange) every single time. The second one should be ignored. Otherwise, the URL will\n // flicker. Handles the case when a popstate was emitted first.\n if (lastNavigation && source == 'hashchange' && lastNavigation.source === 'popstate' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n // Because of a bug in IE and Edge, the location class fires two events (popstate and\n // hashchange) every single time. The second one should be ignored. Otherwise, the URL will\n // flicker. Handles the case when a hashchange was emitted first.\n if (lastNavigation && source == 'popstate' && lastNavigation.source === 'hashchange' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n var resolve = null;\n var reject = null;\n var promise = new Promise(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n var id = ++this.navigationId;\n this.navigations.next({ id: id, source: source, state: state, rawUrl: rawUrl, extras: extras, resolve: resolve, reject: reject, promise: promise });\n // Make sure that the error is propagated even though `processNavigations` catch\n // handler does not rethrow\n return promise.catch(function (e) { return Promise.reject(e); });\n };\n Router.prototype.executeScheduledNavigation = function (_a) {\n var _this = this;\n var id = _a.id, rawUrl = _a.rawUrl, extras = _a.extras, resolve = _a.resolve, reject = _a.reject, source = _a.source, state = _a.state;\n var url = this.urlHandlingStrategy.extract(rawUrl);\n var urlTransition = !this.navigated || url.toString() !== this.currentUrlTree.toString();\n if ((this.onSameUrlNavigation === 'reload' ? true : urlTransition) &&\n this.urlHandlingStrategy.shouldProcessUrl(rawUrl)) {\n this.events\n .next(new NavigationStart(id, this.serializeUrl(url), source, state));\n Promise.resolve()\n .then(function (_) {\n return _this.runNavigate(url, rawUrl, !!extras.skipLocationChange, !!extras.replaceUrl, id, null);\n })\n .then(resolve, reject);\n // we cannot process the current URL, but we could process the previous one =>\n // we need to do some cleanup\n }\n else if (urlTransition && this.rawUrlTree &&\n this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)) {\n this.events\n .next(new NavigationStart(id, this.serializeUrl(url), source, state));\n Promise.resolve()\n .then(function (_) {\n return _this.runNavigate(url, rawUrl, false, false, id, createEmptyState(url, _this.rootComponentType).snapshot);\n })\n .then(resolve, reject);\n }\n else {\n this.rawUrlTree = rawUrl;\n resolve(null);\n }\n };\n Router.prototype.runNavigate = function (url, rawUrl, skipLocationChange, replaceUrl, id, precreatedState) {\n var _this = this;\n if (id !== this.navigationId) {\n this.events\n .next(new NavigationCancel(id, this.serializeUrl(url), \"Navigation ID \" + id + \" is not equal to the current navigation id \" + this.navigationId));\n return Promise.resolve(false);\n }\n return new Promise(function (resolvePromise, rejectPromise) {\n // create an observable of the url and route state snapshot\n // this operation do not result in any side effects\n var urlAndSnapshot$;\n if (!precreatedState) {\n var moduleInjector = _this.ngModule.injector;\n var redirectsApplied$ = applyRedirects(moduleInjector, _this.configLoader, _this.urlSerializer, url, _this.config);\n urlAndSnapshot$ = redirectsApplied$.pipe(operators.mergeMap(function (appliedUrl) {\n return recognize(_this.rootComponentType, _this.config, appliedUrl, _this.serializeUrl(appliedUrl), _this.paramsInheritanceStrategy)\n .pipe(operators.map(function (snapshot) {\n _this.events\n .next(new RoutesRecognized(id, _this.serializeUrl(url), _this.serializeUrl(appliedUrl), snapshot));\n return { appliedUrl: appliedUrl, snapshot: snapshot };\n }));\n }));\n }\n else {\n urlAndSnapshot$ = rxjs.of({ appliedUrl: url, snapshot: precreatedState });\n }\n var beforePreactivationDone$ = urlAndSnapshot$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean')\n return rxjs.of(p);\n return _this.hooks.beforePreactivation(p.snapshot).pipe(operators.map(function () { return p; }));\n }));\n // run preactivation: guards and data resolvers\n var preActivation;\n var preactivationSetup$ = beforePreactivationDone$.pipe(operators.map(function (p) {\n if (typeof p === 'boolean')\n return p;\n var appliedUrl = p.appliedUrl, snapshot = p.snapshot;\n var moduleInjector = _this.ngModule.injector;\n preActivation = new PreActivation(snapshot, _this.routerState.snapshot, moduleInjector, function (evt) { return _this.triggerEvent(evt); });\n preActivation.initialize(_this.rootContexts);\n return { appliedUrl: appliedUrl, snapshot: snapshot };\n }));\n var preactivationCheckGuards$ = preactivationSetup$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return rxjs.of(false);\n var appliedUrl = p.appliedUrl, snapshot = p.snapshot;\n _this.triggerEvent(new GuardsCheckStart(id, _this.serializeUrl(url), _this.serializeUrl(appliedUrl), snapshot));\n return preActivation.checkGuards().pipe(operators.map(function (shouldActivate) {\n _this.triggerEvent(new GuardsCheckEnd(id, _this.serializeUrl(url), _this.serializeUrl(appliedUrl), snapshot, shouldActivate));\n return { appliedUrl: appliedUrl, snapshot: snapshot, shouldActivate: shouldActivate };\n }));\n }));\n var preactivationResolveData$ = preactivationCheckGuards$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return rxjs.of(false);\n if (p.shouldActivate && preActivation.isActivating()) {\n _this.triggerEvent(new ResolveStart(id, _this.serializeUrl(url), _this.serializeUrl(p.appliedUrl), p.snapshot));\n return preActivation.resolveData(_this.paramsInheritanceStrategy).pipe(operators.map(function () {\n _this.triggerEvent(new ResolveEnd(id, _this.serializeUrl(url), _this.serializeUrl(p.appliedUrl), p.snapshot));\n return p;\n }));\n }\n else {\n return rxjs.of(p);\n }\n }));\n var preactivationDone$ = preactivationResolveData$.pipe(operators.mergeMap(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return rxjs.of(false);\n return _this.hooks.afterPreactivation(p.snapshot).pipe(operators.map(function () { return p; }));\n }));\n // create router state\n // this operation has side effects => route state is being affected\n var routerState$ = preactivationDone$.pipe(operators.map(function (p) {\n if (typeof p === 'boolean' || _this.navigationId !== id)\n return false;\n var appliedUrl = p.appliedUrl, snapshot = p.snapshot, shouldActivate = p.shouldActivate;\n if (shouldActivate) {\n var state = createRouterState(_this.routeReuseStrategy, snapshot, _this.routerState);\n return { appliedUrl: appliedUrl, state: state, shouldActivate: shouldActivate };\n }\n else {\n return { appliedUrl: appliedUrl, state: null, shouldActivate: shouldActivate };\n }\n }));\n _this.activateRoutes(routerState$, _this.routerState, _this.currentUrlTree, id, url, rawUrl, skipLocationChange, replaceUrl, resolvePromise, rejectPromise);\n });\n };\n /**\n * Performs the logic of activating routes. This is a synchronous process by default. While this\n * is a private method, it could be overridden to make activation asynchronous.\n */\n /**\n * Performs the logic of activating routes. This is a synchronous process by default. While this\n * is a private method, it could be overridden to make activation asynchronous.\n */\n Router.prototype.activateRoutes = /**\n * Performs the logic of activating routes. This is a synchronous process by default. While this\n * is a private method, it could be overridden to make activation asynchronous.\n */\n function (state, storedState, storedUrl, id, url, rawUrl, skipLocationChange, replaceUrl, resolvePromise, rejectPromise) {\n var _this = this;\n // applied the new router state\n // this operation has side effects\n var navigationIsSuccessful;\n state\n .forEach(function (p) {\n if (typeof p === 'boolean' || !p.shouldActivate || id !== _this.navigationId || !p.state) {\n navigationIsSuccessful = false;\n return;\n }\n var appliedUrl = p.appliedUrl, state = p.state;\n _this.currentUrlTree = appliedUrl;\n _this.rawUrlTree = _this.urlHandlingStrategy.merge(_this.currentUrlTree, rawUrl);\n _this.routerState = state;\n if (!skipLocationChange) {\n var path = _this.urlSerializer.serialize(_this.rawUrlTree);\n if (_this.location.isCurrentPathEqualTo(path) || replaceUrl) {\n _this.location.replaceState(path, '', { navigationId: id });\n }\n else {\n _this.location.go(path, '', { navigationId: id });\n }\n }\n new ActivateRoutes(_this.routeReuseStrategy, state, storedState, function (evt) { return _this.triggerEvent(evt); })\n .activate(_this.rootContexts);\n navigationIsSuccessful = true;\n })\n .then(function () {\n if (navigationIsSuccessful) {\n _this.navigated = true;\n _this.lastSuccessfulId = id;\n _this.events\n .next(new NavigationEnd(id, _this.serializeUrl(url), _this.serializeUrl(_this.currentUrlTree)));\n resolvePromise(true);\n }\n else {\n _this.resetUrlToCurrentUrlTree();\n _this.events\n .next(new NavigationCancel(id, _this.serializeUrl(url), ''));\n resolvePromise(false);\n }\n }, function (e) {\n if (isNavigationCancelingError(e)) {\n _this.navigated = true;\n _this.resetStateAndUrl(storedState, storedUrl, rawUrl);\n _this.events\n .next(new NavigationCancel(id, _this.serializeUrl(url), e.message));\n resolvePromise(false);\n }\n else {\n _this.resetStateAndUrl(storedState, storedUrl, rawUrl);\n _this.events\n .next(new NavigationError(id, _this.serializeUrl(url), e));\n try {\n resolvePromise(_this.errorHandler(e));\n }\n catch (ee) {\n rejectPromise(ee);\n }\n }\n });\n };\n Router.prototype.resetStateAndUrl = function (storedState, storedUrl, rawUrl) {\n this.routerState = storedState;\n this.currentUrlTree = storedUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);\n this.resetUrlToCurrentUrlTree();\n };\n Router.prototype.resetUrlToCurrentUrlTree = function () {\n this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), '', { navigationId: this.lastSuccessfulId });\n };\n return Router;\n}());\nvar ActivateRoutes = /** @class */ (function () {\n function ActivateRoutes(routeReuseStrategy, futureState, currState, forwardEvent) {\n this.routeReuseStrategy = routeReuseStrategy;\n this.futureState = futureState;\n this.currState = currState;\n this.forwardEvent = forwardEvent;\n }\n ActivateRoutes.prototype.activate = function (parentContexts) {\n var futureRoot = this.futureState._root;\n var currRoot = this.currState ? this.currState._root : null;\n this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n advanceActivatedRoute(this.futureState.root);\n this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n };\n // De-activate the child route that are not re-used for the future state\n // De-activate the child route that are not re-used for the future state\n ActivateRoutes.prototype.deactivateChildRoutes = \n // De-activate the child route that are not re-used for the future state\n function (futureNode, currNode, contexts) {\n var _this = this;\n var children = nodeChildrenAsMap(currNode);\n // Recurse on the routes active in the future state to de-activate deeper children\n futureNode.children.forEach(function (futureChild) {\n var childOutletName = futureChild.value.outlet;\n _this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n delete children[childOutletName];\n });\n // De-activate the routes that will not be re-used\n forEach(children, function (v, childName) {\n _this.deactivateRouteAndItsChildren(v, contexts);\n });\n };\n ActivateRoutes.prototype.deactivateRoutes = function (futureNode, currNode, parentContext) {\n var future = futureNode.value;\n var curr = currNode ? currNode.value : null;\n if (future === curr) {\n // Reusing the node, check to see if the children need to be de-activated\n if (future.component) {\n // If we have a normal route, we need to go through an outlet.\n var context = parentContext.getContext(future.outlet);\n if (context) {\n this.deactivateChildRoutes(futureNode, currNode, context.children);\n }\n }\n else {\n // if we have a componentless route, we recurse but keep the same outlet map.\n this.deactivateChildRoutes(futureNode, currNode, parentContext);\n }\n }\n else {\n if (curr) {\n // Deactivate the current route which will not be re-used\n this.deactivateRouteAndItsChildren(currNode, parentContext);\n }\n }\n };\n ActivateRoutes.prototype.deactivateRouteAndItsChildren = function (route, parentContexts) {\n if (this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n this.detachAndStoreRouteSubtree(route, parentContexts);\n }\n else {\n this.deactivateRouteAndOutlet(route, parentContexts);\n }\n };\n ActivateRoutes.prototype.detachAndStoreRouteSubtree = function (route, parentContexts) {\n var context = parentContexts.getContext(route.value.outlet);\n if (context && context.outlet) {\n var componentRef = context.outlet.detach();\n var contexts = context.children.onOutletDeactivated();\n this.routeReuseStrategy.store(route.value.snapshot, { componentRef: componentRef, route: route, contexts: contexts });\n }\n };\n ActivateRoutes.prototype.deactivateRouteAndOutlet = function (route, parentContexts) {\n var _this = this;\n var context = parentContexts.getContext(route.value.outlet);\n if (context) {\n var children = nodeChildrenAsMap(route);\n var contexts_1 = route.value.component ? context.children : parentContexts;\n forEach(children, function (v, k) { return _this.deactivateRouteAndItsChildren(v, contexts_1); });\n if (context.outlet) {\n // Destroy the component\n context.outlet.deactivate();\n // Destroy the contexts for all the outlets that were in the component\n context.children.onOutletDeactivated();\n }\n }\n };\n ActivateRoutes.prototype.activateChildRoutes = function (futureNode, currNode, contexts) {\n var _this = this;\n var children = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(function (c) {\n _this.activateRoutes(c, children[c.value.outlet], contexts);\n _this.forwardEvent(new ActivationEnd(c.value.snapshot));\n });\n if (futureNode.children.length) {\n this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n }\n };\n ActivateRoutes.prototype.activateRoutes = function (futureNode, currNode, parentContexts) {\n var future = futureNode.value;\n var curr = currNode ? currNode.value : null;\n advanceActivatedRoute(future);\n // reusing the node\n if (future === curr) {\n if (future.component) {\n // If we have a normal route, we need to go through an outlet.\n var context = parentContexts.getOrCreateContext(future.outlet);\n this.activateChildRoutes(futureNode, currNode, context.children);\n }\n else {\n // if we have a componentless route, we recurse but keep the same outlet map.\n this.activateChildRoutes(futureNode, currNode, parentContexts);\n }\n }\n else {\n if (future.component) {\n // if we have a normal route, we need to place the component into the outlet and recurse.\n var context = parentContexts.getOrCreateContext(future.outlet);\n if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n var stored = this.routeReuseStrategy.retrieve(future.snapshot);\n this.routeReuseStrategy.store(future.snapshot, null);\n context.children.onOutletReAttached(stored.contexts);\n context.attachRef = stored.componentRef;\n context.route = stored.route.value;\n if (context.outlet) {\n // Attach right away when the outlet has already been instantiated\n // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated\n context.outlet.attach(stored.componentRef, stored.route.value);\n }\n advanceActivatedRouteNodeAndItsChildren(stored.route);\n }\n else {\n var config = parentLoadedConfig(future.snapshot);\n var cmpFactoryResolver = config ? config.module.componentFactoryResolver : null;\n context.route = future;\n context.resolver = cmpFactoryResolver;\n if (context.outlet) {\n // Activate the outlet when it has already been instantiated\n // Otherwise it will get activated from its `ngOnInit` when instantiated\n context.outlet.activateWith(future, cmpFactoryResolver);\n }\n this.activateChildRoutes(futureNode, null, context.children);\n }\n }\n else {\n // if we have a componentless route, we recurse but keep the same outlet map.\n this.activateChildRoutes(futureNode, null, parentContexts);\n }\n }\n };\n return ActivateRoutes;\n}());\nfunction advanceActivatedRouteNodeAndItsChildren(node) {\n advanceActivatedRoute(node.value);\n node.children.forEach(advanceActivatedRouteNodeAndItsChildren);\n}\nfunction parentLoadedConfig(snapshot) {\n for (var s = snapshot.parent; s; s = s.parent) {\n var route = s.routeConfig;\n if (route && route._loadedConfig)\n return route._loadedConfig;\n if (route && route.component)\n return null;\n }\n return null;\n}\nfunction validateCommands(commands) {\n for (var i = 0; i < commands.length; i++) {\n var cmd = commands[i];\n if (cmd == null) {\n throw new Error(\"The requested path contains \" + cmd + \" segment at index \" + i);\n }\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Lets you link to specific routes in your app.\n *\n * Consider the following route configuration:\n * `[{ path: 'user/:name', component: UserCmp }]`.\n * When linking to this `user/:name` route, you use the `RouterLink` directive.\n *\n * If the link is static, you can use the directive as follows:\n * `<a routerLink=\"/user/bob\">link to user component</a>`\n *\n * If you use dynamic values to generate the link, you can pass an array of path\n * segments, followed by the params for each segment.\n *\n * For instance `['/team', teamId, 'user', userName, {details: true}]`\n * means that we want to generate a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one\n * (e.g., `['/team/11/user', userName, {details: true}]`).\n *\n * The first segment name can be prepended with `/`, `./`, or `../`:\n * * If the first segment begins with `/`, the router will look up the route from the root of the\n * app.\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router will\n * instead look in the children of the current activated route.\n * * And if the first segment begins with `../`, the router will go up one level.\n *\n * You can set query params and fragment as follows:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n * link to user component\n * </a>\n * ```\n * RouterLink will use these to generate this link: `/user/bob#education?debug=true`.\n *\n * (Deprecated in v4.0.0 use `queryParamsHandling` instead) You can also tell the\n * directive to preserve the current query params and fragment:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" preserveQueryParams preserveFragment>\n * link to user component\n * </a>\n * ```\n *\n * You can tell the directive to how to handle queryParams, available options are:\n * - `'merge'`: merge the queryParams into the current queryParams\n * - `'preserve'`: preserve the current queryParams\n * - default/`''`: use the queryParams only\n *\n * Same options for {@link NavigationExtras#queryParamsHandling\n * NavigationExtras#queryParamsHandling}.\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n * link to user component\n * </a>\n * ```\n *\n * The router link directive always treats the provided input as a delta to the current url.\n *\n * For instance, if the current url is `/user/(box//aux:team)`.\n *\n * Then the following link `<a [routerLink]=\"['/user/jim']\">Jim</a>` will generate the link\n * `/user/(jim//aux:team)`.\n *\n * See {@link Router#createUrlTree createUrlTree} for more information.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar RouterLink = /** @class */ (function () {\n function RouterLink(router, route, tabIndex, renderer, el) {\n this.router = router;\n this.route = route;\n this.commands = [];\n if (tabIndex == null) {\n renderer.setAttribute(el.nativeElement, 'tabindex', '0');\n }\n }\n Object.defineProperty(RouterLink.prototype, \"routerLink\", {\n set: function (commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n }\n else {\n this.commands = [];\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterLink.prototype, \"preserveQueryParams\", {\n set: /**\n * @deprecated 4.0.0 use `queryParamsHandling` instead.\n */\n function (value) {\n if (core.isDevMode() && console && console.warn) {\n console.warn('preserveQueryParams is deprecated!, use queryParamsHandling instead.');\n }\n this.preserve = value;\n },\n enumerable: true,\n configurable: true\n });\n RouterLink.prototype.onClick = function () {\n var extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return true;\n };\n Object.defineProperty(RouterLink.prototype, \"urlTree\", {\n get: function () {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n },\n enumerable: true,\n configurable: true\n });\n RouterLink.decorators = [\n { type: core.Directive, args: [{ selector: ':not(a)[routerLink]' },] }\n ];\n /** @nocollapse */\n RouterLink.ctorParameters = function () { return [\n { type: Router, },\n { type: ActivatedRoute, },\n { type: undefined, decorators: [{ type: core.Attribute, args: ['tabindex',] },] },\n { type: core.Renderer2, },\n { type: core.ElementRef, },\n ]; };\n RouterLink.propDecorators = {\n \"queryParams\": [{ type: core.Input },],\n \"fragment\": [{ type: core.Input },],\n \"queryParamsHandling\": [{ type: core.Input },],\n \"preserveFragment\": [{ type: core.Input },],\n \"skipLocationChange\": [{ type: core.Input },],\n \"replaceUrl\": [{ type: core.Input },],\n \"routerLink\": [{ type: core.Input },],\n \"preserveQueryParams\": [{ type: core.Input },],\n \"onClick\": [{ type: core.HostListener, args: ['click',] },],\n };\n return RouterLink;\n}());\n/**\n * @description\n *\n * Lets you link to specific routes in your app.\n *\n * See `RouterLink` for more information.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar RouterLinkWithHref = /** @class */ (function () {\n function RouterLinkWithHref(router, route, locationStrategy) {\n var _this = this;\n this.router = router;\n this.route = route;\n this.locationStrategy = locationStrategy;\n this.commands = [];\n this.subscription = router.events.subscribe(function (s) {\n if (s instanceof NavigationEnd) {\n _this.updateTargetUrlAndHref();\n }\n });\n }\n Object.defineProperty(RouterLinkWithHref.prototype, \"routerLink\", {\n set: function (commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n }\n else {\n this.commands = [];\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterLinkWithHref.prototype, \"preserveQueryParams\", {\n set: function (value) {\n if (core.isDevMode() && console && console.warn) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n this.preserve = value;\n },\n enumerable: true,\n configurable: true\n });\n RouterLinkWithHref.prototype.ngOnChanges = function (changes) { this.updateTargetUrlAndHref(); };\n RouterLinkWithHref.prototype.ngOnDestroy = function () { this.subscription.unsubscribe(); };\n RouterLinkWithHref.prototype.onClick = function (button, ctrlKey, metaKey, shiftKey) {\n if (button !== 0 || ctrlKey || metaKey || shiftKey) {\n return true;\n }\n if (typeof this.target === 'string' && this.target != '_self') {\n return true;\n }\n var extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return false;\n };\n RouterLinkWithHref.prototype.updateTargetUrlAndHref = function () {\n this.href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree));\n };\n Object.defineProperty(RouterLinkWithHref.prototype, \"urlTree\", {\n get: function () {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n },\n enumerable: true,\n configurable: true\n });\n RouterLinkWithHref.decorators = [\n { type: core.Directive, args: [{ selector: 'a[routerLink]' },] }\n ];\n /** @nocollapse */\n RouterLinkWithHref.ctorParameters = function () { return [\n { type: Router, },\n { type: ActivatedRoute, },\n { type: common.LocationStrategy, },\n ]; };\n RouterLinkWithHref.propDecorators = {\n \"target\": [{ type: core.HostBinding, args: ['attr.target',] }, { type: core.Input },],\n \"queryParams\": [{ type: core.Input },],\n \"fragment\": [{ type: core.Input },],\n \"queryParamsHandling\": [{ type: core.Input },],\n \"preserveFragment\": [{ type: core.Input },],\n \"skipLocationChange\": [{ type: core.Input },],\n \"replaceUrl\": [{ type: core.Input },],\n \"href\": [{ type: core.HostBinding },],\n \"routerLink\": [{ type: core.Input },],\n \"preserveQueryParams\": [{ type: core.Input },],\n \"onClick\": [{ type: core.HostListener, args: ['click', ['$event.button', '$event.ctrlKey', '$event.metaKey', '$event.shiftKey'],] },],\n };\n return RouterLinkWithHref;\n}());\nfunction attrBoolValue(s) {\n return s === '' || !!s;\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n *\n * @description\n *\n * Lets you add a CSS class to an element when the link's route becomes active.\n *\n * This directive lets you add a CSS class to an element when the link's route\n * becomes active.\n *\n * Consider the following example:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * When the url is either '/user' or '/user/bob', the active-link class will\n * be added to the `a` tag. If the url changes, the class will be removed.\n *\n * You can set more than one class, as follows:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * You can configure RouterLinkActive by passing `exact: true`. This will add the classes\n * only when the url matches the link exactly.\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\n * ```\n *\n * You can assign the RouterLinkActive instance to a template variable and directly check\n * the `isActive` status.\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n * Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\n * ```\n *\n * Finally, you can apply the RouterLinkActive directive to an ancestor of a RouterLink.\n *\n * ```\n * <div routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact: true}\">\n * <a routerLink=\"/user/jim\">Jim</a>\n * <a routerLink=\"/user/bob\">Bob</a>\n * </div>\n * ```\n *\n * This will set the active-link class on the div tag if the url is either '/user/jim' or\n * '/user/bob'.\n *\n * @ngModule RouterModule\n *\n *\n */\nvar RouterLinkActive = /** @class */ (function () {\n function RouterLinkActive(router, element, renderer, cdr) {\n var _this = this;\n this.router = router;\n this.element = element;\n this.renderer = renderer;\n this.cdr = cdr;\n this.classes = [];\n this.isActive = false;\n this.routerLinkActiveOptions = { exact: false };\n this.subscription = router.events.subscribe(function (s) {\n if (s instanceof NavigationEnd) {\n _this.update();\n }\n });\n }\n RouterLinkActive.prototype.ngAfterContentInit = function () {\n var _this = this;\n this.links.changes.subscribe(function (_) { return _this.update(); });\n this.linksWithHrefs.changes.subscribe(function (_) { return _this.update(); });\n this.update();\n };\n Object.defineProperty(RouterLinkActive.prototype, \"routerLinkActive\", {\n set: function (data) {\n var classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter(function (c) { return !!c; });\n },\n enumerable: true,\n configurable: true\n });\n RouterLinkActive.prototype.ngOnChanges = function (changes) { this.update(); };\n RouterLinkActive.prototype.ngOnDestroy = function () { this.subscription.unsubscribe(); };\n RouterLinkActive.prototype.update = function () {\n var _this = this;\n if (!this.links || !this.linksWithHrefs || !this.router.navigated)\n return;\n Promise.resolve().then(function () {\n var hasActiveLinks = _this.hasActiveLinks();\n if (_this.isActive !== hasActiveLinks) {\n _this.isActive = hasActiveLinks;\n _this.classes.forEach(function (c) {\n if (hasActiveLinks) {\n _this.renderer.addClass(_this.element.nativeElement, c);\n }\n else {\n _this.renderer.removeClass(_this.element.nativeElement, c);\n }\n });\n }\n });\n };\n RouterLinkActive.prototype.isLinkActive = function (router) {\n var _this = this;\n return function (link) {\n return router.isActive(link.urlTree, _this.routerLinkActiveOptions.exact);\n };\n };\n RouterLinkActive.prototype.hasActiveLinks = function () {\n return this.links.some(this.isLinkActive(this.router)) ||\n this.linksWithHrefs.some(this.isLinkActive(this.router));\n };\n RouterLinkActive.decorators = [\n { type: core.Directive, args: [{\n selector: '[routerLinkActive]',\n exportAs: 'routerLinkActive',\n },] }\n ];\n /** @nocollapse */\n RouterLinkActive.ctorParameters = function () { return [\n { type: Router, },\n { type: core.ElementRef, },\n { type: core.Renderer2, },\n { type: core.ChangeDetectorRef, },\n ]; };\n RouterLinkActive.propDecorators = {\n \"links\": [{ type: core.ContentChildren, args: [RouterLink, { descendants: true },] },],\n \"linksWithHrefs\": [{ type: core.ContentChildren, args: [RouterLinkWithHref, { descendants: true },] },],\n \"routerLinkActiveOptions\": [{ type: core.Input },],\n \"routerLinkActive\": [{ type: core.Input },],\n };\n return RouterLinkActive;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Store contextual information about a `RouterOutlet`\n *\n *\n */\nvar OutletContext = /** @class */ (function () {\n function OutletContext() {\n this.outlet = null;\n this.route = null;\n this.resolver = null;\n this.children = new ChildrenOutletContexts();\n this.attachRef = null;\n }\n return OutletContext;\n}());\n/**\n * Store contextual information about the children (= nested) `RouterOutlet`\n *\n *\n */\nvar ChildrenOutletContexts = /** @class */ (function () {\n function ChildrenOutletContexts() {\n // contexts for child outlets, by name.\n this.contexts = new Map();\n }\n /** Called when a `RouterOutlet` directive is instantiated */\n /** Called when a `RouterOutlet` directive is instantiated */\n ChildrenOutletContexts.prototype.onChildOutletCreated = /** Called when a `RouterOutlet` directive is instantiated */\n function (childName, outlet) {\n var context = this.getOrCreateContext(childName);\n context.outlet = outlet;\n this.contexts.set(childName, context);\n };\n /**\n * Called when a `RouterOutlet` directive is destroyed.\n * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n * re-created later.\n */\n /**\n * Called when a `RouterOutlet` directive is destroyed.\n * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n * re-created later.\n */\n ChildrenOutletContexts.prototype.onChildOutletDestroyed = /**\n * Called when a `RouterOutlet` directive is destroyed.\n * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n * re-created later.\n */\n function (childName) {\n var context = this.getContext(childName);\n if (context) {\n context.outlet = null;\n }\n };\n /**\n * Called when the corresponding route is deactivated during navigation.\n * Because the component get destroyed, all children outlet are destroyed.\n */\n /**\n * Called when the corresponding route is deactivated during navigation.\n * Because the component get destroyed, all children outlet are destroyed.\n */\n ChildrenOutletContexts.prototype.onOutletDeactivated = /**\n * Called when the corresponding route is deactivated during navigation.\n * Because the component get destroyed, all children outlet are destroyed.\n */\n function () {\n var contexts = this.contexts;\n this.contexts = new Map();\n return contexts;\n };\n ChildrenOutletContexts.prototype.onOutletReAttached = function (contexts) { this.contexts = contexts; };\n ChildrenOutletContexts.prototype.getOrCreateContext = function (childName) {\n var context = this.getContext(childName);\n if (!context) {\n context = new OutletContext();\n this.contexts.set(childName, context);\n }\n return context;\n };\n ChildrenOutletContexts.prototype.getContext = function (childName) { return this.contexts.get(childName) || null; };\n return ChildrenOutletContexts;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * ```\n * <router-outlet></router-outlet>\n * <router-outlet name='left'></router-outlet>\n * <router-outlet name='right'></router-outlet>\n * ```\n *\n * A router outlet will emit an activate event any time a new component is being instantiated,\n * and a deactivate event when it is being destroyed.\n *\n * ```\n * <router-outlet\n * (activate)='onActivate($event)'\n * (deactivate)='onDeactivate($event)'></router-outlet>\n * ```\n * @ngModule RouterModule\n *\n *\n */\nvar RouterOutlet = /** @class */ (function () {\n function RouterOutlet(parentContexts, location, resolver, name, changeDetector) {\n this.parentContexts = parentContexts;\n this.location = location;\n this.resolver = resolver;\n this.changeDetector = changeDetector;\n this.activated = null;\n this._activatedRoute = null;\n this.activateEvents = new core.EventEmitter();\n this.deactivateEvents = new core.EventEmitter();\n this.name = name || PRIMARY_OUTLET;\n parentContexts.onChildOutletCreated(this.name, this);\n }\n RouterOutlet.prototype.ngOnDestroy = function () { this.parentContexts.onChildOutletDestroyed(this.name); };\n RouterOutlet.prototype.ngOnInit = function () {\n if (!this.activated) {\n // If the outlet was not instantiated at the time the route got activated we need to populate\n // the outlet when it is initialized (ie inside a NgIf)\n var context = this.parentContexts.getContext(this.name);\n if (context && context.route) {\n if (context.attachRef) {\n // `attachRef` is populated when there is an existing component to mount\n this.attach(context.attachRef, context.route);\n }\n else {\n // otherwise the component defined in the configuration is created\n this.activateWith(context.route, context.resolver || null);\n }\n }\n }\n };\n Object.defineProperty(RouterOutlet.prototype, \"isActivated\", {\n get: function () { return !!this.activated; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterOutlet.prototype, \"component\", {\n get: function () {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n return this.activated.instance;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterOutlet.prototype, \"activatedRoute\", {\n get: function () {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n return this._activatedRoute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RouterOutlet.prototype, \"activatedRouteData\", {\n get: function () {\n if (this._activatedRoute) {\n return this._activatedRoute.snapshot.data;\n }\n return {};\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Called when the `RouteReuseStrategy` instructs to detach the subtree\n */\n /**\n * Called when the `RouteReuseStrategy` instructs to detach the subtree\n */\n RouterOutlet.prototype.detach = /**\n * Called when the `RouteReuseStrategy` instructs to detach the subtree\n */\n function () {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n this.location.detach();\n var cmp = this.activated;\n this.activated = null;\n this._activatedRoute = null;\n return cmp;\n };\n /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n */\n /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n */\n RouterOutlet.prototype.attach = /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n */\n function (ref, activatedRoute) {\n this.activated = ref;\n this._activatedRoute = activatedRoute;\n this.location.insert(ref.hostView);\n };\n RouterOutlet.prototype.deactivate = function () {\n if (this.activated) {\n var c = this.component;\n this.activated.destroy();\n this.activated = null;\n this._activatedRoute = null;\n this.deactivateEvents.emit(c);\n }\n };\n RouterOutlet.prototype.activateWith = function (activatedRoute, resolver) {\n if (this.isActivated) {\n throw new Error('Cannot activate an already activated outlet');\n }\n this._activatedRoute = activatedRoute;\n var snapshot = activatedRoute._futureSnapshot;\n var component = snapshot.routeConfig.component;\n resolver = resolver || this.resolver;\n var factory = resolver.resolveComponentFactory(component);\n var childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n var injector = new OutletInjector(activatedRoute, childContexts, this.location.injector);\n this.activated = this.location.createComponent(factory, this.location.length, injector);\n // Calling `markForCheck` to make sure we will run the change detection when the\n // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.\n this.changeDetector.markForCheck();\n this.activateEvents.emit(this.activated.instance);\n };\n RouterOutlet.decorators = [\n { type: core.Directive, args: [{ selector: 'router-outlet', exportAs: 'outlet' },] }\n ];\n /** @nocollapse */\n RouterOutlet.ctorParameters = function () { return [\n { type: ChildrenOutletContexts, },\n { type: core.ViewContainerRef, },\n { type: core.ComponentFactoryResolver, },\n { type: undefined, decorators: [{ type: core.Attribute, args: ['name',] },] },\n { type: core.ChangeDetectorRef, },\n ]; };\n RouterOutlet.propDecorators = {\n \"activateEvents\": [{ type: core.Output, args: ['activate',] },],\n \"deactivateEvents\": [{ type: core.Output, args: ['deactivate',] },],\n };\n return RouterOutlet;\n}());\nvar OutletInjector = /** @class */ (function () {\n function OutletInjector(route, childContexts, parent) {\n this.route = route;\n this.childContexts = childContexts;\n this.parent = parent;\n }\n OutletInjector.prototype.get = function (token, notFoundValue) {\n if (token === ActivatedRoute) {\n return this.route;\n }\n if (token === ChildrenOutletContexts) {\n return this.childContexts;\n }\n return this.parent.get(token, notFoundValue);\n };\n return OutletInjector;\n}());\n\n/**\n*@license\n*Copyright Google Inc. All Rights Reserved.\n*\n*Use of this source code is governed by an MIT-style license that can be\n*found in the LICENSE file at https://angular.io/license\n*/\n/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @experimental\n */\nvar PreloadingStrategy = /** @class */ (function () {\n function PreloadingStrategy() {\n }\n return PreloadingStrategy;\n}());\n/**\n * @description\n *\n * Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * ```\n * RouteModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * @experimental\n */\nvar PreloadAllModules = /** @class */ (function () {\n function PreloadAllModules() {\n }\n PreloadAllModules.prototype.preload = function (route, fn) {\n return fn().pipe(operators.catchError(function () { return rxjs.of(null); }));\n };\n return PreloadAllModules;\n}());\n/**\n * @description\n *\n * Provides a preloading strategy that does not preload any modules.\n *\n * This strategy is enabled by default.\n *\n * @experimental\n */\nvar NoPreloading = /** @class */ (function () {\n function NoPreloading() {\n }\n NoPreloading.prototype.preload = function (route, fn) { return rxjs.of(null); };\n return NoPreloading;\n}());\n/**\n * The preloader optimistically loads all router configurations to\n * make navigations into lazily-loaded sections of the application faster.\n *\n * The preloader runs in the background. When the router bootstraps, the preloader\n * starts listening to all navigation events. After every such event, the preloader\n * will check if any configurations can be loaded lazily.\n *\n * If a route is protected by `canLoad` guards, the preloaded will not load it.\n *\n *\n */\nvar RouterPreloader = /** @class */ (function () {\n function RouterPreloader(router, moduleLoader, compiler, injector, preloadingStrategy) {\n this.router = router;\n this.injector = injector;\n this.preloadingStrategy = preloadingStrategy;\n var onStartLoad = function (r) { return router.triggerEvent(new RouteConfigLoadStart(r)); };\n var onEndLoad = function (r) { return router.triggerEvent(new RouteConfigLoadEnd(r)); };\n this.loader = new RouterConfigLoader(moduleLoader, compiler, onStartLoad, onEndLoad);\n }\n RouterPreloader.prototype.setUpPreloading = function () {\n var _this = this;\n this.subscription =\n this.router.events\n .pipe(operators.filter(function (e) { return e instanceof NavigationEnd; }), operators.concatMap(function () { return _this.preload(); }))\n .subscribe(function () { });\n };\n RouterPreloader.prototype.preload = function () {\n var ngModule = this.injector.get(core.NgModuleRef);\n return this.processRoutes(ngModule, this.router.config);\n };\n // TODO(jasonaden): This class relies on code external to the class to call setUpPreloading. If\n // this hasn't been done, ngOnDestroy will fail as this.subscription will be undefined. This\n // should be refactored.\n // TODO(jasonaden): This class relies on code external to the class to call setUpPreloading. If\n // this hasn't been done, ngOnDestroy will fail as this.subscription will be undefined. This\n // should be refactored.\n RouterPreloader.prototype.ngOnDestroy = \n // TODO(jasonaden): This class relies on code external to the class to call setUpPreloading. If\n // this hasn't been done, ngOnDestroy will fail as this.subscription will be undefined. This\n // should be refactored.\n function () { this.subscription.unsubscribe(); };\n RouterPreloader.prototype.processRoutes = function (ngModule, routes) {\n var res = [];\n try {\n for (var routes_1 = __values(routes), routes_1_1 = routes_1.next(); !routes_1_1.done; routes_1_1 = routes_1.next()) {\n var route = routes_1_1.value;\n // we already have the config loaded, just recurse\n if (route.loadChildren && !route.canLoad && route._loadedConfig) {\n var childConfig = route._loadedConfig;\n res.push(this.processRoutes(childConfig.module, childConfig.routes));\n // no config loaded, fetch the config\n }\n else if (route.loadChildren && !route.canLoad) {\n res.push(this.preloadConfig(ngModule, route));\n // recurse into children\n }\n else if (route.children) {\n res.push(this.processRoutes(ngModule, route.children));\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (routes_1_1 && !routes_1_1.done && (_a = routes_1.return)) _a.call(routes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return rxjs.from(res).pipe(operators.mergeAll(), operators.map(function (_) { return void 0; }));\n var e_1, _a;\n };\n RouterPreloader.prototype.preloadConfig = function (ngModule, route) {\n var _this = this;\n return this.preloadingStrategy.preload(route, function () {\n var loaded$ = _this.loader.load(ngModule.injector, route);\n return loaded$.pipe(operators.mergeMap(function (config) {\n route._loadedConfig = config;\n return _this.processRoutes(config.module, config.routes);\n }));\n });\n };\n RouterPreloader.decorators = [\n { type: core.Injectable }\n ];\n /** @nocollapse */\n RouterPreloader.ctorParameters = function () { return [\n { type: Router, },\n { type: core.NgModuleFactoryLoader, },\n { type: core.Compiler, },\n { type: core.Injector, },\n { type: PreloadingStrategy, },\n ]; };\n return RouterPreloader;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Contains a list of directives\n *\n *\n */\nvar ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive];\n/**\n * @description\n *\n * Is used in DI to configure the router.\n *\n *\n */\nvar ROUTER_CONFIGURATION = new core.InjectionToken('ROUTER_CONFIGURATION');\n/**\n * @docsNotRequired\n */\nvar ROUTER_FORROOT_GUARD = new core.InjectionToken('ROUTER_FORROOT_GUARD');\nvar ROUTER_PROVIDERS = [\n common.Location,\n { provide: UrlSerializer, useClass: DefaultUrlSerializer },\n {\n provide: Router,\n useFactory: setupRouter,\n deps: [\n core.ApplicationRef, UrlSerializer, ChildrenOutletContexts, common.Location, core.Injector,\n core.NgModuleFactoryLoader, core.Compiler, ROUTES, ROUTER_CONFIGURATION,\n [UrlHandlingStrategy, new core.Optional()], [RouteReuseStrategy, new core.Optional()]\n ]\n },\n ChildrenOutletContexts,\n { provide: ActivatedRoute, useFactory: rootRoute, deps: [Router] },\n { provide: core.NgModuleFactoryLoader, useClass: core.SystemJsNgModuleLoader },\n RouterPreloader,\n NoPreloading,\n PreloadAllModules,\n { provide: ROUTER_CONFIGURATION, useValue: { enableTracing: false } },\n];\nfunction routerNgProbeToken() {\n return new core.NgProbeToken('Router', Router);\n}\n/**\n * @usageNotes\n *\n * RouterModule can be imported multiple times: once per lazily-loaded bundle.\n * Since the router deals with a global shared resource--location, we cannot have\n * more than one router service active.\n *\n * That is why there are two ways to create the module: `RouterModule.forRoot` and\n * `RouterModule.forChild`.\n *\n * * `forRoot` creates a module that contains all the directives, the given routes, and the router\n * service itself.\n * * `forChild` creates a module that contains all the directives and the given routes, but does not\n * include the router service.\n *\n * When registered at the root, the module should be used as follows\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forRoot(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * For submodules and lazy loaded submodules the module should be used as follows:\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forChild(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * @description\n *\n * Adds router directives and providers.\n *\n * Managing state transitions is one of the hardest parts of building applications. This is\n * especially true on the web, where you also need to ensure that the state is reflected in the URL.\n * In addition, we often want to split applications into multiple bundles and load them on demand.\n * Doing this transparently is not trivial.\n *\n * The Angular router solves these problems. Using the router, you can declaratively specify\n * application states, manage state transitions while taking care of the URL, and load bundles on\n * demand.\n *\n * [Read this developer guide](https://angular.io/docs/ts/latest/guide/router.html) to get an\n * overview of how the router should be used.\n *\n *\n */\nvar RouterModule = /** @class */ (function () {\n // Note: We are injecting the Router so it gets created eagerly...\n function RouterModule(guard, router) {\n }\n /**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n *\n * Options (see `ExtraOptions`):\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * * `preloadingStrategy` configures a preloading strategy (see `PreloadAllModules`).\n * * `onSameUrlNavigation` configures how the router handles navigation to the current URL. See\n * `ExtraOptions` for more details.\n */\n /**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n *\n * Options (see `ExtraOptions`):\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * * `preloadingStrategy` configures a preloading strategy (see `PreloadAllModules`).\n * * `onSameUrlNavigation` configures how the router handles navigation to the current URL. See\n * `ExtraOptions` for more details.\n */\n RouterModule.forRoot = /**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n *\n * Options (see `ExtraOptions`):\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * * `preloadingStrategy` configures a preloading strategy (see `PreloadAllModules`).\n * * `onSameUrlNavigation` configures how the router handles navigation to the current URL. See\n * `ExtraOptions` for more details.\n */\n function (routes, config) {\n return {\n ngModule: RouterModule,\n providers: [\n ROUTER_PROVIDERS,\n provideRoutes(routes),\n {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard,\n deps: [[Router, new core.Optional(), new core.SkipSelf()]]\n },\n { provide: ROUTER_CONFIGURATION, useValue: config ? config : {} },\n {\n provide: common.LocationStrategy,\n useFactory: provideLocationStrategy,\n deps: [\n common.PlatformLocation, [new core.Inject(common.APP_BASE_HREF), new core.Optional()], ROUTER_CONFIGURATION\n ]\n },\n {\n provide: PreloadingStrategy,\n useExisting: config && config.preloadingStrategy ? config.preloadingStrategy :\n NoPreloading\n },\n { provide: core.NgProbeToken, multi: true, useFactory: routerNgProbeToken },\n provideRouterInitializer(),\n ],\n };\n };\n /**\n * Creates a module with all the router directives and a provider registering routes.\n */\n /**\n * Creates a module with all the router directives and a provider registering routes.\n */\n RouterModule.forChild = /**\n * Creates a module with all the router directives and a provider registering routes.\n */\n function (routes) {\n return { ngModule: RouterModule, providers: [provideRoutes(routes)] };\n };\n RouterModule.decorators = [\n { type: core.NgModule, args: [{ declarations: ROUTER_DIRECTIVES, exports: ROUTER_DIRECTIVES },] }\n ];\n /** @nocollapse */\n RouterModule.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: core.Optional }, { type: core.Inject, args: [ROUTER_FORROOT_GUARD,] },] },\n { type: Router, decorators: [{ type: core.Optional },] },\n ]; };\n return RouterModule;\n}());\nfunction provideLocationStrategy(platformLocationStrategy, baseHref, options) {\n if (options === void 0) { options = {}; }\n return options.useHash ? new common.HashLocationStrategy(platformLocationStrategy, baseHref) :\n new common.PathLocationStrategy(platformLocationStrategy, baseHref);\n}\nfunction provideForRootGuard(router) {\n if (router) {\n throw new Error(\"RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.\");\n }\n return 'guarded';\n}\n/**\n * @description\n *\n * Registers routes.\n *\n * ### Example\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forChild(ROUTES)],\n * providers: [provideRoutes(EXTRA_ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n *\n */\nfunction provideRoutes(routes) {\n return [\n { provide: core.ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes },\n { provide: ROUTES, multi: true, useValue: routes },\n ];\n}\nfunction setupRouter(ref, urlSerializer, contexts, location, injector, loader, compiler, config, opts, urlHandlingStrategy, routeReuseStrategy) {\n if (opts === void 0) { opts = {}; }\n var router = new Router(null, urlSerializer, contexts, location, injector, loader, compiler, flatten(config));\n if (urlHandlingStrategy) {\n router.urlHandlingStrategy = urlHandlingStrategy;\n }\n if (routeReuseStrategy) {\n router.routeReuseStrategy = routeReuseStrategy;\n }\n if (opts.errorHandler) {\n router.errorHandler = opts.errorHandler;\n }\n if (opts.enableTracing) {\n var dom_1 = platformBrowser.ɵgetDOM();\n router.events.subscribe(function (e) {\n dom_1.logGroup(\"Router Event: \" + e.constructor.name);\n dom_1.log(e.toString());\n dom_1.log(e);\n dom_1.logGroupEnd();\n });\n }\n if (opts.onSameUrlNavigation) {\n router.onSameUrlNavigation = opts.onSameUrlNavigation;\n }\n if (opts.paramsInheritanceStrategy) {\n router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;\n }\n return router;\n}\nfunction rootRoute(router) {\n return router.routerState.root;\n}\n/**\n * To initialize the router properly we need to do in two steps:\n *\n * We need to start the navigation in a APP_INITIALIZER to block the bootstrap if\n * a resolver or a guards executes asynchronously. Second, we need to actually run\n * activation in a BOOTSTRAP_LISTENER. We utilize the afterPreactivation\n * hook provided by the router to do that.\n *\n * The router navigation starts, reaches the point when preactivation is done, and then\n * pauses. It waits for the hook to be resolved. We then resolve it only in a bootstrap listener.\n */\nvar RouterInitializer = /** @class */ (function () {\n function RouterInitializer(injector) {\n this.injector = injector;\n this.initNavigation = false;\n this.resultOfPreactivationDone = new rxjs.Subject();\n }\n RouterInitializer.prototype.appInitializer = function () {\n var _this = this;\n var p = this.injector.get(common.LOCATION_INITIALIZED, Promise.resolve(null));\n return p.then(function () {\n var resolve = (null);\n var res = new Promise(function (r) { return resolve = r; });\n var router = _this.injector.get(Router);\n var opts = _this.injector.get(ROUTER_CONFIGURATION);\n if (_this.isLegacyDisabled(opts) || _this.isLegacyEnabled(opts)) {\n resolve(true);\n }\n else if (opts.initialNavigation === 'disabled') {\n router.setUpLocationChangeListener();\n resolve(true);\n }\n else if (opts.initialNavigation === 'enabled') {\n router.hooks.afterPreactivation = function () {\n // only the initial navigation should be delayed\n if (!_this.initNavigation) {\n _this.initNavigation = true;\n resolve(true);\n return _this.resultOfPreactivationDone;\n // subsequent navigations should not be delayed\n }\n else {\n return rxjs.of(null);\n }\n };\n router.initialNavigation();\n }\n else {\n throw new Error(\"Invalid initialNavigation options: '\" + opts.initialNavigation + \"'\");\n }\n return res;\n });\n };\n RouterInitializer.prototype.bootstrapListener = function (bootstrappedComponentRef) {\n var opts = this.injector.get(ROUTER_CONFIGURATION);\n var preloader = this.injector.get(RouterPreloader);\n var router = this.injector.get(Router);\n var ref = this.injector.get(core.ApplicationRef);\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n if (this.isLegacyEnabled(opts)) {\n router.initialNavigation();\n }\n else if (this.isLegacyDisabled(opts)) {\n router.setUpLocationChangeListener();\n }\n preloader.setUpPreloading();\n router.resetRootComponentType(ref.componentTypes[0]);\n this.resultOfPreactivationDone.next((null));\n this.resultOfPreactivationDone.complete();\n };\n RouterInitializer.prototype.isLegacyEnabled = function (opts) {\n return opts.initialNavigation === 'legacy_enabled' || opts.initialNavigation === true ||\n opts.initialNavigation === undefined;\n };\n RouterInitializer.prototype.isLegacyDisabled = function (opts) {\n return opts.initialNavigation === 'legacy_disabled' || opts.initialNavigation === false;\n };\n RouterInitializer.decorators = [\n { type: core.Injectable }\n ];\n /** @nocollapse */\n RouterInitializer.ctorParameters = function () { return [\n { type: core.Injector, },\n ]; };\n return RouterInitializer;\n}());\nfunction getAppInitializer(r) {\n return r.appInitializer.bind(r);\n}\nfunction getBootstrapListener(r) {\n return r.bootstrapListener.bind(r);\n}\n/**\n * A token for the router initializer that will be called after the app is bootstrapped.\n *\n * @experimental\n */\nvar ROUTER_INITIALIZER = new core.InjectionToken('Router Initializer');\nfunction provideRouterInitializer() {\n return [\n RouterInitializer,\n {\n provide: core.APP_INITIALIZER,\n multi: true,\n useFactory: getAppInitializer,\n deps: [RouterInitializer]\n },\n { provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener, deps: [RouterInitializer] },\n { provide: core.APP_BOOTSTRAP_LISTENER, multi: true, useExisting: ROUTER_INITIALIZER },\n ];\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n *\n */\nvar VERSION = new core.Version('6.0.0');\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexports.ɵangular_packages_router_router_a = ROUTER_FORROOT_GUARD;\nexports.ɵangular_packages_router_router_g = RouterInitializer;\nexports.ɵangular_packages_router_router_h = getAppInitializer;\nexports.ɵangular_packages_router_router_i = getBootstrapListener;\nexports.ɵangular_packages_router_router_d = provideForRootGuard;\nexports.ɵangular_packages_router_router_c = provideLocationStrategy;\nexports.ɵangular_packages_router_router_j = provideRouterInitializer;\nexports.ɵangular_packages_router_router_f = rootRoute;\nexports.ɵangular_packages_router_router_b = routerNgProbeToken;\nexports.ɵangular_packages_router_router_e = setupRouter;\nexports.ɵangular_packages_router_router_k = Tree;\nexports.ɵangular_packages_router_router_l = TreeNode;\nexports.RouterLink = RouterLink;\nexports.RouterLinkWithHref = RouterLinkWithHref;\nexports.RouterLinkActive = RouterLinkActive;\nexports.RouterOutlet = RouterOutlet;\nexports.ActivationEnd = ActivationEnd;\nexports.ActivationStart = ActivationStart;\nexports.ChildActivationEnd = ChildActivationEnd;\nexports.ChildActivationStart = ChildActivationStart;\nexports.GuardsCheckEnd = GuardsCheckEnd;\nexports.GuardsCheckStart = GuardsCheckStart;\nexports.NavigationCancel = NavigationCancel;\nexports.NavigationEnd = NavigationEnd;\nexports.NavigationError = NavigationError;\nexports.NavigationStart = NavigationStart;\nexports.ResolveEnd = ResolveEnd;\nexports.ResolveStart = ResolveStart;\nexports.RouteConfigLoadEnd = RouteConfigLoadEnd;\nexports.RouteConfigLoadStart = RouteConfigLoadStart;\nexports.RouterEvent = RouterEvent;\nexports.RoutesRecognized = RoutesRecognized;\nexports.RouteReuseStrategy = RouteReuseStrategy;\nexports.Router = Router;\nexports.ROUTES = ROUTES;\nexports.ROUTER_CONFIGURATION = ROUTER_CONFIGURATION;\nexports.ROUTER_INITIALIZER = ROUTER_INITIALIZER;\nexports.RouterModule = RouterModule;\nexports.provideRoutes = provideRoutes;\nexports.ChildrenOutletContexts = ChildrenOutletContexts;\nexports.OutletContext = OutletContext;\nexports.NoPreloading = NoPreloading;\nexports.PreloadAllModules = PreloadAllModules;\nexports.PreloadingStrategy = PreloadingStrategy;\nexports.RouterPreloader = RouterPreloader;\nexports.ActivatedRoute = ActivatedRoute;\nexports.ActivatedRouteSnapshot = ActivatedRouteSnapshot;\nexports.RouterState = RouterState;\nexports.RouterStateSnapshot = RouterStateSnapshot;\nexports.PRIMARY_OUTLET = PRIMARY_OUTLET;\nexports.convertToParamMap = convertToParamMap;\nexports.UrlHandlingStrategy = UrlHandlingStrategy;\nexports.DefaultUrlSerializer = DefaultUrlSerializer;\nexports.UrlSegment = UrlSegment;\nexports.UrlSegmentGroup = UrlSegmentGroup;\nexports.UrlSerializer = UrlSerializer;\nexports.UrlTree = UrlTree;\nexports.VERSION = VERSION;\nexports.ɵROUTER_PROVIDERS = ROUTER_PROVIDERS;\nexports.ɵflatten = flatten;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=router.umd.js.map\n"]}
|