{"version":3,"sources":["webpack:///./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js","webpack:///./node_modules/aurelia-router/dist/native-modules/aurelia-router.js","webpack:///./node_modules/aurelia-polyfills/dist/native-modules/aurelia-polyfills.js","webpack:///./node_modules/aurelia-path/dist/native-modules/aurelia-path.js"],"names":["State","charSpec","this","nextStates","prototype","get","_iterator","_isArray","Array","isArray","_i","Symbol","iterator","_ref","length","next","done","value","child","validChars","invalidChars","put","state","push","repeat","match","ch","results","i","l","undefined","indexOf","escapeRegex","RegExp","join","StaticSegment","string","caseSensitive","eachChar","callback","s","ii","toUpperCase","toLowerCase","regex","replace","generate","DynamicSegment","name","optional","params","consumed","StarSegment","EpsilonSegment","RouteRecognizer","rootState","names","routes","Map","add","route","_this","currentState","skippableStates","types","statics","dynamics","stars","routeName","handler","isEmpty","segments","normalizedRoute","charAt","substr","splitRoute","split","segment","_match","_name","Error","parse","path","_addSegment","addSegment","firstState","nextState","j","jj","handlers","set","routeNames","_i2","_i3","forEach","r","getRoute","nameOrRoute","handlersFor","concat","hasRoute","generationUsesHref","href","routeParams","Object","assign","output","segmentValue","param","queryString","recognize","states","queryParams","isSlashDropped","normalizedPath","queryStart","decodeURI","pathLen","recognizeChar","solutions","_i4","_l","sort","a","b","sortSolutions","source","slice","captures","currentCapture","result","RecognizeResults","_handler","_names","_params","m","isDynamic","findHandler","splice","apply","extendStatics","d","setPrototypeOf","__proto__","p","hasOwnProperty","NavigationInstruction","init","plan","options","viewPortInstructions","ancestorParams","current","currentParams","config","hasChildRouter","getWildCardName","unshift","parentInstruction","allParams","lifecycleArgs","getAllInstructions","instructions","key","childInstruction","childNavigationInstruction","getAllPreviousInstructions","map","c","previousInstruction","filter","addViewPortInstruction","nameOrInitOptions","strategy","moduleId","component","viewPortInstruction","viewPortName","currentViewPort","childRouter","configRoute","wildcardIndex","lastIndexOf","getWildcardPath","wildcardName","getBaseUrl","$encodeURI","encodeURI","fragment","nonEmptyRoute","router","find","_commitChanges","waitToSwap","currentInstruction","navModel","isActive","refreshNavigation","loads","delaySwaps","_loop_1","viewPort","viewPorts","childNavInstruction","parentCatchHandler","process","then","Promise","resolve","all","x","swap","prune","_updateTitle","title","_buildTitle","titleSeparator","history","setTitle","separator","childTitles","navModelTitle","instructionRouter","transformTitle","child_nav_instruction","childTitle","instruction","NavModel","relativeHref","settings","updateTitle","_normalizeAbsolutePath","hasPushState","absolute","substring","_createRootedPath","baseUrl","isAbsoluteUrl","test","_ensureArrayWithSingleRoutePerConfig","routeConfigs","isRootedPath","RouterConfiguration","pipelineSteps","addPipelineStep","step","addAuthorizeStep","addPreActivateStep","addPreRenderStep","addPostRenderStep","fallbackRoute","_fallbackRoute","mapRoute","useViewPortDefaults","viewPortConfig","viewPortDefaults","routeConfig","createNavModel","addRoute","mapUnknownRoutes","unknownRouteConfig","exportToRouter","_a","handleUnknownRoutes","pipelineStepCount","isRoot","pipelineProvider","_b","name_1","addStep","Router","container","parent","reset","isConfigured","isNavigating","isExplicitNavigation","isExplicitNavigationBack","isNavigatingFirst","isNavigatingNew","isNavigatingRefresh","isNavigatingForward","isNavigatingBack","couldDeactivate","navigation","_fallbackOrder","_recognizer","_childRecognizer","_configuredPromise","_resolveConfiguredPromise","defineProperty","enumerable","configurable","registerViewPort","ensureConfigured","configure","callbackOrConfig","navigate","_resolveUrl","_hasPushState","navigateToRoute","navigateBack","createChild","recognizer","rootedPath","getAbsoluteRoot","order","nav","bind","validateRouteConfig","navigationStrategy","view","withChild","JSON","stringify","hasOwnRoute","catchAllHandler","_createRouteConfig","parentRouter","length_1","$viewPortDefaults","_refreshBaseUrl","generateBaseUrl","_createNavigationInstruction","url","queryIndex","urlRecognizationResults","instructionInit","compareQueryParams","first","evaluateNavigationStrategy","_parentCatchAllHandler","newParentInstruction","_findParentInstructionFromRouter","reject","evaluator","context","call","createCompletionHandler","status","completed","Pipeline","steps","run","getSteps","index","complete","currentStep","e","cancel","createNextFn","nextFn","isNavigationCommand","obj","Redirect","trigger","shouldContinueProcessing","setRouter","appRouter","useAppRouter","RedirectToRoute","_buildNavigationPlan","forceLifecycleMinimum","buildRedirectPlan","prevInstruction","defaultViewPortConfigs","buildTransitionPlans","viewPortPlans","viewPortConfigs","InternalActivationStrategy","redirect","redirectInstruction","originalInstructionParams","redirectInstructionParams","val","redirectLocation","newInstructionConfig","hasNewParams","hasDifferentParameterValues","pending","previousViewPortInstructions","prevViewPortInstruction","prevViewPortComponent","newInstructionViewPortConfigs","nextViewPortConfig","viewPortActivationStrategy","determineActivationStrategy","viewPortPlan","prevComponent","prevModuleId","task","childPlan","currentNavInstruction","newViewPortConfig","prevViewPortViewModel","viewModel","activationStrategy","prev","prevParams","nextParams","nextWildCardName","prevQueryParams","nextQueryParams","BuildNavigationPlanStep","navigationInstruction","catch","loadNewRoute","routeLoader","loadPromises","determineLoadingPlans","loadingPlan","loadRoute","loadingPlans","planConfig","loadComponent","childContainer","childRouter_1","getChildRouter","configureRouter","RouteLoader","LoadRouteStep","inject","CommitChangesStep","PipelineStatus","RouterEvent","PipelineSlotName","noChange","invokeLifecycle","processDeactivatable","callbackName","ignoreResult","infos","findDeactivatable","inspect","shouldContinue","iterate","processPotential","error","list","addPreviousDeactivatable","prevViewModel","processActivatable","findActivatable","current_1","keys","viewPortComponent","SafeSubscription","subscriptionFunc","_subscribed","_subscription","unsubscribe","subscribe","obs_1","sub","subscribed","CanDeactivatePreviousStep","CanActivateNextStep","DeactivatePreviousStep","ActivateNextStep","PipelineSlot","alias","slotName","slotAlias","PipelineProvider","createPipelineSlot","createPipeline","useCanDeactivateStep","pipeline","_findStep","found","slotSteps","includes","removeStep","slot","_clearSteps","logger","_super","AppRouter","events","__","constructor","create","__extends","maxInstructionCount","_queue","loadUrl","_queueInstruction","restorePreviousLocation","$viewPort","_dequeueInstruction","viewModel_1","_findViewModel","resolveConfiguredPromise_1","activate","routeHandler","deactivate","instructionCount","shift","navtracker","getState","currentNavTracker","currentNavigationTracker","Date","now","setState","publish","processResult","resolveInstruction","finalResult","navigationCommandResult","toString","_","innerResult","isInnerInstruction","eventAggregator","eventArgs","eventName","previousLocation","O","descriptor","dP","ObjectProto","toStringTag","toLength","iterCall","_typeof","FEATURE_NO_ES2015","GOPS","setDescriptor","G","global","id","random","Math","prefix","prefixLength","internalSymbol","DP","DPies","GOPN","GOPD","PIE","gOPN","gOPD","$defineProperties","hOP","pIE","addInternalIfNeeded","o","uid","writable","createWithSymbols","proto","descriptors","self","propertyIsEnumerable","$defineProperty","onlyNonSymbols","onlySymbols","setAndGetSymbol","sourceConstructor","_Symbol","description","TypeError","sourceMap","newDescriptor","copyAsNonEnumerable","$getOwnPropertySymbols","cachedWindowNames","window","getOwnPropertyNames","originalObjectGetOwnPropertyNames","symbols","symbol","arguments","str","o_O","protoDescriptor","getOwnPropertyDescriptor","tst","Si","AP","SP","returnThis","fromCodePoint","String","codePointAt","Number","isNaN","isFinite","endsWith","searchString","position","subjectString","floor","lastIndex","startsWith","from","it","min","ceil","toInteger","iter","fn","E","return","arrayLike","C","aLen","mapfn","mapping","iterFn","predicate","thisArg","findIndex","FEATURE_NO_ES2016","searchElement","len","parseInt","k","currentElement","n","hasDontEnumBug","dontEnums","dontEnumsLength","needsFix","prop","gOPS","filterOS","getOwnPropertySymbols","where","keyOrSymbol","arg","console","warn","is","y","_createCollection","_createCollection2","WeakMap","createCollection","sharedDelete","clear","sharedClear","sharedGet","has","mapHas","sharedSet","values","sharedIterator","_itp","_keys","sharedValues","entries","mapEntries","sharedForEach","Set","setHas","sharedAdd","_values","objectOnly","Collection","sharedSize","itp","array","array2","v","WeakSet","Function","Reflect","target","propertyKey","construct","Target","args","ownKeys","FEATURE_NO_ESNEXT","emptyMetadata","freeze","getOwnMetadata","metadataKey","targetKey","defineMetadata","metadataValue","metadataContainer","metadata","relativeToFile","file","fileParts","nameParts","trim","normalizedBaseParts","ary","part","trimDots","path1","path2","urlPrefix","schemeMatch","scheme","trailingSlash","url1","url2","url3","pop","encode","encodeURIComponent","encodeKey","buildParam","traditional","arrayKey","propertyName","buildQueryString","pairs","processScalarParam","existedParam","parseComplexParam","keysLastIndex","preventPollution","prevValue","parseQueryString","query","pair","decodeURIComponent"],"mappings":"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","file":"vendors~50e8d500.7b2be39e2f113973c518.chunk.js","sourcesContent":["\n\nimport { buildQueryString, parseQueryString } from 'aurelia-path';\n\nexport var State = function () {\n  function State(charSpec) {\n    \n\n    this.charSpec = charSpec;\n    this.nextStates = [];\n  }\n\n  State.prototype.get = function get(charSpec) {\n    for (var _iterator = this.nextStates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var child = _ref;\n\n      var isEqual = child.charSpec.validChars === charSpec.validChars && child.charSpec.invalidChars === charSpec.invalidChars;\n\n      if (isEqual) {\n        return child;\n      }\n    }\n\n    return undefined;\n  };\n\n  State.prototype.put = function put(charSpec) {\n    var state = this.get(charSpec);\n\n    if (state) {\n      return state;\n    }\n\n    state = new State(charSpec);\n\n    this.nextStates.push(state);\n\n    if (charSpec.repeat) {\n      state.nextStates.push(state);\n    }\n\n    return state;\n  };\n\n  State.prototype.match = function match(ch) {\n    var nextStates = this.nextStates;\n    var results = [];\n\n    for (var i = 0, l = nextStates.length; i < l; i++) {\n      var child = nextStates[i];\n      var charSpec = child.charSpec;\n\n      if (charSpec.validChars !== undefined) {\n        if (charSpec.validChars.indexOf(ch) !== -1) {\n          results.push(child);\n        }\n      } else if (charSpec.invalidChars !== undefined) {\n        if (charSpec.invalidChars.indexOf(ch) === -1) {\n          results.push(child);\n        }\n      }\n    }\n\n    return results;\n  };\n\n  return State;\n}();\n\nvar specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n\nvar escapeRegex = new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'g');\n\nexport var StaticSegment = function () {\n  function StaticSegment(string, caseSensitive) {\n    \n\n    this.string = string;\n    this.caseSensitive = caseSensitive;\n  }\n\n  StaticSegment.prototype.eachChar = function eachChar(callback) {\n    var s = this.string;\n    for (var i = 0, ii = s.length; i < ii; ++i) {\n      var ch = s[i];\n      callback({ validChars: this.caseSensitive ? ch : ch.toUpperCase() + ch.toLowerCase() });\n    }\n  };\n\n  StaticSegment.prototype.regex = function regex() {\n    return this.string.replace(escapeRegex, '\\\\$1');\n  };\n\n  StaticSegment.prototype.generate = function generate() {\n    return this.string;\n  };\n\n  return StaticSegment;\n}();\n\nexport var DynamicSegment = function () {\n  function DynamicSegment(name, optional) {\n    \n\n    this.name = name;\n    this.optional = optional;\n  }\n\n  DynamicSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '/', repeat: true });\n  };\n\n  DynamicSegment.prototype.regex = function regex() {\n    return '([^/]+)';\n  };\n\n  DynamicSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return DynamicSegment;\n}();\n\nexport var StarSegment = function () {\n  function StarSegment(name) {\n    \n\n    this.name = name;\n  }\n\n  StarSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '', repeat: true });\n  };\n\n  StarSegment.prototype.regex = function regex() {\n    return '(.+)';\n  };\n\n  StarSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return StarSegment;\n}();\n\nexport var EpsilonSegment = function () {\n  function EpsilonSegment() {\n    \n  }\n\n  EpsilonSegment.prototype.eachChar = function eachChar() {};\n\n  EpsilonSegment.prototype.regex = function regex() {\n    return '';\n  };\n\n  EpsilonSegment.prototype.generate = function generate() {\n    return '';\n  };\n\n  return EpsilonSegment;\n}();\n\nexport var RouteRecognizer = function () {\n  function RouteRecognizer() {\n    \n\n    this.rootState = new State();\n    this.names = {};\n    this.routes = new Map();\n  }\n\n  RouteRecognizer.prototype.add = function add(route) {\n    var _this = this;\n\n    if (Array.isArray(route)) {\n      route.forEach(function (r) {\n        return _this.add(r);\n      });\n      return undefined;\n    }\n\n    var currentState = this.rootState;\n    var skippableStates = [];\n    var regex = '^';\n    var types = { statics: 0, dynamics: 0, stars: 0 };\n    var names = [];\n    var routeName = route.handler.name;\n    var isEmpty = true;\n    var segments = parse(route.path, names, types, route.caseSensitive);\n\n    for (var i = 0, ii = segments.length; i < ii; i++) {\n      var segment = segments[i];\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var _addSegment = addSegment(currentState, segment),\n          firstState = _addSegment[0],\n          nextState = _addSegment[1];\n\n      for (var j = 0, jj = skippableStates.length; j < jj; j++) {\n        skippableStates[j].nextStates.push(firstState);\n      }\n\n      if (segment.optional) {\n        skippableStates.push(nextState);\n        regex += '(?:/' + segment.regex() + ')?';\n      } else {\n        currentState = nextState;\n        regex += '/' + segment.regex();\n        skippableStates.length = 0;\n        isEmpty = false;\n      }\n    }\n\n    if (isEmpty) {\n      currentState = currentState.put({ validChars: '/' });\n      regex += '/?';\n    }\n\n    var handlers = [{ handler: route.handler, names: names }];\n\n    this.routes.set(route.handler, { segments: segments, handlers: handlers });\n    if (routeName) {\n      var routeNames = Array.isArray(routeName) ? routeName : [routeName];\n      for (var _i2 = 0; _i2 < routeNames.length; _i2++) {\n        if (!(routeNames[_i2] in this.names)) {\n          this.names[routeNames[_i2]] = { segments: segments, handlers: handlers };\n        }\n      }\n    }\n\n    for (var _i3 = 0; _i3 < skippableStates.length; _i3++) {\n      var state = skippableStates[_i3];\n      state.handlers = handlers;\n      state.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n      state.types = types;\n    }\n\n    currentState.handlers = handlers;\n    currentState.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n    currentState.types = types;\n\n    return currentState;\n  };\n\n  RouteRecognizer.prototype.getRoute = function getRoute(nameOrRoute) {\n    return typeof nameOrRoute === 'string' ? this.names[nameOrRoute] : this.routes.get(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.handlersFor = function handlersFor(nameOrRoute) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    return [].concat(route.handlers);\n  };\n\n  RouteRecognizer.prototype.hasRoute = function hasRoute(nameOrRoute) {\n    return !!this.getRoute(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.generate = function generate(nameOrRoute, params) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    var handler = route.handlers[0].handler;\n    if (handler.generationUsesHref) {\n      return handler.href;\n    }\n\n    var routeParams = Object.assign({}, params);\n    var segments = route.segments;\n    var consumed = {};\n    var output = '';\n\n    for (var i = 0, l = segments.length; i < l; i++) {\n      var segment = segments[i];\n\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var segmentValue = segment.generate(routeParams, consumed);\n      if (segmentValue === null || segmentValue === undefined) {\n        if (!segment.optional) {\n          throw new Error('A value is required for route parameter \\'' + segment.name + '\\' in route \\'' + nameOrRoute + '\\'.');\n        }\n      } else {\n        output += '/';\n        output += segmentValue;\n      }\n    }\n\n    if (output.charAt(0) !== '/') {\n      output = '/' + output;\n    }\n\n    for (var param in consumed) {\n      delete routeParams[param];\n    }\n\n    var queryString = buildQueryString(routeParams);\n    output += queryString ? '?' + queryString : '';\n\n    return output;\n  };\n\n  RouteRecognizer.prototype.recognize = function recognize(path) {\n    var states = [this.rootState];\n    var queryParams = {};\n    var isSlashDropped = false;\n    var normalizedPath = path;\n\n    var queryStart = normalizedPath.indexOf('?');\n    if (queryStart !== -1) {\n      var queryString = normalizedPath.substr(queryStart + 1, normalizedPath.length);\n      normalizedPath = normalizedPath.substr(0, queryStart);\n      queryParams = parseQueryString(queryString);\n    }\n\n    normalizedPath = decodeURI(normalizedPath);\n\n    if (normalizedPath.charAt(0) !== '/') {\n      normalizedPath = '/' + normalizedPath;\n    }\n\n    var pathLen = normalizedPath.length;\n    if (pathLen > 1 && normalizedPath.charAt(pathLen - 1) === '/') {\n      normalizedPath = normalizedPath.substr(0, pathLen - 1);\n      isSlashDropped = true;\n    }\n\n    for (var i = 0, l = normalizedPath.length; i < l; i++) {\n      states = recognizeChar(states, normalizedPath.charAt(i));\n      if (!states.length) {\n        break;\n      }\n    }\n\n    var solutions = [];\n    for (var _i4 = 0, _l = states.length; _i4 < _l; _i4++) {\n      if (states[_i4].handlers) {\n        solutions.push(states[_i4]);\n      }\n    }\n\n    states = sortSolutions(solutions);\n\n    var state = solutions[0];\n    if (state && state.handlers) {\n      if (isSlashDropped && state.regex.source.slice(-5) === '(.+)$') {\n        normalizedPath = normalizedPath + '/';\n      }\n\n      return findHandler(state, normalizedPath, queryParams);\n    }\n  };\n\n  return RouteRecognizer;\n}();\n\nvar RecognizeResults = function RecognizeResults(queryParams) {\n  \n\n  this.splice = Array.prototype.splice;\n  this.slice = Array.prototype.slice;\n  this.push = Array.prototype.push;\n  this.length = 0;\n  this.queryParams = queryParams || {};\n};\n\nfunction parse(route, names, types, caseSensitive) {\n  var normalizedRoute = route;\n  if (route.charAt(0) === '/') {\n    normalizedRoute = route.substr(1);\n  }\n\n  var results = [];\n\n  var splitRoute = normalizedRoute.split('/');\n  for (var i = 0, ii = splitRoute.length; i < ii; ++i) {\n    var segment = splitRoute[i];\n\n    var match = segment.match(/^:([^?]+)(\\?)?$/);\n    if (match) {\n      var _match = match,\n          _name = _match[1],\n          optional = _match[2];\n\n      if (_name.indexOf('=') !== -1) {\n        throw new Error('Parameter ' + _name + ' in route ' + route + ' has a default value, which is not supported.');\n      }\n      results.push(new DynamicSegment(_name, !!optional));\n      names.push(_name);\n      types.dynamics++;\n      continue;\n    }\n\n    match = segment.match(/^\\*(.+)$/);\n    if (match) {\n      results.push(new StarSegment(match[1]));\n      names.push(match[1]);\n      types.stars++;\n    } else if (segment === '') {\n      results.push(new EpsilonSegment());\n    } else {\n      results.push(new StaticSegment(segment, caseSensitive));\n      types.statics++;\n    }\n  }\n\n  return results;\n}\n\nfunction sortSolutions(states) {\n  return states.sort(function (a, b) {\n    if (a.types.stars !== b.types.stars) {\n      return a.types.stars - b.types.stars;\n    }\n\n    if (a.types.stars) {\n      if (a.types.statics !== b.types.statics) {\n        return b.types.statics - a.types.statics;\n      }\n      if (a.types.dynamics !== b.types.dynamics) {\n        return b.types.dynamics - a.types.dynamics;\n      }\n    }\n\n    if (a.types.dynamics !== b.types.dynamics) {\n      return a.types.dynamics - b.types.dynamics;\n    }\n\n    if (a.types.statics !== b.types.statics) {\n      return b.types.statics - a.types.statics;\n    }\n\n    return 0;\n  });\n}\n\nfunction recognizeChar(states, ch) {\n  var nextStates = [];\n\n  for (var i = 0, l = states.length; i < l; i++) {\n    var state = states[i];\n    nextStates.push.apply(nextStates, state.match(ch));\n  }\n\n  return nextStates;\n}\n\nfunction findHandler(state, path, queryParams) {\n  var handlers = state.handlers;\n  var regex = state.regex;\n  var captures = path.match(regex);\n  var currentCapture = 1;\n  var result = new RecognizeResults(queryParams);\n\n  for (var i = 0, l = handlers.length; i < l; i++) {\n    var _handler = handlers[i];\n    var _names = _handler.names;\n    var _params = {};\n\n    for (var j = 0, m = _names.length; j < m; j++) {\n      _params[_names[j]] = captures[currentCapture++];\n    }\n\n    result.push({ handler: _handler.handler, params: _params, isDynamic: !!_names.length });\n  }\n\n  return result;\n}\n\nfunction addSegment(currentState, segment) {\n  var firstState = currentState.put({ validChars: '/' });\n  var nextState = firstState;\n  segment.eachChar(function (ch) {\n    nextState = nextState.put(ch);\n  });\n\n  return [firstState, nextState];\n}","import { getLogger } from 'aurelia-logging';\nimport { Container } from 'aurelia-dependency-injection';\nimport { History } from 'aurelia-history';\nimport { RouteRecognizer } from 'aurelia-route-recognizer';\nimport { EventAggregator } from 'aurelia-event-aggregator';\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 = function(d, b) {\r\n    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    return extendStatics(d, b);\r\n};\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}\n\n/**\r\n * Class used to represent an instruction during a navigation.\r\n */\r\nvar NavigationInstruction = /** @class */ (function () {\r\n    function NavigationInstruction(init) {\r\n        /**\r\n         * Current built viewport plan of this nav instruction\r\n         */\r\n        this.plan = null;\r\n        this.options = {};\r\n        Object.assign(this, init);\r\n        this.params = this.params || {};\r\n        this.viewPortInstructions = {};\r\n        var ancestorParams = [];\r\n        var current = this;\r\n        do {\r\n            var currentParams = Object.assign({}, current.params);\r\n            if (current.config && current.config.hasChildRouter) {\r\n                // remove the param for the injected child route segment\r\n                delete currentParams[current.getWildCardName()];\r\n            }\r\n            ancestorParams.unshift(currentParams);\r\n            current = current.parentInstruction;\r\n        } while (current);\r\n        var allParams = Object.assign.apply(Object, [{}, this.queryParams].concat(ancestorParams));\r\n        this.lifecycleArgs = [allParams, this.config, this];\r\n    }\r\n    /**\r\n     * Gets an array containing this instruction and all child instructions for the current navigation.\r\n     */\r\n    NavigationInstruction.prototype.getAllInstructions = function () {\r\n        var instructions = [this];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        for (var key in viewPortInstructions) {\r\n            var childInstruction = viewPortInstructions[key].childNavigationInstruction;\r\n            if (childInstruction) {\r\n                instructions.push.apply(instructions, childInstruction.getAllInstructions());\r\n            }\r\n        }\r\n        return instructions;\r\n    };\r\n    /**\r\n     * Gets an array containing the instruction and all child instructions for the previous navigation.\r\n     * Previous instructions are no longer available after navigation completes.\r\n     */\r\n    NavigationInstruction.prototype.getAllPreviousInstructions = function () {\r\n        return this.getAllInstructions().map(function (c) { return c.previousInstruction; }).filter(function (c) { return c; });\r\n    };\r\n    NavigationInstruction.prototype.addViewPortInstruction = function (nameOrInitOptions, strategy, moduleId, component) {\r\n        var viewPortInstruction;\r\n        var viewPortName = typeof nameOrInitOptions === 'string' ? nameOrInitOptions : nameOrInitOptions.name;\r\n        var lifecycleArgs = this.lifecycleArgs;\r\n        var config = Object.assign({}, lifecycleArgs[1], { currentViewPort: viewPortName });\r\n        if (typeof nameOrInitOptions === 'string') {\r\n            viewPortInstruction = {\r\n                name: nameOrInitOptions,\r\n                strategy: strategy,\r\n                moduleId: moduleId,\r\n                component: component,\r\n                childRouter: component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        else {\r\n            viewPortInstruction = {\r\n                name: viewPortName,\r\n                strategy: nameOrInitOptions.strategy,\r\n                component: nameOrInitOptions.component,\r\n                moduleId: nameOrInitOptions.moduleId,\r\n                childRouter: nameOrInitOptions.component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        return this.viewPortInstructions[viewPortName] = viewPortInstruction;\r\n    };\r\n    /**\r\n     * Gets the name of the route pattern's wildcard parameter, if applicable.\r\n     */\r\n    NavigationInstruction.prototype.getWildCardName = function () {\r\n        // todo: potential issue, or at least unsafe typings\r\n        var configRoute = this.config.route;\r\n        var wildcardIndex = configRoute.lastIndexOf('*');\r\n        return configRoute.substr(wildcardIndex + 1);\r\n    };\r\n    /**\r\n     * Gets the path and query string created by filling the route\r\n     * pattern's wildcard parameter with the matching param.\r\n     */\r\n    NavigationInstruction.prototype.getWildcardPath = function () {\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        var queryString = this.queryString;\r\n        if (queryString) {\r\n            path += '?' + queryString;\r\n        }\r\n        return path;\r\n    };\r\n    /**\r\n     * Gets the instruction's base URL, accounting for wildcard route parameters.\r\n     */\r\n    NavigationInstruction.prototype.getBaseUrl = function () {\r\n        var _this = this;\r\n        var $encodeURI = encodeURI;\r\n        var fragment = decodeURI(this.fragment);\r\n        if (fragment === '') {\r\n            var nonEmptyRoute = this.router.routes.find(function (route) {\r\n                return route.name === _this.config.name &&\r\n                    route.route !== '';\r\n            });\r\n            if (nonEmptyRoute) {\r\n                fragment = nonEmptyRoute.route;\r\n            }\r\n        }\r\n        if (!this.params) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        if (!path) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        return $encodeURI(fragment.substr(0, fragment.lastIndexOf(path)));\r\n    };\r\n    /**\r\n     * Finalize a viewport instruction\r\n     * @internal\r\n     */\r\n    NavigationInstruction.prototype._commitChanges = function (waitToSwap) {\r\n        var _this = this;\r\n        var router = this.router;\r\n        router.currentInstruction = this;\r\n        var previousInstruction = this.previousInstruction;\r\n        if (previousInstruction) {\r\n            previousInstruction.config.navModel.isActive = false;\r\n        }\r\n        this.config.navModel.isActive = true;\r\n        router.refreshNavigation();\r\n        var loads = [];\r\n        var delaySwaps = [];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        var _loop_1 = function (viewPortName) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var viewPort = router.viewPorts[viewPortName];\r\n            if (!viewPort) {\r\n                throw new Error(\"There was no router-view found in the view for \" + viewPortInstruction.moduleId + \".\");\r\n            }\r\n            var childNavInstruction = viewPortInstruction.childNavigationInstruction;\r\n            if (viewPortInstruction.strategy === \"replace\" /* Replace */) {\r\n                if (childNavInstruction && childNavInstruction.parentCatchHandler) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n                else {\r\n                    if (waitToSwap) {\r\n                        delaySwaps.push({ viewPort: viewPort, viewPortInstruction: viewPortInstruction });\r\n                    }\r\n                    loads.push(viewPort\r\n                        .process(viewPortInstruction, waitToSwap)\r\n                        .then(function () { return childNavInstruction\r\n                        ? childNavInstruction._commitChanges(waitToSwap)\r\n                        : Promise.resolve(); }));\r\n                }\r\n            }\r\n            else {\r\n                if (childNavInstruction) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n            }\r\n        };\r\n        for (var viewPortName in viewPortInstructions) {\r\n            _loop_1(viewPortName);\r\n        }\r\n        return Promise\r\n            .all(loads)\r\n            .then(function () {\r\n            delaySwaps.forEach(function (x) { return x.viewPort.swap(x.viewPortInstruction); });\r\n            return null;\r\n        })\r\n            .then(function () { return prune(_this); });\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._updateTitle = function () {\r\n        var router = this.router;\r\n        var title = this._buildTitle(router.titleSeparator);\r\n        if (title) {\r\n            router.history.setTitle(title);\r\n        }\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._buildTitle = function (separator) {\r\n        if (separator === void 0) { separator = ' | '; }\r\n        var title = '';\r\n        var childTitles = [];\r\n        var navModelTitle = this.config.navModel.title;\r\n        var instructionRouter = this.router;\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        if (navModelTitle) {\r\n            title = instructionRouter.transformTitle(navModelTitle);\r\n        }\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var child_nav_instruction = viewPortInstruction.childNavigationInstruction;\r\n            if (child_nav_instruction) {\r\n                var childTitle = child_nav_instruction._buildTitle(separator);\r\n                if (childTitle) {\r\n                    childTitles.push(childTitle);\r\n                }\r\n            }\r\n        }\r\n        if (childTitles.length) {\r\n            title = childTitles.join(separator) + (title ? separator : '') + title;\r\n        }\r\n        if (instructionRouter.title) {\r\n            title += (title ? separator : '') + instructionRouter.transformTitle(instructionRouter.title);\r\n        }\r\n        return title;\r\n    };\r\n    return NavigationInstruction;\r\n}());\r\nvar prune = function (instruction) {\r\n    instruction.previousInstruction = null;\r\n    instruction.plan = null;\r\n};\n\n/**\r\n* Class for storing and interacting with a route's navigation settings.\r\n*/\r\nvar NavModel = /** @class */ (function () {\r\n    function NavModel(router, relativeHref) {\r\n        /**\r\n        * True if this nav item is currently active.\r\n        */\r\n        this.isActive = false;\r\n        /**\r\n        * The title.\r\n        */\r\n        this.title = null;\r\n        /**\r\n        * This nav item's absolute href.\r\n        */\r\n        this.href = null;\r\n        /**\r\n        * This nav item's relative href.\r\n        */\r\n        this.relativeHref = null;\r\n        /**\r\n        * Data attached to the route at configuration time.\r\n        */\r\n        this.settings = {};\r\n        /**\r\n        * The route config.\r\n        */\r\n        this.config = null;\r\n        this.router = router;\r\n        this.relativeHref = relativeHref;\r\n    }\r\n    /**\r\n    * Sets the route's title and updates document.title.\r\n    *  If the a navigation is in progress, the change will be applied\r\n    *  to document.title when the navigation completes.\r\n    *\r\n    * @param title The new title.\r\n    */\r\n    NavModel.prototype.setTitle = function (title) {\r\n        this.title = title;\r\n        if (this.isActive) {\r\n            this.router.updateTitle();\r\n        }\r\n    };\r\n    return NavModel;\r\n}());\n\nfunction _normalizeAbsolutePath(path, hasPushState, absolute) {\r\n    if (absolute === void 0) { absolute = false; }\r\n    if (!hasPushState && path[0] !== '#') {\r\n        path = '#' + path;\r\n    }\r\n    if (hasPushState && absolute) {\r\n        path = path.substring(1, path.length);\r\n    }\r\n    return path;\r\n}\r\nfunction _createRootedPath(fragment, baseUrl, hasPushState, absolute) {\r\n    if (isAbsoluteUrl.test(fragment)) {\r\n        return fragment;\r\n    }\r\n    var path = '';\r\n    if (baseUrl.length && baseUrl[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    path += baseUrl;\r\n    if ((!path.length || path[path.length - 1] !== '/') && fragment[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    if (path.length && path[path.length - 1] === '/' && fragment[0] === '/') {\r\n        path = path.substring(0, path.length - 1);\r\n    }\r\n    return _normalizeAbsolutePath(path + fragment, hasPushState, absolute);\r\n}\r\nfunction _resolveUrl(fragment, baseUrl, hasPushState) {\r\n    if (isRootedPath.test(fragment)) {\r\n        return _normalizeAbsolutePath(fragment, hasPushState);\r\n    }\r\n    return _createRootedPath(fragment, baseUrl, hasPushState);\r\n}\r\nfunction _ensureArrayWithSingleRoutePerConfig(config) {\r\n    var routeConfigs = [];\r\n    if (Array.isArray(config.route)) {\r\n        for (var i = 0, ii = config.route.length; i < ii; ++i) {\r\n            var current = Object.assign({}, config);\r\n            current.route = config.route[i];\r\n            routeConfigs.push(current);\r\n        }\r\n    }\r\n    else {\r\n        routeConfigs.push(Object.assign({}, config));\r\n    }\r\n    return routeConfigs;\r\n}\r\nvar isRootedPath = /^#?\\//;\r\nvar isAbsoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n\n/**\r\n * Class used to configure a [[Router]] instance.\r\n *\r\n * @constructor\r\n */\r\nvar RouterConfiguration = /** @class */ (function () {\r\n    function RouterConfiguration() {\r\n        this.instructions = [];\r\n        this.options = {};\r\n        this.pipelineSteps = [];\r\n    }\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s navigation pipeline.\r\n     *\r\n     * @param name The name of the pipeline slot to insert the step into.\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPipelineStep = function (name, step) {\r\n        if (step === null || step === undefined) {\r\n            throw new Error('Pipeline step cannot be null or undefined.');\r\n        }\r\n        this.pipelineSteps.push({ name: name, step: step });\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s authorize pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addAuthorizeStep = function (step) {\r\n        return this.addPipelineStep(\"authorize\" /* Authorize */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preActivate pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreActivateStep = function (step) {\r\n        return this.addPipelineStep(\"preActivate\" /* PreActivate */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreRenderStep = function (step) {\r\n        return this.addPipelineStep(\"preRender\" /* PreRender */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s postRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPostRenderStep = function (step) {\r\n        return this.addPipelineStep(\"postRender\" /* PostRender */, step);\r\n    };\r\n    /**\r\n     * Configures a route that will be used if there is no previous location available on navigation cancellation.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.fallbackRoute = function (fragment) {\r\n        this._fallbackRoute = fragment;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps one or more routes to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map, or an array of [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.map = function (route) {\r\n        var _this = this;\r\n        if (Array.isArray(route)) {\r\n            route.forEach(function (r) { return _this.map(r); });\r\n            return this;\r\n        }\r\n        return this.mapRoute(route);\r\n    };\r\n    /**\r\n     * Configures defaults to use for any view ports.\r\n     *\r\n     * @param viewPortConfig a view port configuration object to use as a\r\n     *  default, of the form { viewPortName: { moduleId } }.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.useViewPortDefaults = function (viewPortConfig) {\r\n        this.viewPortDefaults = viewPortConfig;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps a single route to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapRoute = function (config) {\r\n        this.instructions.push(function (router) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            var navModel;\r\n            for (var i = 0, ii = routeConfigs.length; i < ii; ++i) {\r\n                var routeConfig = routeConfigs[i];\r\n                routeConfig.settings = routeConfig.settings || {};\r\n                if (!navModel) {\r\n                    navModel = router.createNavModel(routeConfig);\r\n                }\r\n                router.addRoute(routeConfig, navModel);\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n    /**\r\n     * Registers an unknown route handler to be run when the URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config A string containing a moduleId to load, or a [[RouteConfig]], or a function that takes the\r\n     *  [[NavigationInstruction]] and selects a moduleId to load.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapUnknownRoutes = function (config) {\r\n        this.unknownRouteConfig = config;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies the current configuration to the specified [[Router]].\r\n     *\r\n     * @param router The [[Router]] to apply the configuration to.\r\n     */\r\n    RouterConfiguration.prototype.exportToRouter = function (router) {\r\n        var instructions = this.instructions;\r\n        for (var i = 0, ii = instructions.length; i < ii; ++i) {\r\n            instructions[i](router);\r\n        }\r\n        var _a = this, title = _a.title, titleSeparator = _a.titleSeparator, unknownRouteConfig = _a.unknownRouteConfig, _fallbackRoute = _a._fallbackRoute, viewPortDefaults = _a.viewPortDefaults;\r\n        if (title) {\r\n            router.title = title;\r\n        }\r\n        if (titleSeparator) {\r\n            router.titleSeparator = titleSeparator;\r\n        }\r\n        if (unknownRouteConfig) {\r\n            router.handleUnknownRoutes(unknownRouteConfig);\r\n        }\r\n        if (_fallbackRoute) {\r\n            router.fallbackRoute = _fallbackRoute;\r\n        }\r\n        if (viewPortDefaults) {\r\n            router.useViewPortDefaults(viewPortDefaults);\r\n        }\r\n        Object.assign(router.options, this.options);\r\n        var pipelineSteps = this.pipelineSteps;\r\n        var pipelineStepCount = pipelineSteps.length;\r\n        if (pipelineStepCount) {\r\n            if (!router.isRoot) {\r\n                throw new Error('Pipeline steps can only be added to the root router');\r\n            }\r\n            var pipelineProvider = router.pipelineProvider;\r\n            for (var i = 0, ii = pipelineStepCount; i < ii; ++i) {\r\n                var _b = pipelineSteps[i], name_1 = _b.name, step = _b.step;\r\n                pipelineProvider.addStep(name_1, step);\r\n            }\r\n        }\r\n    };\r\n    return RouterConfiguration;\r\n}());\n\n/**\r\n * The primary class responsible for handling routing and navigation.\r\n */\r\nvar Router = /** @class */ (function () {\r\n    /**\r\n     * @param container The [[Container]] to use when child routers.\r\n     * @param history The [[History]] implementation to delegate navigation requests to.\r\n     */\r\n    function Router(container, history) {\r\n        var _this = this;\r\n        /**\r\n         * The parent router, or null if this instance is not a child router.\r\n         */\r\n        this.parent = null;\r\n        this.options = {};\r\n        /**\r\n         * The defaults used when a viewport lacks specified content\r\n         */\r\n        this.viewPortDefaults = {};\r\n        /**\r\n         * Extension point to transform the document title before it is built and displayed.\r\n         * By default, child routers delegate to the parent router, and the app router\r\n         * returns the title unchanged.\r\n         */\r\n        this.transformTitle = function (title) {\r\n            if (_this.parent) {\r\n                return _this.parent.transformTitle(title);\r\n            }\r\n            return title;\r\n        };\r\n        this.container = container;\r\n        this.history = history;\r\n        this.reset();\r\n    }\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    Router.prototype.reset = function () {\r\n        var _this = this;\r\n        this.viewPorts = {};\r\n        this.routes = [];\r\n        this.baseUrl = '';\r\n        this.isConfigured = false;\r\n        this.isNavigating = false;\r\n        this.isExplicitNavigation = false;\r\n        this.isExplicitNavigationBack = false;\r\n        this.isNavigatingFirst = false;\r\n        this.isNavigatingNew = false;\r\n        this.isNavigatingRefresh = false;\r\n        this.isNavigatingForward = false;\r\n        this.isNavigatingBack = false;\r\n        this.couldDeactivate = false;\r\n        this.navigation = [];\r\n        this.currentInstruction = null;\r\n        this.viewPortDefaults = {};\r\n        this._fallbackOrder = 100;\r\n        this._recognizer = new RouteRecognizer();\r\n        this._childRecognizer = new RouteRecognizer();\r\n        this._configuredPromise = new Promise(function (resolve) {\r\n            _this._resolveConfiguredPromise = resolve;\r\n        });\r\n    };\r\n    Object.defineProperty(Router.prototype, \"isRoot\", {\r\n        /**\r\n         * Gets a value indicating whether or not this [[Router]] is the root in the router tree. I.e., it has no parent.\r\n         */\r\n        get: function () {\r\n            return !this.parent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort.\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    Router.prototype.registerViewPort = function (viewPort, name) {\r\n        name = name || 'default';\r\n        this.viewPorts[name] = viewPort;\r\n    };\r\n    /**\r\n     * Returns a Promise that resolves when the router is configured.\r\n     */\r\n    Router.prototype.ensureConfigured = function () {\r\n        return this._configuredPromise;\r\n    };\r\n    /**\r\n     * Configures the router.\r\n     *\r\n     * @param callbackOrConfig The [[RouterConfiguration]] or a callback that takes a [[RouterConfiguration]].\r\n     */\r\n    Router.prototype.configure = function (callbackOrConfig) {\r\n        var _this = this;\r\n        this.isConfigured = true;\r\n        var result = callbackOrConfig;\r\n        var config;\r\n        if (typeof callbackOrConfig === 'function') {\r\n            config = new RouterConfiguration();\r\n            result = callbackOrConfig(config);\r\n        }\r\n        return Promise\r\n            .resolve(result)\r\n            .then(function (c) {\r\n            if (c && c.exportToRouter) {\r\n                config = c;\r\n            }\r\n            config.exportToRouter(_this);\r\n            _this.isConfigured = true;\r\n            _this._resolveConfiguredPromise();\r\n        });\r\n    };\r\n    /**\r\n     * Navigates to a new location.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigate = function (fragment, options) {\r\n        if (!this.isConfigured && this.parent) {\r\n            return this.parent.navigate(fragment, options);\r\n        }\r\n        this.isExplicitNavigation = true;\r\n        return this.history.navigate(_resolveUrl(fragment, this.baseUrl, this.history._hasPushState), options);\r\n    };\r\n    /**\r\n     * Navigates to a new location corresponding to the route and params specified. Equivallent to [[Router.generate]] followed\r\n     * by [[Router.navigate]].\r\n     *\r\n     * @param route The name of the route to use when generating the navigation location.\r\n     * @param params The route parameters to be used when populating the route pattern.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigateToRoute = function (route, params, options) {\r\n        var path = this.generate(route, params);\r\n        return this.navigate(path, options);\r\n    };\r\n    /**\r\n     * Navigates back to the most recent location in history.\r\n     */\r\n    Router.prototype.navigateBack = function () {\r\n        this.isExplicitNavigationBack = true;\r\n        this.history.navigateBack();\r\n    };\r\n    /**\r\n     * Creates a child router of the current router.\r\n     *\r\n     * @param container The [[Container]] to provide to the child router. Uses the current [[Router]]'s [[Container]] if unspecified.\r\n     * @returns {Router} The new child Router.\r\n     */\r\n    Router.prototype.createChild = function (container) {\r\n        var childRouter = new Router(container || this.container.createChild(), this.history);\r\n        childRouter.parent = this;\r\n        return childRouter;\r\n    };\r\n    /**\r\n     * Generates a URL fragment matching the specified route pattern.\r\n     *\r\n     * @param name The name of the route whose pattern should be used to generate the fragment.\r\n     * @param params The route params to be used to populate the route pattern.\r\n     * @param options If options.absolute = true, then absolute url will be generated; otherwise, it will be relative url.\r\n     * @returns {string} A string containing the generated URL fragment.\r\n     */\r\n    Router.prototype.generate = function (nameOrRoute, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        // A child recognizer generates routes for potential child routes. Any potential child route is added\r\n        // to the childRoute property of params for the childRouter to recognize. When generating routes, we\r\n        // use the childRecognizer when childRoute params are available to generate a child router enabled route.\r\n        var recognizer = 'childRoute' in params ? this._childRecognizer : this._recognizer;\r\n        var hasRoute = recognizer.hasRoute(nameOrRoute);\r\n        if (!hasRoute) {\r\n            if (this.parent) {\r\n                return this.parent.generate(nameOrRoute, params, options);\r\n            }\r\n            throw new Error(\"A route with name '\" + nameOrRoute + \"' could not be found. Check that `name: '\" + nameOrRoute + \"'` was specified in the route's config.\");\r\n        }\r\n        var path = recognizer.generate(nameOrRoute, params);\r\n        var rootedPath = _createRootedPath(path, this.baseUrl, this.history._hasPushState, options.absolute);\r\n        return options.absolute ? \"\" + this.history.getAbsoluteRoot() + rootedPath : rootedPath;\r\n    };\r\n    /**\r\n     * Creates a [[NavModel]] for the specified route config.\r\n     *\r\n     * @param config The route config.\r\n     */\r\n    Router.prototype.createNavModel = function (config) {\r\n        var navModel = new NavModel(this, 'href' in config\r\n            ? config.href\r\n            // potential error when config.route is a string[] ?\r\n            : config.route);\r\n        navModel.title = config.title;\r\n        navModel.order = config.nav;\r\n        navModel.href = config.href;\r\n        navModel.settings = config.settings;\r\n        navModel.config = config;\r\n        return navModel;\r\n    };\r\n    /**\r\n     * Registers a new route with the router.\r\n     *\r\n     * @param config The [[RouteConfig]].\r\n     * @param navModel The [[NavModel]] to use for the route. May be omitted for single-pattern routes.\r\n     */\r\n    Router.prototype.addRoute = function (config, navModel) {\r\n        if (Array.isArray(config.route)) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            // the following is wrong. todo: fix this after TS refactoring release\r\n            routeConfigs.forEach(this.addRoute.bind(this));\r\n            return;\r\n        }\r\n        validateRouteConfig(config);\r\n        if (!('viewPorts' in config) && !config.navigationStrategy) {\r\n            config.viewPorts = {\r\n                'default': {\r\n                    moduleId: config.moduleId,\r\n                    view: config.view\r\n                }\r\n            };\r\n        }\r\n        if (!navModel) {\r\n            navModel = this.createNavModel(config);\r\n        }\r\n        this.routes.push(config);\r\n        var path = config.route;\r\n        if (path.charAt(0) === '/') {\r\n            path = path.substr(1);\r\n        }\r\n        var caseSensitive = config.caseSensitive === true;\r\n        var state = this._recognizer.add({\r\n            path: path,\r\n            handler: config,\r\n            caseSensitive: caseSensitive\r\n        });\r\n        if (path) {\r\n            var settings = config.settings;\r\n            delete config.settings;\r\n            var withChild = JSON.parse(JSON.stringify(config));\r\n            config.settings = settings;\r\n            withChild.route = path + \"/*childRoute\";\r\n            withChild.hasChildRouter = true;\r\n            this._childRecognizer.add({\r\n                path: withChild.route,\r\n                handler: withChild,\r\n                caseSensitive: caseSensitive\r\n            });\r\n            withChild.navModel = navModel;\r\n            withChild.settings = config.settings;\r\n            withChild.navigationStrategy = config.navigationStrategy;\r\n        }\r\n        config.navModel = navModel;\r\n        var navigation = this.navigation;\r\n        if ((navModel.order || navModel.order === 0) && navigation.indexOf(navModel) === -1) {\r\n            if ((!navModel.href && navModel.href !== '') && (state.types.dynamics || state.types.stars)) {\r\n                throw new Error('Invalid route config for \"' + config.route + '\" : dynamic routes must specify an \"href:\" to be included in the navigation model.');\r\n            }\r\n            if (typeof navModel.order !== 'number') {\r\n                navModel.order = ++this._fallbackOrder;\r\n            }\r\n            navigation.push(navModel);\r\n            // this is a potential error / inconsistency between browsers\r\n            //\r\n            // MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\r\n            // If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other,\r\n            // but sorted with respect to all different elements.\r\n            // Note: the ECMAscript standard does not guarantee this behaviour,\r\n            // and thus not all browsers (e.g. Mozilla versions dating back to at least 2003) respect this.\r\n            navigation.sort(function (a, b) { return a.order - b.order; });\r\n        }\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] or one of its ancestors has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasRoute = function (name) {\r\n        return !!(this._recognizer.hasRoute(name) || this.parent && this.parent.hasRoute(name));\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasOwnRoute = function (name) {\r\n        return this._recognizer.hasRoute(name);\r\n    };\r\n    /**\r\n     * Register a handler to use when the incoming URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config The moduleId, or a function that selects the moduleId, or a [[RouteConfig]].\r\n     */\r\n    Router.prototype.handleUnknownRoutes = function (config) {\r\n        var _this = this;\r\n        if (!config) {\r\n            throw new Error('Invalid unknown route handler');\r\n        }\r\n        this.catchAllHandler = function (instruction) {\r\n            return _this\r\n                ._createRouteConfig(config, instruction)\r\n                .then(function (c) {\r\n                instruction.config = c;\r\n                return instruction;\r\n            });\r\n        };\r\n    };\r\n    /**\r\n     * Updates the document title using the current navigation instruction.\r\n     */\r\n    Router.prototype.updateTitle = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            return parentRouter.updateTitle();\r\n        }\r\n        var currentInstruction = this.currentInstruction;\r\n        if (currentInstruction) {\r\n            currentInstruction._updateTitle();\r\n        }\r\n        return undefined;\r\n    };\r\n    /**\r\n     * Updates the navigation routes with hrefs relative to the current location.\r\n     * Note: This method will likely move to a plugin in a future release.\r\n     */\r\n    Router.prototype.refreshNavigation = function () {\r\n        var nav = this.navigation;\r\n        for (var i = 0, length_1 = nav.length; i < length_1; i++) {\r\n            var current = nav[i];\r\n            if (!current.config.href) {\r\n                current.href = _createRootedPath(current.relativeHref, this.baseUrl, this.history._hasPushState);\r\n            }\r\n            else {\r\n                current.href = _normalizeAbsolutePath(current.config.href, this.history._hasPushState);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Sets the default configuration for the view ports. This specifies how to\r\n     *  populate a view port for which no module is specified. The default is\r\n     *  an empty view/view-model pair.\r\n     */\r\n    Router.prototype.useViewPortDefaults = function ($viewPortDefaults) {\r\n        // a workaround to have strong typings while not requiring to expose interface ViewPortInstruction\r\n        var viewPortDefaults = $viewPortDefaults;\r\n        for (var viewPortName in viewPortDefaults) {\r\n            var viewPortConfig = viewPortDefaults[viewPortName];\r\n            this.viewPortDefaults[viewPortName] = {\r\n                moduleId: viewPortConfig.moduleId\r\n            };\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._refreshBaseUrl = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            this.baseUrl = generateBaseUrl(parentRouter, parentRouter.currentInstruction);\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._createNavigationInstruction = function (url, parentInstruction) {\r\n        if (url === void 0) { url = ''; }\r\n        if (parentInstruction === void 0) { parentInstruction = null; }\r\n        var fragment = url;\r\n        var queryString = '';\r\n        var queryIndex = url.indexOf('?');\r\n        if (queryIndex !== -1) {\r\n            fragment = url.substr(0, queryIndex);\r\n            queryString = url.substr(queryIndex + 1);\r\n        }\r\n        var urlRecognizationResults = this._recognizer.recognize(url);\r\n        if (!urlRecognizationResults || !urlRecognizationResults.length) {\r\n            urlRecognizationResults = this._childRecognizer.recognize(url);\r\n        }\r\n        var instructionInit = {\r\n            fragment: fragment,\r\n            queryString: queryString,\r\n            config: null,\r\n            parentInstruction: parentInstruction,\r\n            previousInstruction: this.currentInstruction,\r\n            router: this,\r\n            options: {\r\n                compareQueryParams: this.options.compareQueryParams\r\n            }\r\n        };\r\n        var result;\r\n        if (urlRecognizationResults && urlRecognizationResults.length) {\r\n            var first = urlRecognizationResults[0];\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: first.params,\r\n                queryParams: first.queryParams || urlRecognizationResults.queryParams,\r\n                config: first.config || first.handler\r\n            }));\r\n            if (typeof first.handler === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler, first);\r\n            }\r\n            else if (first.handler && typeof first.handler.navigationStrategy === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler.navigationStrategy, first.handler);\r\n            }\r\n            else {\r\n                result = Promise.resolve(instruction);\r\n            }\r\n        }\r\n        else if (this.catchAllHandler) {\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: { path: fragment },\r\n                queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                config: null // config will be created by the catchAllHandler\r\n            }));\r\n            result = evaluateNavigationStrategy(instruction, this.catchAllHandler);\r\n        }\r\n        else if (this.parent) {\r\n            var router = this._parentCatchAllHandler(this.parent);\r\n            if (router) {\r\n                var newParentInstruction = this._findParentInstructionFromRouter(router, parentInstruction);\r\n                var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                    params: { path: fragment },\r\n                    queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                    router: router,\r\n                    parentInstruction: newParentInstruction,\r\n                    parentCatchHandler: true,\r\n                    config: null // config will be created by the chained parent catchAllHandler\r\n                }));\r\n                result = evaluateNavigationStrategy(instruction, router.catchAllHandler);\r\n            }\r\n        }\r\n        if (result && parentInstruction) {\r\n            this.baseUrl = generateBaseUrl(this.parent, parentInstruction);\r\n        }\r\n        return result || Promise.reject(new Error(\"Route not found: \" + url));\r\n    };\r\n    /**@internal */\r\n    Router.prototype._findParentInstructionFromRouter = function (router, instruction) {\r\n        if (instruction.router === router) {\r\n            instruction.fragment = router.baseUrl; // need to change the fragment in case of a redirect instead of moduleId\r\n            return instruction;\r\n        }\r\n        else if (instruction.parentInstruction) {\r\n            return this._findParentInstructionFromRouter(router, instruction.parentInstruction);\r\n        }\r\n        return undefined;\r\n    };\r\n    /**@internal */\r\n    Router.prototype._parentCatchAllHandler = function (router) {\r\n        if (router.catchAllHandler) {\r\n            return router;\r\n        }\r\n        else if (router.parent) {\r\n            return this._parentCatchAllHandler(router.parent);\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * @internal\r\n     */\r\n    Router.prototype._createRouteConfig = function (config, instruction) {\r\n        var _this = this;\r\n        return Promise\r\n            .resolve(config)\r\n            .then(function (c) {\r\n            if (typeof c === 'string') {\r\n                return { moduleId: c };\r\n            }\r\n            else if (typeof c === 'function') {\r\n                return c(instruction);\r\n            }\r\n            return c;\r\n        })\r\n            // typing here could be either RouteConfig or RedirectConfig\r\n            // but temporarily treat both as RouteConfig\r\n            // todo: improve typings precision\r\n            .then(function (c) { return typeof c === 'string' ? { moduleId: c } : c; })\r\n            .then(function (c) {\r\n            c.route = instruction.params.path;\r\n            validateRouteConfig(c);\r\n            if (!c.navModel) {\r\n                c.navModel = _this.createNavModel(c);\r\n            }\r\n            return c;\r\n        });\r\n    };\r\n    return Router;\r\n}());\r\n/* @internal exported for unit testing */\r\nvar generateBaseUrl = function (router, instruction) {\r\n    return \"\" + (router.baseUrl || '') + (instruction.getBaseUrl() || '');\r\n};\r\n/* @internal exported for unit testing */\r\nvar validateRouteConfig = function (config) {\r\n    if (typeof config !== 'object') {\r\n        throw new Error('Invalid Route Config');\r\n    }\r\n    if (typeof config.route !== 'string') {\r\n        var name_1 = config.name || '(no name)';\r\n        throw new Error('Invalid Route Config for \"' + name_1 + '\": You must specify a \"route:\" pattern.');\r\n    }\r\n    if (!('redirect' in config || config.moduleId || config.navigationStrategy || config.viewPorts)) {\r\n        throw new Error('Invalid Route Config for \"' + config.route + '\": You must specify a \"moduleId:\", \"redirect:\", \"navigationStrategy:\", or \"viewPorts:\".');\r\n    }\r\n};\r\n/* @internal exported for unit testing */\r\nvar evaluateNavigationStrategy = function (instruction, evaluator, context) {\r\n    return Promise\r\n        .resolve(evaluator.call(context, instruction))\r\n        .then(function () {\r\n        if (!('viewPorts' in instruction.config)) {\r\n            instruction.config.viewPorts = {\r\n                'default': {\r\n                    moduleId: instruction.config.moduleId\r\n                }\r\n            };\r\n        }\r\n        return instruction;\r\n    });\r\n};\n\n/**@internal exported for unit testing */\r\nvar createNextFn = function (instruction, steps) {\r\n    var index = -1;\r\n    var next = function () {\r\n        index++;\r\n        if (index < steps.length) {\r\n            var currentStep = steps[index];\r\n            try {\r\n                return currentStep(instruction, next);\r\n            }\r\n            catch (e) {\r\n                return next.reject(e);\r\n            }\r\n        }\r\n        else {\r\n            return next.complete();\r\n        }\r\n    };\r\n    next.complete = createCompletionHandler(next, \"completed\" /* Completed */);\r\n    next.cancel = createCompletionHandler(next, \"canceled\" /* Canceled */);\r\n    next.reject = createCompletionHandler(next, \"rejected\" /* Rejected */);\r\n    return next;\r\n};\r\n/**@internal exported for unit testing */\r\nvar createCompletionHandler = function (next, status) {\r\n    return function (output) { return Promise\r\n        .resolve({\r\n        status: status,\r\n        output: output,\r\n        completed: status === \"completed\" /* Completed */\r\n    }); };\r\n};\n\n/**\r\n * The class responsible for managing and processing the navigation pipeline.\r\n */\r\nvar Pipeline = /** @class */ (function () {\r\n    function Pipeline() {\r\n        /**\r\n         * The pipeline steps. And steps added via addStep will be converted to a function\r\n         * The actualy running functions with correct step contexts of this pipeline\r\n         */\r\n        this.steps = [];\r\n    }\r\n    /**\r\n     * Adds a step to the pipeline.\r\n     *\r\n     * @param step The pipeline step.\r\n     */\r\n    Pipeline.prototype.addStep = function (step) {\r\n        var run;\r\n        if (typeof step === 'function') {\r\n            run = step;\r\n        }\r\n        else if (typeof step.getSteps === 'function') {\r\n            // getSteps is to enable support open slots\r\n            // where devs can add multiple steps into the same slot name\r\n            var steps = step.getSteps();\r\n            for (var i = 0, l = steps.length; i < l; i++) {\r\n                this.addStep(steps[i]);\r\n            }\r\n            return this;\r\n        }\r\n        else {\r\n            run = step.run.bind(step);\r\n        }\r\n        this.steps.push(run);\r\n        return this;\r\n    };\r\n    /**\r\n     * Runs the pipeline.\r\n     *\r\n     * @param instruction The navigation instruction to process.\r\n     */\r\n    Pipeline.prototype.run = function (instruction) {\r\n        var nextFn = createNextFn(instruction, this.steps);\r\n        return nextFn();\r\n    };\r\n    return Pipeline;\r\n}());\n\n/**\r\n* Determines if the provided object is a navigation command.\r\n* A navigation command is anything with a navigate method.\r\n*\r\n* @param obj The object to check.\r\n*/\r\nfunction isNavigationCommand(obj) {\r\n    return obj && typeof obj.navigate === 'function';\r\n}\r\n/**\r\n* Used during the activation lifecycle to cause a redirect.\r\n*/\r\nvar Redirect = /** @class */ (function () {\r\n    /**\r\n     * @param url The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    function Redirect(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        this.url = url;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    Redirect.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    Redirect.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigate(this.url, this.options);\r\n    };\r\n    return Redirect;\r\n}());\r\n/**\r\n * Used during the activation lifecycle to cause a redirect to a named route.\r\n */\r\nvar RedirectToRoute = /** @class */ (function () {\r\n    /**\r\n     * @param route The name of the route.\r\n     * @param params The parameters to be sent to the activation method.\r\n     * @param options The options to use for navigation.\r\n     */\r\n    function RedirectToRoute(route, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        this.route = route;\r\n        this.params = params;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    RedirectToRoute.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    RedirectToRoute.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigateToRoute(this.route, this.params, this.options);\r\n    };\r\n    return RedirectToRoute;\r\n}());\n\n/**\r\n * @internal exported for unit testing\r\n */\r\nfunction _buildNavigationPlan(instruction, forceLifecycleMinimum) {\r\n    var config = instruction.config;\r\n    if ('redirect' in config) {\r\n        return buildRedirectPlan(instruction);\r\n    }\r\n    var prevInstruction = instruction.previousInstruction;\r\n    var defaultViewPortConfigs = instruction.router.viewPortDefaults;\r\n    if (prevInstruction) {\r\n        return buildTransitionPlans(instruction, prevInstruction, defaultViewPortConfigs, forceLifecycleMinimum);\r\n    }\r\n    // first navigation, only need to prepare a few information for each viewport plan\r\n    var viewPortPlans = {};\r\n    var viewPortConfigs = config.viewPorts;\r\n    for (var viewPortName in viewPortConfigs) {\r\n        var viewPortConfig = viewPortConfigs[viewPortName];\r\n        if (viewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            viewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            strategy: \"replace\" /* Replace */,\r\n            config: viewPortConfig\r\n        };\r\n    }\r\n    return Promise.resolve(viewPortPlans);\r\n}\r\n/**\r\n * Build redirect plan based on config of a navigation instruction\r\n * @internal exported for unit testing\r\n */\r\nvar buildRedirectPlan = function (instruction) {\r\n    var config = instruction.config;\r\n    var router = instruction.router;\r\n    return router\r\n        ._createNavigationInstruction(config.redirect)\r\n        .then(function (redirectInstruction) {\r\n        var params = {};\r\n        var originalInstructionParams = instruction.params;\r\n        var redirectInstructionParams = redirectInstruction.params;\r\n        for (var key in redirectInstructionParams) {\r\n            // If the param on the redirect points to another param, e.g. { route: first/:this, redirect: second/:this }\r\n            var val = redirectInstructionParams[key];\r\n            if (typeof val === 'string' && val[0] === ':') {\r\n                val = val.slice(1);\r\n                // And if that param is found on the original instruction then use it\r\n                if (val in originalInstructionParams) {\r\n                    params[key] = originalInstructionParams[val];\r\n                }\r\n            }\r\n            else {\r\n                params[key] = redirectInstructionParams[key];\r\n            }\r\n        }\r\n        var redirectLocation = router.generate(redirectInstruction.config, params, instruction.options);\r\n        // Special handling for child routes\r\n        for (var key in originalInstructionParams) {\r\n            redirectLocation = redirectLocation.replace(\":\" + key, originalInstructionParams[key]);\r\n        }\r\n        var queryString = instruction.queryString;\r\n        if (queryString) {\r\n            redirectLocation += '?' + queryString;\r\n        }\r\n        return Promise.resolve(new Redirect(redirectLocation));\r\n    });\r\n};\r\n/**\r\n * @param viewPortPlans the Plan record that holds information about built plans\r\n * @internal exported for unit testing\r\n */\r\nvar buildTransitionPlans = function (currentInstruction, previousInstruction, defaultViewPortConfigs, forceLifecycleMinimum) {\r\n    var viewPortPlans = {};\r\n    var newInstructionConfig = currentInstruction.config;\r\n    var hasNewParams = hasDifferentParameterValues(previousInstruction, currentInstruction);\r\n    var pending = [];\r\n    var previousViewPortInstructions = previousInstruction.viewPortInstructions;\r\n    var _loop_1 = function (viewPortName) {\r\n        var prevViewPortInstruction = previousViewPortInstructions[viewPortName];\r\n        var prevViewPortComponent = prevViewPortInstruction.component;\r\n        var newInstructionViewPortConfigs = newInstructionConfig.viewPorts;\r\n        // if this is invoked on a viewport without any changes, based on new url,\r\n        // newViewPortConfig will be the existing viewport instruction\r\n        var nextViewPortConfig = viewPortName in newInstructionViewPortConfigs\r\n            ? newInstructionViewPortConfigs[viewPortName]\r\n            : prevViewPortInstruction;\r\n        if (nextViewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            nextViewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        var viewPortActivationStrategy = determineActivationStrategy(currentInstruction, prevViewPortInstruction, nextViewPortConfig, hasNewParams, forceLifecycleMinimum);\r\n        var viewPortPlan = viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            // ViewPortInstruction can quack like a RouteConfig\r\n            config: nextViewPortConfig,\r\n            prevComponent: prevViewPortComponent,\r\n            prevModuleId: prevViewPortInstruction.moduleId,\r\n            strategy: viewPortActivationStrategy\r\n        };\r\n        // recursively build nav plans for all existing child routers/viewports of this viewport\r\n        // this is possible because existing child viewports and routers already have necessary information\r\n        // to process the wildcard path from parent instruction\r\n        if (viewPortActivationStrategy !== \"replace\" /* Replace */ && prevViewPortInstruction.childRouter) {\r\n            var path = currentInstruction.getWildcardPath();\r\n            var task = prevViewPortInstruction\r\n                .childRouter\r\n                ._createNavigationInstruction(path, currentInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction, \r\n                // is it safe to assume viewPortPlan has not been changed from previous assignment?\r\n                // if so, can just use local variable viewPortPlanStrategy\r\n                // there could be user code modifying viewport plan during _createNavigationInstruction?\r\n                viewPortPlan.strategy === \"invoke-lifecycle\" /* InvokeLifecycle */)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    // for bluebird ?\r\n                    return null;\r\n                });\r\n            });\r\n            pending.push(task);\r\n        }\r\n    };\r\n    for (var viewPortName in previousViewPortInstructions) {\r\n        _loop_1(viewPortName);\r\n    }\r\n    return Promise.all(pending).then(function () { return viewPortPlans; });\r\n};\r\n/**\r\n * @param newViewPortConfig if this is invoked on a viewport without any changes, based on new url, newViewPortConfig will be the existing viewport instruction\r\n * @internal exported for unit testing\r\n */\r\nvar determineActivationStrategy = function (currentNavInstruction, prevViewPortInstruction, newViewPortConfig, \r\n// indicates whether there is difference between old and new url params\r\nhasNewParams, forceLifecycleMinimum) {\r\n    var newInstructionConfig = currentNavInstruction.config;\r\n    var prevViewPortViewModel = prevViewPortInstruction.component.viewModel;\r\n    var viewPortPlanStrategy;\r\n    if (prevViewPortInstruction.moduleId !== newViewPortConfig.moduleId) {\r\n        viewPortPlanStrategy = \"replace\" /* Replace */;\r\n    }\r\n    else if ('determineActivationStrategy' in prevViewPortViewModel) {\r\n        viewPortPlanStrategy = prevViewPortViewModel.determineActivationStrategy.apply(prevViewPortViewModel, currentNavInstruction.lifecycleArgs);\r\n    }\r\n    else if (newInstructionConfig.activationStrategy) {\r\n        viewPortPlanStrategy = newInstructionConfig.activationStrategy;\r\n    }\r\n    else if (hasNewParams || forceLifecycleMinimum) {\r\n        viewPortPlanStrategy = \"invoke-lifecycle\" /* InvokeLifecycle */;\r\n    }\r\n    else {\r\n        viewPortPlanStrategy = \"no-change\" /* NoChange */;\r\n    }\r\n    return viewPortPlanStrategy;\r\n};\r\n/**@internal exported for unit testing */\r\nvar hasDifferentParameterValues = function (prev, next) {\r\n    var prevParams = prev.params;\r\n    var nextParams = next.params;\r\n    var nextWildCardName = next.config.hasChildRouter ? next.getWildCardName() : null;\r\n    for (var key in nextParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    if (!next.options.compareQueryParams) {\r\n        return false;\r\n    }\r\n    var prevQueryParams = prev.queryParams;\r\n    var nextQueryParams = next.queryParams;\r\n    for (var key in nextQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n};\n\n/**\r\n * Transform a navigation instruction into viewport plan record object,\r\n * or a redirect request if user viewmodel demands\r\n */\r\nvar BuildNavigationPlanStep = /** @class */ (function () {\r\n    function BuildNavigationPlanStep() {\r\n    }\r\n    BuildNavigationPlanStep.prototype.run = function (navigationInstruction, next) {\r\n        return _buildNavigationPlan(navigationInstruction)\r\n            .then(function (plan) {\r\n            if (plan instanceof Redirect) {\r\n                return next.cancel(plan);\r\n            }\r\n            navigationInstruction.plan = plan;\r\n            return next();\r\n        })\r\n            .catch(next.cancel);\r\n    };\r\n    return BuildNavigationPlanStep;\r\n}());\n\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadNewRoute = function (routeLoader, navigationInstruction) {\r\n    var loadingPlans = determineLoadingPlans(navigationInstruction);\r\n    var loadPromises = loadingPlans.map(function (loadingPlan) { return loadRoute(routeLoader, loadingPlan.navigationInstruction, loadingPlan.viewPortPlan); });\r\n    return Promise.all(loadPromises);\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar determineLoadingPlans = function (navigationInstruction, loadingPlans) {\r\n    if (loadingPlans === void 0) { loadingPlans = []; }\r\n    var viewPortPlans = navigationInstruction.plan;\r\n    for (var viewPortName in viewPortPlans) {\r\n        var viewPortPlan = viewPortPlans[viewPortName];\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (viewPortPlan.strategy === \"replace\" /* Replace */) {\r\n            loadingPlans.push({ viewPortPlan: viewPortPlan, navigationInstruction: navigationInstruction });\r\n            if (childNavInstruction) {\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n        else {\r\n            var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n                name: viewPortName,\r\n                strategy: viewPortPlan.strategy,\r\n                moduleId: viewPortPlan.prevModuleId,\r\n                component: viewPortPlan.prevComponent\r\n            });\r\n            if (childNavInstruction) {\r\n                viewPortInstruction.childNavigationInstruction = childNavInstruction;\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n    }\r\n    return loadingPlans;\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadRoute = function (routeLoader, navigationInstruction, viewPortPlan) {\r\n    var planConfig = viewPortPlan.config;\r\n    var moduleId = planConfig ? planConfig.moduleId : null;\r\n    return loadComponent(routeLoader, navigationInstruction, planConfig)\r\n        .then(function (component) {\r\n        var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n            name: viewPortPlan.name,\r\n            strategy: viewPortPlan.strategy,\r\n            moduleId: moduleId,\r\n            component: component\r\n        });\r\n        var childRouter = component.childRouter;\r\n        if (childRouter) {\r\n            var path = navigationInstruction.getWildcardPath();\r\n            return childRouter\r\n                ._createNavigationInstruction(path, navigationInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    viewPortInstruction.childNavigationInstruction = childInstruction;\r\n                    return loadNewRoute(routeLoader, childInstruction);\r\n                });\r\n            });\r\n        }\r\n        // ts complains without this, though they are same\r\n        return void 0;\r\n    });\r\n};\r\n/**\r\n * Load a routed-component based on navigation instruction and route config\r\n * @internal exported for unit testing only\r\n */\r\nvar loadComponent = function (routeLoader, navigationInstruction, config) {\r\n    var router = navigationInstruction.router;\r\n    var lifecycleArgs = navigationInstruction.lifecycleArgs;\r\n    return Promise.resolve()\r\n        .then(function () { return routeLoader.loadRoute(router, config, navigationInstruction); })\r\n        .then(\r\n    /**\r\n     * @param component an object carrying information about loaded route\r\n     * typically contains information about view model, childContainer, view and router\r\n     */\r\n    function (component) {\r\n        var viewModel = component.viewModel, childContainer = component.childContainer;\r\n        component.router = router;\r\n        component.config = config;\r\n        if ('configureRouter' in viewModel) {\r\n            var childRouter_1 = childContainer.getChildRouter();\r\n            component.childRouter = childRouter_1;\r\n            return childRouter_1\r\n                .configure(function (c) { return viewModel.configureRouter(c, childRouter_1, lifecycleArgs[0], lifecycleArgs[1], lifecycleArgs[2]); })\r\n                .then(function () { return component; });\r\n        }\r\n        return component;\r\n    });\r\n};\n\n/**\r\n * Abstract class that is responsible for loading view / view model from a route config\r\n * The default implementation can be found in `aurelia-templating-router`\r\n */\r\nvar RouteLoader = /** @class */ (function () {\r\n    function RouteLoader() {\r\n    }\r\n    /**\r\n     * Load a route config based on its viewmodel / view configuration\r\n     */\r\n    // return typing: return typings used to be never\r\n    // as it was a throw. Changing it to Promise<any> should not cause any issues\r\n    RouteLoader.prototype.loadRoute = function (router, config, navigationInstruction) {\r\n        throw new Error('Route loaders must implement \"loadRoute(router, config, navigationInstruction)\".');\r\n    };\r\n    return RouteLoader;\r\n}());\n\n/**\r\n * A pipeline step responsible for loading a route config of a navigation instruction\r\n */\r\nvar LoadRouteStep = /** @class */ (function () {\r\n    function LoadRouteStep(routeLoader) {\r\n        this.routeLoader = routeLoader;\r\n    }\r\n    /**@internal */\r\n    LoadRouteStep.inject = function () { return [RouteLoader]; };\r\n    /**\r\n     * Run the internal to load route config of a navigation instruction to prepare for next steps in the pipeline\r\n     */\r\n    LoadRouteStep.prototype.run = function (navigationInstruction, next) {\r\n        return loadNewRoute(this.routeLoader, navigationInstruction)\r\n            .then(next, next.cancel);\r\n    };\r\n    return LoadRouteStep;\r\n}());\n\n/**\r\n * A pipeline step for instructing a piepline to commit changes on a navigation instruction\r\n */\r\nvar CommitChangesStep = /** @class */ (function () {\r\n    function CommitChangesStep() {\r\n    }\r\n    CommitChangesStep.prototype.run = function (navigationInstruction, next) {\r\n        return navigationInstruction\r\n            ._commitChanges(/*wait to swap?*/ true)\r\n            .then(function () {\r\n            navigationInstruction._updateTitle();\r\n            return next();\r\n        });\r\n    };\r\n    return CommitChangesStep;\r\n}());\n\n/**\r\n * An optional interface describing the available activation strategies.\r\n * @internal Used internally.\r\n */\r\nvar InternalActivationStrategy;\r\n(function (InternalActivationStrategy) {\r\n    /**\r\n     * Reuse the existing view model, without invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"NoChange\"] = \"no-change\";\r\n    /**\r\n     * Reuse the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    /**\r\n     * Replace the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"Replace\"] = \"replace\";\r\n})(InternalActivationStrategy || (InternalActivationStrategy = {}));\r\n/**\r\n * The strategy to use when activating modules during navigation.\r\n */\r\n// kept for compat reason\r\nvar activationStrategy = {\r\n    noChange: \"no-change\" /* NoChange */,\r\n    invokeLifecycle: \"invoke-lifecycle\" /* InvokeLifecycle */,\r\n    replace: \"replace\" /* Replace */\r\n};\n\n/**\r\n * Recursively find list of deactivate-able view models\r\n * and invoke the either 'canDeactivate' or 'deactivate' on each\r\n * @internal exported for unit testing\r\n */\r\nvar processDeactivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var plan = navigationInstruction.plan;\r\n    var infos = findDeactivatable(plan, callbackName);\r\n    var i = infos.length; // query from inside out\r\n    function inspect(val) {\r\n        if (ignoreResult || shouldContinue(val)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        if (i--) {\r\n            try {\r\n                var viewModel = infos[i];\r\n                var result = viewModel[callbackName](navigationInstruction);\r\n                return processPotential(result, inspect, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        navigationInstruction.router.couldDeactivate = true;\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Recursively find and returns a list of deactivate-able view models\r\n * @internal exported for unit testing\r\n */\r\nvar findDeactivatable = function (plan, callbackName, list) {\r\n    if (list === void 0) { list = []; }\r\n    for (var viewPortName in plan) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var prevComponent = viewPortPlan.prevComponent;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle || viewPortPlan.strategy === activationStrategy.replace)\r\n            && prevComponent) {\r\n            var viewModel = prevComponent.viewModel;\r\n            if (callbackName in viewModel) {\r\n                list.push(viewModel);\r\n            }\r\n        }\r\n        if (viewPortPlan.strategy === activationStrategy.replace && prevComponent) {\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n        else if (viewPortPlan.childNavigationInstruction) {\r\n            findDeactivatable(viewPortPlan.childNavigationInstruction.plan, callbackName, list);\r\n        }\r\n    }\r\n    return list;\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar addPreviousDeactivatable = function (component, callbackName, list) {\r\n    var childRouter = component.childRouter;\r\n    if (childRouter && childRouter.currentInstruction) {\r\n        var viewPortInstructions = childRouter.currentInstruction.viewPortInstructions;\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var prevComponent = viewPortInstruction.component;\r\n            var prevViewModel = prevComponent.viewModel;\r\n            if (callbackName in prevViewModel) {\r\n                list.push(prevViewModel);\r\n            }\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n    }\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar processActivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var infos = findActivatable(navigationInstruction, callbackName);\r\n    var length = infos.length;\r\n    var i = -1; // query from top down\r\n    function inspect(val, router) {\r\n        if (ignoreResult || shouldContinue(val, router)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        var _a;\r\n        i++;\r\n        if (i < length) {\r\n            try {\r\n                var current_1 = infos[i];\r\n                var result = (_a = current_1.viewModel)[callbackName].apply(_a, current_1.lifecycleArgs);\r\n                return processPotential(result, function (val) { return inspect(val, current_1.router); }, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Find list of activatable view model and add to list (3rd parameter)\r\n * @internal exported for unit testing\r\n */\r\nvar findActivatable = function (navigationInstruction, callbackName, list, router) {\r\n    if (list === void 0) { list = []; }\r\n    var plan = navigationInstruction.plan;\r\n    Object\r\n        .keys(plan)\r\n        .forEach(function (viewPortName) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var viewPortInstruction = navigationInstruction.viewPortInstructions[viewPortName];\r\n        var viewPortComponent = viewPortInstruction.component;\r\n        var viewModel = viewPortComponent.viewModel;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle\r\n            || viewPortPlan.strategy === activationStrategy.replace)\r\n            && callbackName in viewModel) {\r\n            list.push({\r\n                viewModel: viewModel,\r\n                lifecycleArgs: viewPortInstruction.lifecycleArgs,\r\n                router: router\r\n            });\r\n        }\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (childNavInstruction) {\r\n            findActivatable(childNavInstruction, callbackName, list, viewPortComponent.childRouter || router);\r\n        }\r\n    });\r\n    return list;\r\n};\r\nvar shouldContinue = function (output, router) {\r\n    if (output instanceof Error) {\r\n        return false;\r\n    }\r\n    if (isNavigationCommand(output)) {\r\n        if (typeof output.setRouter === 'function') {\r\n            output.setRouter(router);\r\n        }\r\n        return !!output.shouldContinueProcessing;\r\n    }\r\n    if (output === undefined) {\r\n        return true;\r\n    }\r\n    return output;\r\n};\r\n/**\r\n * wraps a subscription, allowing unsubscribe calls even if\r\n * the first value comes synchronously\r\n */\r\nvar SafeSubscription = /** @class */ (function () {\r\n    function SafeSubscription(subscriptionFunc) {\r\n        this._subscribed = true;\r\n        this._subscription = subscriptionFunc(this);\r\n        if (!this._subscribed) {\r\n            this.unsubscribe();\r\n        }\r\n    }\r\n    Object.defineProperty(SafeSubscription.prototype, \"subscribed\", {\r\n        get: function () {\r\n            return this._subscribed;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    SafeSubscription.prototype.unsubscribe = function () {\r\n        if (this._subscribed && this._subscription) {\r\n            this._subscription.unsubscribe();\r\n        }\r\n        this._subscribed = false;\r\n    };\r\n    return SafeSubscription;\r\n}());\r\n/**\r\n * A function to process return value from `activate`/`canActivate` steps\r\n * Supports observable/promise\r\n *\r\n * For observable, resolve at first next() or on complete()\r\n */\r\nvar processPotential = function (obj, resolve, reject) {\r\n    // if promise like\r\n    if (obj && typeof obj.then === 'function') {\r\n        return Promise.resolve(obj).then(resolve).catch(reject);\r\n    }\r\n    // if observable\r\n    if (obj && typeof obj.subscribe === 'function') {\r\n        var obs_1 = obj;\r\n        return new SafeSubscription(function (sub) { return obs_1.subscribe({\r\n            next: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            },\r\n            error: function (error) {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    reject(error);\r\n                }\r\n            },\r\n            complete: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            }\r\n        }); });\r\n    }\r\n    // else just resolve\r\n    try {\r\n        return resolve(obj);\r\n    }\r\n    catch (error) {\r\n        return reject(error);\r\n    }\r\n};\n\n/**\r\n * A pipeline step responsible for finding and activating method `canDeactivate` on a view model of a route\r\n */\r\nvar CanDeactivatePreviousStep = /** @class */ (function () {\r\n    function CanDeactivatePreviousStep() {\r\n    }\r\n    CanDeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'canDeactivate', next);\r\n    };\r\n    return CanDeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `canActivate` on a view model of a route\r\n */\r\nvar CanActivateNextStep = /** @class */ (function () {\r\n    function CanActivateNextStep() {\r\n    }\r\n    CanActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'canActivate', next);\r\n    };\r\n    return CanActivateNextStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `deactivate` on a view model of a route\r\n */\r\nvar DeactivatePreviousStep = /** @class */ (function () {\r\n    function DeactivatePreviousStep() {\r\n    }\r\n    DeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'deactivate', next, true);\r\n    };\r\n    return DeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `activate` on a view model of a route\r\n */\r\nvar ActivateNextStep = /** @class */ (function () {\r\n    function ActivateNextStep() {\r\n    }\r\n    ActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'activate', next, true);\r\n    };\r\n    return ActivateNextStep;\r\n}());\n\n/**\r\n * A multi-slots Pipeline Placeholder Step for hooking into a pipeline execution\r\n */\r\nvar PipelineSlot = /** @class */ (function () {\r\n    function PipelineSlot(container, name, alias) {\r\n        this.steps = [];\r\n        this.container = container;\r\n        this.slotName = name;\r\n        this.slotAlias = alias;\r\n    }\r\n    PipelineSlot.prototype.getSteps = function () {\r\n        var _this = this;\r\n        return this.steps.map(function (x) { return _this.container.get(x); });\r\n    };\r\n    return PipelineSlot;\r\n}());\r\n/**\r\n * Class responsible for creating the navigation pipeline.\r\n */\r\nvar PipelineProvider = /** @class */ (function () {\r\n    function PipelineProvider(container) {\r\n        this.container = container;\r\n        this.steps = [\r\n            BuildNavigationPlanStep,\r\n            CanDeactivatePreviousStep,\r\n            LoadRouteStep,\r\n            createPipelineSlot(container, \"authorize\" /* Authorize */),\r\n            CanActivateNextStep,\r\n            createPipelineSlot(container, \"preActivate\" /* PreActivate */, 'modelbind'),\r\n            // NOTE: app state changes start below - point of no return\r\n            DeactivatePreviousStep,\r\n            ActivateNextStep,\r\n            createPipelineSlot(container, \"preRender\" /* PreRender */, 'precommit'),\r\n            CommitChangesStep,\r\n            createPipelineSlot(container, \"postRender\" /* PostRender */, 'postcomplete')\r\n        ];\r\n    }\r\n    /**@internal */\r\n    PipelineProvider.inject = function () { return [Container]; };\r\n    /**\r\n     * Create the navigation pipeline.\r\n     */\r\n    PipelineProvider.prototype.createPipeline = function (useCanDeactivateStep) {\r\n        var _this = this;\r\n        if (useCanDeactivateStep === void 0) { useCanDeactivateStep = true; }\r\n        var pipeline = new Pipeline();\r\n        this.steps.forEach(function (step) {\r\n            if (useCanDeactivateStep || step !== CanDeactivatePreviousStep) {\r\n                pipeline.addStep(_this.container.get(step));\r\n            }\r\n        });\r\n        return pipeline;\r\n    };\r\n    /**@internal */\r\n    PipelineProvider.prototype._findStep = function (name) {\r\n        // Steps that are not PipelineSlots are constructor functions, and they will automatically fail. Probably.\r\n        return this.steps.find(function (x) { return x.slotName === name || x.slotAlias === name; });\r\n    };\r\n    /**\r\n     * Adds a step into the pipeline at a known slot location.\r\n     */\r\n    PipelineProvider.prototype.addStep = function (name, step) {\r\n        var found = this._findStep(name);\r\n        if (found) {\r\n            var slotSteps = found.steps;\r\n            // prevent duplicates\r\n            if (!slotSteps.includes(step)) {\r\n                slotSteps.push(step);\r\n            }\r\n        }\r\n        else {\r\n            throw new Error(\"Invalid pipeline slot name: \" + name + \".\");\r\n        }\r\n    };\r\n    /**\r\n     * Removes a step from a slot in the pipeline\r\n     */\r\n    PipelineProvider.prototype.removeStep = function (name, step) {\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            var slotSteps = slot.steps;\r\n            slotSteps.splice(slotSteps.indexOf(step), 1);\r\n        }\r\n    };\r\n    /**\r\n     * Clears all steps from a slot in the pipeline\r\n     * @internal\r\n     */\r\n    PipelineProvider.prototype._clearSteps = function (name) {\r\n        if (name === void 0) { name = ''; }\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            slot.steps = [];\r\n        }\r\n    };\r\n    /**\r\n     * Resets all pipeline slots\r\n     */\r\n    PipelineProvider.prototype.reset = function () {\r\n        this._clearSteps(\"authorize\" /* Authorize */);\r\n        this._clearSteps(\"preActivate\" /* PreActivate */);\r\n        this._clearSteps(\"preRender\" /* PreRender */);\r\n        this._clearSteps(\"postRender\" /* PostRender */);\r\n    };\r\n    return PipelineProvider;\r\n}());\r\n/**@internal */\r\nvar createPipelineSlot = function (container, name, alias) {\r\n    return new PipelineSlot(container, name, alias);\r\n};\n\nvar logger = getLogger('app-router');\r\n/**\r\n * The main application router.\r\n */\r\nvar AppRouter = /** @class */ (function (_super) {\r\n    __extends(AppRouter, _super);\r\n    function AppRouter(container, history, pipelineProvider, events) {\r\n        var _this = _super.call(this, container, history) || this;\r\n        _this.pipelineProvider = pipelineProvider;\r\n        _this.events = events;\r\n        return _this;\r\n    }\r\n    /**@internal */\r\n    AppRouter.inject = function () { return [Container, History, PipelineProvider, EventAggregator]; };\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    AppRouter.prototype.reset = function () {\r\n        _super.prototype.reset.call(this);\r\n        this.maxInstructionCount = 10;\r\n        if (!this._queue) {\r\n            this._queue = [];\r\n        }\r\n        else {\r\n            this._queue.length = 0;\r\n        }\r\n    };\r\n    /**\r\n     * Loads the specified URL.\r\n     *\r\n     * @param url The URL fragment to load.\r\n     */\r\n    AppRouter.prototype.loadUrl = function (url) {\r\n        var _this = this;\r\n        return this\r\n            ._createNavigationInstruction(url)\r\n            .then(function (instruction) { return _this._queueInstruction(instruction); })\r\n            .catch(function (error) {\r\n            logger.error(error);\r\n            restorePreviousLocation(_this);\r\n        });\r\n    };\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort. This is typically a <router-view/> element in Aurelia default impl\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    AppRouter.prototype.registerViewPort = function (viewPort, name) {\r\n        var _this = this;\r\n        // having strong typing without changing public API\r\n        var $viewPort = viewPort;\r\n        _super.prototype.registerViewPort.call(this, $viewPort, name);\r\n        // beside adding viewport to the registry of this instance\r\n        // AppRouter also configure routing/history to start routing functionality\r\n        // There are situation where there are more than 1 <router-view/> element at root view\r\n        // in that case, still only activate once via the following guard\r\n        if (!this.isActive) {\r\n            var viewModel_1 = this._findViewModel($viewPort);\r\n            if ('configureRouter' in viewModel_1) {\r\n                // If there are more than one <router-view/> element at root view\r\n                // use this flag to guard against configure method being invoked multiple times\r\n                // this flag is set inside method configure\r\n                if (!this.isConfigured) {\r\n                    // replace the real resolve with a noop to guarantee that any action in base class Router\r\n                    // won't resolve the configurePromise prematurely\r\n                    var resolveConfiguredPromise_1 = this._resolveConfiguredPromise;\r\n                    this._resolveConfiguredPromise = function () { };\r\n                    return this\r\n                        .configure(function (config) {\r\n                        return Promise\r\n                            .resolve(viewModel_1.configureRouter(config, _this))\r\n                            // an issue with configure interface. Should be fixed there\r\n                            // todo: fix this via configure interface in router\r\n                            .then(function () { return config; });\r\n                    })\r\n                        .then(function () {\r\n                        _this.activate();\r\n                        resolveConfiguredPromise_1();\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                this.activate();\r\n            }\r\n        }\r\n        // when a viewport is added dynamically to a root view that is already activated\r\n        // just process the navigation instruction\r\n        else {\r\n            this._dequeueInstruction();\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    /**\r\n     * Activates the router. This instructs the router to begin listening for history changes and processing instructions.\r\n     *\r\n     * @params options The set of options to activate the router with.\r\n     */\r\n    AppRouter.prototype.activate = function (options) {\r\n        if (this.isActive) {\r\n            return;\r\n        }\r\n        this.isActive = true;\r\n        // route handler property is responsible for handling url change\r\n        // the interface of aurelia-history isn't clear on this perspective\r\n        this.options = Object.assign({ routeHandler: this.loadUrl.bind(this) }, this.options, options);\r\n        this.history.activate(this.options);\r\n        this._dequeueInstruction();\r\n    };\r\n    /**\r\n     * Deactivates the router.\r\n     */\r\n    AppRouter.prototype.deactivate = function () {\r\n        this.isActive = false;\r\n        this.history.deactivate();\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._queueInstruction = function (instruction) {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            instruction.resolve = resolve;\r\n            _this._queue.unshift(instruction);\r\n            _this._dequeueInstruction();\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._dequeueInstruction = function (instructionCount) {\r\n        var _this = this;\r\n        if (instructionCount === void 0) { instructionCount = 0; }\r\n        return Promise.resolve().then(function () {\r\n            if (_this.isNavigating && !instructionCount) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            var instruction = _this._queue.shift();\r\n            _this._queue.length = 0;\r\n            if (!instruction) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            _this.isNavigating = true;\r\n            var navtracker = _this.history.getState('NavigationTracker');\r\n            var currentNavTracker = _this.currentNavigationTracker;\r\n            if (!navtracker && !currentNavTracker) {\r\n                _this.isNavigatingFirst = true;\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!navtracker) {\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!currentNavTracker) {\r\n                _this.isNavigatingRefresh = true;\r\n            }\r\n            else if (currentNavTracker < navtracker) {\r\n                _this.isNavigatingForward = true;\r\n            }\r\n            else if (currentNavTracker > navtracker) {\r\n                _this.isNavigatingBack = true;\r\n            }\r\n            if (!navtracker) {\r\n                navtracker = Date.now();\r\n                _this.history.setState('NavigationTracker', navtracker);\r\n            }\r\n            _this.currentNavigationTracker = navtracker;\r\n            instruction.previousInstruction = _this.currentInstruction;\r\n            var maxInstructionCount = _this.maxInstructionCount;\r\n            if (!instructionCount) {\r\n                _this.events.publish(\"router:navigation:processing\" /* Processing */, { instruction: instruction });\r\n            }\r\n            else if (instructionCount === maxInstructionCount - 1) {\r\n                logger.error(instructionCount + 1 + \" navigation instructions have been attempted without success. Restoring last known good location.\");\r\n                restorePreviousLocation(_this);\r\n                return _this._dequeueInstruction(instructionCount + 1);\r\n            }\r\n            else if (instructionCount > maxInstructionCount) {\r\n                throw new Error('Maximum navigation attempts exceeded. Giving up.');\r\n            }\r\n            var pipeline = _this.pipelineProvider.createPipeline(!_this.couldDeactivate);\r\n            return pipeline\r\n                .run(instruction)\r\n                .then(function (result) { return processResult(instruction, result, instructionCount, _this); })\r\n                .catch(function (error) {\r\n                return { output: error instanceof Error ? error : new Error(error) };\r\n            })\r\n                .then(function (result) { return resolveInstruction(instruction, result, !!instructionCount, _this); });\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._findViewModel = function (viewPort) {\r\n        if (this.container.viewModel) {\r\n            return this.container.viewModel;\r\n        }\r\n        if (viewPort.container) {\r\n            var container = viewPort.container;\r\n            while (container) {\r\n                if (container.viewModel) {\r\n                    this.container.viewModel = container.viewModel;\r\n                    return container.viewModel;\r\n                }\r\n                container = container.parent;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return AppRouter;\r\n}(Router));\r\nvar processResult = function (instruction, result, instructionCount, router) {\r\n    if (!(result && 'completed' in result && 'output' in result)) {\r\n        result = result || {};\r\n        result.output = new Error(\"Expected router pipeline to return a navigation result, but got [\" + JSON.stringify(result) + \"] instead.\");\r\n    }\r\n    var finalResult = null;\r\n    var navigationCommandResult = null;\r\n    if (isNavigationCommand(result.output)) {\r\n        navigationCommandResult = result.output.navigate(router);\r\n    }\r\n    else {\r\n        finalResult = result;\r\n        if (!result.completed) {\r\n            if (result.output instanceof Error) {\r\n                logger.error(result.output.toString());\r\n            }\r\n            restorePreviousLocation(router);\r\n        }\r\n    }\r\n    return Promise.resolve(navigationCommandResult)\r\n        .then(function (_) { return router._dequeueInstruction(instructionCount + 1); })\r\n        .then(function (innerResult) { return finalResult || innerResult || result; });\r\n};\r\nvar resolveInstruction = function (instruction, result, isInnerInstruction, router) {\r\n    instruction.resolve(result);\r\n    var eventAggregator = router.events;\r\n    var eventArgs = { instruction: instruction, result: result };\r\n    if (!isInnerInstruction) {\r\n        router.isNavigating = false;\r\n        router.isExplicitNavigation = false;\r\n        router.isExplicitNavigationBack = false;\r\n        router.isNavigatingFirst = false;\r\n        router.isNavigatingNew = false;\r\n        router.isNavigatingRefresh = false;\r\n        router.isNavigatingForward = false;\r\n        router.isNavigatingBack = false;\r\n        router.couldDeactivate = false;\r\n        var eventName = void 0;\r\n        if (result.output instanceof Error) {\r\n            eventName = \"router:navigation:error\" /* Error */;\r\n        }\r\n        else if (!result.completed) {\r\n            eventName = \"router:navigation:canceled\" /* Canceled */;\r\n        }\r\n        else {\r\n            var queryString = instruction.queryString ? ('?' + instruction.queryString) : '';\r\n            router.history.previousLocation = instruction.fragment + queryString;\r\n            eventName = \"router:navigation:success\" /* Success */;\r\n        }\r\n        eventAggregator.publish(eventName, eventArgs);\r\n        eventAggregator.publish(\"router:navigation:complete\" /* Complete */, eventArgs);\r\n    }\r\n    else {\r\n        eventAggregator.publish(\"router:navigation:child:complete\" /* ChildComplete */, eventArgs);\r\n    }\r\n    return result;\r\n};\r\nvar restorePreviousLocation = function (router) {\r\n    var previousLocation = router.history.previousLocation;\r\n    if (previousLocation) {\r\n        router.navigate(previousLocation, { trigger: false, replace: true });\r\n    }\r\n    else if (router.fallbackRoute) {\r\n        router.navigate(router.fallbackRoute, { trigger: true, replace: true });\r\n    }\r\n    else {\r\n        logger.error('Router navigation failed, and no previous location or fallbackRoute could be restored.');\r\n    }\r\n};\n\n/**\r\n* The status of a Pipeline.\r\n*/\r\nvar PipelineStatus;\r\n(function (PipelineStatus) {\r\n    PipelineStatus[\"Completed\"] = \"completed\";\r\n    PipelineStatus[\"Canceled\"] = \"canceled\";\r\n    PipelineStatus[\"Rejected\"] = \"rejected\";\r\n    PipelineStatus[\"Running\"] = \"running\";\r\n})(PipelineStatus || (PipelineStatus = {}));\n\n/**\r\n * A list of known router events used by the Aurelia router\r\n * to signal the pipeline has come to a certain state\r\n */\r\n// const enum is preserved in tsconfig\r\nvar RouterEvent;\r\n(function (RouterEvent) {\r\n    RouterEvent[\"Processing\"] = \"router:navigation:processing\";\r\n    RouterEvent[\"Error\"] = \"router:navigation:error\";\r\n    RouterEvent[\"Canceled\"] = \"router:navigation:canceled\";\r\n    RouterEvent[\"Complete\"] = \"router:navigation:complete\";\r\n    RouterEvent[\"Success\"] = \"router:navigation:success\";\r\n    RouterEvent[\"ChildComplete\"] = \"router:navigation:child:complete\";\r\n})(RouterEvent || (RouterEvent = {}));\n\n/**\r\n * Available pipeline slot names to insert interceptor into router pipeline\r\n */\r\n// const enum is preserved in tsconfig\r\nvar PipelineSlotName;\r\n(function (PipelineSlotName) {\r\n    /**\r\n     * Authorization slot. Invoked early in the pipeline,\r\n     * before `canActivate` hook of incoming route\r\n     */\r\n    PipelineSlotName[\"Authorize\"] = \"authorize\";\r\n    /**\r\n     * Pre-activation slot. Invoked early in the pipeline,\r\n     * Invoked timing:\r\n     *   - after Authorization slot\r\n     *   - after canActivate hook on new view model\r\n     *   - before deactivate hook on old view model\r\n     *   - before activate hook on new view model\r\n     */\r\n    PipelineSlotName[\"PreActivate\"] = \"preActivate\";\r\n    /**\r\n     * Pre-render slot. Invoked later in the pipeline\r\n     * Invokcation timing:\r\n     *   - after activate hook on new view model\r\n     *   - before commit step on new navigation instruction\r\n     */\r\n    PipelineSlotName[\"PreRender\"] = \"preRender\";\r\n    /**\r\n     * Post-render slot. Invoked last in the pipeline\r\n     */\r\n    PipelineSlotName[\"PostRender\"] = \"postRender\";\r\n})(PipelineSlotName || (PipelineSlotName = {}));\n\nexport { ActivateNextStep, AppRouter, BuildNavigationPlanStep, CanActivateNextStep, CanDeactivatePreviousStep, CommitChangesStep, DeactivatePreviousStep, LoadRouteStep, NavModel, NavigationInstruction, Pipeline, PipelineProvider, PipelineSlotName, PipelineStatus, Redirect, RedirectToRoute, RouteLoader, Router, RouterConfiguration, RouterEvent, activationStrategy, isNavigationCommand };\n//# sourceMappingURL=aurelia-router.js.map\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { PLATFORM } from 'aurelia-pal';\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (Object, GOPS) {\n    'use strict';\n\n    if (GOPS in Object) return;\n\n    var setDescriptor,\n        G = PLATFORM.global,\n        id = 0,\n        random = '' + Math.random(),\n        prefix = '__\\x01symbol:',\n        prefixLength = prefix.length,\n        internalSymbol = '__\\x01symbol@@' + random,\n        DP = 'defineProperty',\n        DPies = 'defineProperties',\n        GOPN = 'getOwnPropertyNames',\n        GOPD = 'getOwnPropertyDescriptor',\n        PIE = 'propertyIsEnumerable',\n        gOPN = Object[GOPN],\n        gOPD = Object[GOPD],\n        create = Object.create,\n        keys = Object.keys,\n        defineProperty = Object[DP],\n        $defineProperties = Object[DPies],\n        descriptor = gOPD(Object, GOPN),\n        ObjectProto = Object.prototype,\n        hOP = ObjectProto.hasOwnProperty,\n        pIE = ObjectProto[PIE],\n        toString = ObjectProto.toString,\n        indexOf = Array.prototype.indexOf || function (v) {\n      for (var i = this.length; i-- && this[i] !== v;) {}\n      return i;\n    },\n        addInternalIfNeeded = function addInternalIfNeeded(o, uid, enumerable) {\n      if (!hOP.call(o, internalSymbol)) {\n        defineProperty(o, internalSymbol, {\n          enumerable: false,\n          configurable: false,\n          writable: false,\n          value: {}\n        });\n      }\n      o[internalSymbol]['@@' + uid] = enumerable;\n    },\n        createWithSymbols = function createWithSymbols(proto, descriptors) {\n      var self = create(proto);\n      if (descriptors !== null && (typeof descriptors === 'undefined' ? 'undefined' : _typeof(descriptors)) === 'object') {\n        gOPN(descriptors).forEach(function (key) {\n          if (propertyIsEnumerable.call(descriptors, key)) {\n            $defineProperty(self, key, descriptors[key]);\n          }\n        });\n      }\n      return self;\n    },\n        copyAsNonEnumerable = function copyAsNonEnumerable(descriptor) {\n      var newDescriptor = create(descriptor);\n      newDescriptor.enumerable = false;\n      return newDescriptor;\n    },\n        get = function get() {},\n        onlyNonSymbols = function onlyNonSymbols(name) {\n      return name != internalSymbol && !hOP.call(source, name);\n    },\n        onlySymbols = function onlySymbols(name) {\n      return name != internalSymbol && hOP.call(source, name);\n    },\n        propertyIsEnumerable = function propertyIsEnumerable(key) {\n      var uid = '' + key;\n      return onlySymbols(uid) ? hOP.call(this, uid) && this[internalSymbol] && this[internalSymbol]['@@' + uid] : pIE.call(this, key);\n    },\n        setAndGetSymbol = function setAndGetSymbol(uid) {\n      var descriptor = {\n        enumerable: false,\n        configurable: true,\n        get: get,\n        set: function set(value) {\n          setDescriptor(this, uid, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n          addInternalIfNeeded(this, uid, true);\n        }\n      };\n      defineProperty(ObjectProto, uid, descriptor);\n      return source[uid] = defineProperty(Object(uid), 'constructor', sourceConstructor);\n    },\n        _Symbol = function _Symbol2(description) {\n      if (this && this !== G) {\n        throw new TypeError('Symbol is not a constructor');\n      }\n      return setAndGetSymbol(prefix.concat(description || '', random, ++id));\n    },\n        source = create(null),\n        sourceConstructor = { value: _Symbol },\n        sourceMap = function sourceMap(uid) {\n      return source[uid];\n    },\n        $defineProperty = function defineProp(o, key, descriptor) {\n      var uid = '' + key;\n      if (onlySymbols(uid)) {\n        setDescriptor(o, uid, descriptor.enumerable ? copyAsNonEnumerable(descriptor) : descriptor);\n        addInternalIfNeeded(o, uid, !!descriptor.enumerable);\n      } else {\n        defineProperty(o, key, descriptor);\n      }\n      return o;\n    },\n        $getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n      var cof = toString.call(o);\n      o = cof === '[object String]' ? o.split('') : Object(o);\n      return gOPN(o).filter(onlySymbols).map(sourceMap);\n    };\n\n    descriptor.value = $defineProperty;\n    defineProperty(Object, DP, descriptor);\n\n    descriptor.value = $getOwnPropertySymbols;\n    defineProperty(Object, GOPS, descriptor);\n\n    var cachedWindowNames = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' ? Object.getOwnPropertyNames(window) : [];\n    var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames;\n    descriptor.value = function getOwnPropertyNames(o) {\n      if (toString.call(o) === '[object Window]') {\n        try {\n          return originalObjectGetOwnPropertyNames(o);\n        } catch (e) {\n          return [].concat([], cachedWindowNames);\n        }\n      }\n      return gOPN(o).filter(onlyNonSymbols);\n    };\n    defineProperty(Object, GOPN, descriptor);\n\n    descriptor.value = function defineProperties(o, descriptors) {\n      var symbols = $getOwnPropertySymbols(descriptors);\n      if (symbols.length) {\n        keys(descriptors).concat(symbols).forEach(function (uid) {\n          if (propertyIsEnumerable.call(descriptors, uid)) {\n            $defineProperty(o, uid, descriptors[uid]);\n          }\n        });\n      } else {\n        $defineProperties(o, descriptors);\n      }\n      return o;\n    };\n    defineProperty(Object, DPies, descriptor);\n\n    descriptor.value = propertyIsEnumerable;\n    defineProperty(ObjectProto, PIE, descriptor);\n\n    descriptor.value = _Symbol;\n    defineProperty(G, 'Symbol', descriptor);\n\n    descriptor.value = function (key) {\n      var uid = prefix.concat(prefix, key, random);\n      return uid in ObjectProto ? source[uid] : setAndGetSymbol(uid);\n    };\n    defineProperty(_Symbol, 'for', descriptor);\n\n    descriptor.value = function (symbol) {\n      return hOP.call(source, symbol) ? symbol.slice(prefixLength * 2, -random.length) : void 0;\n    };\n    defineProperty(_Symbol, 'keyFor', descriptor);\n\n    descriptor.value = function getOwnPropertyDescriptor(o, key) {\n      var descriptor = gOPD(o, key);\n      if (descriptor && onlySymbols(key)) {\n        descriptor.enumerable = propertyIsEnumerable.call(o, key);\n      }\n      return descriptor;\n    };\n    defineProperty(Object, GOPD, descriptor);\n\n    descriptor.value = function (proto, descriptors) {\n      return arguments.length === 1 ? create(proto) : createWithSymbols(proto, descriptors);\n    };\n    defineProperty(Object, 'create', descriptor);\n\n    descriptor.value = function () {\n      var str = toString.call(this);\n      return str === '[object String]' && onlySymbols(this) ? '[object Symbol]' : str;\n    };\n    defineProperty(ObjectProto, 'toString', descriptor);\n\n    try {\n      setDescriptor = create(defineProperty({}, prefix, {\n        get: function get() {\n          return defineProperty(this, prefix, { value: false })[prefix];\n        }\n      }))[prefix] || defineProperty;\n    } catch (o_O) {\n      setDescriptor = function setDescriptor(o, key, descriptor) {\n        var protoDescriptor = gOPD(ObjectProto, key);\n        delete ObjectProto[key];\n        defineProperty(o, key, descriptor);\n        defineProperty(ObjectProto, key, protoDescriptor);\n      };\n    }\n  })(Object, 'getOwnPropertySymbols');\n\n  (function (O, S) {\n    var dP = O.defineProperty,\n        ObjectProto = O.prototype,\n        toString = ObjectProto.toString,\n        toStringTag = 'toStringTag',\n        descriptor;\n    ['iterator', 'match', 'replace', 'search', 'split', 'hasInstance', 'isConcatSpreadable', 'unscopables', 'species', 'toPrimitive', toStringTag].forEach(function (name) {\n      if (!(name in Symbol)) {\n        dP(Symbol, name, { value: Symbol(name) });\n        switch (name) {\n          case toStringTag:\n            descriptor = O.getOwnPropertyDescriptor(ObjectProto, 'toString');\n            descriptor.value = function () {\n              var str = toString.call(this),\n                  tst = typeof this === 'undefined' || this === null ? undefined : this[Symbol.toStringTag];\n              return typeof tst === 'undefined' ? str : '[object ' + tst + ']';\n            };\n            dP(ObjectProto, 'toString', descriptor);\n            break;\n        }\n      }\n    });\n  })(Object, Symbol);\n\n  (function (Si, AP, SP) {\n\n    function returnThis() {\n      return this;\n    }\n\n    if (!AP[Si]) AP[Si] = function () {\n      var i = 0,\n          self = this,\n          iterator = {\n        next: function next() {\n          var done = self.length <= i;\n          return done ? { done: done } : { done: done, value: self[i++] };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n\n    if (!SP[Si]) SP[Si] = function () {\n      var fromCodePoint = String.fromCodePoint,\n          self = this,\n          i = 0,\n          length = self.length,\n          iterator = {\n        next: function next() {\n          var done = length <= i,\n              c = done ? '' : fromCodePoint(self.codePointAt(i));\n          i += c.length;\n          return done ? { done: done } : { done: done, value: c };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n  })(Symbol.iterator, Array.prototype, String.prototype);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  Number.isNaN = Number.isNaN || function (value) {\n    return value !== value;\n  };\n\n  Number.isFinite = Number.isFinite || function (value) {\n    return typeof value === \"number\" && isFinite(value);\n  };\n}\n\nif (!String.prototype.endsWith || function () {\n  try {\n    return !\"ab\".endsWith(\"a\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!String.prototype.startsWith || function () {\n  try {\n    return !\"ab\".startsWith(\"b\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  if (!Array.from) {\n    Array.from = function () {\n      var toInteger = function toInteger(it) {\n        return isNaN(it = +it) ? 0 : (it > 0 ? Math.floor : Math.ceil)(it);\n      };\n      var toLength = function toLength(it) {\n        return it > 0 ? Math.min(toInteger(it), 0x1fffffffffffff) : 0;\n      };\n      var iterCall = function iterCall(iter, fn, val, index) {\n        try {\n          return fn(val, index);\n        } catch (E) {\n          if (typeof iter.return == 'function') iter.return();\n          throw E;\n        }\n      };\n\n      return function from(arrayLike) {\n        var O = Object(arrayLike),\n            C = typeof this == 'function' ? this : Array,\n            aLen = arguments.length,\n            mapfn = aLen > 1 ? arguments[1] : undefined,\n            mapping = mapfn !== undefined,\n            index = 0,\n            iterFn = O[Symbol.iterator],\n            length,\n            result,\n            step,\n            iterator;\n        if (mapping) mapfn = mapfn.bind(aLen > 2 ? arguments[2] : undefined);\n        if (iterFn != undefined && !Array.isArray(arrayLike)) {\n          for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n            result[index] = mapping ? iterCall(iterator, mapfn, step.value, index) : step.value;\n          }\n        } else {\n          length = toLength(O.length);\n          for (result = new C(length); length > index; index++) {\n            result[index] = mapping ? mapfn(O[index], index) : O[index];\n          }\n        }\n        result.length = index;\n        return result;\n      };\n    }();\n  }\n\n  if (!Array.prototype.find) {\n    Object.defineProperty(Array.prototype, 'find', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.find called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return value;\n          }\n        }\n        return undefined;\n      }\n    });\n  }\n\n  if (!Array.prototype.findIndex) {\n    Object.defineProperty(Array.prototype, 'findIndex', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.findIndex called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return i;\n          }\n        }\n        return -1;\n      }\n    });\n  }\n}\n\nif (typeof FEATURE_NO_ES2016 === 'undefined' && !Array.prototype.includes) {\n  Object.defineProperty(Array.prototype, 'includes', {\n    configurable: true,\n    writable: true,\n    enumerable: false,\n    value: function value(searchElement) {\n      var O = Object(this);\n      var len = parseInt(O.length) || 0;\n      if (len === 0) {\n        return false;\n      }\n      var n = parseInt(arguments[1]) || 0;\n      var k;\n      if (n >= 0) {\n        k = n;\n      } else {\n        k = len + n;\n        if (k < 0) {\n          k = 0;\n        }\n      }\n      var currentElement;\n      while (k < len) {\n        currentElement = O[k];\n        if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {\n          return true;\n        }\n        k++;\n      }\n      return false;\n    }\n  });\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function () {\n    var needsFix = false;\n\n    try {\n      var s = Object.keys('a');\n      needsFix = s.length !== 1 || s[0] !== '0';\n    } catch (e) {\n      needsFix = true;\n    }\n\n    if (needsFix) {\n      Object.keys = function () {\n        var hasOwnProperty = Object.prototype.hasOwnProperty,\n            hasDontEnumBug = !{ toString: null }.propertyIsEnumerable('toString'),\n            dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n            dontEnumsLength = dontEnums.length;\n\n        return function (obj) {\n          if (obj === undefined || obj === null) {\n            throw TypeError('Cannot convert undefined or null to object');\n          }\n\n          obj = Object(obj);\n\n          var result = [],\n              prop,\n              i;\n\n          for (prop in obj) {\n            if (hasOwnProperty.call(obj, prop)) {\n              result.push(prop);\n            }\n          }\n\n          if (hasDontEnumBug) {\n            for (i = 0; i < dontEnumsLength; i++) {\n              if (hasOwnProperty.call(obj, dontEnums[i])) {\n                result.push(dontEnums[i]);\n              }\n            }\n          }\n\n          return result;\n        };\n      }();\n    }\n  })();\n\n  (function (O) {\n    if ('assign' in O) {\n      return;\n    }\n\n    O.defineProperty(O, 'assign', {\n      configurable: true,\n      writable: true,\n      value: function () {\n        var gOPS = O.getOwnPropertySymbols,\n            pIE = O.propertyIsEnumerable,\n            filterOS = gOPS ? function (self) {\n          return gOPS(self).filter(pIE, self);\n        } : function () {\n          return Array.prototype;\n        };\n\n        return function assign(where) {\n          if (gOPS && !(where instanceof O)) {\n            console.warn('problematic Symbols', where);\n          }\n\n          function set(keyOrSymbol) {\n            where[keyOrSymbol] = arg[keyOrSymbol];\n          }\n\n          for (var i = 1, ii = arguments.length; i < ii; ++i) {\n            var arg = arguments[i];\n\n            if (arg === null || arg === undefined) {\n              continue;\n            }\n\n            O.keys(arg).concat(filterOS(arg)).forEach(set);\n          }\n\n          return where;\n        };\n      }()\n    });\n  })(Object);\n\n  if (!Object.is) {\n    Object.is = function (x, y) {\n      if (x === y) {\n        return x !== 0 || 1 / x === 1 / y;\n      } else {\n        return x !== x && y !== y;\n      }\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (global) {\n    var i;\n\n    var defineProperty = Object.defineProperty,\n        is = function is(a, b) {\n      return a === b || a !== a && b !== b;\n    };\n\n    if (typeof WeakMap == 'undefined') {\n      global.WeakMap = createCollection({\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        get: sharedGet,\n\n        has: mapHas,\n\n        set: sharedSet\n      }, true);\n    }\n\n    if (typeof Map == 'undefined' || typeof new Map().values !== 'function' || !new Map().values().next) {\n      var _createCollection;\n\n      global.Map = createCollection((_createCollection = {\n        'delete': sharedDelete,\n\n        has: mapHas,\n\n        get: sharedGet,\n\n        set: sharedSet,\n\n        keys: sharedKeys,\n\n        values: sharedValues,\n\n        entries: mapEntries,\n\n        forEach: sharedForEach,\n\n        clear: sharedClear\n      }, _createCollection[Symbol.iterator] = mapEntries, _createCollection));\n    }\n\n    if (typeof Set == 'undefined' || typeof new Set().values !== 'function' || !new Set().values().next) {\n      var _createCollection2;\n\n      global.Set = createCollection((_createCollection2 = {\n        has: setHas,\n\n        add: sharedAdd,\n\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        keys: sharedValues,\n        values: sharedValues,\n\n        entries: setEntries,\n\n        forEach: sharedForEach\n      }, _createCollection2[Symbol.iterator] = sharedValues, _createCollection2));\n    }\n\n    if (typeof WeakSet == 'undefined') {\n      global.WeakSet = createCollection({\n        'delete': sharedDelete,\n\n        add: sharedAdd,\n\n        clear: sharedClear,\n\n        has: setHas\n      }, true);\n    }\n\n    function createCollection(proto, objectOnly) {\n      function Collection(a) {\n        if (!this || this.constructor !== Collection) return new Collection(a);\n        this._keys = [];\n        this._values = [];\n        this._itp = [];\n        this.objectOnly = objectOnly;\n\n        if (a) init.call(this, a);\n      }\n\n      if (!objectOnly) {\n        defineProperty(proto, 'size', {\n          get: sharedSize\n        });\n      }\n\n      proto.constructor = Collection;\n      Collection.prototype = proto;\n\n      return Collection;\n    }\n\n    function init(a) {\n      var i;\n\n      if (this.add) a.forEach(this.add, this);else a.forEach(function (a) {\n          this.set(a[0], a[1]);\n        }, this);\n    }\n\n    function sharedDelete(key) {\n      if (this.has(key)) {\n        this._keys.splice(i, 1);\n        this._values.splice(i, 1);\n\n        this._itp.forEach(function (p) {\n          if (i < p[0]) p[0]--;\n        });\n      }\n\n      return -1 < i;\n    };\n\n    function sharedGet(key) {\n      return this.has(key) ? this._values[i] : undefined;\n    }\n\n    function has(list, key) {\n      if (this.objectOnly && key !== Object(key)) throw new TypeError(\"Invalid value used as weak collection key\");\n\n      if (key != key || key === 0) for (i = list.length; i-- && !is(list[i], key);) {} else i = list.indexOf(key);\n      return -1 < i;\n    }\n\n    function setHas(value) {\n      return has.call(this, this._values, value);\n    }\n\n    function mapHas(value) {\n      return has.call(this, this._keys, value);\n    }\n\n    function sharedSet(key, value) {\n      this.has(key) ? this._values[i] = value : this._values[this._keys.push(key) - 1] = value;\n      return this;\n    }\n\n    function sharedAdd(value) {\n      if (!this.has(value)) this._values.push(value);\n      return this;\n    }\n\n    function sharedClear() {\n      (this._keys || 0).length = this._values.length = 0;\n    }\n\n    function sharedKeys() {\n      return sharedIterator(this._itp, this._keys);\n    }\n\n    function sharedValues() {\n      return sharedIterator(this._itp, this._values);\n    }\n\n    function mapEntries() {\n      return sharedIterator(this._itp, this._keys, this._values);\n    }\n\n    function setEntries() {\n      return sharedIterator(this._itp, this._values, this._values);\n    }\n\n    function sharedIterator(itp, array, array2) {\n      var _ref;\n\n      var p = [0],\n          done = false;\n      itp.push(p);\n      return _ref = {}, _ref[Symbol.iterator] = function () {\n        return this;\n      }, _ref.next = function next() {\n        var v,\n            k = p[0];\n        if (!done && k < array.length) {\n          v = array2 ? [array[k], array2[k]] : array[k];\n          p[0]++;\n        } else {\n          done = true;\n          itp.splice(itp.indexOf(p), 1);\n        }\n        return { done: done, value: v };\n      }, _ref;\n    }\n\n    function sharedSize() {\n      return this._values.length;\n    }\n\n    function sharedForEach(callback, context) {\n      var it = this.entries();\n      for (;;) {\n        var r = it.next();\n        if (r.done) break;\n        callback.call(context, r.value[1], r.value[0], this);\n      }\n    }\n  })(PLATFORM.global);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  var bind = Function.prototype.bind;\n\n  if (typeof PLATFORM.global.Reflect === 'undefined') {\n    PLATFORM.global.Reflect = {};\n  }\n\n  if (typeof Reflect.defineProperty !== 'function') {\n    Reflect.defineProperty = function (target, propertyKey, descriptor) {\n      if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' ? target === null : typeof target !== 'function') {\n        throw new TypeError('Reflect.defineProperty called on non-object');\n      }\n      try {\n        Object.defineProperty(target, propertyKey, descriptor);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    };\n  }\n\n  if (typeof Reflect.construct !== 'function') {\n    Reflect.construct = function (Target, args) {\n      if (args) {\n        switch (args.length) {\n          case 0:\n            return new Target();\n          case 1:\n            return new Target(args[0]);\n          case 2:\n            return new Target(args[0], args[1]);\n          case 3:\n            return new Target(args[0], args[1], args[2]);\n          case 4:\n            return new Target(args[0], args[1], args[2], args[3]);\n        }\n      }\n\n      var a = [null];\n      a.push.apply(a, args);\n      return new (bind.apply(Target, a))();\n    };\n  }\n\n  if (typeof Reflect.ownKeys !== 'function') {\n    Reflect.ownKeys = function (o) {\n      return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o));\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ESNEXT === 'undefined') {\n\n  var emptyMetadata = Object.freeze({});\n  var metadataContainerKey = '__metadata__';\n\n  if (typeof Reflect.getOwnMetadata !== 'function') {\n    Reflect.getOwnMetadata = function (metadataKey, target, targetKey) {\n      if (target.hasOwnProperty(metadataContainerKey)) {\n        return (target[metadataContainerKey][targetKey] || emptyMetadata)[metadataKey];\n      }\n    };\n  }\n\n  if (typeof Reflect.defineMetadata !== 'function') {\n    Reflect.defineMetadata = function (metadataKey, metadataValue, target, targetKey) {\n      var metadataContainer = target.hasOwnProperty(metadataContainerKey) ? target[metadataContainerKey] : target[metadataContainerKey] = {};\n      var targetContainer = metadataContainer[targetKey] || (metadataContainer[targetKey] = {});\n      targetContainer[metadataKey] = metadataValue;\n    };\n  }\n\n  if (typeof Reflect.metadata !== 'function') {\n    Reflect.metadata = function (metadataKey, metadataValue) {\n      return function (target, targetKey) {\n        Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n      };\n    };\n  }\n}","function trimDots(ary) {\r\n    for (var i = 0; i < ary.length; ++i) {\r\n        var part = ary[i];\r\n        if (part === '.') {\r\n            ary.splice(i, 1);\r\n            i -= 1;\r\n        }\r\n        else if (part === '..') {\r\n            if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') {\r\n                continue;\r\n            }\r\n            else if (i > 0) {\r\n                ary.splice(i - 1, 2);\r\n                i -= 2;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction relativeToFile(name, file) {\r\n    var fileParts = file && file.split('/');\r\n    var nameParts = name.trim().split('/');\r\n    if (nameParts[0].charAt(0) === '.' && fileParts) {\r\n        var normalizedBaseParts = fileParts.slice(0, fileParts.length - 1);\r\n        nameParts.unshift.apply(nameParts, normalizedBaseParts);\r\n    }\r\n    trimDots(nameParts);\r\n    return nameParts.join('/');\r\n}\r\nfunction join(path1, path2) {\r\n    if (!path1) {\r\n        return path2;\r\n    }\r\n    if (!path2) {\r\n        return path1;\r\n    }\r\n    var schemeMatch = path1.match(/^([^/]*?:)\\//);\r\n    var scheme = (schemeMatch && schemeMatch.length > 0) ? schemeMatch[1] : '';\r\n    path1 = path1.substr(scheme.length);\r\n    var urlPrefix;\r\n    if (path1.indexOf('///') === 0 && scheme === 'file:') {\r\n        urlPrefix = '///';\r\n    }\r\n    else if (path1.indexOf('//') === 0) {\r\n        urlPrefix = '//';\r\n    }\r\n    else if (path1.indexOf('/') === 0) {\r\n        urlPrefix = '/';\r\n    }\r\n    else {\r\n        urlPrefix = '';\r\n    }\r\n    var trailingSlash = path2.slice(-1) === '/' ? '/' : '';\r\n    var url1 = path1.split('/');\r\n    var url2 = path2.split('/');\r\n    var url3 = [];\r\n    for (var i = 0, ii = url1.length; i < ii; ++i) {\r\n        if (url1[i] === '..') {\r\n            if (url3.length && url3[url3.length - 1] !== '..') {\r\n                url3.pop();\r\n            }\r\n            else {\r\n                url3.push(url1[i]);\r\n            }\r\n        }\r\n        else if (url1[i] === '.' || url1[i] === '') {\r\n            continue;\r\n        }\r\n        else {\r\n            url3.push(url1[i]);\r\n        }\r\n    }\r\n    for (var i = 0, ii = url2.length; i < ii; ++i) {\r\n        if (url2[i] === '..') {\r\n            if (url3.length && url3[url3.length - 1] !== '..') {\r\n                url3.pop();\r\n            }\r\n            else {\r\n                url3.push(url2[i]);\r\n            }\r\n        }\r\n        else if (url2[i] === '.' || url2[i] === '') {\r\n            continue;\r\n        }\r\n        else {\r\n            url3.push(url2[i]);\r\n        }\r\n    }\r\n    return scheme + urlPrefix + url3.join('/') + trailingSlash;\r\n}\r\nvar encode = encodeURIComponent;\r\nvar encodeKey = function (k) { return encode(k).replace('%24', '$'); };\r\nfunction buildParam(key, value, traditional) {\r\n    var result = [];\r\n    if (value === null || value === undefined) {\r\n        return result;\r\n    }\r\n    if (Array.isArray(value)) {\r\n        for (var i = 0, l = value.length; i < l; i++) {\r\n            if (traditional) {\r\n                result.push(encodeKey(key) + \"=\" + encode(value[i]));\r\n            }\r\n            else {\r\n                var arrayKey = key + '[' + (typeof value[i] === 'object' && value[i] !== null ? i : '') + ']';\r\n                result = result.concat(buildParam(arrayKey, value[i]));\r\n            }\r\n        }\r\n    }\r\n    else if (typeof (value) === 'object' && !traditional) {\r\n        for (var propertyName in value) {\r\n            result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));\r\n        }\r\n    }\r\n    else {\r\n        result.push(encodeKey(key) + \"=\" + encode(value));\r\n    }\r\n    return result;\r\n}\r\nfunction buildQueryString(params, traditional) {\r\n    var pairs = [];\r\n    var keys = Object.keys(params || {}).sort();\r\n    for (var i = 0, len = keys.length; i < len; i++) {\r\n        var key = keys[i];\r\n        pairs = pairs.concat(buildParam(key, params[key], traditional));\r\n    }\r\n    if (pairs.length === 0) {\r\n        return '';\r\n    }\r\n    return pairs.join('&');\r\n}\r\nfunction processScalarParam(existedParam, value) {\r\n    if (Array.isArray(existedParam)) {\r\n        existedParam.push(value);\r\n        return existedParam;\r\n    }\r\n    if (existedParam !== undefined) {\r\n        return [existedParam, value];\r\n    }\r\n    return value;\r\n}\r\nfunction parseComplexParam(queryParams, keys, value) {\r\n    var currentParams = queryParams;\r\n    var keysLastIndex = keys.length - 1;\r\n    for (var j = 0; j <= keysLastIndex; j++) {\r\n        var key = keys[j] === '' ? currentParams.length : keys[j];\r\n        preventPollution(key);\r\n        if (j < keysLastIndex) {\r\n            var prevValue = !currentParams[key] || typeof currentParams[key] === 'object' ? currentParams[key] : [currentParams[key]];\r\n            currentParams = currentParams[key] = prevValue || (isNaN(keys[j + 1]) ? {} : []);\r\n        }\r\n        else {\r\n            currentParams = currentParams[key] = value;\r\n        }\r\n    }\r\n}\r\nfunction parseQueryString(queryString) {\r\n    var queryParams = {};\r\n    if (!queryString || typeof queryString !== 'string') {\r\n        return queryParams;\r\n    }\r\n    var query = queryString;\r\n    if (query.charAt(0) === '?') {\r\n        query = query.substr(1);\r\n    }\r\n    var pairs = query.replace(/\\+/g, ' ').split('&');\r\n    for (var i = 0; i < pairs.length; i++) {\r\n        var pair = pairs[i].split('=');\r\n        var key = decodeURIComponent(pair[0]);\r\n        if (!key) {\r\n            continue;\r\n        }\r\n        var keys = key.split('][');\r\n        var keysLastIndex = keys.length - 1;\r\n        if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keysLastIndex])) {\r\n            keys[keysLastIndex] = keys[keysLastIndex].replace(/\\]$/, '');\r\n            keys = keys.shift().split('[').concat(keys);\r\n            keysLastIndex = keys.length - 1;\r\n        }\r\n        else {\r\n            keysLastIndex = 0;\r\n        }\r\n        if (pair.length >= 2) {\r\n            var value = pair[1] ? decodeURIComponent(pair[1]) : '';\r\n            if (keysLastIndex) {\r\n                parseComplexParam(queryParams, keys, value);\r\n            }\r\n            else {\r\n                preventPollution(key);\r\n                queryParams[key] = processScalarParam(queryParams[key], value);\r\n            }\r\n        }\r\n        else {\r\n            queryParams[key] = true;\r\n        }\r\n    }\r\n    return queryParams;\r\n}\r\nfunction preventPollution(key) {\r\n    if (key === '__proto__') {\r\n        throw new Error('Prototype pollution detected.');\r\n    }\r\n}\n\nexport { buildQueryString, join, parseQueryString, relativeToFile };\n//# sourceMappingURL=aurelia-path.js.map\n"],"sourceRoot":""}