{"version":3,"sources":["webpack:///./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.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"],"mappings":"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","file":"vendor.aurelia-route-recognizer~8134d493.9ad891000c1d03ab26a3.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}"],"sourceRoot":""}