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
22 KiB
1 line
22 KiB
{"ast":null,"code":"import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\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 * as queryString from 'query-string';\nimport fromEntries from \"./fromEntries\";\nimport validatePathConfig from \"./validatePathConfig\";\nvar getActiveRoute = function getActiveRoute(state) {\n var route = typeof state.index === 'number' ? state.routes[state.index] : state.routes[state.routes.length - 1];\n if (route.state) {\n return getActiveRoute(route.state);\n }\n return route;\n};\nexport default function getPathFromState(state, options) {\n if (state == null) {\n throw Error(\"Got 'undefined' for the navigation state. You must pass a valid state object.\");\n }\n if (options) {\n validatePathConfig(options);\n }\n var configs = options !== null && options !== void 0 && options.screens ? createNormalizedConfigs(options === null || options === void 0 ? void 0 : options.screens) : {};\n var path = '/';\n var current = state;\n var allParams = {};\n var _loop = function _loop() {\n var index = typeof current.index === 'number' ? current.index : 0;\n var route = current.routes[index];\n var pattern;\n var focusedParams;\n var focusedRoute = getActiveRoute(state);\n var currentOptions = configs;\n var nestedRouteNames = [];\n var hasNext = true;\n var _loop2 = function _loop2() {\n pattern = currentOptions[route.name].pattern;\n nestedRouteNames.push(route.name);\n if (route.params) {\n var stringify = (_currentOptions$route = currentOptions[route.name]) === null || _currentOptions$route === void 0 ? void 0 : _currentOptions$route.stringify;\n var currentParams = fromEntries(Object.entries(route.params).map(function (_ref) {\n var _ref3 = _slicedToArray(_ref, 2),\n key = _ref3[0],\n value = _ref3[1];\n return [key, stringify !== null && stringify !== void 0 && stringify[key] ? stringify[key](value) : String(value)];\n }));\n if (pattern) {\n Object.assign(allParams, currentParams);\n }\n if (focusedRoute === route) {\n focusedParams = _objectSpread({}, currentParams);\n (_pattern = pattern) === null || _pattern === void 0 ? void 0 : _pattern.split('/').filter(function (p) {\n return p.startsWith(':');\n }).forEach(function (p) {\n var name = getParamName(p);\n if (focusedParams) {\n delete focusedParams[name];\n }\n });\n }\n }\n if (!currentOptions[route.name].screens || route.state === undefined) {\n hasNext = false;\n } else {\n index = typeof route.state.index === 'number' ? route.state.index : route.state.routes.length - 1;\n var nextRoute = route.state.routes[index];\n var nestedConfig = currentOptions[route.name].screens;\n if (nestedConfig && nextRoute.name in nestedConfig) {\n route = nextRoute;\n currentOptions = nestedConfig;\n } else {\n hasNext = false;\n }\n }\n };\n while (route.name in currentOptions && hasNext) {\n _loop2();\n }\n if (pattern === undefined) {\n pattern = nestedRouteNames.join('/');\n }\n if (currentOptions[route.name] !== undefined) {\n path += pattern.split('/').map(function (p) {\n var name = getParamName(p);\n if (p === '*') {\n return route.name;\n }\n if (p.startsWith(':')) {\n var value = allParams[name];\n if (value === undefined && p.endsWith('?')) {\n return '';\n }\n return encodeURIComponent(value);\n }\n return encodeURIComponent(p);\n }).join('/');\n } else {\n path += encodeURIComponent(route.name);\n }\n if (!focusedParams) {\n focusedParams = focusedRoute.params;\n }\n if (route.state) {\n path += '/';\n } else if (focusedParams) {\n for (var param in focusedParams) {\n if (focusedParams[param] === 'undefined') {\n delete focusedParams[param];\n }\n }\n var query = queryString.stringify(focusedParams, {\n sort: false\n });\n if (query) {\n path += \"?\" + query;\n }\n }\n current = route.state;\n };\n while (current) {\n var _currentOptions$route, _pattern;\n _loop();\n }\n path = path.replace(/\\/+/g, '/');\n path = path.length > 1 ? path.replace(/\\/$/, '') : path;\n return path;\n}\nvar getParamName = function getParamName(pattern) {\n return pattern.replace(/^:/, '').replace(/\\?$/, '');\n};\nvar joinPaths = function joinPaths() {\n var _ref4;\n for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {\n paths[_key] = arguments[_key];\n }\n return (_ref4 = []).concat.apply(_ref4, _toConsumableArray(paths.map(function (p) {\n return p.split('/');\n }))).filter(Boolean).join('/');\n};\nvar createConfigItem = function createConfigItem(config, parentPattern) {\n var _pattern2;\n if (typeof config === 'string') {\n var _pattern3 = parentPattern ? joinPaths(parentPattern, config) : config;\n return {\n pattern: _pattern3\n };\n }\n var pattern;\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 var screens = config.screens ? createNormalizedConfigs(config.screens, pattern) : undefined;\n return {\n pattern: (_pattern2 = pattern) === null || _pattern2 === void 0 ? void 0 : _pattern2.split('/').filter(Boolean).join('/'),\n stringify: config.stringify,\n screens: screens\n };\n};\nvar createNormalizedConfigs = function createNormalizedConfigs(options, pattern) {\n return fromEntries(Object.entries(options).map(function (_ref2) {\n var _ref5 = _slicedToArray(_ref2, 2),\n name = _ref5[0],\n c = _ref5[1];\n var result = createConfigItem(c, pattern);\n return [name, result];\n }));\n};","map":{"version":3,"sources":["getPathFromState.tsx"],"names":["queryString","fromEntries","validatePathConfig","getActiveRoute","state","route","index","routes","length","getPathFromState","options","Error","configs","screens","createNormalizedConfigs","path","current","allParams","pattern","focusedParams","focusedRoute","currentOptions","nestedRouteNames","hasNext","name","push","params","stringify","currentParams","Object","entries","map","key","value","String","assign","split","filter","p","startsWith","forEach","getParamName","undefined","nextRoute","nestedConfig","join","endsWith","encodeURIComponent","param","query","sort","replace","joinPaths","paths","concat","Boolean","createConfigItem","config","parentPattern","exact","c","result"],"mappings":"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","sourceRoot":"../../src","sourcesContent":["import * as queryString from 'query-string';\nimport fromEntries from './fromEntries';\nimport validatePathConfig from './validatePathConfig';\nconst getActiveRoute = state => {\n const route = typeof state.index === 'number' ? state.routes[state.index] : state.routes[state.routes.length - 1];\n if (route.state) {\n return getActiveRoute(route.state);\n }\n return route;\n};\n\n/**\n * Utility to serialize a navigation state object to a path string.\n *\n * @example\n * ```js\n * getPathFromState(\n * {\n * routes: [\n * {\n * name: 'Chat',\n * params: { author: 'Jane', id: 42 },\n * },\n * ],\n * },\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * stringify: { author: author => author.toLowerCase() }\n * }\n * }\n * }\n * )\n * ```\n *\n * @param state Navigation state to serialize.\n * @param options Extra options to fine-tune how to serialize the path.\n * @returns Path representing the state, e.g. /foo/bar?count=42.\n */\nexport default function getPathFromState(state, options) {\n if (state == null) {\n throw Error(\"Got 'undefined' for the navigation state. You must pass a valid state object.\");\n }\n if (options) {\n validatePathConfig(options);\n }\n\n // Create a normalized configs object which will be easier to use\n const configs = options !== null && options !== void 0 && options.screens ? createNormalizedConfigs(options === null || options === void 0 ? void 0 : options.screens) : {};\n let path = '/';\n let current = state;\n const allParams = {};\n while (current) {\n let index = typeof current.index === 'number' ? current.index : 0;\n let route = current.routes[index];\n let pattern;\n let focusedParams;\n let focusedRoute = getActiveRoute(state);\n let currentOptions = configs;\n\n // Keep all the route names that appeared during going deeper in config in case the pattern is resolved to undefined\n let nestedRouteNames = [];\n let hasNext = true;\n while (route.name in currentOptions && hasNext) {\n pattern = currentOptions[route.name].pattern;\n nestedRouteNames.push(route.name);\n if (route.params) {\n var _currentOptions$route;\n const stringify = (_currentOptions$route = currentOptions[route.name]) === null || _currentOptions$route === void 0 ? void 0 : _currentOptions$route.stringify;\n const currentParams = fromEntries(Object.entries(route.params).map(_ref => {\n let [key, value] = _ref;\n return [key, stringify !== null && stringify !== void 0 && stringify[key] ? stringify[key](value) : String(value)];\n }));\n if (pattern) {\n Object.assign(allParams, currentParams);\n }\n if (focusedRoute === route) {\n var _pattern;\n // If this is the focused route, keep the params for later use\n // We save it here since it's been stringified already\n focusedParams = {\n ...currentParams\n };\n (_pattern = pattern) === null || _pattern === void 0 ? void 0 : _pattern.split('/').filter(p => p.startsWith(':'))\n // eslint-disable-next-line no-loop-func\n .forEach(p => {\n const name = getParamName(p);\n\n // Remove the params present in the pattern since we'll only use the rest for query string\n if (focusedParams) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[name];\n }\n });\n }\n }\n\n // If there is no `screens` property or no nested state, we return pattern\n if (!currentOptions[route.name].screens || route.state === undefined) {\n hasNext = false;\n } else {\n index = typeof route.state.index === 'number' ? route.state.index : route.state.routes.length - 1;\n const nextRoute = route.state.routes[index];\n const nestedConfig = currentOptions[route.name].screens;\n\n // if there is config for next route name, we go deeper\n if (nestedConfig && nextRoute.name in nestedConfig) {\n route = nextRoute;\n currentOptions = nestedConfig;\n } else {\n // If not, there is no sense in going deeper in config\n hasNext = false;\n }\n }\n }\n if (pattern === undefined) {\n pattern = nestedRouteNames.join('/');\n }\n if (currentOptions[route.name] !== undefined) {\n path += pattern.split('/').map(p => {\n const name = getParamName(p);\n\n // We don't know what to show for wildcard patterns\n // Showing the route name seems ok, though whatever we show here will be incorrect\n // Since the page doesn't actually exist\n if (p === '*') {\n return route.name;\n }\n\n // If the path has a pattern for a param, put the param in the path\n if (p.startsWith(':')) {\n const value = allParams[name];\n if (value === undefined && p.endsWith('?')) {\n // Optional params without value assigned in route.params should be ignored\n return '';\n }\n return encodeURIComponent(value);\n }\n return encodeURIComponent(p);\n }).join('/');\n } else {\n path += encodeURIComponent(route.name);\n }\n if (!focusedParams) {\n focusedParams = focusedRoute.params;\n }\n if (route.state) {\n path += '/';\n } else if (focusedParams) {\n for (let param in focusedParams) {\n if (focusedParams[param] === 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[param];\n }\n }\n const query = queryString.stringify(focusedParams, {\n sort: false\n });\n if (query) {\n path += `?${query}`;\n }\n }\n current = route.state;\n }\n\n // Remove multiple as well as trailing slashes\n path = path.replace(/\\/+/g, '/');\n path = path.length > 1 ? path.replace(/\\/$/, '') : path;\n return path;\n}\nconst getParamName = pattern => pattern.replace(/^:/, '').replace(/\\?$/, '');\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 createConfigItem = (config, parentPattern) => {\n var _pattern2;\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 return {\n pattern\n };\n }\n\n // If an object is specified as the value (e.g. Foo: { ... }),\n // It can have `path` property and `screens` prop which has nested configs\n let pattern;\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 const screens = config.screens ? createNormalizedConfigs(config.screens, pattern) : undefined;\n return {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern: (_pattern2 = pattern) === null || _pattern2 === void 0 ? void 0 : _pattern2.split('/').filter(Boolean).join('/'),\n stringify: config.stringify,\n screens\n };\n};\nconst createNormalizedConfigs = (options, pattern) => fromEntries(Object.entries(options).map(_ref2 => {\n let [name, c] = _ref2;\n const result = createConfigItem(c, pattern);\n return [name, result];\n}));\n//# sourceMappingURL=getPathFromState.js.map"]},"metadata":{},"sourceType":"module"} |