UNPKG

31.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"universal-router.js","sources":["../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/path-to-regexp/index.js","../src/matchPath.js","../src/matchRoute.js","../src/resolveRoute.js","../src/Router.js"],"sourcesContent":["module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport pathToRegexp from 'path-to-regexp';\n\nconst cache = new Map();\n\nfunction decodeParam(val) {\n try {\n return decodeURIComponent(val);\n } catch (err) {\n return val;\n }\n}\n\nfunction matchPath(routePath, urlPath, end, parentParams) {\n const key = `${routePath}|${end}`;\n let regexp = cache.get(key);\n\n if (!regexp) {\n const keys = [];\n regexp = { pattern: pathToRegexp(routePath, keys, { end }), keys };\n cache.set(key, regexp);\n }\n\n const m = regexp.pattern.exec(urlPath);\n if (!m) {\n return null;\n }\n\n const path = m[0];\n const params = Object.create(null);\n\n if (parentParams) {\n Object.assign(params, parentParams);\n }\n\n for (let i = 1; i < m.length; i += 1) {\n params[regexp.keys[i - 1].name] = m[i] && decodeParam(m[i]);\n }\n\n return { path: path === '' ? '/' : path, keys: regexp.keys.slice(), params };\n}\n\nexport default matchPath;\n","/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport matchPath from './matchPath';\n\nfunction matchRoute(route, baseUrl, path, parentParams) {\n let match;\n let childMatches;\n let childIndex = 0;\n\n return {\n next() {\n if (!match) {\n match = matchPath(route.path, path, !route.children, parentParams);\n\n if (match) {\n return {\n done: false,\n value: {\n route,\n baseUrl,\n path: match.path,\n keys: match.keys,\n params: match.params,\n },\n };\n }\n }\n\n if (match && route.children) {\n while (childIndex < route.children.length) {\n if (!childMatches) {\n const newPath = path.substr(match.path.length);\n const childRoute = route.children[childIndex];\n childRoute.parent = route;\n\n childMatches = matchRoute(\n childRoute,\n baseUrl + (match.path === '/' ? '' : match.path),\n newPath.charAt(0) === '/' ? newPath : `/${newPath}`,\n match.params,\n );\n }\n\n const childMatch = childMatches.next();\n if (!childMatch.done) {\n return {\n done: false,\n value: childMatch.value,\n };\n }\n\n childMatches = null;\n childIndex += 1;\n }\n }\n\n return { done: true };\n },\n };\n}\n\nexport default matchRoute;\n","/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nfunction resolveRoute(context, params) {\n if (typeof context.route.action === 'function') {\n return context.route.action(context, params);\n }\n\n return null;\n}\n\nexport default resolveRoute;\n","/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport pathToRegexp from 'path-to-regexp';\nimport matchPath from './matchPath';\nimport matchRoute from './matchRoute';\nimport resolveRoute from './resolveRoute';\n\nfunction isChildRoute(parentRoute, childRoute) {\n let route = childRoute;\n while (route) {\n route = route.parent;\n if (route === parentRoute) {\n return true;\n }\n }\n return false;\n}\n\nclass Router {\n constructor(routes, options = {}) {\n if (Object(routes) !== routes) {\n throw new TypeError('Invalid routes');\n }\n\n this.baseUrl = options.baseUrl || '';\n this.resolveRoute = options.resolveRoute || resolveRoute;\n this.context = Object.assign({ router: this }, options.context);\n this.root = Array.isArray(routes) ? { path: '/', children: routes, parent: null } : routes;\n this.root.parent = null;\n }\n\n resolve(pathOrContext) {\n const context = Object.assign({}, this.context,\n typeof pathOrContext === 'string' ? { path: pathOrContext } : pathOrContext);\n const match = matchRoute(this.root, this.baseUrl, context.path.substr(this.baseUrl.length));\n const resolve = this.resolveRoute;\n let matches = null;\n let nextMatches = null;\n\n function next(resume, parent = matches.value.route) {\n matches = nextMatches || match.next();\n nextMatches = null;\n\n if (!resume) {\n if (matches.done || !isChildRoute(parent, matches.value.route)) {\n nextMatches = matches;\n return Promise.resolve(null);\n }\n }\n\n if (matches.done) {\n return Promise.reject(Object.assign(\n new Error('Page not found'),\n { context, status: 404, statusCode: 404 },\n ));\n }\n\n return Promise.resolve(resolve(\n Object.assign({}, context, matches.value),\n matches.value.params,\n )).then((result) => {\n if (result !== null && result !== undefined) {\n return result;\n }\n\n return next(resume, parent);\n });\n }\n\n context.url = context.path;\n context.next = next;\n\n return next(true, this.root);\n }\n}\n\nRouter.pathToRegexp = pathToRegexp;\nRouter.matchPath = matchPath;\nRouter.matchRoute = matchRoute;\nRouter.resolveRoute = resolveRoute;\n\nexport default Router;\n"],"names":["isarray","cache","Map","decodeParam","val","decodeURIComponent","err","matchPath","routePath","urlPath","end","parentParams","key","regexp","get","keys","pattern","pathToRegexp","set","m","exec","path","params","Object","create","assign","i","length","name","slice","matchRoute","route","baseUrl","match","childMatches","childIndex","children","newPath","substr","childRoute","parent","charAt","childMatch","next","done","value","resolveRoute","context","action","isChildRoute","parentRoute","Router","routes","options","TypeError","router","root","Array","isArray","pathOrContext","resolve","matches","nextMatches","resume","Promise","reject","Error","status","statusCode","then","result","undefined","url"],"mappings":"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"}
\No newline at end of file