1{"version":3,"file":"Scheme.js","names":["withScheme","createAndroidManifestPlugin","setScheme","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","addWarningAndroid","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","action","map","data","$","category","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","hasScheme","removeScheme","dataKey"],"sources":["../../src/android/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { AndroidManifest, ManifestActivity } from './Manifest';\n\nexport type IntentFilterProps = {\n actions: string[];\n categories: string[];\n data: {\n scheme: string;\n host?: string;\n }[];\n};\n\nexport const withScheme = createAndroidManifestPlugin(setScheme, 'withScheme');\n\nexport function getScheme(config: { scheme?: string | string[] }): string[] {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => typeof value === 'string';\n\n return config.scheme.filter<string>(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n return [];\n}\n\n// This plugin used to remove the unused schemes but this is unpredictable because other plugins could add schemes.\n// The only way to reliably remove schemes from the project is to nuke the file and regenerate the code (`expo prebuild --clean`).\n// Regardless, having extra schemes isn't a fatal issue and therefore a tolerable compromise is to just add new schemes that aren't currently present.\nexport function setScheme(\n config: Pick<ExpoConfig, 'scheme' | 'android'>,\n androidManifest: AndroidManifest\n) {\n const schemes = [\n ...getScheme(config),\n // @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.\n ...getScheme(config.android ?? {}),\n ];\n // Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.\n if (config.android?.package) {\n schemes.push(config.android.package);\n }\n if (schemes.length === 0) {\n return androidManifest;\n }\n\n if (!ensureManifestHasValidIntentFilter(androidManifest)) {\n addWarningAndroid(\n 'scheme',\n `Cannot add schemes because the provided manifest does not have a valid Activity with \\`android:launchMode=\"singleTask\"\\``,\n 'https://expo.fyi/setup-android-uri-scheme'\n );\n return androidManifest;\n }\n\n // Get the current schemes and remove them from the list of schemes to add.\n const currentSchemes = getSchemesFromManifest(androidManifest);\n for (const uri of currentSchemes) {\n const index = schemes.indexOf(uri);\n if (index > -1) schemes.splice(index, 1);\n }\n\n // Now add all of the remaining schemes.\n for (const uri of schemes) {\n androidManifest = appendScheme(uri, androidManifest);\n }\n\n return androidManifest;\n}\n\nfunction isValidRedirectIntentFilter({ actions, categories }: IntentFilterProps): boolean {\n return (\n actions.includes('android.intent.action.VIEW') &&\n !categories.includes('android.intent.category.LAUNCHER')\n );\n}\n\nfunction propertiesFromIntentFilter(intentFilter: any): IntentFilterProps {\n const actions = intentFilter?.action?.map((data: any) => data?.$?.['android:name']) ?? [];\n const categories = intentFilter?.category?.map((data: any) => data?.$?.['android:name']) ?? [];\n const data =\n intentFilter?.data\n ?.filter((data: any) => data?.$?.['android:scheme'])\n ?.map((data: any) => ({\n scheme: data?.$?.['android:scheme'],\n host: data?.$?.['android:host'],\n })) ?? [];\n return {\n actions,\n categories,\n data,\n };\n}\n\nfunction getSingleTaskIntentFilters(androidManifest: AndroidManifest): any[] {\n if (!Array.isArray(androidManifest.manifest.application)) return [];\n\n let outputSchemes: any[] = [];\n for (const application of androidManifest.manifest.application) {\n const { activity } = application;\n // @ts-ignore\n const activities = Array.isArray(activity) ? activity : [activity];\n const singleTaskActivities = (activities as ManifestActivity[]).filter(\n (activity) => activity?.$?.['android:launchMode'] === 'singleTask'\n );\n for (const activity of singleTaskActivities) {\n const intentFilters = activity['intent-filter'];\n outputSchemes = outputSchemes.concat(intentFilters);\n }\n }\n return outputSchemes;\n}\n\nexport function getSchemesFromManifest(\n androidManifest: AndroidManifest,\n requestedHost: string | null = null\n): string[] {\n const outputSchemes: string[] = [];\n\n const singleTaskIntentFilters = getSingleTaskIntentFilters(androidManifest);\n for (const intentFilter of singleTaskIntentFilters) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties) && properties.data) {\n for (const { scheme, host } of properties.data) {\n if (requestedHost === null || !host || host === requestedHost) {\n outputSchemes.push(scheme);\n }\n }\n }\n }\n\n return outputSchemes;\n}\n\nexport function ensureManifestHasValidIntentFilter(androidManifest: AndroidManifest): boolean {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return false;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n return true;\n }\n }\n if (!activity['intent-filter']) {\n activity['intent-filter'] = [];\n }\n\n activity['intent-filter'].push({\n action: [{ $: { 'android:name': 'android.intent.action.VIEW' } }],\n category: [\n { $: { 'android:name': 'android.intent.category.DEFAULT' } },\n { $: { 'android:name': 'android.intent.category.BROWSABLE' } },\n ],\n });\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasScheme(scheme: string, androidManifest: AndroidManifest): boolean {\n const schemes = getSchemesFromManifest(androidManifest);\n return schemes.includes(scheme);\n}\n\nexport function appendScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n if (!intentFilter.data) intentFilter.data = [];\n intentFilter.data.push({\n $: { 'android:scheme': scheme },\n });\n }\n }\n break;\n }\n }\n }\n return androidManifest;\n}\n\nexport function removeScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n for (const dataKey in intentFilter?.data || []) {\n const data = intentFilter.data?.[dataKey];\n if (data?.$?.['android:scheme'] === scheme) {\n delete intentFilter.data?.[dataKey];\n }\n }\n }\n }\n break;\n }\n }\n }\n\n return androidManifest;\n}\n"],"mappings":"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"}