@expo/config-plugins 7.3.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/android/AllowBackup.js +6 -6
- package/build/android/AllowBackup.js.map +1 -1
- package/build/android/BuildProperties.d.ts +1 -1
- package/build/android/BuildProperties.js.map +1 -1
- package/build/android/GoogleMapsApiKey.js +6 -6
- package/build/android/GoogleMapsApiKey.js.map +1 -1
- package/build/android/IntentFilters.js +6 -6
- package/build/android/IntentFilters.js.map +1 -1
- package/build/android/Manifest.js.map +1 -1
- package/build/android/Name.js +12 -12
- package/build/android/Name.js.map +1 -1
- package/build/android/Orientation.js +6 -6
- package/build/android/Orientation.js.map +1 -1
- package/build/android/Package.js +7 -7
- package/build/android/Package.js.map +1 -1
- package/build/android/Paths.js.map +1 -1
- package/build/android/Permissions.d.ts +1 -1
- package/build/android/Permissions.js +6 -6
- package/build/android/Permissions.js.map +1 -1
- package/build/android/PrimaryColor.js +7 -7
- package/build/android/PrimaryColor.js.map +1 -1
- package/build/android/Scheme.js.map +1 -1
- package/build/android/StatusBar.d.ts +1 -1
- package/build/android/StatusBar.js +7 -7
- package/build/android/StatusBar.js.map +1 -1
- package/build/android/Updates.d.ts +5 -7
- package/build/android/Updates.js +27 -33
- package/build/android/Updates.js.map +1 -1
- package/build/android/WindowSoftInputMode.d.ts +1 -1
- package/build/android/WindowSoftInputMode.js +6 -6
- package/build/android/WindowSoftInputMode.js.map +1 -1
- package/build/ios/Bitcode.js +7 -7
- package/build/ios/Bitcode.js.map +1 -1
- package/build/ios/BuildScheme.js +7 -7
- package/build/ios/BuildScheme.js.map +1 -1
- package/build/ios/BundleIdentifier.d.ts +1 -1
- package/build/ios/BundleIdentifier.js +7 -7
- package/build/ios/BundleIdentifier.js.map +1 -1
- package/build/ios/Entitlements.js +7 -7
- package/build/ios/Entitlements.js.map +1 -1
- package/build/ios/Google.d.ts +1 -1
- package/build/ios/Google.js +7 -7
- package/build/ios/Google.js.map +1 -1
- package/build/ios/Locales.js +7 -7
- package/build/ios/Locales.js.map +1 -1
- package/build/ios/Name.d.ts +1 -1
- package/build/ios/Name.js +7 -7
- package/build/ios/Name.js.map +1 -1
- package/build/ios/Orientation.js.map +1 -1
- package/build/ios/Paths.js +7 -7
- package/build/ios/Paths.js.map +1 -1
- package/build/ios/Permissions.d.ts +1 -1
- package/build/ios/Permissions.js.map +1 -1
- package/build/ios/RequiresFullScreen.js.map +1 -1
- package/build/ios/Scheme.js.map +1 -1
- package/build/ios/Swift.js +7 -7
- package/build/ios/Swift.js.map +1 -1
- package/build/ios/Updates.d.ts +4 -6
- package/build/ios/Updates.js +7 -9
- package/build/ios/Updates.js.map +1 -1
- package/build/ios/UsesNonExemptEncryption.js.map +1 -1
- package/build/ios/Version.js.map +1 -1
- package/build/ios/XcodeProjectFile.js +6 -6
- package/build/ios/XcodeProjectFile.js.map +1 -1
- package/build/ios/utils/Xcodeproj.js +7 -7
- package/build/ios/utils/Xcodeproj.js.map +1 -1
- package/build/ios/utils/getInfoPlistPath.js +6 -6
- package/build/ios/utils/getInfoPlistPath.js.map +1 -1
- package/build/plugins/android-plugins.js.map +1 -1
- package/build/plugins/createBaseMod.d.ts +1 -1
- package/build/plugins/createBaseMod.js.map +1 -1
- package/build/plugins/ios-plugins.js +7 -7
- package/build/plugins/ios-plugins.js.map +1 -1
- package/build/plugins/mod-compiler.d.ts +1 -1
- package/build/plugins/mod-compiler.js +18 -18
- package/build/plugins/mod-compiler.js.map +1 -1
- package/build/plugins/withAndroidBaseMods.d.ts +1 -1
- package/build/plugins/withAndroidBaseMods.js +7 -7
- package/build/plugins/withAndroidBaseMods.js.map +1 -1
- package/build/plugins/withDangerousMod.js.map +1 -1
- package/build/plugins/withIosBaseMods.d.ts +1 -1
- package/build/plugins/withIosBaseMods.js +7 -7
- package/build/plugins/withIosBaseMods.js.map +1 -1
- package/build/plugins/withPlugins.js.map +1 -1
- package/build/utils/Updates.d.ts +2 -2
- package/build/utils/Updates.js +20 -37
- package/build/utils/Updates.js.map +1 -1
- package/build/utils/errors.js.map +1 -1
- package/build/utils/matchBrackets.d.ts +2 -2
- package/build/utils/matchBrackets.js.map +1 -1
- package/build/utils/plugin-resolver.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paths.js","names":["_assert","data","_interopRequireDefault","require","_fs","_glob","path","_interopRequireWildcard","_errors","_modules","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","getProjectFilePath","projectRoot","name","filePath","globSync","join","assert","getLanguage","extension","extname","UnexpectedError","getFileInfo","normalize","contents","fs","readFileSync","language","getMainApplicationAsync","getMainActivityAsync","getGradleFilePath","gradleName","groovyPath","resolve","ktPath","isGroovy","existsSync","isKotlin","Error","getProjectBuildGradleFilePath","getProjectBuildGradleAsync","getSettingsGradleFilePath","getSettingsGradleAsync","getAppBuildGradleFilePath","getAppBuildGradleAsync","getProjectPathOrThrowAsync","projectPath","directoryExistsAsync","getAndroidManifestAsync","getResourceFolderAsync","getResourceXMLPathAsync","kind","resourcePath"],"sources":["../../src/android/Paths.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { UnexpectedError } from '../utils/errors';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { ResourceKind } from './Resources';\n\nexport interface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\nexport type ApplicationProjectFile = ProjectFile<'java' | 'kt'>;\nexport type GradleProjectFile = ProjectFile<'groovy' | 'kt'>;\n\nexport function getProjectFilePath(projectRoot: string, name: string): string {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/main/java/**/${name}.@(java|kt)`)\n )[0];\n assert(\n filePath,\n `Project file \"${name}\" does not exist in android project for root \"${projectRoot}\"`\n );\n\n return filePath;\n}\n\nfunction getLanguage(filePath: string): 'java' | 'groovy' | 'kt' {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.java':\n return 'java';\n case '.kts':\n case '.kt':\n return 'kt';\n case '.groovy':\n case '.gradle':\n return 'groovy';\n default:\n throw new UnexpectedError(`Unexpected Android file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: fs.readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath) as any,\n };\n}\n\nexport async function getMainApplicationAsync(\n projectRoot: string\n): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainApplication');\n return getFileInfo(filePath);\n}\n\nexport async function getMainActivityAsync(projectRoot: string): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainActivity');\n return getFileInfo(filePath);\n}\n\nexport function getGradleFilePath(projectRoot: string, gradleName: string): string {\n const groovyPath = path.resolve(projectRoot, `${gradleName}.gradle`);\n const ktPath = path.resolve(projectRoot, `${gradleName}.gradle.kts`);\n\n const isGroovy = fs.existsSync(groovyPath);\n const isKotlin = !isGroovy && fs.existsSync(ktPath);\n\n if (!isGroovy && !isKotlin) {\n throw new Error(`Failed to find '${gradleName}.gradle' file for project: ${projectRoot}.`);\n }\n const filePath = isGroovy ? groovyPath : ktPath;\n return filePath;\n}\n\nexport function getProjectBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'build');\n}\n\nexport async function getProjectBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getProjectBuildGradleFilePath(projectRoot));\n}\n\nexport function getSettingsGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'settings');\n}\n\nexport async function getSettingsGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getSettingsGradleFilePath(projectRoot));\n}\n\nexport function getAppBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android', 'app'), 'build');\n}\n\nexport async function getAppBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getAppBuildGradleFilePath(projectRoot));\n}\n\nexport async function getProjectPathOrThrowAsync(projectRoot: string): Promise<string> {\n const projectPath = path.join(projectRoot, 'android');\n if (await directoryExistsAsync(projectPath)) {\n return projectPath;\n }\n throw new Error(`Android project folder is missing in project: ${projectRoot}`);\n}\n\nexport async function getAndroidManifestAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n const filePath = path.join(projectPath, 'app/src/main/AndroidManifest.xml');\n return filePath;\n}\n\nexport async function getResourceFolderAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n return path.join(projectPath, `app/src/main/res`);\n}\n\nexport async function getResourceXMLPathAsync(\n projectRoot: string,\n { kind = 'values', name }: { kind?: ResourceKind; name: 'colors' | 'strings' | 'styles' | string }\n): Promise<string> {\n const resourcePath = await getResourceFolderAsync(projectRoot);\n\n const filePath = path.join(resourcePath, `${kind}/${name}.xml`);\n return filePath;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Paths.js","names":["_assert","data","_interopRequireDefault","require","_fs","_glob","path","_interopRequireWildcard","_errors","_modules","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","getProjectFilePath","projectRoot","name","filePath","globSync","join","assert","getLanguage","extension","extname","UnexpectedError","getFileInfo","normalize","contents","fs","readFileSync","language","getMainApplicationAsync","getMainActivityAsync","getGradleFilePath","gradleName","groovyPath","resolve","ktPath","isGroovy","existsSync","isKotlin","Error","getProjectBuildGradleFilePath","getProjectBuildGradleAsync","getSettingsGradleFilePath","getSettingsGradleAsync","getAppBuildGradleFilePath","getAppBuildGradleAsync","getProjectPathOrThrowAsync","projectPath","directoryExistsAsync","getAndroidManifestAsync","getResourceFolderAsync","getResourceXMLPathAsync","kind","resourcePath"],"sources":["../../src/android/Paths.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { ResourceKind } from './Resources';\nimport { UnexpectedError } from '../utils/errors';\nimport { directoryExistsAsync } from '../utils/modules';\n\nexport interface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\nexport type ApplicationProjectFile = ProjectFile<'java' | 'kt'>;\nexport type GradleProjectFile = ProjectFile<'groovy' | 'kt'>;\n\nexport function getProjectFilePath(projectRoot: string, name: string): string {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/main/java/**/${name}.@(java|kt)`)\n )[0];\n assert(\n filePath,\n `Project file \"${name}\" does not exist in android project for root \"${projectRoot}\"`\n );\n\n return filePath;\n}\n\nfunction getLanguage(filePath: string): 'java' | 'groovy' | 'kt' {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.java':\n return 'java';\n case '.kts':\n case '.kt':\n return 'kt';\n case '.groovy':\n case '.gradle':\n return 'groovy';\n default:\n throw new UnexpectedError(`Unexpected Android file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: fs.readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath) as any,\n };\n}\n\nexport async function getMainApplicationAsync(\n projectRoot: string\n): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainApplication');\n return getFileInfo(filePath);\n}\n\nexport async function getMainActivityAsync(projectRoot: string): Promise<ApplicationProjectFile> {\n const filePath = getProjectFilePath(projectRoot, 'MainActivity');\n return getFileInfo(filePath);\n}\n\nexport function getGradleFilePath(projectRoot: string, gradleName: string): string {\n const groovyPath = path.resolve(projectRoot, `${gradleName}.gradle`);\n const ktPath = path.resolve(projectRoot, `${gradleName}.gradle.kts`);\n\n const isGroovy = fs.existsSync(groovyPath);\n const isKotlin = !isGroovy && fs.existsSync(ktPath);\n\n if (!isGroovy && !isKotlin) {\n throw new Error(`Failed to find '${gradleName}.gradle' file for project: ${projectRoot}.`);\n }\n const filePath = isGroovy ? groovyPath : ktPath;\n return filePath;\n}\n\nexport function getProjectBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'build');\n}\n\nexport async function getProjectBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getProjectBuildGradleFilePath(projectRoot));\n}\n\nexport function getSettingsGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android'), 'settings');\n}\n\nexport async function getSettingsGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getSettingsGradleFilePath(projectRoot));\n}\n\nexport function getAppBuildGradleFilePath(projectRoot: string): string {\n return getGradleFilePath(path.join(projectRoot, 'android', 'app'), 'build');\n}\n\nexport async function getAppBuildGradleAsync(projectRoot: string): Promise<GradleProjectFile> {\n return getFileInfo(getAppBuildGradleFilePath(projectRoot));\n}\n\nexport async function getProjectPathOrThrowAsync(projectRoot: string): Promise<string> {\n const projectPath = path.join(projectRoot, 'android');\n if (await directoryExistsAsync(projectPath)) {\n return projectPath;\n }\n throw new Error(`Android project folder is missing in project: ${projectRoot}`);\n}\n\nexport async function getAndroidManifestAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n const filePath = path.join(projectPath, 'app/src/main/AndroidManifest.xml');\n return filePath;\n}\n\nexport async function getResourceFolderAsync(projectRoot: string): Promise<string> {\n const projectPath = await getProjectPathOrThrowAsync(projectRoot);\n return path.join(projectPath, `app/src/main/res`);\n}\n\nexport async function getResourceXMLPathAsync(\n projectRoot: string,\n { kind = 'values', name }: { kind?: ResourceKind; name: 'colors' | 'strings' | 'styles' | string }\n): Promise<string> {\n const resourcePath = await getResourceFolderAsync(projectRoot);\n\n const filePath = path.join(resourcePath, `${kind}/${name}.xml`);\n return filePath;\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExpoConfig } from '@expo/config-types';
|
|
2
|
-
import { ConfigPlugin } from '../Plugin.types';
|
|
3
2
|
import { AndroidManifest, ManifestUsesPermission } from './Manifest';
|
|
3
|
+
import { ConfigPlugin } from '../Plugin.types';
|
|
4
4
|
export declare const withPermissions: ConfigPlugin<string[] | void>;
|
|
5
5
|
/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */
|
|
6
6
|
export declare const withBlockedPermissions: ConfigPlugin<string[] | string>;
|
|
@@ -15,16 +15,16 @@ exports.isPermissionAlreadyRequested = isPermissionAlreadyRequested;
|
|
|
15
15
|
exports.removePermissions = removePermissions;
|
|
16
16
|
exports.setAndroidPermissions = setAndroidPermissions;
|
|
17
17
|
exports.withPermissions = exports.withInternalBlockedPermissions = exports.withBlockedPermissions = void 0;
|
|
18
|
-
function
|
|
19
|
-
const data = require("
|
|
20
|
-
|
|
18
|
+
function _Manifest() {
|
|
19
|
+
const data = require("./Manifest");
|
|
20
|
+
_Manifest = function () {
|
|
21
21
|
return data;
|
|
22
22
|
};
|
|
23
23
|
return data;
|
|
24
24
|
}
|
|
25
|
-
function
|
|
26
|
-
const data = require("
|
|
27
|
-
|
|
25
|
+
function _androidPlugins() {
|
|
26
|
+
const data = require("../plugins/android-plugins");
|
|
27
|
+
_androidPlugins = function () {
|
|
28
28
|
return data;
|
|
29
29
|
};
|
|
30
30
|
return data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Permissions.js","names":["_androidPlugins","data","require","_Manifest","USES_PERMISSION","withPermissions","config","permissions","Array","isArray","filter","Boolean","android","Set","concat","withAndroidManifest","modResults","setAndroidPermissions","exports","withBlockedPermissions","_config$android","resolvedPermissions","prefixAndroidPermissionsIfNecessary","permission","includes","ensureToolsAvailable","addBlockedPermissions","withInternalBlockedPermissions","_config$android2","_config$android2$bloc","blockedPermissions","length","androidManifest","manifest","ensureBlockedPermission","manifestPermissions","e","$","push","map","getAndroidPermissions","_config$android$permi","_config$android3","_androidManifest$mani","providedPermissions","permissionsToAdd","hasOwnProperty","forEach","isPermissionAlreadyRequested","addPermissionToManifest","some","removePermissions","permissionNames","targetNames","ensurePermissionNameFormat","nextPermissions","attribute","value","name","addPermission","permissionName","usesPermissions","ensurePermissions","getPermissions","results","targetName","ensurePermission","com","split","pop","toUpperCase","join","permissionObject"],"sources":["../../src/android/Permissions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport { AndroidManifest, ensureToolsAvailable, ManifestUsesPermission } from './Manifest';\n\nconst USES_PERMISSION = 'uses-permission';\n\nexport const withPermissions: ConfigPlugin<string[] | void> = (config, permissions) => {\n if (Array.isArray(permissions)) {\n permissions = permissions.filter(Boolean);\n if (!config.android) config.android = {};\n if (!config.android.permissions) config.android.permissions = [];\n config.android.permissions = [\n // @ts-ignore\n ...new Set(config.android.permissions.concat(permissions)),\n ];\n }\n return withAndroidManifest(config, async (config) => {\n config.modResults = await setAndroidPermissions(config, config.modResults);\n return config;\n });\n};\n\n/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */\nexport const withBlockedPermissions: ConfigPlugin<string[] | string> = (config, permissions) => {\n const resolvedPermissions = prefixAndroidPermissionsIfNecessary(\n (Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean)\n );\n\n if (config?.android?.permissions && Array.isArray(config.android.permissions)) {\n // Remove any static config permissions\n config.android.permissions = prefixAndroidPermissionsIfNecessary(\n config.android.permissions\n ).filter((permission) => !resolvedPermissions.includes(permission));\n }\n\n return withAndroidManifest(config, async (config) => {\n config.modResults = ensureToolsAvailable(config.modResults);\n config.modResults = addBlockedPermissions(config.modResults, resolvedPermissions);\n return config;\n });\n};\n\nexport const withInternalBlockedPermissions: ConfigPlugin = (config) => {\n // Only add permissions if the user defined the property and added some values\n // this ensures we don't add the `tools:*` namespace extraneously.\n if (config.android?.blockedPermissions?.length) {\n return withBlockedPermissions(config, config.android.blockedPermissions);\n }\n\n return config;\n};\n\nexport function addBlockedPermissions(androidManifest: AndroidManifest, permissions: string[]) {\n if (!Array.isArray(androidManifest.manifest['uses-permission'])) {\n androidManifest.manifest['uses-permission'] = [];\n }\n\n for (const permission of prefixAndroidPermissionsIfNecessary(permissions)) {\n androidManifest.manifest['uses-permission'] = ensureBlockedPermission(\n androidManifest.manifest['uses-permission'],\n permission\n );\n }\n\n return androidManifest;\n}\n\n/**\n * Filter any existing permissions matching the provided permission name, then add a\n * restricted permission to overwrite any extra permissions that may be added in a\n * third-party package's AndroidManifest.xml.\n *\n * @param manifestPermissions manifest `uses-permissions` array.\n * @param permission `android:name` of the permission to restrict\n * @returns\n */\nfunction ensureBlockedPermission(\n manifestPermissions: ManifestUsesPermission[],\n permission: string\n) {\n // Remove permission if it currently exists\n manifestPermissions = manifestPermissions.filter((e) => e.$['android:name'] !== permission);\n\n // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.\n manifestPermissions.push({\n $: { 'android:name': permission, 'tools:node': 'remove' },\n });\n return manifestPermissions;\n}\n\nfunction prefixAndroidPermissionsIfNecessary(permissions: string[]): string[] {\n return permissions.map((permission) => {\n if (!permission.includes('.')) {\n return `android.permission.${permission}`;\n }\n return permission;\n });\n}\n\nexport function getAndroidPermissions(config: Pick<ExpoConfig, 'android'>): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport function setAndroidPermissions(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const permissions = getAndroidPermissions(config);\n const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);\n const permissionsToAdd = [...providedPermissions];\n\n if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {\n androidManifest.manifest['uses-permission'] = [];\n }\n // manifest.manifest['uses-permission'] = [];\n\n const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];\n\n permissionsToAdd.forEach((permission) => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return androidManifest;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n): boolean {\n return manifestPermissions.some((e) => e.$['android:name'] === permission);\n}\n\nexport function addPermissionToManifest(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(androidManifest: AndroidManifest, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = androidManifest.manifest[USES_PERMISSION] || [];\n const nextPermissions = [];\n for (const attribute of permissions) {\n if (targetNames) {\n // @ts-ignore: name isn't part of the type\n const value = attribute.$['android:name'] || attribute.$.name;\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n androidManifest.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(androidManifest: AndroidManifest, permissionName: string): void {\n const usesPermissions: ManifestUsesPermission[] = androidManifest.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n androidManifest.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n androidManifest: AndroidManifest,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(androidManifest);\n\n const results: { [permission: string]: boolean } = {};\n for (const permissionName of permissionNames) {\n const targetName = ensurePermissionNameFormat(permissionName);\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(\n androidManifest: AndroidManifest,\n permissionName: string\n): boolean {\n const permissions = getPermissions(androidManifest);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n return true;\n }\n return false;\n}\n\nexport function ensurePermissionNameFormat(permissionName: string): string {\n if (permissionName.includes('.')) {\n const com = permissionName.split('.');\n const name = com.pop() as string;\n return [...com, name.toUpperCase()].join('.');\n } else {\n // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.\n return ensurePermissionNameFormat(`android.permission.${permissionName}`);\n }\n}\n\nexport function getPermissions(androidManifest: AndroidManifest): string[] {\n const usesPermissions: { [key: string]: any }[] = androidManifest.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map((permissionObject) => {\n return permissionObject.$['android:name'] || permissionObject.$.name;\n });\n return permissions;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Permissions.js","names":["_Manifest","data","require","_androidPlugins","USES_PERMISSION","withPermissions","config","permissions","Array","isArray","filter","Boolean","android","Set","concat","withAndroidManifest","modResults","setAndroidPermissions","exports","withBlockedPermissions","_config$android","resolvedPermissions","prefixAndroidPermissionsIfNecessary","permission","includes","ensureToolsAvailable","addBlockedPermissions","withInternalBlockedPermissions","_config$android2","_config$android2$bloc","blockedPermissions","length","androidManifest","manifest","ensureBlockedPermission","manifestPermissions","e","$","push","map","getAndroidPermissions","_config$android$permi","_config$android3","_androidManifest$mani","providedPermissions","permissionsToAdd","hasOwnProperty","forEach","isPermissionAlreadyRequested","addPermissionToManifest","some","removePermissions","permissionNames","targetNames","ensurePermissionNameFormat","nextPermissions","attribute","value","name","addPermission","permissionName","usesPermissions","ensurePermissions","getPermissions","results","targetName","ensurePermission","com","split","pop","toUpperCase","join","permissionObject"],"sources":["../../src/android/Permissions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { AndroidManifest, ensureToolsAvailable, ManifestUsesPermission } from './Manifest';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\n\nconst USES_PERMISSION = 'uses-permission';\n\nexport const withPermissions: ConfigPlugin<string[] | void> = (config, permissions) => {\n if (Array.isArray(permissions)) {\n permissions = permissions.filter(Boolean);\n if (!config.android) config.android = {};\n if (!config.android.permissions) config.android.permissions = [];\n config.android.permissions = [\n // @ts-ignore\n ...new Set(config.android.permissions.concat(permissions)),\n ];\n }\n return withAndroidManifest(config, async (config) => {\n config.modResults = await setAndroidPermissions(config, config.modResults);\n return config;\n });\n};\n\n/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */\nexport const withBlockedPermissions: ConfigPlugin<string[] | string> = (config, permissions) => {\n const resolvedPermissions = prefixAndroidPermissionsIfNecessary(\n (Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean)\n );\n\n if (config?.android?.permissions && Array.isArray(config.android.permissions)) {\n // Remove any static config permissions\n config.android.permissions = prefixAndroidPermissionsIfNecessary(\n config.android.permissions\n ).filter((permission) => !resolvedPermissions.includes(permission));\n }\n\n return withAndroidManifest(config, async (config) => {\n config.modResults = ensureToolsAvailable(config.modResults);\n config.modResults = addBlockedPermissions(config.modResults, resolvedPermissions);\n return config;\n });\n};\n\nexport const withInternalBlockedPermissions: ConfigPlugin = (config) => {\n // Only add permissions if the user defined the property and added some values\n // this ensures we don't add the `tools:*` namespace extraneously.\n if (config.android?.blockedPermissions?.length) {\n return withBlockedPermissions(config, config.android.blockedPermissions);\n }\n\n return config;\n};\n\nexport function addBlockedPermissions(androidManifest: AndroidManifest, permissions: string[]) {\n if (!Array.isArray(androidManifest.manifest['uses-permission'])) {\n androidManifest.manifest['uses-permission'] = [];\n }\n\n for (const permission of prefixAndroidPermissionsIfNecessary(permissions)) {\n androidManifest.manifest['uses-permission'] = ensureBlockedPermission(\n androidManifest.manifest['uses-permission'],\n permission\n );\n }\n\n return androidManifest;\n}\n\n/**\n * Filter any existing permissions matching the provided permission name, then add a\n * restricted permission to overwrite any extra permissions that may be added in a\n * third-party package's AndroidManifest.xml.\n *\n * @param manifestPermissions manifest `uses-permissions` array.\n * @param permission `android:name` of the permission to restrict\n * @returns\n */\nfunction ensureBlockedPermission(\n manifestPermissions: ManifestUsesPermission[],\n permission: string\n) {\n // Remove permission if it currently exists\n manifestPermissions = manifestPermissions.filter((e) => e.$['android:name'] !== permission);\n\n // Add a permission with tools:node to overwrite any existing permission and ensure it's removed upon building.\n manifestPermissions.push({\n $: { 'android:name': permission, 'tools:node': 'remove' },\n });\n return manifestPermissions;\n}\n\nfunction prefixAndroidPermissionsIfNecessary(permissions: string[]): string[] {\n return permissions.map((permission) => {\n if (!permission.includes('.')) {\n return `android.permission.${permission}`;\n }\n return permission;\n });\n}\n\nexport function getAndroidPermissions(config: Pick<ExpoConfig, 'android'>): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport function setAndroidPermissions(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\n const permissions = getAndroidPermissions(config);\n const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);\n const permissionsToAdd = [...providedPermissions];\n\n if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {\n androidManifest.manifest['uses-permission'] = [];\n }\n // manifest.manifest['uses-permission'] = [];\n\n const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];\n\n permissionsToAdd.forEach((permission) => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return androidManifest;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n): boolean {\n return manifestPermissions.some((e) => e.$['android:name'] === permission);\n}\n\nexport function addPermissionToManifest(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(androidManifest: AndroidManifest, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = androidManifest.manifest[USES_PERMISSION] || [];\n const nextPermissions = [];\n for (const attribute of permissions) {\n if (targetNames) {\n // @ts-ignore: name isn't part of the type\n const value = attribute.$['android:name'] || attribute.$.name;\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n androidManifest.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(androidManifest: AndroidManifest, permissionName: string): void {\n const usesPermissions: ManifestUsesPermission[] = androidManifest.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n androidManifest.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n androidManifest: AndroidManifest,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(androidManifest);\n\n const results: { [permission: string]: boolean } = {};\n for (const permissionName of permissionNames) {\n const targetName = ensurePermissionNameFormat(permissionName);\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(\n androidManifest: AndroidManifest,\n permissionName: string\n): boolean {\n const permissions = getPermissions(androidManifest);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, targetName);\n return true;\n }\n return false;\n}\n\nexport function ensurePermissionNameFormat(permissionName: string): string {\n if (permissionName.includes('.')) {\n const com = permissionName.split('.');\n const name = com.pop() as string;\n return [...com, name.toUpperCase()].join('.');\n } else {\n // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.\n return ensurePermissionNameFormat(`android.permission.${permissionName}`);\n }\n}\n\nexport function getPermissions(androidManifest: AndroidManifest): string[] {\n const usesPermissions: { [key: string]: any }[] = androidManifest.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map((permissionObject) => {\n return permissionObject.$['android:name'] || permissionObject.$.name;\n });\n return permissions;\n}\n"],"mappings":"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"}
|
|
@@ -5,13 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getPrimaryColor = getPrimaryColor;
|
|
7
7
|
exports.withPrimaryColorStyles = exports.withPrimaryColorColors = exports.withPrimaryColor = void 0;
|
|
8
|
-
function _androidPlugins() {
|
|
9
|
-
const data = require("../plugins/android-plugins");
|
|
10
|
-
_androidPlugins = function () {
|
|
11
|
-
return data;
|
|
12
|
-
};
|
|
13
|
-
return data;
|
|
14
|
-
}
|
|
15
8
|
function _Colors() {
|
|
16
9
|
const data = require("./Colors");
|
|
17
10
|
_Colors = function () {
|
|
@@ -26,6 +19,13 @@ function _Styles() {
|
|
|
26
19
|
};
|
|
27
20
|
return data;
|
|
28
21
|
}
|
|
22
|
+
function _androidPlugins() {
|
|
23
|
+
const data = require("../plugins/android-plugins");
|
|
24
|
+
_androidPlugins = function () {
|
|
25
|
+
return data;
|
|
26
|
+
};
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
29
|
const COLOR_PRIMARY_KEY = 'colorPrimary';
|
|
30
30
|
const DEFAULT_PRIMARY_COLOR = '#023c69';
|
|
31
31
|
const withPrimaryColor = config => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrimaryColor.js","names":["
|
|
1
|
+
{"version":3,"file":"PrimaryColor.js","names":["_Colors","data","require","_Styles","_androidPlugins","COLOR_PRIMARY_KEY","DEFAULT_PRIMARY_COLOR","withPrimaryColor","config","withPrimaryColorColors","withPrimaryColorStyles","exports","withAndroidColors","modResults","assignColorValue","name","value","getPrimaryColor","withAndroidStyles","assignStylesValue","add","parent","getAppThemeLightNoActionBarGroup","_config$primaryColor","primaryColor"],"sources":["../../src/android/PrimaryColor.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { assignColorValue } from './Colors';\nimport { assignStylesValue, getAppThemeLightNoActionBarGroup } from './Styles';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidColors, withAndroidStyles } from '../plugins/android-plugins';\n\nconst COLOR_PRIMARY_KEY = 'colorPrimary';\nconst DEFAULT_PRIMARY_COLOR = '#023c69';\n\nexport const withPrimaryColor: ConfigPlugin = (config) => {\n config = withPrimaryColorColors(config);\n config = withPrimaryColorStyles(config);\n return config;\n};\n\nexport const withPrimaryColorColors: ConfigPlugin = (config) => {\n return withAndroidColors(config, (config) => {\n config.modResults = assignColorValue(config.modResults, {\n name: COLOR_PRIMARY_KEY,\n value: getPrimaryColor(config),\n });\n return config;\n });\n};\n\nexport const withPrimaryColorStyles: ConfigPlugin = (config) => {\n return withAndroidStyles(config, (config) => {\n config.modResults = assignStylesValue(config.modResults, {\n add: !!getPrimaryColor(config),\n parent: getAppThemeLightNoActionBarGroup(),\n name: COLOR_PRIMARY_KEY,\n value: `@color/${COLOR_PRIMARY_KEY}`,\n });\n return config;\n });\n};\n\nexport function getPrimaryColor(config: Pick<ExpoConfig, 'primaryColor'>) {\n return config.primaryColor ?? DEFAULT_PRIMARY_COLOR;\n}\n"],"mappings":";;;;;;;AAEA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,QAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,OAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAG,gBAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,eAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,MAAMI,iBAAiB,GAAG,cAAc;AACxC,MAAMC,qBAAqB,GAAG,SAAS;AAEhC,MAAMC,gBAA8B,GAAIC,MAAM,IAAK;EACxDA,MAAM,GAAGC,sBAAsB,CAACD,MAAM,CAAC;EACvCA,MAAM,GAAGE,sBAAsB,CAACF,MAAM,CAAC;EACvC,OAAOA,MAAM;AACf,CAAC;AAACG,OAAA,CAAAJ,gBAAA,GAAAA,gBAAA;AAEK,MAAME,sBAAoC,GAAID,MAAM,IAAK;EAC9D,OAAO,IAAAI,mCAAiB,EAACJ,MAAM,EAAGA,MAAM,IAAK;IAC3CA,MAAM,CAACK,UAAU,GAAG,IAAAC,0BAAgB,EAACN,MAAM,CAACK,UAAU,EAAE;MACtDE,IAAI,EAAEV,iBAAiB;MACvBW,KAAK,EAAEC,eAAe,CAACT,MAAM;IAC/B,CAAC,CAAC;IACF,OAAOA,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAACG,OAAA,CAAAF,sBAAA,GAAAA,sBAAA;AAEK,MAAMC,sBAAoC,GAAIF,MAAM,IAAK;EAC9D,OAAO,IAAAU,mCAAiB,EAACV,MAAM,EAAGA,MAAM,IAAK;IAC3CA,MAAM,CAACK,UAAU,GAAG,IAAAM,2BAAiB,EAACX,MAAM,CAACK,UAAU,EAAE;MACvDO,GAAG,EAAE,CAAC,CAACH,eAAe,CAACT,MAAM,CAAC;MAC9Ba,MAAM,EAAE,IAAAC,0CAAgC,GAAE;MAC1CP,IAAI,EAAEV,iBAAiB;MACvBW,KAAK,EAAG,UAASX,iBAAkB;IACrC,CAAC,CAAC;IACF,OAAOG,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAACG,OAAA,CAAAD,sBAAA,GAAAA,sBAAA;AAEK,SAASO,eAAeA,CAACT,MAAwC,EAAE;EAAA,IAAAe,oBAAA;EACxE,QAAAA,oBAAA,GAAOf,MAAM,CAACgB,YAAY,cAAAD,oBAAA,cAAAA,oBAAA,GAAIjB,qBAAqB;AACrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scheme.js","names":["_androidPlugins","data","require","_warnings","withScheme","createAndroidManifestPlugin","setScheme","exports","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","_config$android","_config$android2","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","addWarningAndroid","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","_intentFilter$action$","_intentFilter$action","_intentFilter$categor","_intentFilter$categor2","_intentFilter$data$fi","_intentFilter$data","_intentFilter$data$fi2","action","map","_data$$","$","category","_data$$2","_data$$3","_data$$4","_data$$5","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","_activity$$","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","_activity$$2","hasScheme","_activity$$3","removeScheme","_activity$$4","dataKey","_intentFilter$data2","_data$$6","_intentFilter$data3"],"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 (`npx 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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"}
|
|
1
|
+
{"version":3,"file":"Scheme.js","names":["_androidPlugins","data","require","_warnings","withScheme","createAndroidManifestPlugin","setScheme","exports","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","_config$android","_config$android2","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","addWarningAndroid","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","_intentFilter$action$","_intentFilter$action","_intentFilter$categor","_intentFilter$categor2","_intentFilter$data$fi","_intentFilter$data","_intentFilter$data$fi2","action","map","_data$$","$","category","_data$$2","_data$$3","_data$$4","_data$$5","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","_activity$$","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","_activity$$2","hasScheme","_activity$$3","removeScheme","_activity$$4","dataKey","_intentFilter$data2","_data$$6","_intentFilter$data3"],"sources":["../../src/android/Scheme.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { AndroidManifest, ManifestActivity } from './Manifest';\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\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 (`npx 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":";;;;;;;;;;;;;AAGA,SAAAA,gBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,eAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,UAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAWO,MAAMG,UAAU,GAAG,IAAAC,6CAA2B,EAACC,SAAS,EAAE,YAAY,CAAC;AAACC,OAAA,CAAAH,UAAA,GAAAA,UAAA;AAExE,SAASI,SAASA,CAACC,MAAsC,EAAY;EAC1E,IAAIC,KAAK,CAACC,OAAO,CAACF,MAAM,CAACG,MAAM,CAAC,EAAE;IAChC,MAAMC,QAAQ,GAAIC,KAAU,IAAsB,OAAOA,KAAK,KAAK,QAAQ;IAE3E,OAAOL,MAAM,CAACG,MAAM,CAACG,MAAM,CAASF,QAAQ,CAAC;EAC/C,CAAC,MAAM,IAAI,OAAOJ,MAAM,CAACG,MAAM,KAAK,QAAQ,EAAE;IAC5C,OAAO,CAACH,MAAM,CAACG,MAAM,CAAC;EACxB;EACA,OAAO,EAAE;AACX;;AAEA;AACA;AACA;AACO,SAASN,SAASA,CACvBG,MAA8C,EAC9CO,eAAgC,EAChC;EAAA,IAAAC,eAAA,EAAAC,gBAAA;EACA,MAAMC,OAAO,GAAG,CACd,GAAGX,SAAS,CAACC,MAAM,CAAC;EACpB;EACA,GAAGD,SAAS,EAAAS,eAAA,GAACR,MAAM,CAACW,OAAO,cAAAH,eAAA,cAAAA,eAAA,GAAI,CAAC,CAAC,CAAC,CACnC;EACD;EACA,KAAAC,gBAAA,GAAIT,MAAM,CAACW,OAAO,cAAAF,gBAAA,eAAdA,gBAAA,CAAgBG,OAAO,EAAE;IAC3BF,OAAO,CAACG,IAAI,CAACb,MAAM,CAACW,OAAO,CAACC,OAAO,CAAC;EACtC;EACA,IAAIF,OAAO,CAACI,MAAM,KAAK,CAAC,EAAE;IACxB,OAAOP,eAAe;EACxB;EAEA,IAAI,CAACQ,kCAAkC,CAACR,eAAe,CAAC,EAAE;IACxD,IAAAS,6BAAiB,EACf,QAAQ,EACP,0HAAyH,EAC1H,2CAA2C,CAC5C;IACD,OAAOT,eAAe;EACxB;;EAEA;EACA,MAAMU,cAAc,GAAGC,sBAAsB,CAACX,eAAe,CAAC;EAC9D,KAAK,MAAMY,GAAG,IAAIF,cAAc,EAAE;IAChC,MAAMG,KAAK,GAAGV,OAAO,CAACW,OAAO,CAACF,GAAG,CAAC;IAClC,IAAIC,KAAK,GAAG,CAAC,CAAC,EAAEV,OAAO,CAACY,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;EAC1C;;EAEA;EACA,KAAK,MAAMD,GAAG,IAAIT,OAAO,EAAE;IACzBH,eAAe,GAAGgB,YAAY,CAACJ,GAAG,EAAEZ,eAAe,CAAC;EACtD;EAEA,OAAOA,eAAe;AACxB;AAEA,SAASiB,2BAA2BA,CAAC;EAAEC,OAAO;EAAEC;AAA8B,CAAC,EAAW;EACxF,OACED,OAAO,CAACE,QAAQ,CAAC,4BAA4B,CAAC,IAC9C,CAACD,UAAU,CAACC,QAAQ,CAAC,kCAAkC,CAAC;AAE5D;AAEA,SAASC,0BAA0BA,CAACC,YAAiB,EAAqB;EAAA,IAAAC,qBAAA,EAAAC,oBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,kBAAA,EAAAC,sBAAA;EACxE,MAAMX,OAAO,IAAAK,qBAAA,GAAGD,YAAY,aAAZA,YAAY,wBAAAE,oBAAA,GAAZF,YAAY,CAAEQ,MAAM,cAAAN,oBAAA,uBAApBA,oBAAA,CAAsBO,GAAG,CAAE9C,IAAS;IAAA,IAAA+C,OAAA;IAAA,OAAK/C,IAAI,aAAJA,IAAI,wBAAA+C,OAAA,GAAJ/C,IAAI,CAAEgD,CAAC,cAAAD,OAAA,uBAAPA,OAAA,CAAU,cAAc,CAAC;EAAA,EAAC,cAAAT,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EACzF,MAAMJ,UAAU,IAAAM,qBAAA,GAAGH,YAAY,aAAZA,YAAY,wBAAAI,sBAAA,GAAZJ,YAAY,CAAEY,QAAQ,cAAAR,sBAAA,uBAAtBA,sBAAA,CAAwBK,GAAG,CAAE9C,IAAS;IAAA,IAAAkD,QAAA;IAAA,OAAKlD,IAAI,aAAJA,IAAI,wBAAAkD,QAAA,GAAJlD,IAAI,CAAEgD,CAAC,cAAAE,QAAA,uBAAPA,QAAA,CAAU,cAAc,CAAC;EAAA,EAAC,cAAAV,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EAC9F,MAAMxC,IAAI,IAAA0C,qBAAA,GACRL,YAAY,aAAZA,YAAY,wBAAAM,kBAAA,GAAZN,YAAY,CAAErC,IAAI,cAAA2C,kBAAA,wBAAAC,sBAAA,GAAlBD,kBAAA,CACI7B,MAAM,CAAEd,IAAS;IAAA,IAAAmD,QAAA;IAAA,OAAKnD,IAAI,aAAJA,IAAI,wBAAAmD,QAAA,GAAJnD,IAAI,CAAEgD,CAAC,cAAAG,QAAA,uBAAPA,QAAA,CAAU,gBAAgB,CAAC;EAAA,EAAC,cAAAP,sBAAA,uBADtDA,sBAAA,CAEIE,GAAG,CAAE9C,IAAS;IAAA,IAAAoD,QAAA,EAAAC,QAAA;IAAA,OAAM;MACpB1C,MAAM,EAAEX,IAAI,aAAJA,IAAI,wBAAAoD,QAAA,GAAJpD,IAAI,CAAEgD,CAAC,cAAAI,QAAA,uBAAPA,QAAA,CAAU,gBAAgB,CAAC;MACnCE,IAAI,EAAEtD,IAAI,aAAJA,IAAI,wBAAAqD,QAAA,GAAJrD,IAAI,CAAEgD,CAAC,cAAAK,QAAA,uBAAPA,QAAA,CAAU,cAAc;IAChC,CAAC;EAAA,CAAC,CAAC,cAAAX,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EACb,OAAO;IACLT,OAAO;IACPC,UAAU;IACVlC;EACF,CAAC;AACH;AAEA,SAASuD,0BAA0BA,CAACxC,eAAgC,EAAS;EAC3E,IAAI,CAACN,KAAK,CAACC,OAAO,CAACK,eAAe,CAACyC,QAAQ,CAACC,WAAW,CAAC,EAAE,OAAO,EAAE;EAEnE,IAAIC,aAAoB,GAAG,EAAE;EAC7B,KAAK,MAAMD,WAAW,IAAI1C,eAAe,CAACyC,QAAQ,CAACC,WAAW,EAAE;IAC9D,MAAM;MAAEE;IAAS,CAAC,GAAGF,WAAW;IAChC;IACA,MAAMG,UAAU,GAAGnD,KAAK,CAACC,OAAO,CAACiD,QAAQ,CAAC,GAAGA,QAAQ,GAAG,CAACA,QAAQ,CAAC;IAClE,MAAME,oBAAoB,GAAID,UAAU,CAAwB9C,MAAM,CACnE6C,QAAQ;MAAA,IAAAG,WAAA;MAAA,OAAK,CAAAH,QAAQ,aAARA,QAAQ,wBAAAG,WAAA,GAARH,QAAQ,CAAEX,CAAC,cAAAc,WAAA,uBAAXA,WAAA,CAAc,oBAAoB,CAAC,MAAK,YAAY;IAAA,EACnE;IACD,KAAK,MAAMH,QAAQ,IAAIE,oBAAoB,EAAE;MAC3C,MAAME,aAAa,GAAGJ,QAAQ,CAAC,eAAe,CAAC;MAC/CD,aAAa,GAAGA,aAAa,CAACM,MAAM,CAACD,aAAa,CAAC;IACrD;EACF;EACA,OAAOL,aAAa;AACtB;AAEO,SAAShC,sBAAsBA,CACpCX,eAAgC,EAChCkD,aAA4B,GAAG,IAAI,EACzB;EACV,MAAMP,aAAuB,GAAG,EAAE;EAElC,MAAMQ,uBAAuB,GAAGX,0BAA0B,CAACxC,eAAe,CAAC;EAC3E,KAAK,MAAMsB,YAAY,IAAI6B,uBAAuB,EAAE;IAClD,MAAMC,UAAU,GAAG/B,0BAA0B,CAACC,YAAY,CAAC;IAC3D,IAAIL,2BAA2B,CAACmC,UAAU,CAAC,IAAIA,UAAU,CAACnE,IAAI,EAAE;MAC9D,KAAK,MAAM;QAAEW,MAAM;QAAE2C;MAAK,CAAC,IAAIa,UAAU,CAACnE,IAAI,EAAE;QAC9C,IAAIiE,aAAa,KAAK,IAAI,IAAI,CAACX,IAAI,IAAIA,IAAI,KAAKW,aAAa,EAAE;UAC7DP,aAAa,CAACrC,IAAI,CAACV,MAAM,CAAC;QAC5B;MACF;IACF;EACF;EAEA,OAAO+C,aAAa;AACtB;AAEO,SAASnC,kCAAkCA,CAACR,eAAgC,EAAW;EAC5F,IAAI,CAACN,KAAK,CAACC,OAAO,CAACK,eAAe,CAACyC,QAAQ,CAACC,WAAW,CAAC,EAAE;IACxD,OAAO,KAAK;EACd;EAEA,KAAK,MAAMA,WAAW,IAAI1C,eAAe,CAACyC,QAAQ,CAACC,WAAW,EAAE;IAC9D,KAAK,MAAME,QAAQ,IAAIF,WAAW,CAACE,QAAQ,IAAI,EAAE,EAAE;MAAA,IAAAS,YAAA;MACjD,IAAI,CAAAT,QAAQ,aAARA,QAAQ,wBAAAS,YAAA,GAART,QAAQ,CAAEX,CAAC,cAAAoB,YAAA,uBAAXA,YAAA,CAAc,oBAAoB,CAAC,MAAK,YAAY,EAAE;QACxD,KAAK,MAAM/B,YAAY,IAAIsB,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;UAC1D;UACA,MAAMQ,UAAU,GAAG/B,0BAA0B,CAACC,YAAY,CAAC;UAC3D,IAAIL,2BAA2B,CAACmC,UAAU,CAAC,EAAE;YAC3C,OAAO,IAAI;UACb;QACF;QACA,IAAI,CAACR,QAAQ,CAAC,eAAe,CAAC,EAAE;UAC9BA,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE;QAChC;QAEAA,QAAQ,CAAC,eAAe,CAAC,CAACtC,IAAI,CAAC;UAC7BwB,MAAM,EAAE,CAAC;YAAEG,CAAC,EAAE;cAAE,cAAc,EAAE;YAA6B;UAAE,CAAC,CAAC;UACjEC,QAAQ,EAAE,CACR;YAAED,CAAC,EAAE;cAAE,cAAc,EAAE;YAAkC;UAAE,CAAC,EAC5D;YAAEA,CAAC,EAAE;cAAE,cAAc,EAAE;YAAoC;UAAE,CAAC;QAElE,CAAC,CAAC;QACF,OAAO,IAAI;MACb;IACF;EACF;EACA,OAAO,KAAK;AACd;AAEO,SAASqB,SAASA,CAAC1D,MAAc,EAAEI,eAAgC,EAAW;EACnF,MAAMG,OAAO,GAAGQ,sBAAsB,CAACX,eAAe,CAAC;EACvD,OAAOG,OAAO,CAACiB,QAAQ,CAACxB,MAAM,CAAC;AACjC;AAEO,SAASoB,YAAYA,CAACpB,MAAc,EAAEI,eAAgC,EAAmB;EAC9F,IAAI,CAACN,KAAK,CAACC,OAAO,CAACK,eAAe,CAACyC,QAAQ,CAACC,WAAW,CAAC,EAAE;IACxD,OAAO1C,eAAe;EACxB;EAEA,KAAK,MAAM0C,WAAW,IAAI1C,eAAe,CAACyC,QAAQ,CAACC,WAAW,EAAE;IAC9D,KAAK,MAAME,QAAQ,IAAIF,WAAW,CAACE,QAAQ,IAAI,EAAE,EAAE;MAAA,IAAAW,YAAA;MACjD,IAAI,CAAAX,QAAQ,aAARA,QAAQ,wBAAAW,YAAA,GAARX,QAAQ,CAAEX,CAAC,cAAAsB,YAAA,uBAAXA,YAAA,CAAc,oBAAoB,CAAC,MAAK,YAAY,EAAE;QACxD,KAAK,MAAMjC,YAAY,IAAIsB,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;UAC1D,MAAMQ,UAAU,GAAG/B,0BAA0B,CAACC,YAAY,CAAC;UAC3D,IAAIL,2BAA2B,CAACmC,UAAU,CAAC,EAAE;YAC3C,IAAI,CAAC9B,YAAY,CAACrC,IAAI,EAAEqC,YAAY,CAACrC,IAAI,GAAG,EAAE;YAC9CqC,YAAY,CAACrC,IAAI,CAACqB,IAAI,CAAC;cACrB2B,CAAC,EAAE;gBAAE,gBAAgB,EAAErC;cAAO;YAChC,CAAC,CAAC;UACJ;QACF;QACA;MACF;IACF;EACF;EACA,OAAOI,eAAe;AACxB;AAEO,SAASwD,YAAYA,CAAC5D,MAAc,EAAEI,eAAgC,EAAmB;EAC9F,IAAI,CAACN,KAAK,CAACC,OAAO,CAACK,eAAe,CAACyC,QAAQ,CAACC,WAAW,CAAC,EAAE;IACxD,OAAO1C,eAAe;EACxB;EAEA,KAAK,MAAM0C,WAAW,IAAI1C,eAAe,CAACyC,QAAQ,CAACC,WAAW,EAAE;IAC9D,KAAK,MAAME,QAAQ,IAAIF,WAAW,CAACE,QAAQ,IAAI,EAAE,EAAE;MAAA,IAAAa,YAAA;MACjD,IAAI,CAAAb,QAAQ,aAARA,QAAQ,wBAAAa,YAAA,GAARb,QAAQ,CAAEX,CAAC,cAAAwB,YAAA,uBAAXA,YAAA,CAAc,oBAAoB,CAAC,MAAK,YAAY,EAAE;QACxD,KAAK,MAAMnC,YAAY,IAAIsB,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;UAC1D;UACA,MAAMQ,UAAU,GAAG/B,0BAA0B,CAACC,YAAY,CAAC;UAC3D,IAAIL,2BAA2B,CAACmC,UAAU,CAAC,EAAE;YAC3C,KAAK,MAAMM,OAAO,IAAI,CAAApC,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAErC,IAAI,KAAI,EAAE,EAAE;cAAA,IAAA0E,mBAAA,EAAAC,QAAA;cAC9C,MAAM3E,IAAI,IAAA0E,mBAAA,GAAGrC,YAAY,CAACrC,IAAI,cAAA0E,mBAAA,uBAAjBA,mBAAA,CAAoBD,OAAO,CAAC;cACzC,IAAI,CAAAzE,IAAI,aAAJA,IAAI,wBAAA2E,QAAA,GAAJ3E,IAAI,CAAEgD,CAAC,cAAA2B,QAAA,uBAAPA,QAAA,CAAU,gBAAgB,CAAC,MAAKhE,MAAM,EAAE;gBAAA,IAAAiE,mBAAA;gBAC1C,CAAAA,mBAAA,GAAOvC,YAAY,CAACrC,IAAI,cAAA4E,mBAAA,qBAAxB,OAAOA,mBAAA,CAAoBH,OAAO,CAAC;cACrC;YACF;UACF;QACF;QACA;MACF;IACF;EACF;EAEA,OAAO1D,eAAe;AACxB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExpoConfig } from '@expo/config-types';
|
|
2
|
-
import { ConfigPlugin } from '../Plugin.types';
|
|
3
2
|
import { ResourceXML } from './Resources';
|
|
3
|
+
import { ConfigPlugin } from '../Plugin.types';
|
|
4
4
|
export declare const withStatusBar: ConfigPlugin;
|
|
5
5
|
export declare function setStatusBarColors(config: Pick<ExpoConfig, 'androidStatusBar'>, colors: ResourceXML): ResourceXML;
|
|
6
6
|
export declare function setStatusBarStyles(config: Pick<ExpoConfig, 'androidStatusBar'>, styles: ResourceXML): ResourceXML;
|
|
@@ -16,13 +16,6 @@ function _assert() {
|
|
|
16
16
|
};
|
|
17
17
|
return data;
|
|
18
18
|
}
|
|
19
|
-
function _androidPlugins() {
|
|
20
|
-
const data = require("../plugins/android-plugins");
|
|
21
|
-
_androidPlugins = function () {
|
|
22
|
-
return data;
|
|
23
|
-
};
|
|
24
|
-
return data;
|
|
25
|
-
}
|
|
26
19
|
function _Colors() {
|
|
27
20
|
const data = require("./Colors");
|
|
28
21
|
_Colors = function () {
|
|
@@ -37,6 +30,13 @@ function _Styles() {
|
|
|
37
30
|
};
|
|
38
31
|
return data;
|
|
39
32
|
}
|
|
33
|
+
function _androidPlugins() {
|
|
34
|
+
const data = require("../plugins/android-plugins");
|
|
35
|
+
_androidPlugins = function () {
|
|
36
|
+
return data;
|
|
37
|
+
};
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
41
|
// https://developer.android.com/reference/android/R.attr#colorPrimaryDark
|
|
42
42
|
const COLOR_PRIMARY_DARK_KEY = 'colorPrimaryDark';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","names":["_assert","data","_interopRequireDefault","require","
|
|
1
|
+
{"version":3,"file":"StatusBar.js","names":["_assert","data","_interopRequireDefault","require","_Colors","_Styles","_androidPlugins","obj","__esModule","default","COLOR_PRIMARY_DARK_KEY","WINDOW_TRANSLUCENT_STATUS","WINDOW_LIGHT_STATUS_BAR","withStatusBar","config","withStatusBarColors","withStatusBarStyles","exports","withAndroidColors","modResults","setStatusBarColors","withAndroidStyles","setStatusBarStyles","colors","assignColorValue","name","value","getStatusBarColor","styles","hexString","floatElement","getStatusBarTranslucent","assignStylesValue","parent","getAppThemeLightNoActionBarGroup","targetApi","add","getStatusBarStyle","_config$androidStatus","backgroundColor","androidStatusBar","assert","_config$androidStatus2","_config$androidStatus3","translucent","_config$androidStatus4","barStyle"],"sources":["../../src/android/StatusBar.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport assert from 'assert';\n\nimport { assignColorValue } from './Colors';\nimport { ResourceXML } from './Resources';\nimport { assignStylesValue, getAppThemeLightNoActionBarGroup } from './Styles';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidColors, withAndroidStyles } from '../plugins/android-plugins';\n\n// https://developer.android.com/reference/android/R.attr#colorPrimaryDark\nconst COLOR_PRIMARY_DARK_KEY = 'colorPrimaryDark';\n// https://developer.android.com/reference/android/R.attr#windowTranslucentStatus\nconst WINDOW_TRANSLUCENT_STATUS = 'android:windowTranslucentStatus';\n// https://developer.android.com/reference/android/R.attr#windowLightStatusBar\nconst WINDOW_LIGHT_STATUS_BAR = 'android:windowLightStatusBar';\n\nexport const withStatusBar: ConfigPlugin = (config) => {\n config = withStatusBarColors(config);\n config = withStatusBarStyles(config);\n return config;\n};\n\nconst withStatusBarColors: ConfigPlugin = (config) => {\n return withAndroidColors(config, (config) => {\n config.modResults = setStatusBarColors(config, config.modResults);\n return config;\n });\n};\n\nconst withStatusBarStyles: ConfigPlugin = (config) => {\n return withAndroidStyles(config, (config) => {\n config.modResults = setStatusBarStyles(config, config.modResults);\n return config;\n });\n};\n\nexport function setStatusBarColors(\n config: Pick<ExpoConfig, 'androidStatusBar'>,\n colors: ResourceXML\n): ResourceXML {\n return assignColorValue(colors, {\n name: COLOR_PRIMARY_DARK_KEY,\n value: getStatusBarColor(config),\n });\n}\n\nexport function setStatusBarStyles(\n config: Pick<ExpoConfig, 'androidStatusBar'>,\n styles: ResourceXML\n): ResourceXML {\n const hexString = getStatusBarColor(config);\n const floatElement = getStatusBarTranslucent(config);\n\n styles = assignStylesValue(styles, {\n parent: getAppThemeLightNoActionBarGroup(),\n name: WINDOW_LIGHT_STATUS_BAR,\n targetApi: '23',\n value: 'true',\n // Default is light-content, don't need to do anything to set it\n add: getStatusBarStyle(config) === 'dark-content',\n });\n\n styles = assignStylesValue(styles, {\n parent: getAppThemeLightNoActionBarGroup(),\n name: WINDOW_TRANSLUCENT_STATUS,\n value: 'true',\n // translucent status bar set in theme\n add: floatElement,\n });\n\n styles = assignStylesValue(styles, {\n parent: getAppThemeLightNoActionBarGroup(),\n name: COLOR_PRIMARY_DARK_KEY,\n value: `@color/${COLOR_PRIMARY_DARK_KEY}`,\n // Remove the color if translucent is used\n add: !!hexString,\n });\n\n return styles;\n}\n\nexport function getStatusBarColor(config: Pick<ExpoConfig, 'androidStatusBar'>) {\n const backgroundColor = config.androidStatusBar?.backgroundColor;\n if (backgroundColor) {\n // Drop support for translucent\n assert(\n backgroundColor !== 'translucent',\n `androidStatusBar.backgroundColor must be a valid hex string, instead got: \"${backgroundColor}\"`\n );\n }\n return backgroundColor;\n}\n\n/**\n * Specifies whether the status bar should be \"translucent\". When true, the status bar is drawn with `position: absolute` and a gray underlay, when false `position: relative` (pushes content down).\n *\n * @default false\n * @param config\n * @returns\n */\nexport function getStatusBarTranslucent(config: Pick<ExpoConfig, 'androidStatusBar'>): boolean {\n return config.androidStatusBar?.translucent ?? false;\n}\n\nexport function getStatusBarStyle(config: Pick<ExpoConfig, 'androidStatusBar'>) {\n return config.androidStatusBar?.barStyle || 'light-content';\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ConfigPlugin } from '../Plugin.types';
|
|
2
|
-
import { ExpoConfigUpdates } from '../utils/Updates';
|
|
3
1
|
import { AndroidManifest } from './Manifest';
|
|
4
2
|
import { ResourceXML } from './Resources';
|
|
3
|
+
import { ConfigPlugin } from '../Plugin.types';
|
|
4
|
+
import { ExpoConfigUpdates } from '../utils/Updates';
|
|
5
5
|
export declare enum Config {
|
|
6
6
|
ENABLED = "expo.modules.updates.ENABLED",
|
|
7
7
|
CHECK_ON_LAUNCH = "expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH",
|
|
@@ -14,15 +14,13 @@ export declare enum Config {
|
|
|
14
14
|
CODE_SIGNING_CERTIFICATE = "expo.modules.updates.CODE_SIGNING_CERTIFICATE",
|
|
15
15
|
CODE_SIGNING_METADATA = "expo.modules.updates.CODE_SIGNING_METADATA"
|
|
16
16
|
}
|
|
17
|
-
export declare const withUpdates: ConfigPlugin
|
|
18
|
-
expoUsername: string | null;
|
|
19
|
-
}>;
|
|
17
|
+
export declare const withUpdates: ConfigPlugin;
|
|
20
18
|
export declare function applyRuntimeVersionFromConfig(config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>, stringsJSON: ResourceXML): ResourceXML;
|
|
21
|
-
export declare function setUpdatesConfig(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest,
|
|
19
|
+
export declare function setUpdatesConfig(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest, expoUpdatesPackageVersion?: string | null): AndroidManifest;
|
|
22
20
|
export declare function setVersionsConfig(config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>, androidManifest: AndroidManifest): AndroidManifest;
|
|
23
21
|
export declare function ensureBuildGradleContainsConfigurationScript(projectRoot: string, buildGradleContents: string): string;
|
|
24
22
|
export declare function formatApplyLineForBuildGradle(projectRoot: string): string;
|
|
25
23
|
export declare function isBuildGradleConfigured(projectRoot: string, buildGradleContents: string): boolean;
|
|
26
24
|
export declare function isMainApplicationMetaDataSet(androidManifest: AndroidManifest): boolean;
|
|
27
|
-
export declare function isMainApplicationMetaDataSynced(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest
|
|
25
|
+
export declare function isMainApplicationMetaDataSynced(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest): boolean;
|
|
28
26
|
export declare function areVersionsSynced(config: Pick<ExpoConfigUpdates, 'runtimeVersion' | 'sdkVersion'>, androidManifest: AndroidManifest): boolean;
|
package/build/android/Updates.js
CHANGED
|
@@ -28,44 +28,44 @@ function _resolveFrom() {
|
|
|
28
28
|
};
|
|
29
29
|
return data;
|
|
30
30
|
}
|
|
31
|
-
function
|
|
32
|
-
const data = require("
|
|
33
|
-
|
|
31
|
+
function _Manifest() {
|
|
32
|
+
const data = require("./Manifest");
|
|
33
|
+
_Manifest = function () {
|
|
34
34
|
return data;
|
|
35
35
|
};
|
|
36
36
|
return data;
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
const data = require("
|
|
40
|
-
|
|
38
|
+
function _Resources() {
|
|
39
|
+
const data = require("./Resources");
|
|
40
|
+
_Resources = function () {
|
|
41
41
|
return data;
|
|
42
42
|
};
|
|
43
43
|
return data;
|
|
44
44
|
}
|
|
45
|
-
function
|
|
46
|
-
const data = require("
|
|
47
|
-
|
|
45
|
+
function _Strings() {
|
|
46
|
+
const data = require("./Strings");
|
|
47
|
+
_Strings = function () {
|
|
48
48
|
return data;
|
|
49
49
|
};
|
|
50
50
|
return data;
|
|
51
51
|
}
|
|
52
|
-
function
|
|
53
|
-
const data = require("
|
|
54
|
-
|
|
52
|
+
function _androidPlugins() {
|
|
53
|
+
const data = require("../plugins/android-plugins");
|
|
54
|
+
_androidPlugins = function () {
|
|
55
55
|
return data;
|
|
56
56
|
};
|
|
57
57
|
return data;
|
|
58
58
|
}
|
|
59
|
-
function
|
|
60
|
-
const data = require("
|
|
61
|
-
|
|
59
|
+
function _withPlugins() {
|
|
60
|
+
const data = require("../plugins/withPlugins");
|
|
61
|
+
_withPlugins = function () {
|
|
62
62
|
return data;
|
|
63
63
|
};
|
|
64
64
|
return data;
|
|
65
65
|
}
|
|
66
|
-
function
|
|
67
|
-
const data = require("
|
|
68
|
-
|
|
66
|
+
function _Updates() {
|
|
67
|
+
const data = require("../utils/Updates");
|
|
68
|
+
_Updates = function () {
|
|
69
69
|
return data;
|
|
70
70
|
};
|
|
71
71
|
return data;
|
|
@@ -87,21 +87,15 @@ exports.Config = Config;
|
|
|
87
87
|
Config["CODE_SIGNING_CERTIFICATE"] = "expo.modules.updates.CODE_SIGNING_CERTIFICATE";
|
|
88
88
|
Config["CODE_SIGNING_METADATA"] = "expo.modules.updates.CODE_SIGNING_METADATA";
|
|
89
89
|
})(Config || (exports.Config = Config = {}));
|
|
90
|
-
const withUpdates =
|
|
91
|
-
|
|
92
|
-
}) => {
|
|
93
|
-
return (0, _withPlugins().withPlugins)(config, [[withUpdatesManifest, {
|
|
94
|
-
expoUsername
|
|
95
|
-
}], withRuntimeVersionResource]);
|
|
90
|
+
const withUpdates = config => {
|
|
91
|
+
return (0, _withPlugins().withPlugins)(config, [withUpdatesManifest, withRuntimeVersionResource]);
|
|
96
92
|
};
|
|
97
93
|
exports.withUpdates = withUpdates;
|
|
98
|
-
const withUpdatesManifest =
|
|
99
|
-
expoUsername
|
|
100
|
-
}) => {
|
|
94
|
+
const withUpdatesManifest = config => {
|
|
101
95
|
return (0, _androidPlugins().withAndroidManifest)(config, config => {
|
|
102
96
|
const projectRoot = config.modRequest.projectRoot;
|
|
103
97
|
const expoUpdatesPackageVersion = (0, _Updates().getExpoUpdatesPackageVersion)(projectRoot);
|
|
104
|
-
config.modResults = setUpdatesConfig(projectRoot, config, config.modResults,
|
|
98
|
+
config.modResults = setUpdatesConfig(projectRoot, config, config.modResults, expoUpdatesPackageVersion);
|
|
105
99
|
return config;
|
|
106
100
|
});
|
|
107
101
|
};
|
|
@@ -116,12 +110,12 @@ function applyRuntimeVersionFromConfig(config, stringsJSON) {
|
|
|
116
110
|
}
|
|
117
111
|
return (0, _Strings().removeStringItem)('expo_runtime_version', stringsJSON);
|
|
118
112
|
}
|
|
119
|
-
function setUpdatesConfig(projectRoot, config, androidManifest,
|
|
113
|
+
function setUpdatesConfig(projectRoot, config, androidManifest, expoUpdatesPackageVersion) {
|
|
120
114
|
const mainApplication = (0, _Manifest().getMainApplicationOrThrow)(androidManifest);
|
|
121
|
-
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.ENABLED, String((0, _Updates().getUpdatesEnabled)(config
|
|
115
|
+
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.ENABLED, String((0, _Updates().getUpdatesEnabled)(config)));
|
|
122
116
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CHECK_ON_LAUNCH, (0, _Updates().getUpdatesCheckOnLaunch)(config, expoUpdatesPackageVersion));
|
|
123
117
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.LAUNCH_WAIT_MS, String((0, _Updates().getUpdatesTimeout)(config)));
|
|
124
|
-
const updateUrl = (0, _Updates().getUpdateUrl)(config
|
|
118
|
+
const updateUrl = (0, _Updates().getUpdateUrl)(config);
|
|
125
119
|
if (updateUrl) {
|
|
126
120
|
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.UPDATE_URL, updateUrl);
|
|
127
121
|
} else {
|
|
@@ -206,8 +200,8 @@ function isMainApplicationMetaDataSet(androidManifest) {
|
|
|
206
200
|
const sdkVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.SDK_VERSION);
|
|
207
201
|
return Boolean(updateUrl && (sdkVersion || runtimeVersion));
|
|
208
202
|
}
|
|
209
|
-
function isMainApplicationMetaDataSynced(projectRoot, config, androidManifest
|
|
210
|
-
return (0, _Updates().getUpdateUrl)(config
|
|
203
|
+
function isMainApplicationMetaDataSynced(projectRoot, config, androidManifest) {
|
|
204
|
+
return (0, _Updates().getUpdateUrl)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.UPDATE_URL) && String((0, _Updates().getUpdatesEnabled)(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.ENABLED) && String((0, _Updates().getUpdatesTimeout)(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.LAUNCH_WAIT_MS) && (0, _Updates().getUpdatesCheckOnLaunch)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CHECK_ON_LAUNCH) && (0, _Updates().getUpdatesCodeSigningCertificate)(projectRoot, config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CODE_SIGNING_CERTIFICATE) && (0, _Updates().getUpdatesCodeSigningMetadataStringified)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CODE_SIGNING_METADATA) && areVersionsSynced(config, androidManifest);
|
|
211
205
|
}
|
|
212
206
|
function areVersionsSynced(config, androidManifest) {
|
|
213
207
|
const expectedRuntimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'android');
|