@expo/config-plugins 7.9.1 → 8.0.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/build/android/AllowBackup.js +4 -6
- package/build/android/AllowBackup.js.map +1 -1
- package/build/android/BuildProperties.js +4 -8
- package/build/android/BuildProperties.js.map +1 -1
- package/build/android/Colors.js +3 -6
- package/build/android/Colors.js.map +1 -1
- package/build/android/EasBuild.js +2 -2
- package/build/android/EasBuild.js.map +1 -1
- package/build/android/EasBuildGradleScript.js +1 -2
- package/build/android/EasBuildGradleScript.js.map +1 -1
- package/build/android/GoogleMapsApiKey.js +2 -4
- package/build/android/GoogleMapsApiKey.js.map +1 -1
- package/build/android/GoogleServices.js +1 -2
- package/build/android/GoogleServices.js.map +1 -1
- package/build/android/IntentFilters.js +6 -12
- package/build/android/IntentFilters.js.map +1 -1
- package/build/android/Manifest.d.ts +1 -0
- package/build/android/Manifest.js +13 -22
- package/build/android/Manifest.js.map +1 -1
- package/build/android/Name.js +2 -4
- package/build/android/Name.js.map +1 -1
- package/build/android/Orientation.js +2 -4
- package/build/android/Orientation.js.map +1 -1
- package/build/android/Package.js +2 -4
- package/build/android/Package.js.map +1 -1
- package/build/android/Paths.js +2 -2
- package/build/android/Paths.js.map +1 -1
- package/build/android/Permissions.js +4 -8
- package/build/android/Permissions.js.map +1 -1
- package/build/android/PrimaryColor.js +1 -2
- package/build/android/PrimaryColor.js.map +1 -1
- package/build/android/Resources.js +8 -6
- package/build/android/Resources.js.map +1 -1
- package/build/android/Scheme.js +17 -40
- package/build/android/Scheme.js.map +1 -1
- package/build/android/StatusBar.js +3 -6
- package/build/android/StatusBar.js.map +1 -1
- package/build/android/Strings.js +2 -4
- package/build/android/Strings.js.map +1 -1
- package/build/android/Styles.js +3 -4
- package/build/android/Styles.js.map +1 -1
- package/build/android/Updates.d.ts +0 -8
- package/build/android/Updates.js +6 -91
- package/build/android/Updates.js.map +1 -1
- package/build/android/Version.js +3 -6
- package/build/android/Version.js.map +1 -1
- package/build/android/WindowSoftInputMode.js +2 -3
- package/build/android/WindowSoftInputMode.js.map +1 -1
- package/build/android/index.js +2 -2
- package/build/android/index.js.map +1 -1
- package/build/index.js +3 -4
- package/build/index.js.map +1 -1
- package/build/ios/Bitcode.js +1 -2
- package/build/ios/Bitcode.js.map +1 -1
- package/build/ios/BuildProperties.js +4 -8
- package/build/ios/BuildProperties.js.map +1 -1
- package/build/ios/BuildScheme.js +7 -12
- package/build/ios/BuildScheme.js.map +1 -1
- package/build/ios/BundleIdentifier.js +3 -5
- package/build/ios/BundleIdentifier.js.map +1 -1
- package/build/ios/DeviceFamily.js +5 -8
- package/build/ios/DeviceFamily.js.map +1 -1
- package/build/ios/Entitlements.js +3 -6
- package/build/ios/Entitlements.js.map +1 -1
- package/build/ios/Google.js +2 -4
- package/build/ios/Google.js.map +1 -1
- package/build/ios/IosConfig.types.d.ts +3 -1
- package/build/ios/IosConfig.types.js.map +1 -1
- package/build/ios/Locales.js +3 -4
- package/build/ios/Locales.js.map +1 -1
- package/build/ios/Maps.js +2 -4
- package/build/ios/Maps.js.map +1 -1
- package/build/ios/Name.js +3 -6
- package/build/ios/Name.js.map +1 -1
- package/build/ios/Orientation.js +4 -8
- package/build/ios/Orientation.js.map +1 -1
- package/build/ios/Paths.js +2 -2
- package/build/ios/Paths.js.map +1 -1
- package/build/ios/PrivacyInfo.js +7 -11
- package/build/ios/PrivacyInfo.js.map +1 -1
- package/build/ios/RequiresFullScreen.js +2 -4
- package/build/ios/RequiresFullScreen.js.map +1 -1
- package/build/ios/Scheme.js +6 -9
- package/build/ios/Scheme.js.map +1 -1
- package/build/ios/Swift.js +2 -2
- package/build/ios/Swift.js.map +1 -1
- package/build/ios/Target.js +4 -5
- package/build/ios/Target.js.map +1 -1
- package/build/ios/Updates.d.ts +0 -16
- package/build/ios/Updates.js +6 -95
- package/build/ios/Updates.js.map +1 -1
- package/build/ios/UsesNonExemptEncryption.js +2 -4
- package/build/ios/UsesNonExemptEncryption.js.map +1 -1
- package/build/ios/Version.js +3 -6
- package/build/ios/Version.js.map +1 -1
- package/build/ios/codeMod.js +1 -2
- package/build/ios/codeMod.js.map +1 -1
- package/build/ios/index.js +2 -2
- package/build/ios/index.js.map +1 -1
- package/build/ios/utils/Xcodeproj.js +15 -21
- package/build/ios/utils/Xcodeproj.js.map +1 -1
- package/build/ios/utils/getInfoPlistPath.js +1 -2
- package/build/ios/utils/getInfoPlistPath.js.map +1 -1
- package/build/plugins/createBaseMod.js +3 -4
- package/build/plugins/createBaseMod.js.map +1 -1
- package/build/plugins/ios-plugins.js +1 -2
- package/build/plugins/ios-plugins.js.map +1 -1
- package/build/plugins/mod-compiler.js +6 -10
- package/build/plugins/mod-compiler.js.map +1 -1
- package/build/plugins/withAndroidBaseMods.js +4 -6
- package/build/plugins/withAndroidBaseMods.js.map +1 -1
- package/build/plugins/withIosBaseMods.js +4 -5
- package/build/plugins/withIosBaseMods.js.map +1 -1
- package/build/plugins/withMod.js +2 -4
- package/build/plugins/withMod.js.map +1 -1
- package/build/plugins/withStaticPlugin.js +2 -4
- package/build/plugins/withStaticPlugin.js.map +1 -1
- package/build/utils/Updates.d.ts +5 -0
- package/build/utils/Updates.js +34 -37
- package/build/utils/Updates.js.map +1 -1
- package/build/utils/XML.js +4 -8
- package/build/utils/XML.js.map +1 -1
- package/build/utils/generateCode.js +2 -2
- package/build/utils/generateCode.js.map +1 -1
- package/build/utils/history.js +1 -2
- package/build/utils/history.js.map +1 -1
- package/build/utils/modules.js +2 -4
- package/build/utils/modules.js.map +1 -1
- package/build/utils/plugin-resolver.js +5 -7
- package/build/utils/plugin-resolver.js.map +1 -1
- package/package.json +4 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manifest.js","names":["_assert","data","_interopRequireDefault","require","_fs","_path","XML","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","_androidManifest$mani","_androidManifest$mani2","_androidManifest$mani3","application","filter","e","_e$$","$","endsWith","getMainApplicationOrThrow","mainApplication","assert","getMainActivityOrThrow","mainActivity","getMainActivity","getRunnableActivity","_androidManifest$mani4","_androidManifest$mani5","_androidManifest$mani6","_androidManifest$mani7","_androidManifest$mani8","enabledActivities","activity","Array","isArray","intentFilter","_intentFilter$action","_intentFilter$categor","action","find","category","_androidManifest$mani9","_androidManifest$mani10","_androidManifest$mani11","_androidManifest$mani12","_androidManifest$mani13","_mainActivity$","addMetaDataItemToMainApplication","itemName","itemValue","itemType","existingMetaDataItem","newItem","prefixAndroidKeys","name","length","push","removeMetaDataItemFromMainApplication","index","findMetaDataItem","splice","findApplicationSubItem","parent","findIndex","findUsesLibraryItem","getMainApplicationMetaDataValue","_mainApplication$meta","_item$$$androidValue","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","entries","reduce","prev","curr","ensureToolsAvailable","ensureManifestHasNamespace","namespace","url","_manifest$manifest","_manifest$manifest$$"],"sources":["../../src/android/Manifest.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as XML from '../utils/XML';\n\nexport type StringBoolean = 'true' | 'false';\n\ntype ManifestMetaDataAttributes = AndroidManifestAttributes & {\n 'android:value'?: string;\n 'android:resource'?: string;\n};\n\ntype AndroidManifestAttributes = {\n 'android:name': string | 'android.intent.action.VIEW';\n 'tools:node'?: string | 'remove';\n};\n\ntype ManifestAction = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestCategory = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestData = {\n $: {\n [key: string]: string | undefined;\n 'android:host'?: string;\n 'android:pathPrefix'?: string;\n 'android:scheme'?: string;\n };\n};\n\ntype ManifestReceiver = {\n $: AndroidManifestAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:enabled'?: StringBoolean;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\nexport type ManifestIntentFilter = {\n $?: {\n 'android:autoVerify'?: StringBoolean;\n 'data-generated'?: StringBoolean;\n };\n action?: ManifestAction[];\n data?: ManifestData[];\n category?: ManifestCategory[];\n};\n\nexport type ManifestMetaData = {\n $: ManifestMetaDataAttributes;\n};\n\ntype ManifestServiceAttributes = AndroidManifestAttributes & {\n 'android:enabled'?: StringBoolean;\n 'android:exported'?: StringBoolean;\n 'android:permission'?: string;\n // ...\n};\n\ntype ManifestService = {\n $: ManifestServiceAttributes;\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestApplicationAttributes = {\n 'android:name': string | '.MainApplication';\n 'android:icon'?: string;\n 'android:roundIcon'?: string;\n 'android:label'?: string;\n 'android:allowBackup'?: StringBoolean;\n 'android:largeHeap'?: StringBoolean;\n 'android:requestLegacyExternalStorage'?: StringBoolean;\n 'android:usesCleartextTraffic'?: StringBoolean;\n [key: string]: string | undefined;\n};\n\nexport type ManifestActivity = {\n $: ManifestApplicationAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:launchMode'?: string;\n 'android:theme'?: string;\n 'android:windowSoftInputMode'?:\n | string\n | 'stateUnspecified'\n | 'stateUnchanged'\n | 'stateHidden'\n | 'stateAlwaysHidden'\n | 'stateVisible'\n | 'stateAlwaysVisible'\n | 'adjustUnspecified'\n | 'adjustResize'\n | 'adjustPan';\n [key: string]: string | undefined;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n // ...\n};\n\nexport type ManifestUsesLibrary = {\n $: AndroidManifestAttributes & {\n 'android:required'?: StringBoolean;\n };\n};\n\nexport type ManifestApplication = {\n $: ManifestApplicationAttributes;\n activity?: ManifestActivity[];\n service?: ManifestService[];\n receiver?: ManifestReceiver[];\n 'meta-data'?: ManifestMetaData[];\n 'uses-library'?: ManifestUsesLibrary[];\n // ...\n};\n\ntype ManifestPermission = {\n $: AndroidManifestAttributes & {\n 'android:protectionLevel'?: string | 'signature';\n };\n};\n\nexport type ManifestUsesPermission = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestUsesFeature = {\n $: AndroidManifestAttributes & {\n 'android:glEsVersion'?: string;\n 'android:required': StringBoolean;\n };\n};\n\nexport type AndroidManifest = {\n manifest: {\n // Probably more, but this is currently all we'd need for most cases in Expo.\n $: {\n 'xmlns:android': string;\n 'xmlns:tools'?: string;\n package?: string;\n [key: string]: string | undefined;\n };\n permission?: ManifestPermission[];\n 'uses-permission'?: ManifestUsesPermission[];\n 'uses-permission-sdk-23'?: ManifestUsesPermission[];\n 'uses-feature'?: ManifestUsesFeature[];\n queries: ManifestQuery[];\n application?: ManifestApplication[];\n };\n};\n\ntype ManifestQueryIntent = Omit<ManifestIntentFilter, '$'>;\n\nexport type ManifestQuery = {\n package: {\n $: {\n 'android:name': string;\n };\n }[];\n intent?: ManifestQueryIntent[];\n provider?: {\n $: {\n 'android:authorities': string;\n };\n };\n};\n\nexport async function writeAndroidManifestAsync(\n manifestPath: string,\n androidManifest: AndroidManifest\n): Promise<void> {\n const manifestXml = XML.format(androidManifest);\n await fs.promises.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.promises.writeFile(manifestPath, manifestXml);\n}\n\nexport async function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest> {\n const xml = await XML.readXMLAsync({ path: manifestPath });\n if (!isManifest(xml)) {\n throw new Error('Invalid manifest found at: ' + manifestPath);\n }\n return xml;\n}\n\nfunction isManifest(xml: XML.XMLObject): xml is AndroidManifest {\n // TODO: Maybe more validation\n return !!xml.manifest;\n}\n\n/** Returns the `manifest.application` tag ending in `.MainApplication` */\nexport function getMainApplication(androidManifest: AndroidManifest): ManifestApplication | null {\n return (\n androidManifest?.manifest?.application?.filter(\n (e) => e?.$?.['android:name'].endsWith('.MainApplication')\n )[0] ?? null\n );\n}\n\nexport function getMainApplicationOrThrow(androidManifest: AndroidManifest): ManifestApplication {\n const mainApplication = getMainApplication(androidManifest);\n assert(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');\n return mainApplication;\n}\n\nexport function getMainActivityOrThrow(androidManifest: AndroidManifest): ManifestActivity {\n const mainActivity = getMainActivity(androidManifest);\n assert(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');\n return mainActivity;\n}\n\nexport function getRunnableActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n // Get enabled activities\n const enabledActivities = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false\n );\n\n if (!enabledActivities) {\n return null;\n }\n\n // Get the activity that has a runnable intent-filter\n for (const activity of enabledActivities) {\n if (Array.isArray(activity['intent-filter'])) {\n for (const intentFilter of activity['intent-filter']) {\n if (\n intentFilter.action?.find(\n (action) => action.$['android:name'] === 'android.intent.action.MAIN'\n ) &&\n intentFilter.category?.find(\n (category) => category.$['android:name'] === 'android.intent.category.LAUNCHER'\n )\n ) {\n return activity;\n }\n }\n }\n }\n\n return null;\n}\n\nexport function getMainActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n const mainActivity = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:name'] === '.MainActivity'\n );\n return mainActivity?.[0] ?? null;\n}\n\nexport function addMetaDataItemToMainApplication(\n mainApplication: ManifestApplication,\n itemName: string,\n itemValue: string,\n itemType: 'resource' | 'value' = 'value'\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys({ name: itemName, [itemType]: itemValue }),\n } as ManifestMetaData;\n if (mainApplication['meta-data']) {\n existingMetaDataItem = mainApplication['meta-data'].filter(\n (e: any) => e.$['android:name'] === itemName\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$[`android:${itemType}` as keyof ManifestMetaDataAttributes] =\n itemValue;\n } else {\n mainApplication['meta-data'].push(newItem);\n }\n } else {\n mainApplication['meta-data'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeMetaDataItemFromMainApplication(mainApplication: any, itemName: string) {\n const index = findMetaDataItem(mainApplication, itemName);\n if (mainApplication?.['meta-data'] && index > -1) {\n mainApplication['meta-data'].splice(index, 1);\n }\n return mainApplication;\n}\n\nfunction findApplicationSubItem(\n mainApplication: ManifestApplication,\n category: keyof ManifestApplication,\n itemName: string\n): number {\n const parent = mainApplication[category];\n if (Array.isArray(parent)) {\n const index = parent.findIndex((e: any) => e.$['android:name'] === itemName);\n\n return index;\n }\n return -1;\n}\n\nexport function findMetaDataItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'meta-data', itemName);\n}\n\nexport function findUsesLibraryItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'uses-library', itemName);\n}\n\nexport function getMainApplicationMetaDataValue(\n androidManifest: AndroidManifest,\n name: string\n): string | null {\n const mainApplication = getMainApplication(androidManifest);\n\n if (mainApplication?.hasOwnProperty('meta-data')) {\n const item = mainApplication?.['meta-data']?.find((e: any) => e.$['android:name'] === name);\n return item?.$['android:value'] ?? null;\n }\n\n return null;\n}\n\nexport function addUsesLibraryItemToMainApplication(\n mainApplication: ManifestApplication,\n item: { name: string; required?: boolean }\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys(item),\n } as ManifestUsesLibrary;\n\n if (mainApplication['uses-library']) {\n existingMetaDataItem = mainApplication['uses-library'].filter(\n (e) => e.$['android:name'] === item.name\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$ = newItem.$;\n } else {\n mainApplication['uses-library'].push(newItem);\n }\n } else {\n mainApplication['uses-library'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeUsesLibraryItemFromMainApplication(\n mainApplication: ManifestApplication,\n itemName: string\n) {\n const index = findUsesLibraryItem(mainApplication, itemName);\n if (mainApplication?.['uses-library'] && index > -1) {\n mainApplication['uses-library'].splice(index, 1);\n }\n return mainApplication;\n}\n\nexport function prefixAndroidKeys<T extends Record<string, any> = Record<string, string>>(\n head: T\n): Record<string, any> {\n // prefix all keys with `android:`\n return Object.entries(head).reduce(\n (prev, [key, curr]) => ({ ...prev, [`android:${key}`]: curr }),\n {} as T\n );\n}\n\n/**\n * Ensure the `tools:*` namespace is available in the manifest.\n *\n * @param manifest AndroidManifest.xml\n * @returns manifest with the `tools:*` namespace available\n */\nexport function ensureToolsAvailable(manifest: AndroidManifest) {\n return ensureManifestHasNamespace(manifest, {\n namespace: 'xmlns:tools',\n url: 'http://schemas.android.com/tools',\n });\n}\n\n/**\n * Ensure a particular namespace is available in the manifest.\n *\n * @param manifest `AndroidManifest.xml`\n * @returns manifest with the provided namespace available\n */\nfunction ensureManifestHasNamespace(\n manifest: AndroidManifest,\n { namespace, url }: { namespace: string; url: string }\n) {\n if (manifest?.manifest?.$?.[namespace]) {\n return manifest;\n }\n manifest.manifest.$[namespace] = url;\n return manifest;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Manifest.js","names":["_assert","data","_interopRequireDefault","require","_fs","_path","XML","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","writeAndroidManifestAsync","manifestPath","androidManifest","manifestXml","format","fs","promises","mkdir","path","dirname","recursive","writeFile","readAndroidManifestAsync","xml","readXMLAsync","isManifest","Error","manifest","getMainApplication","application","filter","$","endsWith","getMainApplicationOrThrow","mainApplication","assert","getMainActivityOrThrow","mainActivity","getMainActivity","getRunnableActivity","enabledActivities","activity","Array","isArray","intentFilter","action","find","category","addMetaDataItemToMainApplication","itemName","itemValue","itemType","existingMetaDataItem","newItem","prefixAndroidKeys","name","length","push","removeMetaDataItemFromMainApplication","index","findMetaDataItem","splice","findApplicationSubItem","parent","findIndex","findUsesLibraryItem","getMainApplicationMetaDataValue","item","addUsesLibraryItemToMainApplication","removeUsesLibraryItemFromMainApplication","head","entries","reduce","prev","key","curr","ensureToolsAvailable","ensureManifestHasNamespace","namespace","url"],"sources":["../../src/android/Manifest.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as XML from '../utils/XML';\n\nexport type StringBoolean = 'true' | 'false';\n\ntype ManifestMetaDataAttributes = AndroidManifestAttributes & {\n 'android:value'?: string;\n 'android:resource'?: string;\n};\n\ntype AndroidManifestAttributes = {\n 'android:name': string | 'android.intent.action.VIEW';\n 'tools:node'?: string | 'remove';\n};\n\ntype ManifestAction = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestCategory = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestData = {\n $: {\n [key: string]: string | undefined;\n 'android:host'?: string;\n 'android:pathPrefix'?: string;\n 'android:scheme'?: string;\n };\n};\n\ntype ManifestReceiver = {\n $: AndroidManifestAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:enabled'?: StringBoolean;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\nexport type ManifestIntentFilter = {\n $?: {\n 'android:autoVerify'?: StringBoolean;\n 'data-generated'?: StringBoolean;\n };\n action?: ManifestAction[];\n data?: ManifestData[];\n category?: ManifestCategory[];\n};\n\nexport type ManifestMetaData = {\n $: ManifestMetaDataAttributes;\n};\n\ntype ManifestServiceAttributes = AndroidManifestAttributes & {\n 'android:enabled'?: StringBoolean;\n 'android:exported'?: StringBoolean;\n 'android:permission'?: string;\n // ...\n};\n\ntype ManifestService = {\n $: ManifestServiceAttributes;\n 'intent-filter'?: ManifestIntentFilter[];\n};\n\ntype ManifestApplicationAttributes = {\n 'android:name': string | '.MainApplication';\n 'android:icon'?: string;\n 'android:roundIcon'?: string;\n 'android:label'?: string;\n 'android:allowBackup'?: StringBoolean;\n 'android:largeHeap'?: StringBoolean;\n 'android:requestLegacyExternalStorage'?: StringBoolean;\n 'android:supportsPictureInPicture'?: StringBoolean;\n 'android:usesCleartextTraffic'?: StringBoolean;\n [key: string]: string | undefined;\n};\n\nexport type ManifestActivity = {\n $: ManifestApplicationAttributes & {\n 'android:exported'?: StringBoolean;\n 'android:launchMode'?: string;\n 'android:theme'?: string;\n 'android:windowSoftInputMode'?:\n | string\n | 'stateUnspecified'\n | 'stateUnchanged'\n | 'stateHidden'\n | 'stateAlwaysHidden'\n | 'stateVisible'\n | 'stateAlwaysVisible'\n | 'adjustUnspecified'\n | 'adjustResize'\n | 'adjustPan';\n [key: string]: string | undefined;\n };\n 'intent-filter'?: ManifestIntentFilter[];\n // ...\n};\n\nexport type ManifestUsesLibrary = {\n $: AndroidManifestAttributes & {\n 'android:required'?: StringBoolean;\n };\n};\n\nexport type ManifestApplication = {\n $: ManifestApplicationAttributes;\n activity?: ManifestActivity[];\n service?: ManifestService[];\n receiver?: ManifestReceiver[];\n 'meta-data'?: ManifestMetaData[];\n 'uses-library'?: ManifestUsesLibrary[];\n // ...\n};\n\ntype ManifestPermission = {\n $: AndroidManifestAttributes & {\n 'android:protectionLevel'?: string | 'signature';\n };\n};\n\nexport type ManifestUsesPermission = {\n $: AndroidManifestAttributes;\n};\n\ntype ManifestUsesFeature = {\n $: AndroidManifestAttributes & {\n 'android:glEsVersion'?: string;\n 'android:required': StringBoolean;\n };\n};\n\nexport type AndroidManifest = {\n manifest: {\n // Probably more, but this is currently all we'd need for most cases in Expo.\n $: {\n 'xmlns:android': string;\n 'xmlns:tools'?: string;\n package?: string;\n [key: string]: string | undefined;\n };\n permission?: ManifestPermission[];\n 'uses-permission'?: ManifestUsesPermission[];\n 'uses-permission-sdk-23'?: ManifestUsesPermission[];\n 'uses-feature'?: ManifestUsesFeature[];\n queries: ManifestQuery[];\n application?: ManifestApplication[];\n };\n};\n\ntype ManifestQueryIntent = Omit<ManifestIntentFilter, '$'>;\n\nexport type ManifestQuery = {\n package: {\n $: {\n 'android:name': string;\n };\n }[];\n intent?: ManifestQueryIntent[];\n provider?: {\n $: {\n 'android:authorities': string;\n };\n };\n};\n\nexport async function writeAndroidManifestAsync(\n manifestPath: string,\n androidManifest: AndroidManifest\n): Promise<void> {\n const manifestXml = XML.format(androidManifest);\n await fs.promises.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.promises.writeFile(manifestPath, manifestXml);\n}\n\nexport async function readAndroidManifestAsync(manifestPath: string): Promise<AndroidManifest> {\n const xml = await XML.readXMLAsync({ path: manifestPath });\n if (!isManifest(xml)) {\n throw new Error('Invalid manifest found at: ' + manifestPath);\n }\n return xml;\n}\n\nfunction isManifest(xml: XML.XMLObject): xml is AndroidManifest {\n // TODO: Maybe more validation\n return !!xml.manifest;\n}\n\n/** Returns the `manifest.application` tag ending in `.MainApplication` */\nexport function getMainApplication(androidManifest: AndroidManifest): ManifestApplication | null {\n return (\n androidManifest?.manifest?.application?.filter((e) =>\n e?.$?.['android:name'].endsWith('.MainApplication')\n )[0] ?? null\n );\n}\n\nexport function getMainApplicationOrThrow(androidManifest: AndroidManifest): ManifestApplication {\n const mainApplication = getMainApplication(androidManifest);\n assert(mainApplication, 'AndroidManifest.xml is missing the required MainApplication element');\n return mainApplication;\n}\n\nexport function getMainActivityOrThrow(androidManifest: AndroidManifest): ManifestActivity {\n const mainActivity = getMainActivity(androidManifest);\n assert(mainActivity, 'AndroidManifest.xml is missing the required MainActivity element');\n return mainActivity;\n}\n\nexport function getRunnableActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n // Get enabled activities\n const enabledActivities = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:enabled'] !== 'false' && e.$['android:enabled'] !== false\n );\n\n if (!enabledActivities) {\n return null;\n }\n\n // Get the activity that has a runnable intent-filter\n for (const activity of enabledActivities) {\n if (Array.isArray(activity['intent-filter'])) {\n for (const intentFilter of activity['intent-filter']) {\n if (\n intentFilter.action?.find(\n (action) => action.$['android:name'] === 'android.intent.action.MAIN'\n ) &&\n intentFilter.category?.find(\n (category) => category.$['android:name'] === 'android.intent.category.LAUNCHER'\n )\n ) {\n return activity;\n }\n }\n }\n }\n\n return null;\n}\n\nexport function getMainActivity(androidManifest: AndroidManifest): ManifestActivity | null {\n const mainActivity = androidManifest?.manifest?.application?.[0]?.activity?.filter?.(\n (e: any) => e.$['android:name'] === '.MainActivity'\n );\n return mainActivity?.[0] ?? null;\n}\n\nexport function addMetaDataItemToMainApplication(\n mainApplication: ManifestApplication,\n itemName: string,\n itemValue: string,\n itemType: 'resource' | 'value' = 'value'\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys({ name: itemName, [itemType]: itemValue }),\n } as ManifestMetaData;\n if (mainApplication['meta-data']) {\n existingMetaDataItem = mainApplication['meta-data'].filter(\n (e: any) => e.$['android:name'] === itemName\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$[`android:${itemType}` as keyof ManifestMetaDataAttributes] =\n itemValue;\n } else {\n mainApplication['meta-data'].push(newItem);\n }\n } else {\n mainApplication['meta-data'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeMetaDataItemFromMainApplication(mainApplication: any, itemName: string) {\n const index = findMetaDataItem(mainApplication, itemName);\n if (mainApplication?.['meta-data'] && index > -1) {\n mainApplication['meta-data'].splice(index, 1);\n }\n return mainApplication;\n}\n\nfunction findApplicationSubItem(\n mainApplication: ManifestApplication,\n category: keyof ManifestApplication,\n itemName: string\n): number {\n const parent = mainApplication[category];\n if (Array.isArray(parent)) {\n const index = parent.findIndex((e: any) => e.$['android:name'] === itemName);\n\n return index;\n }\n return -1;\n}\n\nexport function findMetaDataItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'meta-data', itemName);\n}\n\nexport function findUsesLibraryItem(mainApplication: any, itemName: string): number {\n return findApplicationSubItem(mainApplication, 'uses-library', itemName);\n}\n\nexport function getMainApplicationMetaDataValue(\n androidManifest: AndroidManifest,\n name: string\n): string | null {\n const mainApplication = getMainApplication(androidManifest);\n\n if (mainApplication?.hasOwnProperty('meta-data')) {\n const item = mainApplication?.['meta-data']?.find((e: any) => e.$['android:name'] === name);\n return item?.$['android:value'] ?? null;\n }\n\n return null;\n}\n\nexport function addUsesLibraryItemToMainApplication(\n mainApplication: ManifestApplication,\n item: { name: string; required?: boolean }\n): ManifestApplication {\n let existingMetaDataItem;\n const newItem = {\n $: prefixAndroidKeys(item),\n } as ManifestUsesLibrary;\n\n if (mainApplication['uses-library']) {\n existingMetaDataItem = mainApplication['uses-library'].filter(\n (e) => e.$['android:name'] === item.name\n );\n if (existingMetaDataItem.length) {\n existingMetaDataItem[0].$ = newItem.$;\n } else {\n mainApplication['uses-library'].push(newItem);\n }\n } else {\n mainApplication['uses-library'] = [newItem];\n }\n return mainApplication;\n}\n\nexport function removeUsesLibraryItemFromMainApplication(\n mainApplication: ManifestApplication,\n itemName: string\n) {\n const index = findUsesLibraryItem(mainApplication, itemName);\n if (mainApplication?.['uses-library'] && index > -1) {\n mainApplication['uses-library'].splice(index, 1);\n }\n return mainApplication;\n}\n\nexport function prefixAndroidKeys<T extends Record<string, any> = Record<string, string>>(\n head: T\n): Record<string, any> {\n // prefix all keys with `android:`\n return Object.entries(head).reduce(\n (prev, [key, curr]) => ({ ...prev, [`android:${key}`]: curr }),\n {} as T\n );\n}\n\n/**\n * Ensure the `tools:*` namespace is available in the manifest.\n *\n * @param manifest AndroidManifest.xml\n * @returns manifest with the `tools:*` namespace available\n */\nexport function ensureToolsAvailable(manifest: AndroidManifest) {\n return ensureManifestHasNamespace(manifest, {\n namespace: 'xmlns:tools',\n url: 'http://schemas.android.com/tools',\n });\n}\n\n/**\n * Ensure a particular namespace is available in the manifest.\n *\n * @param manifest `AndroidManifest.xml`\n * @returns manifest with the provided namespace available\n */\nfunction ensureManifestHasNamespace(\n manifest: AndroidManifest,\n { namespace, url }: { namespace: string; url: string }\n) {\n if (manifest?.manifest?.$?.[namespace]) {\n return manifest;\n }\n manifest.manifest.$[namespace] = url;\n return manifest;\n}\n"],"mappings":"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"}
|
package/build/android/Name.js
CHANGED
|
@@ -50,8 +50,7 @@ function sanitizeNameForGradle(name) {
|
|
|
50
50
|
// The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \, :, <, >, ", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).
|
|
51
51
|
return name.replace(/(\/|\\|:|<|>|"|\?|\*|\|)/g, '');
|
|
52
52
|
}
|
|
53
|
-
const withName = (0, _androidPlugins().createStringsXmlPlugin)(applyNameFromConfig, 'withName');
|
|
54
|
-
exports.withName = withName;
|
|
53
|
+
const withName = exports.withName = (0, _androidPlugins().createStringsXmlPlugin)(applyNameFromConfig, 'withName');
|
|
55
54
|
const withNameSettingsGradle = config => {
|
|
56
55
|
return (0, _androidPlugins().withSettingsGradle)(config, config => {
|
|
57
56
|
if (config.modResults.language === 'groovy') {
|
|
@@ -84,8 +83,7 @@ function applyNameFromConfig(config, stringsJSON) {
|
|
|
84
83
|
* @param settingsGradle
|
|
85
84
|
*/
|
|
86
85
|
function applyNameSettingsGradle(config, settingsGradle) {
|
|
87
|
-
|
|
88
|
-
const name = sanitizeNameForGradle((_getName = getName(config)) !== null && _getName !== void 0 ? _getName : '');
|
|
86
|
+
const name = sanitizeNameForGradle(getName(config) ?? '');
|
|
89
87
|
|
|
90
88
|
// Select rootProject.name = '***' and replace the contents between the quotes.
|
|
91
89
|
return settingsGradle.replace(/rootProject.name\s?=\s?(["'])(?:(?=(\\?))\2.)*?\1/g, `rootProject.name = '${name.replace(/'/g, "\\'")}'`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Name.js","names":["_Resources","data","require","_Strings","_androidPlugins","_warnings","sanitizeNameForGradle","name","replace","withName","
|
|
1
|
+
{"version":3,"file":"Name.js","names":["_Resources","data","require","_Strings","_androidPlugins","_warnings","sanitizeNameForGradle","name","replace","withName","exports","createStringsXmlPlugin","applyNameFromConfig","withNameSettingsGradle","config","withSettingsGradle","modResults","language","contents","applyNameSettingsGradle","addWarningAndroid","getName","stringsJSON","setStringItem","buildResourceItem","value","removeStringItem","settingsGradle"],"sources":["../../src/android/Name.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { buildResourceItem, ResourceXML } from './Resources';\nimport { removeStringItem, setStringItem } from './Strings';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createStringsXmlPlugin, withSettingsGradle } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\n\n/**\n * Sanitize a name, this should be used for files and gradle names.\n * - `[/, \\, :, <, >, \", ?, *, |]` are not allowed\n * https://docs.gradle.org/4.2/release-notes.html#path-separator-characters-in-names-are-deprecated\n *\n * @param name\n */\nexport function sanitizeNameForGradle(name: string): string {\n // Remove escape characters which are valid in XML names but not in gradle.\n name = name.replace(/[\\n\\r\\t]/g, '');\n\n // Gradle disallows these:\n // The project name 'My-Special 😃 Co/ol_Project' must not contain any of the following characters: [/, \\, :, <, >, \", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/6.2/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).\n return name.replace(/(\\/|\\\\|:|<|>|\"|\\?|\\*|\\|)/g, '');\n}\n\nexport const withName = createStringsXmlPlugin(applyNameFromConfig, 'withName');\n\nexport const withNameSettingsGradle: ConfigPlugin = (config) => {\n return withSettingsGradle(config, (config) => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = applyNameSettingsGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'name',\n `Cannot automatically configure settings.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport function getName(config: Pick<ExpoConfig, 'name'>) {\n return typeof config.name === 'string' ? config.name : null;\n}\n\nfunction applyNameFromConfig(\n config: Pick<ExpoConfig, 'name'>,\n stringsJSON: ResourceXML\n): ResourceXML {\n const name = getName(config);\n if (name) {\n return setStringItem([buildResourceItem({ name: 'app_name', value: name })], stringsJSON);\n }\n return removeStringItem('app_name', stringsJSON);\n}\n\n/**\n * Regex a name change -- fragile.\n *\n * @param config\n * @param settingsGradle\n */\nexport function applyNameSettingsGradle(config: Pick<ExpoConfig, 'name'>, settingsGradle: string) {\n const name = sanitizeNameForGradle(getName(config) ?? '');\n\n // Select rootProject.name = '***' and replace the contents between the quotes.\n return settingsGradle.replace(\n /rootProject.name\\s?=\\s?([\"'])(?:(?=(\\\\?))\\2.)*?\\1/g,\n `rootProject.name = '${name.replace(/'/g, \"\\\\'\")}'`\n );\n}\n"],"mappings":";;;;;;;;;AAEA,SAAAA,WAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,UAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,SAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,QAAA,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;AACA,SAAAI,UAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,SAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,qBAAqBA,CAACC,IAAY,EAAU;EAC1D;EACAA,IAAI,GAAGA,IAAI,CAACC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;;EAEpC;EACA;EACA,OAAOD,IAAI,CAACC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;AACtD;AAEO,MAAMC,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG,IAAAE,wCAAsB,EAACC,mBAAmB,EAAE,UAAU,CAAC;AAExE,MAAMC,sBAAoC,GAAIC,MAAM,IAAK;EAC9D,OAAO,IAAAC,oCAAkB,EAACD,MAAM,EAAGA,MAAM,IAAK;IAC5C,IAAIA,MAAM,CAACE,UAAU,CAACC,QAAQ,KAAK,QAAQ,EAAE;MAC3CH,MAAM,CAACE,UAAU,CAACE,QAAQ,GAAGC,uBAAuB,CAACL,MAAM,EAAEA,MAAM,CAACE,UAAU,CAACE,QAAQ,CAAC;IAC1F,CAAC,MAAM;MACL,IAAAE,6BAAiB,EACf,MAAM,EACL,mEACH,CAAC;IACH;IACA,OAAON,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAACJ,OAAA,CAAAG,sBAAA,GAAAA,sBAAA;AAEK,SAASQ,OAAOA,CAACP,MAAgC,EAAE;EACxD,OAAO,OAAOA,MAAM,CAACP,IAAI,KAAK,QAAQ,GAAGO,MAAM,CAACP,IAAI,GAAG,IAAI;AAC7D;AAEA,SAASK,mBAAmBA,CAC1BE,MAAgC,EAChCQ,WAAwB,EACX;EACb,MAAMf,IAAI,GAAGc,OAAO,CAACP,MAAM,CAAC;EAC5B,IAAIP,IAAI,EAAE;IACR,OAAO,IAAAgB,wBAAa,EAAC,CAAC,IAAAC,8BAAiB,EAAC;MAAEjB,IAAI,EAAE,UAAU;MAAEkB,KAAK,EAAElB;IAAK,CAAC,CAAC,CAAC,EAAEe,WAAW,CAAC;EAC3F;EACA,OAAO,IAAAI,2BAAgB,EAAC,UAAU,EAAEJ,WAAW,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASH,uBAAuBA,CAACL,MAAgC,EAAEa,cAAsB,EAAE;EAChG,MAAMpB,IAAI,GAAGD,qBAAqB,CAACe,OAAO,CAACP,MAAM,CAAC,IAAI,EAAE,CAAC;;EAEzD;EACA,OAAOa,cAAc,CAACnB,OAAO,CAC3B,oDAAoD,EACnD,uBAAsBD,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAE,GACnD,CAAC;AACH"}
|
|
@@ -21,10 +21,8 @@ function _androidPlugins() {
|
|
|
21
21
|
};
|
|
22
22
|
return data;
|
|
23
23
|
}
|
|
24
|
-
const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';
|
|
25
|
-
exports.
|
|
26
|
-
const withOrientation = (0, _androidPlugins().createAndroidManifestPlugin)(setAndroidOrientation, 'withOrientation');
|
|
27
|
-
exports.withOrientation = withOrientation;
|
|
24
|
+
const SCREEN_ORIENTATION_ATTRIBUTE = exports.SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';
|
|
25
|
+
const withOrientation = exports.withOrientation = (0, _androidPlugins().createAndroidManifestPlugin)(setAndroidOrientation, 'withOrientation');
|
|
28
26
|
function getOrientation(config) {
|
|
29
27
|
return typeof config.orientation === 'string' ? config.orientation : null;
|
|
30
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Orientation.js","names":["_Manifest","data","require","_androidPlugins","SCREEN_ORIENTATION_ATTRIBUTE","exports","withOrientation","createAndroidManifestPlugin","setAndroidOrientation","getOrientation","config","orientation","androidManifest","mainActivity","getMainActivityOrThrow","$"],"sources":["../../src/android/Orientation.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\n\nexport const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';\n\nexport const withOrientation = createAndroidManifestPlugin(\n setAndroidOrientation,\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return typeof config.orientation === 'string' ? config.orientation : null;\n}\n\nexport function setAndroidOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n androidManifest: AndroidManifest\n) {\n const orientation = getOrientation(config);\n // TODO: Remove this if we decide to remove any orientation configuration when not specified\n if (!orientation) {\n return androidManifest;\n }\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n\n mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] =\n orientation !== 'default' ? orientation : 'unspecified';\n\n return androidManifest;\n}\n"],"mappings":";;;;;;;;;AAEA,SAAAA,UAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,SAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,gBAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,eAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAMG,4BAA4B,
|
|
1
|
+
{"version":3,"file":"Orientation.js","names":["_Manifest","data","require","_androidPlugins","SCREEN_ORIENTATION_ATTRIBUTE","exports","withOrientation","createAndroidManifestPlugin","setAndroidOrientation","getOrientation","config","orientation","androidManifest","mainActivity","getMainActivityOrThrow","$"],"sources":["../../src/android/Orientation.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\n\nexport const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation';\n\nexport const withOrientation = createAndroidManifestPlugin(\n setAndroidOrientation,\n 'withOrientation'\n);\n\nexport function getOrientation(config: Pick<ExpoConfig, 'orientation'>) {\n return typeof config.orientation === 'string' ? config.orientation : null;\n}\n\nexport function setAndroidOrientation(\n config: Pick<ExpoConfig, 'orientation'>,\n androidManifest: AndroidManifest\n) {\n const orientation = getOrientation(config);\n // TODO: Remove this if we decide to remove any orientation configuration when not specified\n if (!orientation) {\n return androidManifest;\n }\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n\n mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] =\n orientation !== 'default' ? orientation : 'unspecified';\n\n return androidManifest;\n}\n"],"mappings":";;;;;;;;;AAEA,SAAAA,UAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,SAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,gBAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,eAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAMG,4BAA4B,GAAAC,OAAA,CAAAD,4BAAA,GAAG,2BAA2B;AAEhE,MAAME,eAAe,GAAAD,OAAA,CAAAC,eAAA,GAAG,IAAAC,6CAA2B,EACxDC,qBAAqB,EACrB,iBACF,CAAC;AAEM,SAASC,cAAcA,CAACC,MAAuC,EAAE;EACtE,OAAO,OAAOA,MAAM,CAACC,WAAW,KAAK,QAAQ,GAAGD,MAAM,CAACC,WAAW,GAAG,IAAI;AAC3E;AAEO,SAASH,qBAAqBA,CACnCE,MAAuC,EACvCE,eAAgC,EAChC;EACA,MAAMD,WAAW,GAAGF,cAAc,CAACC,MAAM,CAAC;EAC1C;EACA,IAAI,CAACC,WAAW,EAAE;IAChB,OAAOC,eAAe;EACxB;EAEA,MAAMC,YAAY,GAAG,IAAAC,kCAAsB,EAACF,eAAe,CAAC;EAE5DC,YAAY,CAACE,CAAC,CAACX,4BAA4B,CAAC,GAC1CO,WAAW,KAAK,SAAS,GAAGA,WAAW,GAAG,aAAa;EAEzD,OAAOC,eAAe;AACxB"}
|
package/build/android/Package.js
CHANGED
|
@@ -94,8 +94,7 @@ const withPackageRefactor = config => {
|
|
|
94
94
|
};
|
|
95
95
|
exports.withPackageRefactor = withPackageRefactor;
|
|
96
96
|
function getPackage(config) {
|
|
97
|
-
|
|
98
|
-
return (_config$android$packa = (_config$android = config.android) === null || _config$android === void 0 ? void 0 : _config$android.package) !== null && _config$android$packa !== void 0 ? _config$android$packa : null;
|
|
97
|
+
return config.android?.package ?? null;
|
|
99
98
|
}
|
|
100
99
|
function getPackageRoot(projectRoot, type) {
|
|
101
100
|
return _path().default.join(projectRoot, 'android', 'app', 'src', type, 'java');
|
|
@@ -271,7 +270,6 @@ function setPackageInBuildGradle(config, buildGradle) {
|
|
|
271
270
|
return buildGradle.replace(pattern, `$1 '${packageName}'`);
|
|
272
271
|
}
|
|
273
272
|
async function getApplicationIdAsync(projectRoot) {
|
|
274
|
-
var _matchResult$;
|
|
275
273
|
const buildGradlePath = (0, _Paths().getAppBuildGradleFilePath)(projectRoot);
|
|
276
274
|
if (!_fs().default.existsSync(buildGradlePath)) {
|
|
277
275
|
return null;
|
|
@@ -279,7 +277,7 @@ async function getApplicationIdAsync(projectRoot) {
|
|
|
279
277
|
const buildGradle = await _fs().default.promises.readFile(buildGradlePath, 'utf8');
|
|
280
278
|
const matchResult = buildGradle.match(/applicationId ['"](.*)['"]/);
|
|
281
279
|
// TODO add fallback for legacy cases to read from AndroidManifest.xml
|
|
282
|
-
return
|
|
280
|
+
return matchResult?.[1] ?? null;
|
|
283
281
|
}
|
|
284
282
|
|
|
285
283
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Package.js","names":["_debug","data","_interopRequireDefault","require","_fs","_glob","_path","_Paths","_androidPlugins","_withDangerousMod","_modules","_warnings","obj","__esModule","default","debug","Debug","withPackageGradle","config","withAppBuildGradle","modResults","language","contents","setPackageInBuildGradle","addWarningAndroid","exports","withPackageRefactor","withDangerousMod","renamePackageOnDisk","modRequest","projectRoot","getPackage","_config$android$packa","_config$android","android","package","getPackageRoot","type","path","join","getCurrentPackageName","packageRoot","mainApplication","getProjectFilePath","packagePath","dirname","packagePathParts","relative","split","sep","filter","Boolean","getCurrentPackageForProjectFile","fileName","filePath","globSync","getCurrentPackageNameForType","newPackageName","renameJniOnDiskForType","packageName","renamePackageOnDiskForType","currentPackageName","jniRoot","filesToUpdate","cwd","absolute","forEach","filepath","fs","lstatSync","isFile","includes","extname","readFileSync","toString","replace","RegExp","transformJavaClassDescriptor","writeFileSync","directoryExistsAsync","currentPackagePath","newPackagePath","mkdirSync","recursive","relativePath","moveFileSync","oldPathParts","length","pathToCheck","files","readdirSync","rmdirSync","pop","push","replacePackageName","src","dest","renameSync","buildGradle","pattern","getApplicationIdAsync","_matchResult$","buildGradlePath","getAppBuildGradleFilePath","existsSync","promises","readFile","matchResult","match","content","oldName","newName","oldNameEscaped"],"sources":["../../src/android/Package.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport Debug from 'debug';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { getAppBuildGradleFilePath, getProjectFilePath } from './Paths';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAppBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { addWarningAndroid } from '../utils/warnings';\n\nconst debug = Debug('expo:config-plugins:android:package');\n\nexport const withPackageGradle: ConfigPlugin = (config) => {\n return withAppBuildGradle(config, (config) => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = setPackageInBuildGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.package',\n `Cannot automatically configure app build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport const withPackageRefactor: ConfigPlugin = (config) => {\n return withDangerousMod(config, [\n 'android',\n async (config) => {\n await renamePackageOnDisk(config, config.modRequest.projectRoot);\n return config;\n },\n ]);\n};\n\nexport function getPackage(config: Pick<ExpoConfig, 'android'>) {\n return config.android?.package ?? null;\n}\n\nfunction getPackageRoot(projectRoot: string, type: 'main' | 'debug') {\n return path.join(projectRoot, 'android', 'app', 'src', type, 'java');\n}\n\nfunction getCurrentPackageName(projectRoot: string, packageRoot: string) {\n const mainApplication = getProjectFilePath(projectRoot, 'MainApplication');\n const packagePath = path.dirname(mainApplication);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageForProjectFile(\n projectRoot: string,\n packageRoot: string,\n fileName: string,\n type: string\n) {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/${type}/java/**/${fileName}.@(java|kt)`)\n )[0];\n\n if (!filePath) {\n return null;\n }\n\n const packagePath = path.dirname(filePath);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageNameForType(projectRoot: string, type: string): string | null {\n const packageRoot = getPackageRoot(projectRoot, type as any);\n\n if (type === 'main') {\n return getCurrentPackageName(projectRoot, packageRoot);\n }\n // debug, etc..\n return getCurrentPackageForProjectFile(projectRoot, packageRoot, '*', type);\n}\n\n// NOTE(brentvatne): this assumes that our MainApplication.java file is in the root of the package\n// this makes sense for standard react-native projects but may not apply in customized projects, so if\n// we want this to be runnable in any app we need to handle other possibilities\nexport async function renamePackageOnDisk(\n config: Pick<ExpoConfig, 'android'>,\n projectRoot: string\n) {\n const newPackageName = getPackage(config);\n if (newPackageName === null) {\n return;\n }\n\n for (const type of ['debug', 'main', 'release']) {\n await renameJniOnDiskForType({ projectRoot, type, packageName: newPackageName });\n await renamePackageOnDiskForType({ projectRoot, type, packageName: newPackageName });\n }\n}\n\nexport async function renameJniOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n if (!currentPackageName || !packageName || currentPackageName === packageName) {\n return;\n }\n\n const jniRoot = path.join(projectRoot, 'android', 'app', 'src', type, 'jni');\n const filesToUpdate = [...globSync('**/*', { cwd: jniRoot, absolute: true })];\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile() && ['.h', '.cpp'].includes(path.extname(filepath))) {\n let contents = fs.readFileSync(filepath).toString();\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\/'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nexport async function renamePackageOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n debug(`Found package \"${currentPackageName}\" for type \"${type}\"`);\n if (!currentPackageName || currentPackageName === packageName) {\n return;\n }\n debug(`Refactor \"${currentPackageName}\" to \"${packageName}\" for type \"${type}\"`);\n const packageRoot = getPackageRoot(projectRoot, type as any);\n // Set up our paths\n if (!(await directoryExistsAsync(packageRoot))) {\n debug(`- skipping refactor of missing directory: ${packageRoot}`);\n return;\n }\n\n const currentPackagePath = path.join(packageRoot, ...currentPackageName.split('.'));\n const newPackagePath = path.join(packageRoot, ...packageName.split('.'));\n\n // Create the new directory\n fs.mkdirSync(newPackagePath, { recursive: true });\n\n // Move everything from the old directory over\n globSync('**/*', { cwd: currentPackagePath }).forEach((relativePath) => {\n const filepath = path.join(currentPackagePath, relativePath);\n if (fs.lstatSync(filepath).isFile()) {\n moveFileSync(filepath, path.join(newPackagePath, relativePath));\n } else {\n fs.mkdirSync(filepath, { recursive: true });\n }\n });\n\n // Remove the old directory recursively from com/old/package to com/old and com,\n // as long as the directories are empty\n const oldPathParts = currentPackageName.split('.');\n while (oldPathParts.length) {\n const pathToCheck = path.join(packageRoot, ...oldPathParts);\n try {\n const files = fs.readdirSync(pathToCheck);\n if (files.length === 0) {\n fs.rmdirSync(pathToCheck);\n }\n } finally {\n oldPathParts.pop();\n }\n }\n\n const filesToUpdate = [...globSync('**/*', { cwd: newPackagePath, absolute: true })];\n // Only update the BUCK file to match the main package name\n if (type === 'main') {\n // NOTE(EvanBacon): We dropped this file in SDK 48 but other templates may still use it.\n filesToUpdate.push(path.join(projectRoot, 'android', 'app', 'BUCK'));\n }\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile()) {\n let contents = fs.readFileSync(filepath).toString();\n contents = replacePackageName(contents, currentPackageName, packageName);\n if (['.h', '.cpp'].includes(path.extname(filepath))) {\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n }\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nfunction moveFileSync(src: string, dest: string) {\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n fs.renameSync(src, dest);\n}\n\nexport function setPackageInBuildGradle(config: Pick<ExpoConfig, 'android'>, buildGradle: string) {\n const packageName = getPackage(config);\n if (packageName === null) {\n return buildGradle;\n }\n\n const pattern = new RegExp(`(applicationId|namespace) ['\"].*['\"]`, 'g');\n return buildGradle.replace(pattern, `$1 '${packageName}'`);\n}\n\nexport async function getApplicationIdAsync(projectRoot: string): Promise<string | null> {\n const buildGradlePath = getAppBuildGradleFilePath(projectRoot);\n if (!fs.existsSync(buildGradlePath)) {\n return null;\n }\n const buildGradle = await fs.promises.readFile(buildGradlePath, 'utf8');\n const matchResult = buildGradle.match(/applicationId ['\"](.*)['\"]/);\n // TODO add fallback for legacy cases to read from AndroidManifest.xml\n return matchResult?.[1] ?? null;\n}\n\n/**\n * Replace the package name with the new package name, in the given source.\n * This has to be limited to avoid accidentally replacing imports when the old package name overlaps.\n */\nfunction replacePackageName(content: string, oldName: string, newName: string) {\n const oldNameEscaped = oldName.replace(/\\./g, '\\\\.');\n\n return (\n content\n // Replace any quoted instances \"com.old\" -> \"com.new\"\n .replace(new RegExp(`\"${oldNameEscaped}\"`, 'g'), `\"${newName}\"`)\n // Replace special non-quoted instances, only when prefixed by package or namespace\n .replace(new RegExp(`(package|namespace)(\\\\s+)${oldNameEscaped}`, 'g'), `$1$2${newName}`)\n // Replace special import instances, without overlapping with other imports (trailing `.` to close it off)\n .replace(new RegExp(`(import\\\\s+)${oldNameEscaped}\\\\.`, 'g'), `$1${newName}.`)\n );\n}\n\n/**\n * Transform a java package name to java class descriptor,\n * e.g. `com.helloworld` -> `Lcom/helloworld`.\n */\nfunction transformJavaClassDescriptor(packageName: string) {\n return `L${packageName.replace(/\\./g, '/')}`;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Package.js","names":["_debug","data","_interopRequireDefault","require","_fs","_glob","_path","_Paths","_androidPlugins","_withDangerousMod","_modules","_warnings","obj","__esModule","default","debug","Debug","withPackageGradle","config","withAppBuildGradle","modResults","language","contents","setPackageInBuildGradle","addWarningAndroid","exports","withPackageRefactor","withDangerousMod","renamePackageOnDisk","modRequest","projectRoot","getPackage","android","package","getPackageRoot","type","path","join","getCurrentPackageName","packageRoot","mainApplication","getProjectFilePath","packagePath","dirname","packagePathParts","relative","split","sep","filter","Boolean","getCurrentPackageForProjectFile","fileName","filePath","globSync","getCurrentPackageNameForType","newPackageName","renameJniOnDiskForType","packageName","renamePackageOnDiskForType","currentPackageName","jniRoot","filesToUpdate","cwd","absolute","forEach","filepath","fs","lstatSync","isFile","includes","extname","readFileSync","toString","replace","RegExp","transformJavaClassDescriptor","writeFileSync","directoryExistsAsync","currentPackagePath","newPackagePath","mkdirSync","recursive","relativePath","moveFileSync","oldPathParts","length","pathToCheck","files","readdirSync","rmdirSync","pop","push","replacePackageName","src","dest","renameSync","buildGradle","pattern","getApplicationIdAsync","buildGradlePath","getAppBuildGradleFilePath","existsSync","promises","readFile","matchResult","match","content","oldName","newName","oldNameEscaped"],"sources":["../../src/android/Package.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport Debug from 'debug';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { getAppBuildGradleFilePath, getProjectFilePath } from './Paths';\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAppBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { directoryExistsAsync } from '../utils/modules';\nimport { addWarningAndroid } from '../utils/warnings';\n\nconst debug = Debug('expo:config-plugins:android:package');\n\nexport const withPackageGradle: ConfigPlugin = (config) => {\n return withAppBuildGradle(config, (config) => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = setPackageInBuildGradle(config, config.modResults.contents);\n } else {\n addWarningAndroid(\n 'android.package',\n `Cannot automatically configure app build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport const withPackageRefactor: ConfigPlugin = (config) => {\n return withDangerousMod(config, [\n 'android',\n async (config) => {\n await renamePackageOnDisk(config, config.modRequest.projectRoot);\n return config;\n },\n ]);\n};\n\nexport function getPackage(config: Pick<ExpoConfig, 'android'>) {\n return config.android?.package ?? null;\n}\n\nfunction getPackageRoot(projectRoot: string, type: 'main' | 'debug') {\n return path.join(projectRoot, 'android', 'app', 'src', type, 'java');\n}\n\nfunction getCurrentPackageName(projectRoot: string, packageRoot: string) {\n const mainApplication = getProjectFilePath(projectRoot, 'MainApplication');\n const packagePath = path.dirname(mainApplication);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageForProjectFile(\n projectRoot: string,\n packageRoot: string,\n fileName: string,\n type: string\n) {\n const filePath = globSync(\n path.join(projectRoot, `android/app/src/${type}/java/**/${fileName}.@(java|kt)`)\n )[0];\n\n if (!filePath) {\n return null;\n }\n\n const packagePath = path.dirname(filePath);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\nfunction getCurrentPackageNameForType(projectRoot: string, type: string): string | null {\n const packageRoot = getPackageRoot(projectRoot, type as any);\n\n if (type === 'main') {\n return getCurrentPackageName(projectRoot, packageRoot);\n }\n // debug, etc..\n return getCurrentPackageForProjectFile(projectRoot, packageRoot, '*', type);\n}\n\n// NOTE(brentvatne): this assumes that our MainApplication.java file is in the root of the package\n// this makes sense for standard react-native projects but may not apply in customized projects, so if\n// we want this to be runnable in any app we need to handle other possibilities\nexport async function renamePackageOnDisk(\n config: Pick<ExpoConfig, 'android'>,\n projectRoot: string\n) {\n const newPackageName = getPackage(config);\n if (newPackageName === null) {\n return;\n }\n\n for (const type of ['debug', 'main', 'release']) {\n await renameJniOnDiskForType({ projectRoot, type, packageName: newPackageName });\n await renamePackageOnDiskForType({ projectRoot, type, packageName: newPackageName });\n }\n}\n\nexport async function renameJniOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n if (!currentPackageName || !packageName || currentPackageName === packageName) {\n return;\n }\n\n const jniRoot = path.join(projectRoot, 'android', 'app', 'src', type, 'jni');\n const filesToUpdate = [...globSync('**/*', { cwd: jniRoot, absolute: true })];\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile() && ['.h', '.cpp'].includes(path.extname(filepath))) {\n let contents = fs.readFileSync(filepath).toString();\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\/'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nexport async function renamePackageOnDiskForType({\n projectRoot,\n type,\n packageName,\n}: {\n projectRoot: string;\n type: string;\n packageName: string;\n}) {\n if (!packageName) {\n return;\n }\n\n const currentPackageName = getCurrentPackageNameForType(projectRoot, type);\n debug(`Found package \"${currentPackageName}\" for type \"${type}\"`);\n if (!currentPackageName || currentPackageName === packageName) {\n return;\n }\n debug(`Refactor \"${currentPackageName}\" to \"${packageName}\" for type \"${type}\"`);\n const packageRoot = getPackageRoot(projectRoot, type as any);\n // Set up our paths\n if (!(await directoryExistsAsync(packageRoot))) {\n debug(`- skipping refactor of missing directory: ${packageRoot}`);\n return;\n }\n\n const currentPackagePath = path.join(packageRoot, ...currentPackageName.split('.'));\n const newPackagePath = path.join(packageRoot, ...packageName.split('.'));\n\n // Create the new directory\n fs.mkdirSync(newPackagePath, { recursive: true });\n\n // Move everything from the old directory over\n globSync('**/*', { cwd: currentPackagePath }).forEach((relativePath) => {\n const filepath = path.join(currentPackagePath, relativePath);\n if (fs.lstatSync(filepath).isFile()) {\n moveFileSync(filepath, path.join(newPackagePath, relativePath));\n } else {\n fs.mkdirSync(filepath, { recursive: true });\n }\n });\n\n // Remove the old directory recursively from com/old/package to com/old and com,\n // as long as the directories are empty\n const oldPathParts = currentPackageName.split('.');\n while (oldPathParts.length) {\n const pathToCheck = path.join(packageRoot, ...oldPathParts);\n try {\n const files = fs.readdirSync(pathToCheck);\n if (files.length === 0) {\n fs.rmdirSync(pathToCheck);\n }\n } finally {\n oldPathParts.pop();\n }\n }\n\n const filesToUpdate = [...globSync('**/*', { cwd: newPackagePath, absolute: true })];\n // Only update the BUCK file to match the main package name\n if (type === 'main') {\n // NOTE(EvanBacon): We dropped this file in SDK 48 but other templates may still use it.\n filesToUpdate.push(path.join(projectRoot, 'android', 'app', 'BUCK'));\n }\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile()) {\n let contents = fs.readFileSync(filepath).toString();\n contents = replacePackageName(contents, currentPackageName, packageName);\n if (['.h', '.cpp'].includes(path.extname(filepath))) {\n contents = contents.replace(\n new RegExp(transformJavaClassDescriptor(currentPackageName).replace(/\\//g, '\\\\'), 'g'),\n transformJavaClassDescriptor(packageName)\n );\n }\n fs.writeFileSync(filepath, contents);\n }\n } catch {\n debug(`Error updating \"${filepath}\" for type \"${type}\"`);\n }\n });\n}\n\nfunction moveFileSync(src: string, dest: string) {\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n fs.renameSync(src, dest);\n}\n\nexport function setPackageInBuildGradle(config: Pick<ExpoConfig, 'android'>, buildGradle: string) {\n const packageName = getPackage(config);\n if (packageName === null) {\n return buildGradle;\n }\n\n const pattern = new RegExp(`(applicationId|namespace) ['\"].*['\"]`, 'g');\n return buildGradle.replace(pattern, `$1 '${packageName}'`);\n}\n\nexport async function getApplicationIdAsync(projectRoot: string): Promise<string | null> {\n const buildGradlePath = getAppBuildGradleFilePath(projectRoot);\n if (!fs.existsSync(buildGradlePath)) {\n return null;\n }\n const buildGradle = await fs.promises.readFile(buildGradlePath, 'utf8');\n const matchResult = buildGradle.match(/applicationId ['\"](.*)['\"]/);\n // TODO add fallback for legacy cases to read from AndroidManifest.xml\n return matchResult?.[1] ?? null;\n}\n\n/**\n * Replace the package name with the new package name, in the given source.\n * This has to be limited to avoid accidentally replacing imports when the old package name overlaps.\n */\nfunction replacePackageName(content: string, oldName: string, newName: string) {\n const oldNameEscaped = oldName.replace(/\\./g, '\\\\.');\n\n return (\n content\n // Replace any quoted instances \"com.old\" -> \"com.new\"\n .replace(new RegExp(`\"${oldNameEscaped}\"`, 'g'), `\"${newName}\"`)\n // Replace special non-quoted instances, only when prefixed by package or namespace\n .replace(new RegExp(`(package|namespace)(\\\\s+)${oldNameEscaped}`, 'g'), `$1$2${newName}`)\n // Replace special import instances, without overlapping with other imports (trailing `.` to close it off)\n .replace(new RegExp(`(import\\\\s+)${oldNameEscaped}\\\\.`, 'g'), `$1${newName}.`)\n );\n}\n\n/**\n * Transform a java package name to java class descriptor,\n * e.g. `com.helloworld` -> `Lcom/helloworld`.\n */\nfunction transformJavaClassDescriptor(packageName: string) {\n return `L${packageName.replace(/\\./g, '/')}`;\n}\n"],"mappings":"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"}
|
package/build/android/Paths.js
CHANGED
|
@@ -60,8 +60,8 @@ function _modules() {
|
|
|
60
60
|
};
|
|
61
61
|
return data;
|
|
62
62
|
}
|
|
63
|
-
function _getRequireWildcardCache(
|
|
64
|
-
function _interopRequireWildcard(
|
|
63
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
64
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
65
65
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
66
66
|
function getProjectFilePath(projectRoot, name) {
|
|
67
67
|
const filePath = (0, _glob().sync)(path().join(projectRoot, `android/app/src/main/java/**/${name}.@(java|kt)`))[0];
|
|
@@ -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 { 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
|
+
{"version":3,"file":"Paths.js","names":["_assert","data","_interopRequireDefault","require","_fs","_glob","path","_interopRequireWildcard","_errors","_modules","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","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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"}
|
|
@@ -48,9 +48,8 @@ const withPermissions = (config, permissions) => {
|
|
|
48
48
|
/** Given a permission or list of permissions, block permissions in the final `AndroidManifest.xml` to ensure no installed library or plugin can add them. */
|
|
49
49
|
exports.withPermissions = withPermissions;
|
|
50
50
|
const withBlockedPermissions = (config, permissions) => {
|
|
51
|
-
var _config$android;
|
|
52
51
|
const resolvedPermissions = prefixAndroidPermissionsIfNecessary((Array.isArray(permissions) ? permissions : [permissions]).filter(Boolean));
|
|
53
|
-
if (config
|
|
52
|
+
if (config?.android?.permissions && Array.isArray(config.android.permissions)) {
|
|
54
53
|
// Remove any static config permissions
|
|
55
54
|
config.android.permissions = prefixAndroidPermissionsIfNecessary(config.android.permissions).filter(permission => !resolvedPermissions.includes(permission));
|
|
56
55
|
}
|
|
@@ -62,10 +61,9 @@ const withBlockedPermissions = (config, permissions) => {
|
|
|
62
61
|
};
|
|
63
62
|
exports.withBlockedPermissions = withBlockedPermissions;
|
|
64
63
|
const withInternalBlockedPermissions = config => {
|
|
65
|
-
var _config$android2, _config$android2$bloc;
|
|
66
64
|
// Only add permissions if the user defined the property and added some values
|
|
67
65
|
// this ensures we don't add the `tools:*` namespace extraneously.
|
|
68
|
-
if (
|
|
66
|
+
if (config.android?.blockedPermissions?.length) {
|
|
69
67
|
return withBlockedPermissions(config, config.android.blockedPermissions);
|
|
70
68
|
}
|
|
71
69
|
return config;
|
|
@@ -112,11 +110,9 @@ function prefixAndroidPermissionsIfNecessary(permissions) {
|
|
|
112
110
|
});
|
|
113
111
|
}
|
|
114
112
|
function getAndroidPermissions(config) {
|
|
115
|
-
|
|
116
|
-
return (_config$android$permi = (_config$android3 = config.android) === null || _config$android3 === void 0 ? void 0 : _config$android3.permissions) !== null && _config$android$permi !== void 0 ? _config$android$permi : [];
|
|
113
|
+
return config.android?.permissions ?? [];
|
|
117
114
|
}
|
|
118
115
|
function setAndroidPermissions(config, androidManifest) {
|
|
119
|
-
var _androidManifest$mani;
|
|
120
116
|
const permissions = getAndroidPermissions(config);
|
|
121
117
|
const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);
|
|
122
118
|
const permissionsToAdd = [...providedPermissions];
|
|
@@ -125,7 +121,7 @@ function setAndroidPermissions(config, androidManifest) {
|
|
|
125
121
|
}
|
|
126
122
|
// manifest.manifest['uses-permission'] = [];
|
|
127
123
|
|
|
128
|
-
const manifestPermissions =
|
|
124
|
+
const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];
|
|
129
125
|
permissionsToAdd.forEach(permission => {
|
|
130
126
|
if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {
|
|
131
127
|
addPermissionToManifest(permission, manifestPermissions);
|
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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","resolvedPermissions","prefixAndroidPermissionsIfNecessary","permission","includes","ensureToolsAvailable","addBlockedPermissions","withInternalBlockedPermissions","blockedPermissions","length","androidManifest","manifest","ensureBlockedPermission","manifestPermissions","e","$","push","map","getAndroidPermissions","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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"}
|
|
@@ -57,7 +57,6 @@ const withPrimaryColorStyles = config => {
|
|
|
57
57
|
};
|
|
58
58
|
exports.withPrimaryColorStyles = withPrimaryColorStyles;
|
|
59
59
|
function getPrimaryColor(config) {
|
|
60
|
-
|
|
61
|
-
return (_config$primaryColor = config.primaryColor) !== null && _config$primaryColor !== void 0 ? _config$primaryColor : DEFAULT_PRIMARY_COLOR;
|
|
60
|
+
return config.primaryColor ?? DEFAULT_PRIMARY_COLOR;
|
|
62
61
|
}
|
|
63
62
|
//# sourceMappingURL=PrimaryColor.js.map
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
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","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,EAAC,CAAC;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;EACxE,OAAOA,MAAM,CAACe,YAAY,IAAIjB,qBAAqB;AACrD"}
|