{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { Platform, UnavailabilityError } from '@unimodules/core';\nimport Constants from 'expo-constants';\nimport invariant from 'invariant';\nimport qs from 'qs';\nimport { useEffect, useState } from 'react';\nimport URL from 'url-parse';\nimport NativeLinking from \"./ExpoLinking\";\nimport { hasCustomScheme, resolveScheme } from \"./Schemes\";\n\nfunction validateURL(url) {\n  invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n  invariant(url, 'Invalid URL: cannot be empty');\n}\n\nfunction getHostUri() {\n  var _Constants$manifest, _Constants$manifest2;\n\n  if ((_Constants$manifest = Constants.manifest) != null && _Constants$manifest.hostUri) {\n    return Constants.manifest.hostUri;\n  } else if (!((_Constants$manifest2 = Constants.manifest) != null && _Constants$manifest2.hostUri) && !hasCustomScheme()) {\n    return removeScheme(Constants.linkingUri).replace(/\\/--($|\\/.*$)/, '');\n  } else {\n    return null;\n  }\n}\n\nfunction isExpoHosted() {\n  var _Constants$manifest3;\n\n  var hostUri = getHostUri();\n  return !!(hostUri && (/^(.*\\.)?(expo\\.io|exp\\.host|exp\\.direct|expo\\.test)(:.*)?(\\/.*)?$/.test(hostUri) || (_Constants$manifest3 = Constants.manifest) != null && _Constants$manifest3.developer));\n}\n\nfunction removeScheme(url) {\n  return url.replace(/^[a-zA-Z0-9+.-]+:\\/\\//, '');\n}\n\nfunction removePort(url) {\n  return url.replace(/(?=([a-zA-Z0-9+.-]+:\\/\\/)?[^/]):\\d+/, '');\n}\n\nfunction removeLeadingSlash(url) {\n  return url.replace(/^\\//, '');\n}\n\nfunction removeTrailingSlashAndQueryString(url) {\n  return url.replace(/\\/?\\?.*$/, '');\n}\n\nfunction ensureLeadingSlash(input, shouldAppend) {\n  var hasSlash = input.endsWith('/');\n\n  if (hasSlash && !shouldAppend) {\n    return input.substring(0, input.length - 1);\n  } else if (!hasSlash && shouldAppend) {\n    return input + \"/\";\n  }\n\n  return input;\n}\n\nfunction ensureTrailingSlash(input, shouldAppend) {\n  var hasSlash = input.startsWith('/');\n\n  if (hasSlash && !shouldAppend) {\n    return input.substring(1);\n  } else if (!hasSlash && shouldAppend) {\n    return \"/\" + input;\n  }\n\n  return input;\n}\n\nexport function makeUrl() {\n  var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var queryParams = arguments.length > 1 ? arguments[1] : undefined;\n  var scheme = arguments.length > 2 ? arguments[2] : undefined;\n  return createURL(path, {\n    queryParams: queryParams,\n    scheme: scheme,\n    isTripleSlashed: true\n  });\n}\nexport function createURL(path) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      scheme = _ref.scheme,\n      _ref$queryParams = _ref.queryParams,\n      queryParams = _ref$queryParams === void 0 ? {} : _ref$queryParams,\n      _ref$isTripleSlashed = _ref.isTripleSlashed,\n      isTripleSlashed = _ref$isTripleSlashed === void 0 ? false : _ref$isTripleSlashed;\n\n  if (Platform.OS === 'web') {\n    if (!Platform.isDOMAvailable) return '';\n    var origin = ensureLeadingSlash(window.location.origin, false);\n\n    var _queryString = qs.stringify(queryParams);\n\n    if (_queryString) {\n      _queryString = \"?\" + _queryString;\n    }\n\n    var outputPath = path;\n    if (outputPath) outputPath = ensureTrailingSlash(path, true);\n    return encodeURI(\"\" + origin + outputPath + _queryString);\n  }\n\n  var resolvedScheme = resolveScheme({\n    scheme: scheme\n  });\n  var hostUri = getHostUri() || '';\n\n  if (hasCustomScheme() && isExpoHosted()) {\n    hostUri = '';\n  }\n\n  if (path) {\n    if (isExpoHosted() && hostUri) {\n      path = \"/--/\" + removeLeadingSlash(path);\n    }\n\n    if (isTripleSlashed && !path.startsWith('/')) {\n      path = \"/\" + path;\n    }\n  } else {\n    path = '';\n  }\n\n  var queryString = '';\n  var queryStringMatchResult = hostUri.match(/(.*)\\?(.+)/);\n\n  if (queryStringMatchResult) {\n    hostUri = queryStringMatchResult[1];\n    queryString = queryStringMatchResult[2];\n    var paramsFromHostUri = {};\n\n    try {\n      var parsedParams = qs.parse(queryString);\n\n      if (typeof parsedParams === 'object') {\n        paramsFromHostUri = parsedParams;\n      }\n    } catch (e) {}\n\n    queryParams = _objectSpread(_objectSpread({}, queryParams), paramsFromHostUri);\n  }\n\n  queryString = qs.stringify(queryParams);\n\n  if (queryString) {\n    queryString = \"?\" + queryString;\n  }\n\n  hostUri = ensureTrailingSlash(hostUri, !isTripleSlashed);\n  return encodeURI(resolvedScheme + \":\" + (isTripleSlashed ? '/' : '') + \"/\" + hostUri + path + queryString);\n}\nexport function parse(url) {\n  validateURL(url);\n  var parsed = URL(url, true);\n\n  for (var param in parsed.query) {\n    parsed.query[param] = decodeURIComponent(parsed.query[param]);\n  }\n\n  var queryParams = parsed.query;\n  var hostUri = getHostUri() || '';\n  var hostUriStripped = removePort(removeTrailingSlashAndQueryString(hostUri));\n  var path = parsed.pathname || null;\n  var hostname = parsed.hostname || null;\n  var scheme = parsed.protocol || null;\n\n  if (scheme) {\n    scheme = scheme.substring(0, scheme.length - 1);\n  }\n\n  if (path) {\n    path = removeLeadingSlash(path);\n    var expoPrefix = null;\n\n    if (hostUriStripped) {\n      var parts = hostUriStripped.split('/');\n      expoPrefix = parts.slice(1).concat(['--/']).join('/');\n    }\n\n    if (isExpoHosted() && !hasCustomScheme() && expoPrefix && path.startsWith(expoPrefix)) {\n      path = path.substring(expoPrefix.length);\n      hostname = null;\n    } else if (path.indexOf('+') > -1) {\n      path = path.substring(path.indexOf('+') + 1);\n    }\n  }\n\n  return {\n    hostname: hostname,\n    path: path,\n    queryParams: queryParams,\n    scheme: scheme\n  };\n}\nexport function addEventListener(type, handler) {\n  NativeLinking.addEventListener(type, handler);\n}\nexport function removeEventListener(type, handler) {\n  NativeLinking.removeEventListener(type, handler);\n}\nexport function parseInitialURLAsync() {\n  var initialUrl;\n  return _regeneratorRuntime.async(function parseInitialURLAsync$(_context) {\n    while (1) {\n      switch (_context.prev = _context.next) {\n        case 0:\n          _context.next = 2;\n          return _regeneratorRuntime.awrap(NativeLinking.getInitialURL());\n\n        case 2:\n          initialUrl = _context.sent;\n\n          if (initialUrl) {\n            _context.next = 5;\n            break;\n          }\n\n          return _context.abrupt(\"return\", {\n            scheme: null,\n            hostname: null,\n            path: null,\n            queryParams: null\n          });\n\n        case 5:\n          return _context.abrupt(\"return\", parse(initialUrl));\n\n        case 6:\n        case \"end\":\n          return _context.stop();\n      }\n    }\n  }, null, null, null, Promise);\n}\nexport function sendIntent(action, extras) {\n  return _regeneratorRuntime.async(function sendIntent$(_context2) {\n    while (1) {\n      switch (_context2.prev = _context2.next) {\n        case 0:\n          if (!(Platform.OS === 'android')) {\n            _context2.next = 4;\n            break;\n          }\n\n          _context2.next = 3;\n          return _regeneratorRuntime.awrap(NativeLinking.sendIntent(action, extras));\n\n        case 3:\n          return _context2.abrupt(\"return\", _context2.sent);\n\n        case 4:\n          throw new UnavailabilityError('Linking', 'sendIntent');\n\n        case 5:\n        case \"end\":\n          return _context2.stop();\n      }\n    }\n  }, null, null, null, Promise);\n}\nexport function openSettings() {\n  return _regeneratorRuntime.async(function openSettings$(_context3) {\n    while (1) {\n      switch (_context3.prev = _context3.next) {\n        case 0:\n          if (!(Platform.OS === 'web')) {\n            _context3.next = 2;\n            break;\n          }\n\n          throw new UnavailabilityError('Linking', 'openSettings');\n\n        case 2:\n          if (!NativeLinking.openSettings) {\n            _context3.next = 6;\n            break;\n          }\n\n          _context3.next = 5;\n          return _regeneratorRuntime.awrap(NativeLinking.openSettings());\n\n        case 5:\n          return _context3.abrupt(\"return\", _context3.sent);\n\n        case 6:\n          _context3.next = 8;\n          return _regeneratorRuntime.awrap(openURL('app-settings:'));\n\n        case 8:\n        case \"end\":\n          return _context3.stop();\n      }\n    }\n  }, null, null, null, Promise);\n}\nexport function getInitialURL() {\n  var _await$NativeLinking$;\n\n  return _regeneratorRuntime.async(function getInitialURL$(_context4) {\n    while (1) {\n      switch (_context4.prev = _context4.next) {\n        case 0:\n          _context4.next = 2;\n          return _regeneratorRuntime.awrap(NativeLinking.getInitialURL());\n\n        case 2:\n          _context4.t0 = _await$NativeLinking$ = _context4.sent;\n\n          if (!(_context4.t0 != null)) {\n            _context4.next = 7;\n            break;\n          }\n\n          _context4.t1 = _await$NativeLinking$;\n          _context4.next = 8;\n          break;\n\n        case 7:\n          _context4.t1 = null;\n\n        case 8:\n          return _context4.abrupt(\"return\", _context4.t1);\n\n        case 9:\n        case \"end\":\n          return _context4.stop();\n      }\n    }\n  }, null, null, null, Promise);\n}\nexport function openURL(url) {\n  return _regeneratorRuntime.async(function openURL$(_context5) {\n    while (1) {\n      switch (_context5.prev = _context5.next) {\n        case 0:\n          validateURL(url);\n          _context5.next = 3;\n          return _regeneratorRuntime.awrap(NativeLinking.openURL(url));\n\n        case 3:\n          return _context5.abrupt(\"return\", _context5.sent);\n\n        case 4:\n        case \"end\":\n          return _context5.stop();\n      }\n    }\n  }, null, null, null, Promise);\n}\nexport function canOpenURL(url) {\n  return _regeneratorRuntime.async(function canOpenURL$(_context6) {\n    while (1) {\n      switch (_context6.prev = _context6.next) {\n        case 0:\n          validateURL(url);\n          _context6.next = 3;\n          return _regeneratorRuntime.awrap(NativeLinking.canOpenURL(url));\n\n        case 3:\n          return _context6.abrupt(\"return\", _context6.sent);\n\n        case 4:\n        case \"end\":\n          return _context6.stop();\n      }\n    }\n  }, null, null, null, Promise);\n}\nexport function useUrl() {\n  var _useState = useState(null),\n      _useState2 = _slicedToArray(_useState, 2),\n      url = _useState2[0],\n      setLink = _useState2[1];\n\n  function onChange(event) {\n    setLink(event.url);\n  }\n\n  useEffect(function () {\n    getInitialURL().then(function (url) {\n      return setLink(url);\n    });\n    addEventListener('url', onChange);\n    return function () {\n      return removeEventListener('url', onChange);\n    };\n  }, []);\n  return url;\n}\nexport * from \"./Linking.types\";","map":{"version":3,"sources":["../src/Linking.ts"],"names":[],"mappings":"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","sourcesContent":["import { Platform, UnavailabilityError } from '@unimodules/core';\nimport Constants from 'expo-constants';\nimport invariant from 'invariant';\nimport qs from 'qs';\nimport { useEffect, useState } from 'react';\nimport URL from 'url-parse';\n\nimport NativeLinking from './ExpoLinking';\nimport { ParsedURL, QueryParams, URLListener } from './Linking.types';\nimport { hasCustomScheme, resolveScheme } from './Schemes';\n\nfunction validateURL(url: string): void {\n  invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n  invariant(url, 'Invalid URL: cannot be empty');\n}\n\nfunction getHostUri(): string | null {\n  if (Constants.manifest?.hostUri) {\n    return Constants.manifest.hostUri;\n  } else if (!Constants.manifest?.hostUri && !hasCustomScheme()) {\n    // we're probably not using up-to-date xdl, so just fake it for now\n    // we have to remove the /--/ on the end since this will be inserted again later\n    return removeScheme(Constants.linkingUri).replace(/\\/--($|\\/.*$)/, '');\n  } else {\n    return null;\n  }\n}\n\nfunction isExpoHosted(): boolean {\n  const hostUri = getHostUri();\n  return !!(\n    hostUri &&\n    (/^(.*\\.)?(expo\\.io|exp\\.host|exp\\.direct|expo\\.test)(:.*)?(\\/.*)?$/.test(hostUri) ||\n      Constants.manifest?.developer)\n  );\n}\n\nfunction removeScheme(url: string): string {\n  return url.replace(/^[a-zA-Z0-9+.-]+:\\/\\//, '');\n}\n\nfunction removePort(url: string): string {\n  return url.replace(/(?=([a-zA-Z0-9+.-]+:\\/\\/)?[^/]):\\d+/, '');\n}\n\nfunction removeLeadingSlash(url: string): string {\n  return url.replace(/^\\//, '');\n}\n\nfunction removeTrailingSlashAndQueryString(url: string): string {\n  return url.replace(/\\/?\\?.*$/, '');\n}\n\nfunction ensureLeadingSlash(input: string, shouldAppend: boolean): string {\n  const hasSlash = input.endsWith('/');\n  if (hasSlash && !shouldAppend) {\n    return input.substring(0, input.length - 1);\n  } else if (!hasSlash && shouldAppend) {\n    return `${input}/`;\n  }\n  return input;\n}\n\nfunction ensureTrailingSlash(input: string, shouldAppend: boolean): string {\n  const hasSlash = input.startsWith('/');\n  if (hasSlash && !shouldAppend) {\n    return input.substring(1);\n  } else if (!hasSlash && shouldAppend) {\n    return `/${input}`;\n  }\n  return input;\n}\n\n/**\n * Create a URL that works for the environment the app is currently running in.\n * The scheme in bare and standalone must be defined in the app.json under `expo.scheme`.\n *\n * **Examples**\n *\n * - Bare: empty string\n * - Standalone, Custom: `yourscheme:///path`\n * - Web (dev): `https://localhost:19006/path`\n * - Web (prod): `https://myapp.com/path`\n * - Expo Client (dev): `exp://128.0.0.1:19000/--/path`\n * - Expo Client (prod): `exp://exp.host/@yourname/your-app/--/path`\n *\n * @param path addition path components to append to the base URL.\n * @param queryParams An object of parameters that will be converted into a query string.\n */\nexport function makeUrl(path: string = '', queryParams?: QueryParams, scheme?: string): string {\n  return createURL(path, { queryParams, scheme, isTripleSlashed: true });\n}\n\n/**\n * Create a URL that works for the environment the app is currently running in.\n * The scheme in bare and standalone must be defined in the Expo config (app.config.js or app.json) under `expo.scheme`.\n *\n * **Examples**\n *\n * - Bare: `<scheme>://path` -- uses provided scheme or scheme from Expo config `scheme`.\n * - Standalone, Custom: `yourscheme://path`\n * - Web (dev): `https://localhost:19006/path`\n * - Web (prod): `https://myapp.com/path`\n * - Expo Client (dev): `exp://128.0.0.1:19000/--/path`\n * - Expo Client (prod): `exp://exp.host/@yourname/your-app/--/path`\n *\n * @param path addition path components to append to the base URL.\n * @param scheme URI protocol `<scheme>://` that must be built into your native app.\n * @param queryParams An object of parameters that will be converted into a query string.\n */\nexport function createURL(\n  path: string,\n  {\n    scheme,\n    queryParams = {},\n    isTripleSlashed = false,\n  }: {\n    scheme?: string;\n    queryParams?: QueryParams;\n    isTripleSlashed?: boolean;\n  } = {}\n): string {\n  if (Platform.OS === 'web') {\n    if (!Platform.isDOMAvailable) return '';\n\n    const origin = ensureLeadingSlash(window.location.origin, false);\n    let queryString = qs.stringify(queryParams);\n    if (queryString) {\n      queryString = `?${queryString}`;\n    }\n\n    let outputPath = path;\n    if (outputPath) outputPath = ensureTrailingSlash(path, true);\n\n    return encodeURI(`${origin}${outputPath}${queryString}`);\n  }\n\n  const resolvedScheme = resolveScheme({ scheme });\n\n  let hostUri = getHostUri() || '';\n\n  if (hasCustomScheme() && isExpoHosted()) {\n    hostUri = '';\n  }\n\n  if (path) {\n    if (isExpoHosted() && hostUri) {\n      path = `/--/${removeLeadingSlash(path)}`;\n    }\n    if (isTripleSlashed && !path.startsWith('/')) {\n      path = `/${path}`;\n    }\n  } else {\n    path = '';\n  }\n\n  // merge user-provided query params with any that were already in the hostUri\n  // e.g. release-channel\n  let queryString = '';\n  const queryStringMatchResult = hostUri.match(/(.*)\\?(.+)/);\n  if (queryStringMatchResult) {\n    hostUri = queryStringMatchResult[1];\n    queryString = queryStringMatchResult[2];\n    let paramsFromHostUri = {};\n    try {\n      const parsedParams = qs.parse(queryString);\n      if (typeof parsedParams === 'object') {\n        paramsFromHostUri = parsedParams;\n      }\n    } catch (e) {}\n    queryParams = {\n      ...queryParams,\n      ...paramsFromHostUri,\n    };\n  }\n  queryString = qs.stringify(queryParams);\n  if (queryString) {\n    queryString = `?${queryString}`;\n  }\n\n  hostUri = ensureTrailingSlash(hostUri, !isTripleSlashed);\n\n  return encodeURI(\n    `${resolvedScheme}:${isTripleSlashed ? '/' : ''}/${hostUri}${path}${queryString}`\n  );\n}\n\n/**\n * Returns the components and query parameters for a given URL.\n *\n * @param url Input URL to parse\n */\nexport function parse(url: string): ParsedURL {\n  validateURL(url);\n\n  const parsed = URL(url, /* parseQueryString */ true);\n\n  for (const param in parsed.query) {\n    parsed.query[param] = decodeURIComponent(parsed.query[param]!);\n  }\n  const queryParams = parsed.query;\n\n  const hostUri = getHostUri() || '';\n  const hostUriStripped = removePort(removeTrailingSlashAndQueryString(hostUri));\n\n  let path = parsed.pathname || null;\n  let hostname = parsed.hostname || null;\n  let scheme = parsed.protocol || null;\n\n  if (scheme) {\n    // Remove colon at end\n    scheme = scheme.substring(0, scheme.length - 1);\n  }\n\n  if (path) {\n    path = removeLeadingSlash(path);\n\n    let expoPrefix: string | null = null;\n    if (hostUriStripped) {\n      const parts = hostUriStripped.split('/');\n      expoPrefix = parts\n        .slice(1)\n        .concat(['--/'])\n        .join('/');\n    }\n\n    if (isExpoHosted() && !hasCustomScheme() && expoPrefix && path.startsWith(expoPrefix)) {\n      path = path.substring(expoPrefix.length);\n      hostname = null;\n    } else if (path.indexOf('+') > -1) {\n      path = path.substring(path.indexOf('+') + 1);\n    }\n  }\n\n  return {\n    hostname,\n    path,\n    queryParams,\n    scheme,\n  };\n}\n\n/**\n * Add a handler to Linking changes by listening to the `url` event type\n * and providing the handler\n *\n * See https://reactnative.dev/docs/linking.html#addeventlistener\n */\nexport function addEventListener(type: string, handler: URLListener) {\n  NativeLinking.addEventListener(type, handler);\n}\n\n/**\n * Remove a handler by passing the `url` event type and the handler.\n *\n * See https://reactnative.dev/docs/linking.html#removeeventlistener\n */\nexport function removeEventListener(type: string, handler: URLListener) {\n  NativeLinking.removeEventListener(type, handler);\n}\n\n/**\n * **Native:** Parses the link that opened the app. If no link opened the app, all the fields will be \\`null\\`.\n * **Web:** Parses the current window URL.\n */\nexport async function parseInitialURLAsync(): Promise<ParsedURL> {\n  const initialUrl = await NativeLinking.getInitialURL();\n  if (!initialUrl) {\n    return {\n      scheme: null,\n      hostname: null,\n      path: null,\n      queryParams: null,\n    };\n  }\n\n  return parse(initialUrl);\n}\n\n/**\n * Launch an Android intent with optional extras\n *\n * @platform android\n */\nexport async function sendIntent(\n  action: string,\n  extras?: { key: string; value: string | number | boolean }[]\n): Promise<void> {\n  if (Platform.OS === 'android') {\n    return await NativeLinking.sendIntent(action, extras);\n  }\n  throw new UnavailabilityError('Linking', 'sendIntent');\n}\n\n/**\n * Attempt to open the system settings for an the app.\n *\n * @platform ios\n */\nexport async function openSettings(): Promise<void> {\n  if (Platform.OS === 'web') {\n    throw new UnavailabilityError('Linking', 'openSettings');\n  }\n  if (NativeLinking.openSettings) {\n    return await NativeLinking.openSettings();\n  }\n  await openURL('app-settings:');\n}\n\n/**\n * If the app launch was triggered by an app link,\n * it will give the link url, otherwise it will give `null`\n */\nexport async function getInitialURL(): Promise<string | null> {\n  return (await NativeLinking.getInitialURL()) ?? null;\n}\n\n/**\n * Try to open the given `url` with any of the installed apps.\n */\nexport async function openURL(url: string): Promise<true> {\n  validateURL(url);\n  return await NativeLinking.openURL(url);\n}\n\n/**\n * Determine whether or not an installed app can handle a given URL.\n * On web this always returns true because there is no API for detecting what URLs can be opened.\n */\nexport async function canOpenURL(url: string): Promise<boolean> {\n  validateURL(url);\n  return await NativeLinking.canOpenURL(url);\n}\n\n/**\n * Returns the initial URL followed by any subsequent changes to the URL.\n */\nexport function useUrl(): string | null {\n  const [url, setLink] = useState<string | null>(null);\n\n  function onChange(event: { url: string }) {\n    setLink(event.url);\n  }\n\n  useEffect(() => {\n    getInitialURL().then(url => setLink(url));\n    addEventListener('url', onChange);\n    return () => removeEventListener('url', onChange);\n  }, []);\n\n  return url;\n}\n\nexport * from './Linking.types';\n"],"sourceRoot":""},"metadata":{},"sourceType":"module"}