1{"version":3,"file":"extractPathFromURL.js","sourceRoot":"","sources":["../../src/fork/extractPathFromURL.ts"],"names":[],"mappings":"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","sourcesContent":["import Constants, { ExecutionEnvironment } from 'expo-constants';\nimport * as Linking from 'expo-linking';\nimport URL from 'url-parse';\n\n// This is only run on native.\nfunction extractExactPathFromURL(url: string): string {\n  if (\n    // If a universal link / app link / web URL is used, we should use the path\n    // from the URL, while stripping the origin.\n    url.match(/^https?:\\/\\//)\n  ) {\n    const { origin, href } = new URL(url);\n    return href.replace(origin, '');\n  }\n\n  // Handle special URLs used in Expo Go: `/--/pathname` -> `pathname`\n  if (\n    Constants.executionEnvironment === ExecutionEnvironment.StoreClient &&\n    // while not exhaustive, `exp` and `exps` are the only two schemes which\n    // are passed through to other apps in Expo Go.\n    url.match(/^exp(s)?:\\/\\//)\n  ) {\n    const pathname = url.match(/exps?:\\/\\/.*?\\/--\\/(.*)/)?.[1];\n    if (pathname) {\n      return fromDeepLink('a://' + pathname);\n    }\n\n    const res = Linking.parse(url);\n\n    const qs = !res.queryParams\n      ? ''\n      : Object.entries(res.queryParams)\n          .map(([k, v]) => `${k}=${v}`)\n          .join('&');\n    return (\n      adjustPathname({ hostname: res.hostname, pathname: res.path || '' }) + (qs ? '?' + qs : '')\n    );\n  }\n\n  // TODO: Support dev client URLs\n\n  return fromDeepLink(url);\n}\n\n/** Major hack to support the makeshift expo-development-client system. */\nfunction isExpoDevelopmentClient(url: URL<Record<string, string | undefined>>): boolean {\n  return !!url.hostname.match(/^expo-development-client$/);\n}\n\nfunction fromDeepLink(url: string): string {\n  // This is for all standard deep links, e.g. `foobar://` where everything\n  // after the `://` is the path.\n  const res = new URL(url, true);\n\n  if (isExpoDevelopmentClient(res)) {\n    if (!res.query || !res.query.url) {\n      return '';\n    }\n    const incomingUrl = res.query.url;\n    return extractExactPathFromURL(decodeURI(incomingUrl));\n  }\n\n  const qs = !res.query\n    ? ''\n    : Object.entries(res.query as Record<string, string>)\n        .map(([k, v]) => `${k}=${decodeURIComponent(v)}`)\n        .join('&');\n\n  let results = '';\n\n  if (res.host) {\n    results += res.host;\n  }\n\n  if (res.pathname) {\n    results += res.pathname;\n  }\n\n  if (qs) {\n    results += '?' + qs;\n  }\n\n  return results;\n}\n\nexport function extractExpoPathFromURL(url: string = '') {\n  // TODO: We should get rid of this, dropping specificities is not good\n  return extractExactPathFromURL(url).replace(/^\\//, '');\n}\n\nexport function adjustPathname(url: { hostname?: string | null; pathname: string }) {\n  if (url.hostname === 'exp.host' || url.hostname === 'u.expo.dev') {\n    // drop the first two segments from pathname:\n    return url.pathname.split('/').slice(2).join('/');\n  }\n  return url.pathname;\n}\n"]}