UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 10.8 kB
{"version":3,"file":"getPathFromState.js","names":[],"sources":["esm/fork/getPathFromState.js"],"sourcesContent":["import * as sharedModUtils from \"./_shared\";\nimport {\n appendBaseUrl,\n getPathWithConventionsCollapsed\n} from \"./getPathFromState-mods\";\nimport { validatePathConfig } from \"./validatePathConfig\";\nconst NAV_PARAM_SCREEN = \"screen\";\nconst NAV_PARAM_PARAMS = \"params\";\nconst NAV_PARAM_KEY = \"key\";\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};\nconst cachedNormalizedConfigs = /* @__PURE__ */ new WeakMap();\nconst getNormalizedConfigs = (options) => {\n if (!options?.screens) return {};\n const cached = cachedNormalizedConfigs.get(options?.screens);\n if (cached) return cached;\n const normalizedConfigs = createNormalizedConfigs(options.screens);\n cachedNormalizedConfigs.set(options.screens, normalizedConfigs);\n return normalizedConfigs;\n};\nfunction getPathFromState(state, options) {\n return getPathDataFromState(state, options).path;\n}\nfunction getPathDataFromState(state, options) {\n if (state == null) {\n throw Error(\n \"Got 'undefined' for the navigation state. You must pass a valid state object.\"\n );\n }\n if (options) {\n validatePathConfig(options);\n }\n const configs = getNormalizedConfigs(options);\n let path = \"/\";\n let current = state;\n const allParams = {};\n while (current) {\n if (!current.routes?.length) {\n break;\n }\n let index = typeof current.index === \"number\" ? current.index : 0;\n let route = current.routes[index];\n let pattern;\n let focusedParams;\n const focusedRoute = getActiveRoute(state);\n let currentOptions = configs;\n const 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 const stringify = currentOptions[route.name]?.stringify;\n const currentParams = Object.fromEntries(\n Object.entries(route.params).flatMap(([key, value]) => {\n if (key === NAV_PARAM_SCREEN || key === NAV_PARAM_PARAMS || key === NAV_PARAM_KEY) {\n return [];\n }\n return [\n [\n key,\n stringify?.[key] ? stringify[key](value) : Array.isArray(value) ? value.map(String) : typeof value === \"undefined\" ? value : String(value)\n ]\n ];\n })\n );\n Object.assign(allParams, currentParams);\n if (focusedRoute === route) {\n focusedParams = { ...currentParams };\n pattern?.split(\"/\").filter((p) => sharedModUtils.isDynamicPart(p)).forEach((p) => {\n const name = sharedModUtils.getParamName(p);\n if (focusedParams) {\n delete focusedParams[name];\n }\n });\n }\n }\n if (!currentOptions[route.name].screens || route.state === void 0) {\n const screens = currentOptions[route.name].screens;\n const screen = route.params && NAV_PARAM_SCREEN in route.params ? route.params[NAV_PARAM_SCREEN]?.toString() : screens ? Object.keys(screens)[0] : void 0;\n if (screen && screens && currentOptions[route.name].screens?.[screen]) {\n route = {\n ...screens[screen],\n name: screen,\n key: screen,\n params: route.params?.[NAV_PARAM_PARAMS]\n };\n currentOptions = screens;\n } else {\n hasNext = false;\n }\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 if (nestedConfig && nextRoute.name in nestedConfig) {\n route = nextRoute;\n currentOptions = nestedConfig;\n } else {\n hasNext = false;\n }\n }\n }\n if (currentOptions[route.name] !== void 0) {\n if (pattern === void 0) {\n pattern = nestedRouteNames.join(\"/\");\n }\n path += getPathWithConventionsCollapsed({\n ...options,\n pattern,\n route,\n params: allParams,\n initialRouteName: configs[route.name]?.initialRouteName\n });\n } else if (!route.name.startsWith(\"+\")) {\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 (const param in focusedParams) {\n if (focusedParams[param] === \"undefined\") {\n delete focusedParams[param];\n }\n }\n delete focusedParams[\"#\"];\n const query = new URLSearchParams(focusedParams).toString();\n if (query) {\n path += `?${query}`;\n }\n }\n current = route.state;\n }\n path = path.replace(/\\/+/g, \"/\");\n path = path.length > 1 ? path.replace(/\\/$/, \"\") : path;\n if (options?.path) {\n path = joinPaths(options.path, path);\n }\n path = appendBaseUrl(path);\n if (allParams[\"#\"]) {\n path += `#${allParams[\"#\"]}`;\n }\n return { path, params: allParams };\n}\nconst joinPaths = (...paths) => [].concat(...paths.map((p) => p.split(\"/\"))).filter(Boolean).join(\"/\");\nconst createConfigItem = (config, parentPattern) => {\n if (typeof config === \"string\") {\n const pattern2 = parentPattern ? joinPaths(parentPattern, config) : config;\n return { pattern: pattern2 };\n }\n if (config.exact && config.path === void 0) {\n throw new Error(\n \"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 }\n const pattern = config.exact !== true ? joinPaths(parentPattern || \"\", config.path || \"\") : config.path || \"\";\n const screens = config.screens ? createNormalizedConfigs(config.screens, pattern) : void 0;\n return {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern: pattern?.split(\"/\").filter(Boolean).join(\"/\"),\n stringify: config.stringify,\n screens\n };\n};\nconst createNormalizedConfigs = (options, pattern) => Object.fromEntries(\n Object.entries(options).map(([name, c]) => {\n const result = createConfigItem(c, pattern);\n return [name, result];\n })\n);\nvar getPathFromState_default = getPathFromState;\nexport {\n getPathFromState_default as default,\n getPathDataFromState,\n getPathFromState\n};\n//# sourceMappingURL=getPathFromState.js.map\n"],"mappings":"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"}