You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
41 KiB

{"ast":null,"code":"import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nimport escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\nimport findFocusedRoute from \"./findFocusedRoute\";\nimport validatePathConfig from \"./validatePathConfig\";\nexport default function getStateFromPath(path, options) {\n var _ref;\n if (options) {\n validatePathConfig(options);\n }\n var initialRoutes = [];\n if (options !== null && options !== void 0 && options.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: []\n });\n }\n var screens = options === null || options === void 0 ? void 0 : options.screens;\n var remaining = path.replace(/\\/+/g, '/').replace(/^\\//, '').replace(/\\?.*$/, '');\n remaining = remaining.endsWith('/') ? remaining : remaining + \"/\";\n if (screens === undefined) {\n var _routes = remaining.split('/').filter(Boolean).map(function (segment) {\n var name = decodeURIComponent(segment);\n return {\n name: name\n };\n });\n if (_routes.length) {\n return createNestedStateObject(path, _routes, initialRoutes);\n }\n return undefined;\n }\n var configs = (_ref = []).concat.apply(_ref, _toConsumableArray(Object.keys(screens).map(function (key) {\n return createNormalizedConfigs(key, screens, [], initialRoutes, []);\n }))).sort(function (a, b) {\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n var aParts = a.pattern.split('/');\n var bParts = b.pattern.split('/');\n for (var i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n if (aParts[i] == null) {\n return 1;\n }\n if (bParts[i] == null) {\n return -1;\n }\n var aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n var bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n if (aWildCard && bWildCard) {\n continue;\n }\n if (aWildCard) {\n return 1;\n }\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n configs.reduce(function (acc, config) {\n if (acc[config.pattern]) {\n var a = acc[config.pattern].routeNames;\n var b = config.routeNames;\n var intersects = a.length > b.length ? b.every(function (it, i) {\n return a[i] === it;\n }) : a.every(function (it, i) {\n return b[i] === it;\n });\n if (!intersects) {\n throw new Error(\"Found conflicting screens with the same pattern. The pattern '\" + config.pattern + \"' resolves to both '\" + a.join(' > ') + \"' and '\" + b.join(' > ') + \"'. Patterns must be unique and cannot resolve to more than one screen.\");\n }\n }\n return Object.assign(acc, _defineProperty({}, config.pattern, config));\n }, {});\n if (remaining === '/') {\n var match = configs.find(function (config) {\n return config.path === '' && config.routeNames.every(function (name) {\n var _configs$find;\n return !((_configs$find = configs.find(function (c) {\n return c.screen === name;\n })) !== null && _configs$find !== void 0 && _configs$find.path);\n });\n });\n if (match) {\n return createNestedStateObject(path, match.routeNames.map(function (name) {\n return {\n name: name\n };\n }), initialRoutes, configs);\n }\n return undefined;\n }\n var result;\n var current;\n var _matchAgainstConfigs = matchAgainstConfigs(remaining, configs.map(function (c) {\n return _objectSpread(_objectSpread({}, c), {}, {\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined\n });\n })),\n routes = _matchAgainstConfigs.routes,\n remainingPath = _matchAgainstConfigs.remainingPath;\n if (routes !== undefined) {\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n if (current == null || result == null) {\n return undefined;\n }\n return result;\n}\nvar joinPaths = function joinPaths() {\n var _ref2;\n for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {\n paths[_key] = arguments[_key];\n }\n return (_ref2 = []).concat.apply(_ref2, _toConsumableArray(paths.map(function (p) {\n return p.split('/');\n }))).filter(Boolean).join('/');\n};\nvar matchAgainstConfigs = function matchAgainstConfigs(remaining, configs) {\n var routes;\n var remainingPath = remaining;\n var _loop = function _loop() {\n if (!config.regex) {\n return \"continue\";\n }\n var match = remainingPath.match(config.regex);\n if (match) {\n var matchedParams = (_config$pattern = config.pattern) === null || _config$pattern === void 0 ? void 0 : _config$pattern.split('/').filter(function (p) {\n return p.startsWith(':');\n }).reduce(function (acc, p, i) {\n return Object.assign(acc, _defineProperty({}, p, match[(i + 1) * 2].replace(/\\//, '')));\n }, {});\n routes = config.routeNames.map(function (name) {\n var _config$path;\n var config = configs.find(function (c) {\n return c.screen === name;\n });\n var params = config === null || config === void 0 ? void 0 : (_config$path = config.path) === null || _config$path === void 0 ? void 0 : _config$path.split('/').filter(function (p) {\n return p.startsWith(':');\n }).reduce(function (acc, p) {\n var value = matchedParams[p];\n if (value) {\n var _config$parse;\n var key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = (_config$parse = config.parse) !== null && _config$parse !== void 0 && _config$parse[key] ? config.parse[key](value) : value;\n }\n return acc;\n }, {});\n if (params && Object.keys(params).length) {\n return {\n name: name,\n params: params\n };\n }\n return {\n name: name\n };\n });\n remainingPath = remainingPath.replace(match[1], '');\n return \"break\";\n }\n };\n for (var config of configs) {\n var _config$pattern;\n var _ret = _loop();\n if (_ret === \"continue\") continue;\n if (_ret === \"break\") break;\n }\n return {\n routes: routes,\n remainingPath: remainingPath\n };\n};\nvar createNormalizedConfigs = function createNormalizedConfigs(screen, routeConfig) {\n var routeNames = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var initials = arguments.length > 3 ? arguments[3] : undefined;\n var parentScreens = arguments.length > 4 ? arguments[4] : undefined;\n var parentPattern = arguments.length > 5 ? arguments[5] : undefined;\n var configs = [];\n routeNames.push(screen);\n parentScreens.push(screen);\n var config = routeConfig[screen];\n if (typeof config === 'string') {\n var pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n var _pattern;\n if (typeof config.path === 'string') {\n if (config.exact && config.path === undefined) {\n throw new Error(\"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\");\n }\n _pattern = config.exact !== true ? joinPaths(parentPattern || '', config.path || '') : config.path || '';\n configs.push(createConfigItem(screen, routeNames, _pattern, config.path, config.parse));\n }\n if (config.screens) {\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens: parentScreens\n });\n }\n Object.keys(config.screens).forEach(function (nestedConfig) {\n var _pattern2;\n var result = createNormalizedConfigs(nestedConfig, config.screens, routeNames, initials, _toConsumableArray(parentScreens), (_pattern2 = _pattern) != null ? _pattern2 : parentPattern);\n configs.push.apply(configs, _toConsumableArray(result));\n });\n }\n }\n routeNames.pop();\n return configs;\n};\nvar createConfigItem = function createConfigItem(screen, routeNames, pattern, path, parse) {\n pattern = pattern.split('/').filter(Boolean).join('/');\n var regex = pattern ? new RegExp(\"^(\" + pattern.split('/').map(function (it) {\n if (it.startsWith(':')) {\n return \"(([^/]+\\\\/)\" + (it.endsWith('?') ? '?' : '') + \")\";\n }\n return (it === '*' ? '.*' : escape(it)) + \"\\\\/\";\n }).join('') + \")\") : undefined;\n return {\n screen: screen,\n regex: regex,\n pattern: pattern,\n path: path,\n routeNames: _toConsumableArray(routeNames),\n parse: parse\n };\n};\nvar findParseConfigForRoute = function findParseConfigForRoute(routeName, flatConfig) {\n for (var config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n return undefined;\n};\nvar findInitialRoute = function findInitialRoute(routeName, parentScreens, initialRoutes) {\n for (var config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n var sameParents = true;\n for (var i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName ? config.initialRouteName : undefined;\n }\n }\n }\n return undefined;\n};\nvar createStateObject = function createStateObject(initialRoute, route, isEmpty) {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{\n name: initialRoute\n }, route]\n };\n } else {\n return {\n routes: [route]\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{\n name: initialRoute\n }, _objectSpread(_objectSpread({}, route), {}, {\n state: {\n routes: []\n }\n })]\n };\n } else {\n return {\n routes: [_objectSpread(_objectSpread({}, route), {}, {\n state: {\n routes: []\n }\n })]\n };\n }\n }\n};\nvar createNestedStateObject = function createNestedStateObject(path, routes, initialRoutes, flatConfig) {\n var state;\n var route = routes.shift();\n var parentScreens = [];\n var initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n parentScreens.push(route.name);\n state = createStateObject(initialRoute, route, routes.length === 0);\n if (routes.length > 0) {\n var nestedState = state;\n while (route = routes.shift()) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n var nestedStateIndex = nestedState.index || nestedState.routes.length - 1;\n nestedState.routes[nestedStateIndex].state = createStateObject(initialRoute, route, routes.length === 0);\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex].state;\n }\n parentScreens.push(route.name);\n }\n }\n route = findFocusedRoute(state);\n route.path = path;\n var params = parseQueryParams(path, flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined);\n if (params) {\n route.params = _objectSpread(_objectSpread({}, route.params), params);\n }\n return state;\n};\nvar parseQueryParams = function parseQueryParams(path, parseConfig) {\n var query = path.split('?')[1];\n var params = queryString.parse(query);\n if (parseConfig) {\n Object.keys(params).forEach(function (name) {\n if (Object.hasOwnProperty.call(parseConfig, name) && typeof params[name] === 'string') {\n params[name] = parseConfig[name](params[name]);\n }\n });\n }\n return Object.keys(params).length ? params : undefined;\n};","map":{"version":3,"sources":["getStateFromPath.tsx"],"names":["escape","queryString","findFocusedRoute","validatePathConfig","getStateFromPath","path","options","initialRoutes","initialRouteName","push","parentScreens","screens","remaining","replace","endsWith","undefined","routes","split","filter","Boolean","map","segment","name","decodeURIComponent","length","createNestedStateObject","configs","concat","Object","keys","key","createNormalizedConfigs","sort","a","b","pattern","routeNames","join","localeCompare","startsWith","aParts","bParts","i","Math","max","aWildCard","bWildCard","reduce","acc","config","intersects","every","it","Error","assign","match","find","c","screen","result","current","remainingPath","matchAgainstConfigs","regex","RegExp","source","joinPaths","paths","p","matchedParams","params","value","parse","routeConfig","initials","parentPattern","createConfigItem","exact","forEach","nestedConfig","pop","findParseConfigForRoute","routeName","flatConfig","findInitialRoute","sameParents","createStateObject","initialRoute","route","isEmpty","index","state","shift","nestedState","nestedStateIndex","parseQueryParams","parseConfig","query","hasOwnProperty","call"],"mappings":"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","sourceRoot":"../../src","sourcesContent":["import escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\nimport findFocusedRoute from './findFocusedRoute';\nimport validatePathConfig from './validatePathConfig';\n/**\n * Utility to parse a path string to initial state object accepted by the container.\n * This is useful for deep linking when we need to handle the incoming URL.\n *\n * @example\n * ```js\n * getStateFromPath(\n * '/chat/jane/42',\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * parse: { id: Number }\n * }\n * }\n * }\n * )\n * ```\n * @param path Path string to parse and convert, e.g. /foo/bar?count=42.\n * @param options Extra options to fine-tune how to parse the path.\n */\nexport default function getStateFromPath(path, options) {\n if (options) {\n validatePathConfig(options);\n }\n let initialRoutes = [];\n if (options !== null && options !== void 0 && options.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: []\n });\n }\n const screens = options === null || options === void 0 ? void 0 : options.screens;\n let remaining = path.replace(/\\/+/g, '/') // Replace multiple slash (//) with single ones\n .replace(/^\\//, '') // Remove extra leading slash\n .replace(/\\?.*$/, ''); // Remove query params which we will handle later\n\n // Make sure there is a trailing slash\n remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;\n if (screens === undefined) {\n // When no config is specified, use the path segments as route names\n const routes = remaining.split('/').filter(Boolean).map(segment => {\n const name = decodeURIComponent(segment);\n return {\n name\n };\n });\n if (routes.length) {\n return createNestedStateObject(path, routes, initialRoutes);\n }\n return undefined;\n }\n\n // Create a normalized configs array which will be easier to use\n const configs = [].concat(...Object.keys(screens).map(key => createNormalizedConfigs(key, screens, [], initialRoutes, []))).sort((a, b) => {\n // Sort config so that:\n // - the most exhaustive ones are always at the beginning\n // - patterns with wildcard are always at the end\n\n // If 2 patterns are same, move the one with less route names up\n // This is an error state, so it's only useful for consistent error messages\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n\n // If one of the patterns starts with the other, it's more exhaustive\n // So move it up\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n const aParts = a.pattern.split('/');\n const bParts = b.pattern.split('/');\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n // if b is longer, b get higher priority\n if (aParts[i] == null) {\n return 1;\n }\n // if a is longer, a get higher priority\n if (bParts[i] == null) {\n return -1;\n }\n const aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n const bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n // if both are wildcard we compare next component\n if (aWildCard && bWildCard) {\n continue;\n }\n // if only a is wild card, b get higher priority\n if (aWildCard) {\n return 1;\n }\n // if only b is wild card, a get higher priority\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n\n // Check for duplicate patterns in the config\n configs.reduce((acc, config) => {\n if (acc[config.pattern]) {\n const a = acc[config.pattern].routeNames;\n const b = config.routeNames;\n\n // It's not a problem if the path string omitted from a inner most screen\n // For example, it's ok if a path resolves to `A > B > C` or `A > B`\n const intersects = a.length > b.length ? b.every((it, i) => a[i] === it) : a.every((it, i) => b[i] === it);\n if (!intersects) {\n throw new Error(`Found conflicting screens with the same pattern. The pattern '${config.pattern}' resolves to both '${a.join(' > ')}' and '${b.join(' > ')}'. Patterns must be unique and cannot resolve to more than one screen.`);\n }\n }\n return Object.assign(acc, {\n [config.pattern]: config\n });\n }, {});\n if (remaining === '/') {\n // We need to add special handling of empty path so navigation to empty path also works\n // When handling empty path, we should only look at the root level config\n const match = configs.find(config => config.path === '' && config.routeNames.every(\n // Make sure that none of the parent configs have a non-empty path defined\n name => {\n var _configs$find;\n return !((_configs$find = configs.find(c => c.screen === name)) !== null && _configs$find !== void 0 && _configs$find.path);\n }));\n if (match) {\n return createNestedStateObject(path, match.routeNames.map(name => ({\n name\n })), initialRoutes, configs);\n }\n return undefined;\n }\n let result;\n let current;\n\n // We match the whole path against the regex instead of segments\n // This makes sure matches such as wildcard will catch any unmatched routes, even if nested\n const {\n routes,\n remainingPath\n } = matchAgainstConfigs(remaining, configs.map(c => ({\n ...c,\n // Add `$` to the regex to make sure it matches till end of the path and not just beginning\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined\n })));\n if (routes !== undefined) {\n // This will always be empty if full path matched\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n if (current == null || result == null) {\n return undefined;\n }\n return result;\n}\nconst joinPaths = function () {\n for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {\n paths[_key] = arguments[_key];\n }\n return [].concat(...paths.map(p => p.split('/'))).filter(Boolean).join('/');\n};\nconst matchAgainstConfigs = (remaining, configs) => {\n let routes;\n let remainingPath = remaining;\n\n // Go through all configs, and see if the next path segment matches our regex\n for (const config of configs) {\n if (!config.regex) {\n continue;\n }\n const match = remainingPath.match(config.regex);\n\n // If our regex matches, we need to extract params from the path\n if (match) {\n var _config$pattern;\n const matchedParams = (_config$pattern = config.pattern) === null || _config$pattern === void 0 ? void 0 : _config$pattern.split('/').filter(p => p.startsWith(':')).reduce((acc, p, i) => Object.assign(acc, {\n // The param segments appear every second item starting from 2 in the regex match result\n [p]: match[(i + 1) * 2].replace(/\\//, '')\n }), {});\n routes = config.routeNames.map(name => {\n var _config$path;\n const config = configs.find(c => c.screen === name);\n const params = config === null || config === void 0 ? void 0 : (_config$path = config.path) === null || _config$path === void 0 ? void 0 : _config$path.split('/').filter(p => p.startsWith(':')).reduce((acc, p) => {\n const value = matchedParams[p];\n if (value) {\n var _config$parse;\n const key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = (_config$parse = config.parse) !== null && _config$parse !== void 0 && _config$parse[key] ? config.parse[key](value) : value;\n }\n return acc;\n }, {});\n if (params && Object.keys(params).length) {\n return {\n name,\n params\n };\n }\n return {\n name\n };\n });\n remainingPath = remainingPath.replace(match[1], '');\n break;\n }\n }\n return {\n routes,\n remainingPath\n };\n};\nconst createNormalizedConfigs = function (screen, routeConfig) {\n let routeNames = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n let initials = arguments.length > 3 ? arguments[3] : undefined;\n let parentScreens = arguments.length > 4 ? arguments[4] : undefined;\n let parentPattern = arguments.length > 5 ? arguments[5] : undefined;\n const configs = [];\n routeNames.push(screen);\n parentScreens.push(screen);\n\n // @ts-expect-error: we can't strongly typecheck this for now\n const config = routeConfig[screen];\n if (typeof config === 'string') {\n // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n let pattern;\n\n // if an object is specified as the value (e.g. Foo: { ... }),\n // it can have `path` property and\n // it could have `screens` prop which has nested configs\n if (typeof config.path === 'string') {\n if (config.exact && config.path === undefined) {\n throw new Error(\"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\");\n }\n pattern = config.exact !== true ? joinPaths(parentPattern || '', config.path || '') : config.path || '';\n configs.push(createConfigItem(screen, routeNames, pattern, config.path, config.parse));\n }\n if (config.screens) {\n // property `initialRouteName` without `screens` has no purpose\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens\n });\n }\n Object.keys(config.screens).forEach(nestedConfig => {\n const result = createNormalizedConfigs(nestedConfig, config.screens, routeNames, initials, [...parentScreens], pattern ?? parentPattern);\n configs.push(...result);\n });\n }\n }\n routeNames.pop();\n return configs;\n};\nconst createConfigItem = (screen, routeNames, pattern, path, parse) => {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern = pattern.split('/').filter(Boolean).join('/');\n const regex = pattern ? new RegExp(`^(${pattern.split('/').map(it => {\n if (it.startsWith(':')) {\n return `(([^/]+\\\\/)${it.endsWith('?') ? '?' : ''})`;\n }\n return `${it === '*' ? '.*' : escape(it)}\\\\/`;\n }).join('')})`) : undefined;\n return {\n screen,\n regex,\n pattern,\n path,\n // The routeNames array is mutated, so copy it to keep the current state\n routeNames: [...routeNames],\n parse\n };\n};\nconst findParseConfigForRoute = (routeName, flatConfig) => {\n for (const config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n return undefined;\n};\n\n// Try to find an initial route connected with the one passed\nconst findInitialRoute = (routeName, parentScreens, initialRoutes) => {\n for (const config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n let sameParents = true;\n for (let i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName ? config.initialRouteName : undefined;\n }\n }\n }\n return undefined;\n};\n\n// returns state object with values depending on whether\n// it is the end of state and if there is initialRoute for this level\nconst createStateObject = (initialRoute, route, isEmpty) => {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{\n name: initialRoute\n }, route]\n };\n } else {\n return {\n routes: [route]\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{\n name: initialRoute\n }, {\n ...route,\n state: {\n routes: []\n }\n }]\n };\n } else {\n return {\n routes: [{\n ...route,\n state: {\n routes: []\n }\n }]\n };\n }\n }\n};\nconst createNestedStateObject = (path, routes, initialRoutes, flatConfig) => {\n let state;\n let route = routes.shift();\n const parentScreens = [];\n let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n parentScreens.push(route.name);\n state = createStateObject(initialRoute, route, routes.length === 0);\n if (routes.length > 0) {\n let nestedState = state;\n while (route = routes.shift()) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n const nestedStateIndex = nestedState.index || nestedState.routes.length - 1;\n nestedState.routes[nestedStateIndex].state = createStateObject(initialRoute, route, routes.length === 0);\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex].state;\n }\n parentScreens.push(route.name);\n }\n }\n route = findFocusedRoute(state);\n route.path = path;\n const params = parseQueryParams(path, flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined);\n if (params) {\n route.params = {\n ...route.params,\n ...params\n };\n }\n return state;\n};\nconst parseQueryParams = (path, parseConfig) => {\n const query = path.split('?')[1];\n const params = queryString.parse(query);\n if (parseConfig) {\n Object.keys(params).forEach(name => {\n if (Object.hasOwnProperty.call(parseConfig, name) && typeof params[name] === 'string') {\n params[name] = parseConfig[name](params[name]);\n }\n });\n }\n return Object.keys(params).length ? params : undefined;\n};\n//# sourceMappingURL=getStateFromPath.js.map"]},"metadata":{},"sourceType":"module"}