UNPKG

8.66 kBSource Map (JSON)View Raw
1{"version":3,"file":"Linking.js","sourceRoot":"","sources":["../src/Linking.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from 'expo-constants';\nimport { Linking } from 'react-native';\nimport qs from 'qs';\n\ntype ParsedURL = {\n path: string | null,\n queryParams: Object | null,\n};\n\nconst { manifest } = Constants;\n\nconst USES_CUSTOM_SCHEME = Constants.appOwnership === 'standalone' && manifest.scheme;\n\nlet HOST_URI = manifest.hostUri;\nif (!HOST_URI && !USES_CUSTOM_SCHEME) {\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 HOST_URI = _removeScheme(Constants.linkingUri).replace(/\\/--($|\\/.*$)/, '');\n}\nconst IS_EXPO_HOSTED =\n HOST_URI &&\n (/^(.*\\.)?(expo\\.io|exp\\.host|exp\\.direct|expo\\.test)(:.*)?(\\/.*)?$/.test(HOST_URI) ||\n manifest.developer);\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 _removeTrailingSlash(url) {\n return url.replace(/\\/$/, '');\n}\n\nfunction _removeTrailingSlashAndQueryString(url) {\n return url.replace(/\\/?\\?.*$/, '');\n}\n\nfunction makeUrl(path: string = '', queryParams: Object = {}): string {\n let scheme = 'exp';\n if (Constants.appOwnership === 'standalone') {\n scheme = manifest.scheme || (manifest.detach && manifest.detach.scheme);\n }\n if (!scheme) {\n throw new Error('Cannot make a deep link into a standalone app with no custom scheme defined');\n }\n\n let hostUri = HOST_URI || '';\n if (USES_CUSTOM_SCHEME && IS_EXPO_HOSTED) {\n hostUri = '';\n }\n\n if (path) {\n if (IS_EXPO_HOSTED && hostUri) {\n path = `/--/${_removeLeadingSlash(path)}`;\n }\n\n if (!path.startsWith('/') && hostUri) {\n path = `/${path}`;\n } else if (path.startsWith('/') && !hostUri) {\n path = path.substr(1);\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 let queryStringMatchResult = hostUri.match(/(.*)\\?(.+)/);\n if (queryStringMatchResult) {\n hostUri = queryStringMatchResult[1];\n queryString = queryStringMatchResult[2];\n let paramsFromHostUri = {};\n try {\n let 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 = _removeTrailingSlash(hostUri);\n\n return encodeURI(`${scheme}://${hostUri}${path}${queryString}`);\n}\n\nfunction parse(url: string): ParsedURL {\n if (!url) {\n throw new Error('parse cannot be called with a null value');\n }\n // iOS client sometimes strips out the port from the initial URL\n // even when it's included in the hostUri.\n // This function should be able to handle both cases, so we strip off the port\n // both here and from the hostUri.\n let decodedUrl = _removePort(decodeURI(url));\n let path: string;\n let queryParams = {};\n\n let queryStringMatchResult = decodedUrl.match(/(.*)\\?(.+)/);\n if (queryStringMatchResult) {\n decodedUrl = queryStringMatchResult[1];\n queryParams = qs.parse(queryStringMatchResult[2]);\n }\n\n // strip off the hostUri from the host and path\n let hostUri = HOST_URI || '';\n let hostUriStripped = _removePort(_removeTrailingSlashAndQueryString(hostUri));\n if (hostUriStripped && decodedUrl.indexOf(hostUriStripped) > -1) {\n path = decodedUrl.substr(decodedUrl.indexOf(hostUriStripped) + hostUriStripped.length);\n } else {\n path = _removeScheme(decodedUrl);\n }\n\n path = _removeLeadingSlash(path);\n\n if (IS_EXPO_HOSTED && !USES_CUSTOM_SCHEME && path.startsWith('--/')) {\n path = path.substr(3);\n } else if (path.indexOf('+') > -1) {\n path = path.substr(path.indexOf('+') + 1);\n }\n\n return { path, queryParams };\n}\n\nasync function parseInitialURLAsync(): Promise<ParsedURL> {\n const initialUrl = await Linking.getInitialURL();\n return parse(initialUrl);\n}\n\n// @ts-ignore fix this...\nlet newLinking = new Linking.constructor();\n\nnewLinking.makeUrl = makeUrl;\nnewLinking.parse = parse;\nnewLinking.parseInitialURLAsync = parseInitialURLAsync;\n\nexport default newLinking;\n"]}
\No newline at end of file