@expo/config-plugins 4.0.16 → 4.1.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/Scheme.d.ts +5 -2
- package/build/android/Scheme.js +26 -15
- package/build/android/Scheme.js.map +1 -1
- package/build/android/Updates.d.ts +5 -7
- package/build/android/Updates.js +29 -57
- package/build/android/Updates.js.map +1 -1
- package/build/ios/Google.d.ts +5 -5
- package/build/ios/Google.js +58 -8
- package/build/ios/Google.js.map +1 -1
- package/build/ios/IosConfig.types.d.ts +2 -0
- package/build/ios/Maps.js +2 -2
- package/build/ios/Maps.js.map +1 -1
- package/build/ios/Paths.d.ts +3 -2
- package/build/ios/Paths.js +4 -1
- package/build/ios/Paths.js.map +1 -1
- package/build/ios/ProvisioningProfile.js +4 -0
- package/build/ios/ProvisioningProfile.js.map +1 -1
- package/build/ios/Scheme.js +12 -4
- package/build/ios/Scheme.js.map +1 -1
- package/build/ios/Updates.d.ts +5 -7
- package/build/ios/Updates.js +29 -57
- package/build/ios/Updates.js.map +1 -1
- package/build/plugins/ios-plugins.d.ts +1 -1
- package/build/plugins/ios-plugins.js.map +1 -1
- package/build/plugins/withAndroidBaseMods.js +0 -3
- package/build/plugins/withAndroidBaseMods.js.map +1 -1
- package/build/utils/Updates.d.ts +8 -1
- package/build/utils/Updates.js +109 -7
- package/build/utils/Updates.js.map +1 -1
- package/build/utils/XML.d.ts +1 -0
- package/build/utils/XML.js +25 -5
- package/build/utils/XML.js.map +1 -1
- package/package.json +2 -2
|
@@ -3,14 +3,17 @@ import { AndroidManifest } from './Manifest';
|
|
|
3
3
|
export declare type IntentFilterProps = {
|
|
4
4
|
actions: string[];
|
|
5
5
|
categories: string[];
|
|
6
|
-
|
|
6
|
+
data: {
|
|
7
|
+
scheme: string;
|
|
8
|
+
host?: string;
|
|
9
|
+
}[];
|
|
7
10
|
};
|
|
8
11
|
export declare const withScheme: import("..").ConfigPlugin<void>;
|
|
9
12
|
export declare function getScheme(config: {
|
|
10
13
|
scheme?: string | string[];
|
|
11
14
|
}): string[];
|
|
12
15
|
export declare function setScheme(config: Pick<ExpoConfig, 'scheme' | 'android'>, androidManifest: AndroidManifest): AndroidManifest;
|
|
13
|
-
export declare function getSchemesFromManifest(androidManifest: AndroidManifest): string[];
|
|
16
|
+
export declare function getSchemesFromManifest(androidManifest: AndroidManifest, requestedHost?: string | null): string[];
|
|
14
17
|
export declare function ensureManifestHasValidIntentFilter(androidManifest: AndroidManifest): boolean;
|
|
15
18
|
export declare function hasScheme(scheme: string, androidManifest: AndroidManifest): boolean;
|
|
16
19
|
export declare function appendScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest;
|
package/build/android/Scheme.js
CHANGED
|
@@ -87,14 +87,13 @@ function setScheme(config, androidManifest) {
|
|
|
87
87
|
|
|
88
88
|
function isValidRedirectIntentFilter({
|
|
89
89
|
actions,
|
|
90
|
-
categories
|
|
91
|
-
schemes
|
|
90
|
+
categories
|
|
92
91
|
}) {
|
|
93
92
|
return actions.includes('android.intent.action.VIEW') && !categories.includes('android.intent.category.LAUNCHER');
|
|
94
93
|
}
|
|
95
94
|
|
|
96
95
|
function propertiesFromIntentFilter(intentFilter) {
|
|
97
|
-
var _intentFilter$action$, _intentFilter$action, _intentFilter$categor, _intentFilter$categor2, _intentFilter$data$
|
|
96
|
+
var _intentFilter$action$, _intentFilter$action, _intentFilter$categor, _intentFilter$categor2, _intentFilter$data$fi, _intentFilter$data, _intentFilter$data$fi2;
|
|
98
97
|
|
|
99
98
|
const actions = (_intentFilter$action$ = intentFilter === null || intentFilter === void 0 ? void 0 : (_intentFilter$action = intentFilter.action) === null || _intentFilter$action === void 0 ? void 0 : _intentFilter$action.map(data => {
|
|
100
99
|
var _data$$;
|
|
@@ -106,15 +105,22 @@ function propertiesFromIntentFilter(intentFilter) {
|
|
|
106
105
|
|
|
107
106
|
return data === null || data === void 0 ? void 0 : (_data$$2 = data.$) === null || _data$$2 === void 0 ? void 0 : _data$$2['android:name'];
|
|
108
107
|
})) !== null && _intentFilter$categor !== void 0 ? _intentFilter$categor : [];
|
|
109
|
-
const
|
|
108
|
+
const data = (_intentFilter$data$fi = intentFilter === null || intentFilter === void 0 ? void 0 : (_intentFilter$data = intentFilter.data) === null || _intentFilter$data === void 0 ? void 0 : (_intentFilter$data$fi2 = _intentFilter$data.filter(data => {
|
|
110
109
|
var _data$$3;
|
|
111
110
|
|
|
112
111
|
return data === null || data === void 0 ? void 0 : (_data$$3 = data.$) === null || _data$$3 === void 0 ? void 0 : _data$$3['android:scheme'];
|
|
113
|
-
}))
|
|
112
|
+
})) === null || _intentFilter$data$fi2 === void 0 ? void 0 : _intentFilter$data$fi2.map(data => {
|
|
113
|
+
var _data$$4, _data$$5;
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
scheme: data === null || data === void 0 ? void 0 : (_data$$4 = data.$) === null || _data$$4 === void 0 ? void 0 : _data$$4['android:scheme'],
|
|
117
|
+
host: data === null || data === void 0 ? void 0 : (_data$$5 = data.$) === null || _data$$5 === void 0 ? void 0 : _data$$5['android:host']
|
|
118
|
+
};
|
|
119
|
+
})) !== null && _intentFilter$data$fi !== void 0 ? _intentFilter$data$fi : [];
|
|
114
120
|
return {
|
|
115
|
-
schemes,
|
|
116
121
|
actions,
|
|
117
|
-
categories
|
|
122
|
+
categories,
|
|
123
|
+
data
|
|
118
124
|
};
|
|
119
125
|
}
|
|
120
126
|
|
|
@@ -143,21 +149,26 @@ function getSingleTaskIntentFilters(androidManifest) {
|
|
|
143
149
|
return outputSchemes;
|
|
144
150
|
}
|
|
145
151
|
|
|
146
|
-
function getSchemesFromManifest(androidManifest) {
|
|
152
|
+
function getSchemesFromManifest(androidManifest, requestedHost = null) {
|
|
147
153
|
const outputSchemes = [];
|
|
148
154
|
const singleTaskIntentFilters = getSingleTaskIntentFilters(androidManifest);
|
|
149
155
|
|
|
150
156
|
for (const intentFilter of singleTaskIntentFilters) {
|
|
151
157
|
const properties = propertiesFromIntentFilter(intentFilter);
|
|
152
158
|
|
|
153
|
-
if (isValidRedirectIntentFilter(properties)) {
|
|
154
|
-
|
|
159
|
+
if (isValidRedirectIntentFilter(properties) && properties.data) {
|
|
160
|
+
for (const {
|
|
161
|
+
scheme,
|
|
162
|
+
host
|
|
163
|
+
} of properties.data) {
|
|
164
|
+
if (requestedHost === null || !host || host === requestedHost) {
|
|
165
|
+
outputSchemes.push(scheme);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
155
168
|
}
|
|
156
169
|
}
|
|
157
170
|
|
|
158
|
-
return outputSchemes
|
|
159
|
-
schemes
|
|
160
|
-
}) => [...prev, ...schemes], []);
|
|
171
|
+
return outputSchemes;
|
|
161
172
|
}
|
|
162
173
|
|
|
163
174
|
function ensureManifestHasValidIntentFilter(androidManifest) {
|
|
@@ -259,11 +270,11 @@ function removeScheme(scheme, androidManifest) {
|
|
|
259
270
|
|
|
260
271
|
if (isValidRedirectIntentFilter(properties)) {
|
|
261
272
|
for (const dataKey in (intentFilter === null || intentFilter === void 0 ? void 0 : intentFilter.data) || []) {
|
|
262
|
-
var _intentFilter$data2, _data$$
|
|
273
|
+
var _intentFilter$data2, _data$$6;
|
|
263
274
|
|
|
264
275
|
const data = (_intentFilter$data2 = intentFilter.data) === null || _intentFilter$data2 === void 0 ? void 0 : _intentFilter$data2[dataKey];
|
|
265
276
|
|
|
266
|
-
if ((data === null || data === void 0 ? void 0 : (_data$$
|
|
277
|
+
if ((data === null || data === void 0 ? void 0 : (_data$$6 = data.$) === null || _data$$6 === void 0 ? void 0 : _data$$6['android:scheme']) === scheme) {
|
|
267
278
|
var _intentFilter$data3;
|
|
268
279
|
|
|
269
280
|
(_intentFilter$data3 = intentFilter.data) === null || _intentFilter$data3 === void 0 ? true : delete _intentFilter$data3[dataKey];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/android/Scheme.ts"],"names":["withScheme","setScheme","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","action","map","data","$","category","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","intentFilters","concat","singleTaskIntentFilters","properties","reduce","prev","hasScheme","removeScheme","dataKey"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { AndroidManifest, ManifestActivity } from './Manifest';\n\nexport type IntentFilterProps = {\n actions: string[];\n categories: string[];\n schemes: string[];\n};\n\nexport const withScheme = createAndroidManifestPlugin(setScheme, 'withScheme');\n\nexport function getScheme(config: { scheme?: string | string[] }): string[] {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => typeof value === 'string';\n\n return config.scheme.filter<string>(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n return [];\n}\n\n// This plugin used to remove the unused schemes but this is unpredictable because other plugins could add schemes.\n// The only way to reliably remove schemes from the project is to nuke the file and regenerate the code (`expo prebuild --clean`).\n// Regardless, having extra schemes isn't a fatal issue and therefore a tolerable compromise is to just add new schemes that aren't currently present.\nexport function setScheme(\n config: Pick<ExpoConfig, 'scheme' | 'android'>,\n androidManifest: AndroidManifest\n) {\n const schemes = [\n ...getScheme(config),\n // @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.\n ...getScheme(config.android ?? {}),\n ];\n // Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.\n if (config.android?.package) {\n schemes.push(config.android.package);\n }\n if (schemes.length === 0) {\n return androidManifest;\n }\n\n if (!ensureManifestHasValidIntentFilter(androidManifest)) {\n addWarningAndroid(\n 'scheme',\n `Cannot add schemes because the provided manifest does not have a valid Activity with \\`android:launchMode=\"singleTask\"\\``,\n 'https://expo.fyi/setup-android-uri-scheme'\n );\n return androidManifest;\n }\n\n // Get the current schemes and remove them from the list of schemes to add.\n const currentSchemes = getSchemesFromManifest(androidManifest);\n for (const uri of currentSchemes) {\n const index = schemes.indexOf(uri);\n if (index > -1) schemes.splice(index, 1);\n }\n\n // Now add all of the remaining schemes.\n for (const uri of schemes) {\n androidManifest = appendScheme(uri, androidManifest);\n }\n\n return androidManifest;\n}\n\nfunction isValidRedirectIntentFilter({ actions, categories, schemes }: IntentFilterProps): boolean {\n return (\n actions.includes('android.intent.action.VIEW') &&\n !categories.includes('android.intent.category.LAUNCHER')\n );\n}\n\nfunction propertiesFromIntentFilter(intentFilter: any): IntentFilterProps {\n const actions = intentFilter?.action?.map((data: any) => data?.$?.['android:name']) ?? [];\n const categories = intentFilter?.category?.map((data: any) => data?.$?.['android:name']) ?? [];\n const schemes = intentFilter?.data?.map((data: any) => data?.$?.['android:scheme']) ?? [];\n return {\n schemes,\n actions,\n categories,\n };\n}\n\nfunction getSingleTaskIntentFilters(androidManifest: AndroidManifest): any[] {\n if (!Array.isArray(androidManifest.manifest.application)) return [];\n\n let outputSchemes: any[] = [];\n for (const application of androidManifest.manifest.application) {\n const { activity } = application;\n // @ts-ignore\n const activities = Array.isArray(activity) ? activity : [activity];\n const singleTaskActivities = (activities as ManifestActivity[]).filter(\n activity => activity?.$?.['android:launchMode'] === 'singleTask'\n );\n for (const activity of singleTaskActivities) {\n const intentFilters = activity['intent-filter'];\n outputSchemes = outputSchemes.concat(intentFilters);\n }\n }\n return outputSchemes;\n}\n\nexport function getSchemesFromManifest(androidManifest: AndroidManifest): string[] {\n const outputSchemes: IntentFilterProps[] = [];\n\n const singleTaskIntentFilters = getSingleTaskIntentFilters(androidManifest);\n for (const intentFilter of singleTaskIntentFilters) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n outputSchemes.push(properties);\n }\n }\n\n return outputSchemes.reduce<string[]>((prev, { schemes }) => [...prev, ...schemes], []);\n}\n\nexport function ensureManifestHasValidIntentFilter(androidManifest: AndroidManifest): boolean {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return false;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n return true;\n }\n }\n if (!activity['intent-filter']) {\n activity['intent-filter'] = [];\n }\n\n activity['intent-filter'].push({\n action: [{ $: { 'android:name': 'android.intent.action.VIEW' } }],\n category: [\n { $: { 'android:name': 'android.intent.category.DEFAULT' } },\n { $: { 'android:name': 'android.intent.category.BROWSABLE' } },\n ],\n });\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasScheme(scheme: string, androidManifest: AndroidManifest): boolean {\n const schemes = getSchemesFromManifest(androidManifest);\n return schemes.includes(scheme);\n}\n\nexport function appendScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n if (!intentFilter.data) intentFilter.data = [];\n intentFilter.data.push({\n $: { 'android:scheme': scheme },\n });\n }\n }\n break;\n }\n }\n }\n return androidManifest;\n}\n\nexport function removeScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n for (const dataKey in intentFilter?.data || []) {\n const data = intentFilter.data?.[dataKey];\n if (data?.$?.['android:scheme'] === scheme) {\n delete intentFilter.data?.[dataKey];\n }\n }\n }\n }\n break;\n }\n }\n }\n\n return androidManifest;\n}\n"],"file":"Scheme.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/android/Scheme.ts"],"names":["withScheme","setScheme","getScheme","config","Array","isArray","scheme","validate","value","filter","androidManifest","schemes","android","package","push","length","ensureManifestHasValidIntentFilter","currentSchemes","getSchemesFromManifest","uri","index","indexOf","splice","appendScheme","isValidRedirectIntentFilter","actions","categories","includes","propertiesFromIntentFilter","intentFilter","action","map","data","$","category","host","getSingleTaskIntentFilters","manifest","application","outputSchemes","activity","activities","singleTaskActivities","intentFilters","concat","requestedHost","singleTaskIntentFilters","properties","hasScheme","removeScheme","dataKey"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { createAndroidManifestPlugin } from '../plugins/android-plugins';\nimport { addWarningAndroid } from '../utils/warnings';\nimport { AndroidManifest, ManifestActivity } from './Manifest';\n\nexport type IntentFilterProps = {\n actions: string[];\n categories: string[];\n data: {\n scheme: string;\n host?: string;\n }[];\n};\n\nexport const withScheme = createAndroidManifestPlugin(setScheme, 'withScheme');\n\nexport function getScheme(config: { scheme?: string | string[] }): string[] {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => typeof value === 'string';\n\n return config.scheme.filter<string>(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n return [];\n}\n\n// This plugin used to remove the unused schemes but this is unpredictable because other plugins could add schemes.\n// The only way to reliably remove schemes from the project is to nuke the file and regenerate the code (`expo prebuild --clean`).\n// Regardless, having extra schemes isn't a fatal issue and therefore a tolerable compromise is to just add new schemes that aren't currently present.\nexport function setScheme(\n config: Pick<ExpoConfig, 'scheme' | 'android'>,\n androidManifest: AndroidManifest\n) {\n const schemes = [\n ...getScheme(config),\n // @ts-ignore: TODO: android.scheme is an unreleased -- harder to add to turtle v1.\n ...getScheme(config.android ?? {}),\n ];\n // Add the package name to the list of schemes for easier Google auth and parity with Turtle v1.\n if (config.android?.package) {\n schemes.push(config.android.package);\n }\n if (schemes.length === 0) {\n return androidManifest;\n }\n\n if (!ensureManifestHasValidIntentFilter(androidManifest)) {\n addWarningAndroid(\n 'scheme',\n `Cannot add schemes because the provided manifest does not have a valid Activity with \\`android:launchMode=\"singleTask\"\\``,\n 'https://expo.fyi/setup-android-uri-scheme'\n );\n return androidManifest;\n }\n\n // Get the current schemes and remove them from the list of schemes to add.\n const currentSchemes = getSchemesFromManifest(androidManifest);\n for (const uri of currentSchemes) {\n const index = schemes.indexOf(uri);\n if (index > -1) schemes.splice(index, 1);\n }\n\n // Now add all of the remaining schemes.\n for (const uri of schemes) {\n androidManifest = appendScheme(uri, androidManifest);\n }\n\n return androidManifest;\n}\n\nfunction isValidRedirectIntentFilter({ actions, categories }: IntentFilterProps): boolean {\n return (\n actions.includes('android.intent.action.VIEW') &&\n !categories.includes('android.intent.category.LAUNCHER')\n );\n}\n\nfunction propertiesFromIntentFilter(intentFilter: any): IntentFilterProps {\n const actions = intentFilter?.action?.map((data: any) => data?.$?.['android:name']) ?? [];\n const categories = intentFilter?.category?.map((data: any) => data?.$?.['android:name']) ?? [];\n const data =\n intentFilter?.data\n ?.filter((data: any) => data?.$?.['android:scheme'])\n ?.map((data: any) => ({\n scheme: data?.$?.['android:scheme'],\n host: data?.$?.['android:host'],\n })) ?? [];\n return {\n actions,\n categories,\n data,\n };\n}\n\nfunction getSingleTaskIntentFilters(androidManifest: AndroidManifest): any[] {\n if (!Array.isArray(androidManifest.manifest.application)) return [];\n\n let outputSchemes: any[] = [];\n for (const application of androidManifest.manifest.application) {\n const { activity } = application;\n // @ts-ignore\n const activities = Array.isArray(activity) ? activity : [activity];\n const singleTaskActivities = (activities as ManifestActivity[]).filter(\n activity => activity?.$?.['android:launchMode'] === 'singleTask'\n );\n for (const activity of singleTaskActivities) {\n const intentFilters = activity['intent-filter'];\n outputSchemes = outputSchemes.concat(intentFilters);\n }\n }\n return outputSchemes;\n}\n\nexport function getSchemesFromManifest(\n androidManifest: AndroidManifest,\n requestedHost: string | null = null\n): string[] {\n const outputSchemes: string[] = [];\n\n const singleTaskIntentFilters = getSingleTaskIntentFilters(androidManifest);\n for (const intentFilter of singleTaskIntentFilters) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties) && properties.data) {\n for (const { scheme, host } of properties.data) {\n if (requestedHost === null || !host || host === requestedHost) {\n outputSchemes.push(scheme);\n }\n }\n }\n }\n\n return outputSchemes;\n}\n\nexport function ensureManifestHasValidIntentFilter(androidManifest: AndroidManifest): boolean {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return false;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n return true;\n }\n }\n if (!activity['intent-filter']) {\n activity['intent-filter'] = [];\n }\n\n activity['intent-filter'].push({\n action: [{ $: { 'android:name': 'android.intent.action.VIEW' } }],\n category: [\n { $: { 'android:name': 'android.intent.category.DEFAULT' } },\n { $: { 'android:name': 'android.intent.category.BROWSABLE' } },\n ],\n });\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasScheme(scheme: string, androidManifest: AndroidManifest): boolean {\n const schemes = getSchemesFromManifest(androidManifest);\n return schemes.includes(scheme);\n}\n\nexport function appendScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n if (!intentFilter.data) intentFilter.data = [];\n intentFilter.data.push({\n $: { 'android:scheme': scheme },\n });\n }\n }\n break;\n }\n }\n }\n return androidManifest;\n}\n\nexport function removeScheme(scheme: string, androidManifest: AndroidManifest): AndroidManifest {\n if (!Array.isArray(androidManifest.manifest.application)) {\n return androidManifest;\n }\n\n for (const application of androidManifest.manifest.application) {\n for (const activity of application.activity || []) {\n if (activity?.$?.['android:launchMode'] === 'singleTask') {\n for (const intentFilter of activity['intent-filter'] || []) {\n // Parse valid intent filters...\n const properties = propertiesFromIntentFilter(intentFilter);\n if (isValidRedirectIntentFilter(properties)) {\n for (const dataKey in intentFilter?.data || []) {\n const data = intentFilter.data?.[dataKey];\n if (data?.$?.['android:scheme'] === scheme) {\n delete intentFilter.data?.[dataKey];\n }\n }\n }\n }\n break;\n }\n }\n }\n\n return androidManifest;\n}\n"],"file":"Scheme.js"}
|
|
@@ -9,20 +9,18 @@ export declare enum Config {
|
|
|
9
9
|
RUNTIME_VERSION = "expo.modules.updates.EXPO_RUNTIME_VERSION",
|
|
10
10
|
UPDATE_URL = "expo.modules.updates.EXPO_UPDATE_URL",
|
|
11
11
|
RELEASE_CHANNEL = "expo.modules.updates.EXPO_RELEASE_CHANNEL",
|
|
12
|
-
UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = "expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY"
|
|
12
|
+
UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = "expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY",
|
|
13
|
+
CODE_SIGNING_CERTIFICATE = "expo.modules.updates.CODE_SIGNING_CERTIFICATE",
|
|
14
|
+
CODE_SIGNING_METADATA = "expo.modules.updates.CODE_SIGNING_METADATA"
|
|
13
15
|
}
|
|
14
16
|
export declare const withUpdates: ConfigPlugin<{
|
|
15
17
|
expoUsername: string | null;
|
|
16
18
|
}>;
|
|
17
|
-
export declare function
|
|
18
|
-
export declare function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean;
|
|
19
|
-
export declare function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number;
|
|
20
|
-
export declare function getUpdatesCheckOnLaunch(config: Pick<ExpoConfigUpdates, 'updates'>, expoUpdatesPackageVersion?: string | null): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS';
|
|
21
|
-
export declare function setUpdatesConfig(config: ExpoConfigUpdates, androidManifest: AndroidManifest, username: string | null, expoUpdatesPackageVersion?: string | null): AndroidManifest;
|
|
19
|
+
export declare function setUpdatesConfig(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest, username: string | null, expoUpdatesPackageVersion?: string | null): AndroidManifest;
|
|
22
20
|
export declare function setVersionsConfig(config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>, androidManifest: AndroidManifest): AndroidManifest;
|
|
23
21
|
export declare function ensureBuildGradleContainsConfigurationScript(projectRoot: string, buildGradleContents: string): string;
|
|
24
22
|
export declare function formatApplyLineForBuildGradle(projectRoot: string): string;
|
|
25
23
|
export declare function isBuildGradleConfigured(projectRoot: string, buildGradleContents: string): boolean;
|
|
26
24
|
export declare function isMainApplicationMetaDataSet(androidManifest: AndroidManifest): boolean;
|
|
27
|
-
export declare function isMainApplicationMetaDataSynced(config: ExpoConfigUpdates, androidManifest: AndroidManifest, username: string | null): boolean;
|
|
25
|
+
export declare function isMainApplicationMetaDataSynced(projectRoot: string, config: ExpoConfigUpdates, androidManifest: AndroidManifest, username: string | null): boolean;
|
|
28
26
|
export declare function areVersionsSynced(config: Pick<ExpoConfigUpdates, 'runtimeVersion' | 'sdkVersion'>, androidManifest: AndroidManifest): boolean;
|
package/build/android/Updates.js
CHANGED
|
@@ -7,10 +7,6 @@ exports.Config = void 0;
|
|
|
7
7
|
exports.areVersionsSynced = areVersionsSynced;
|
|
8
8
|
exports.ensureBuildGradleContainsConfigurationScript = ensureBuildGradleContainsConfigurationScript;
|
|
9
9
|
exports.formatApplyLineForBuildGradle = formatApplyLineForBuildGradle;
|
|
10
|
-
exports.getSDKVersion = getSDKVersion;
|
|
11
|
-
exports.getUpdatesCheckOnLaunch = getUpdatesCheckOnLaunch;
|
|
12
|
-
exports.getUpdatesEnabled = getUpdatesEnabled;
|
|
13
|
-
exports.getUpdatesTimeout = getUpdatesTimeout;
|
|
14
10
|
exports.isBuildGradleConfigured = isBuildGradleConfigured;
|
|
15
11
|
exports.isMainApplicationMetaDataSet = isMainApplicationMetaDataSet;
|
|
16
12
|
exports.isMainApplicationMetaDataSynced = isMainApplicationMetaDataSynced;
|
|
@@ -38,16 +34,6 @@ function _resolveFrom() {
|
|
|
38
34
|
return data;
|
|
39
35
|
}
|
|
40
36
|
|
|
41
|
-
function _semver() {
|
|
42
|
-
const data = _interopRequireDefault(require("semver"));
|
|
43
|
-
|
|
44
|
-
_semver = function () {
|
|
45
|
-
return data;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
return data;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
37
|
function _androidPlugins() {
|
|
52
38
|
const data = require("../plugins/android-plugins");
|
|
53
39
|
|
|
@@ -93,58 +79,28 @@ exports.Config = Config;
|
|
|
93
79
|
Config["UPDATE_URL"] = "expo.modules.updates.EXPO_UPDATE_URL";
|
|
94
80
|
Config["RELEASE_CHANNEL"] = "expo.modules.updates.EXPO_RELEASE_CHANNEL";
|
|
95
81
|
Config["UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY"] = "expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY";
|
|
82
|
+
Config["CODE_SIGNING_CERTIFICATE"] = "expo.modules.updates.CODE_SIGNING_CERTIFICATE";
|
|
83
|
+
Config["CODE_SIGNING_METADATA"] = "expo.modules.updates.CODE_SIGNING_METADATA";
|
|
96
84
|
})(Config || (exports.Config = Config = {}));
|
|
97
85
|
|
|
98
86
|
const withUpdates = (config, {
|
|
99
87
|
expoUsername
|
|
100
88
|
}) => {
|
|
101
89
|
return (0, _androidPlugins().withAndroidManifest)(config, config => {
|
|
102
|
-
const
|
|
103
|
-
|
|
90
|
+
const projectRoot = config.modRequest.projectRoot;
|
|
91
|
+
const expoUpdatesPackageVersion = (0, _Updates().getExpoUpdatesPackageVersion)(projectRoot);
|
|
92
|
+
config.modResults = setUpdatesConfig(projectRoot, config, config.modResults, expoUsername, expoUpdatesPackageVersion);
|
|
104
93
|
return config;
|
|
105
94
|
});
|
|
106
95
|
};
|
|
107
96
|
|
|
108
97
|
exports.withUpdates = withUpdates;
|
|
109
98
|
|
|
110
|
-
function
|
|
111
|
-
return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function getUpdatesEnabled(config) {
|
|
115
|
-
var _config$updates;
|
|
116
|
-
|
|
117
|
-
return ((_config$updates = config.updates) === null || _config$updates === void 0 ? void 0 : _config$updates.enabled) !== false;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function getUpdatesTimeout(config) {
|
|
121
|
-
var _config$updates$fallb, _config$updates2;
|
|
122
|
-
|
|
123
|
-
return (_config$updates$fallb = (_config$updates2 = config.updates) === null || _config$updates2 === void 0 ? void 0 : _config$updates2.fallbackToCacheTimeout) !== null && _config$updates$fallb !== void 0 ? _config$updates$fallb : 0;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion) {
|
|
127
|
-
var _config$updates3, _config$updates4;
|
|
128
|
-
|
|
129
|
-
if (((_config$updates3 = config.updates) === null || _config$updates3 === void 0 ? void 0 : _config$updates3.checkAutomatically) === 'ON_ERROR_RECOVERY') {
|
|
130
|
-
// native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x
|
|
131
|
-
if (expoUpdatesPackageVersion && _semver().default.gte(expoUpdatesPackageVersion, '0.11.0')) {
|
|
132
|
-
return 'ERROR_RECOVERY_ONLY';
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return 'NEVER';
|
|
136
|
-
} else if (((_config$updates4 = config.updates) === null || _config$updates4 === void 0 ? void 0 : _config$updates4.checkAutomatically) === 'ON_LOAD') {
|
|
137
|
-
return 'ALWAYS';
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return 'ALWAYS';
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function setUpdatesConfig(config, androidManifest, username, expoUpdatesPackageVersion) {
|
|
99
|
+
function setUpdatesConfig(projectRoot, config, androidManifest, username, expoUpdatesPackageVersion) {
|
|
144
100
|
const mainApplication = (0, _Manifest().getMainApplicationOrThrow)(androidManifest);
|
|
145
|
-
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.ENABLED, String(getUpdatesEnabled(config)));
|
|
146
|
-
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CHECK_ON_LAUNCH, getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion));
|
|
147
|
-
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.LAUNCH_WAIT_MS, String(getUpdatesTimeout(config)));
|
|
101
|
+
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.ENABLED, String((0, _Updates().getUpdatesEnabled)(config)));
|
|
102
|
+
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CHECK_ON_LAUNCH, (0, _Updates().getUpdatesCheckOnLaunch)(config, expoUpdatesPackageVersion));
|
|
103
|
+
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.LAUNCH_WAIT_MS, String((0, _Updates().getUpdatesTimeout)(config)));
|
|
148
104
|
const updateUrl = (0, _Updates().getUpdateUrl)(config, username);
|
|
149
105
|
|
|
150
106
|
if (updateUrl) {
|
|
@@ -153,6 +109,22 @@ function setUpdatesConfig(config, androidManifest, username, expoUpdatesPackageV
|
|
|
153
109
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.UPDATE_URL);
|
|
154
110
|
}
|
|
155
111
|
|
|
112
|
+
const codeSigningCertificate = (0, _Updates().getUpdatesCodeSigningCertificate)(projectRoot, config);
|
|
113
|
+
|
|
114
|
+
if (codeSigningCertificate) {
|
|
115
|
+
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CODE_SIGNING_CERTIFICATE, codeSigningCertificate);
|
|
116
|
+
} else {
|
|
117
|
+
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.CODE_SIGNING_CERTIFICATE);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const codeSigningMetadata = (0, _Updates().getUpdatesCodeSigningMetadataStringified)(config);
|
|
121
|
+
|
|
122
|
+
if (codeSigningMetadata) {
|
|
123
|
+
(0, _Manifest().addMetaDataItemToMainApplication)(mainApplication, Config.CODE_SIGNING_METADATA, codeSigningMetadata);
|
|
124
|
+
} else {
|
|
125
|
+
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.CODE_SIGNING_METADATA);
|
|
126
|
+
}
|
|
127
|
+
|
|
156
128
|
return setVersionsConfig(config, androidManifest);
|
|
157
129
|
}
|
|
158
130
|
|
|
@@ -164,7 +136,7 @@ function setVersionsConfig(config, androidManifest) {
|
|
|
164
136
|
throw new Error('A runtime version is set in your AndroidManifest.xml, but is missing from your app.json/app.config.js. Please either set runtimeVersion in your app.json/app.config.js or remove expo.modules.updates.EXPO_RUNTIME_VERSION from your AndroidManifest.xml.');
|
|
165
137
|
}
|
|
166
138
|
|
|
167
|
-
const sdkVersion = getSDKVersion(config);
|
|
139
|
+
const sdkVersion = (0, _Updates().getSDKVersion)(config);
|
|
168
140
|
|
|
169
141
|
if (runtimeVersion) {
|
|
170
142
|
(0, _Manifest().removeMetaDataItemFromMainApplication)(mainApplication, Config.SDK_VERSION);
|
|
@@ -228,13 +200,13 @@ function isMainApplicationMetaDataSet(androidManifest) {
|
|
|
228
200
|
return Boolean(updateUrl && (sdkVersion || runtimeVersion));
|
|
229
201
|
}
|
|
230
202
|
|
|
231
|
-
function isMainApplicationMetaDataSynced(config, androidManifest, username) {
|
|
232
|
-
return (0, _Updates().getUpdateUrl)(config, username) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.UPDATE_URL) && String(getUpdatesEnabled(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.ENABLED) && String(getUpdatesTimeout(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.LAUNCH_WAIT_MS) && getUpdatesCheckOnLaunch(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CHECK_ON_LAUNCH) && areVersionsSynced(config, androidManifest);
|
|
203
|
+
function isMainApplicationMetaDataSynced(projectRoot, config, androidManifest, username) {
|
|
204
|
+
return (0, _Updates().getUpdateUrl)(config, username) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.UPDATE_URL) && String((0, _Updates().getUpdatesEnabled)(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.ENABLED) && String((0, _Updates().getUpdatesTimeout)(config)) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.LAUNCH_WAIT_MS) && (0, _Updates().getUpdatesCheckOnLaunch)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CHECK_ON_LAUNCH) && (0, _Updates().getUpdatesCodeSigningCertificate)(projectRoot, config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CODE_SIGNING_CERTIFICATE) && (0, _Updates().getUpdatesCodeSigningMetadataStringified)(config) === (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.CODE_SIGNING_METADATA) && areVersionsSynced(config, androidManifest);
|
|
233
205
|
}
|
|
234
206
|
|
|
235
207
|
function areVersionsSynced(config, androidManifest) {
|
|
236
208
|
const expectedRuntimeVersion = (0, _Updates().getRuntimeVersionNullable)(config, 'android');
|
|
237
|
-
const expectedSdkVersion = getSDKVersion(config);
|
|
209
|
+
const expectedSdkVersion = (0, _Updates().getSDKVersion)(config);
|
|
238
210
|
const currentRuntimeVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.RUNTIME_VERSION);
|
|
239
211
|
const currentSdkVersion = (0, _Manifest().getMainApplicationMetaDataValue)(androidManifest, Config.SDK_VERSION);
|
|
240
212
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/android/Updates.ts"],"names":["CREATE_MANIFEST_ANDROID_PATH","Config","withUpdates","config","expoUsername","expoUpdatesPackageVersion","modRequest","projectRoot","modResults","setUpdatesConfig","getSDKVersion","sdkVersion","getUpdatesEnabled","updates","enabled","getUpdatesTimeout","fallbackToCacheTimeout","getUpdatesCheckOnLaunch","checkAutomatically","semver","gte","androidManifest","username","mainApplication","ENABLED","String","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","setVersionsConfig","runtimeVersion","RUNTIME_VERSION","Error","SDK_VERSION","ensureBuildGradleContainsConfigurationScript","buildGradleContents","isBuildGradleConfigured","cleanedUpBuildGradleContents","isBuildGradleMisconfigured","split","some","line","includes","replace","RegExp","gradleScriptApply","formatApplyLineForBuildGradle","updatesGradleScriptPath","resolveFrom","silent","relativePath","path","relative","join","posixPath","process","platform","androidBuildScript","isMainApplicationMetaDataSet","Boolean","isMainApplicationMetaDataSynced","areVersionsSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getUpdateUrl,\n} from '../utils/Updates';\nimport {\n addMetaDataItemToMainApplication,\n AndroidManifest,\n findMetaDataItem,\n getMainApplicationMetaDataValue,\n getMainApplicationOrThrow,\n removeMetaDataItemFromMainApplication,\n} from './Manifest';\n\nconst CREATE_MANIFEST_ANDROID_PATH = 'expo-updates/scripts/create-manifest-android.gradle';\n\nexport enum Config {\n ENABLED = 'expo.modules.updates.ENABLED',\n CHECK_ON_LAUNCH = 'expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH',\n LAUNCH_WAIT_MS = 'expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS',\n SDK_VERSION = 'expo.modules.updates.EXPO_SDK_VERSION',\n RUNTIME_VERSION = 'expo.modules.updates.EXPO_RUNTIME_VERSION',\n UPDATE_URL = 'expo.modules.updates.EXPO_UPDATE_URL',\n RELEASE_CHANNEL = 'expo.modules.updates.EXPO_RELEASE_CHANNEL',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY',\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withAndroidManifest(config, config => {\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(config.modRequest.projectRoot);\n config.modResults = setUpdatesConfig(\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function getSDKVersion(config: Pick<ExpoConfigUpdates, 'sdkVersion'>): string | null {\n return typeof config.sdkVersion === 'string' ? config.sdkVersion : null;\n}\n\nexport function getUpdatesEnabled(config: Pick<ExpoConfigUpdates, 'updates'>): boolean {\n return config.updates?.enabled !== false;\n}\n\nexport function getUpdatesTimeout(config: Pick<ExpoConfigUpdates, 'updates'>): number {\n return config.updates?.fallbackToCacheTimeout ?? 0;\n}\n\nexport function getUpdatesCheckOnLaunch(\n config: Pick<ExpoConfigUpdates, 'updates'>,\n expoUpdatesPackageVersion?: string | null\n): 'NEVER' | 'ERROR_RECOVERY_ONLY' | 'ALWAYS' {\n if (config.updates?.checkAutomatically === 'ON_ERROR_RECOVERY') {\n // native 'ERROR_RECOVERY_ONLY' option was only introduced in 0.11.x\n if (expoUpdatesPackageVersion && semver.gte(expoUpdatesPackageVersion, '0.11.0')) {\n return 'ERROR_RECOVERY_ONLY';\n }\n return 'NEVER';\n } else if (config.updates?.checkAutomatically === 'ON_LOAD') {\n return 'ALWAYS';\n }\n return 'ALWAYS';\n}\n\nexport function setUpdatesConfig(\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null,\n expoUpdatesPackageVersion?: string | null\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.ENABLED,\n String(getUpdatesEnabled(config))\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.CHECK_ON_LAUNCH,\n getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion)\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.LAUNCH_WAIT_MS,\n String(getUpdatesTimeout(config))\n );\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n addMetaDataItemToMainApplication(mainApplication, Config.UPDATE_URL, updateUrl);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.UPDATE_URL);\n }\n\n return setVersionsConfig(config, androidManifest);\n}\n\nexport function setVersionsConfig(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n androidManifest: AndroidManifest\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n const runtimeVersion = getRuntimeVersionNullable(config, 'android');\n if (!runtimeVersion && findMetaDataItem(mainApplication, Config.RUNTIME_VERSION) > -1) {\n throw new Error(\n 'A runtime version is set in your AndroidManifest.xml, but is missing from your app.json/app.config.js. Please either set runtimeVersion in your app.json/app.config.js or remove expo.modules.updates.EXPO_RUNTIME_VERSION from your AndroidManifest.xml.'\n );\n }\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.RUNTIME_VERSION, runtimeVersion);\n } else if (sdkVersion) {\n /**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.SDK_VERSION, sdkVersion);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n }\n\n return androidManifest;\n}\nexport function ensureBuildGradleContainsConfigurationScript(\n projectRoot: string,\n buildGradleContents: string\n): string {\n if (!isBuildGradleConfigured(projectRoot, buildGradleContents)) {\n let cleanedUpBuildGradleContents;\n\n const isBuildGradleMisconfigured = buildGradleContents\n .split('\\n')\n .some(line => line.includes(CREATE_MANIFEST_ANDROID_PATH));\n if (isBuildGradleMisconfigured) {\n cleanedUpBuildGradleContents = buildGradleContents.replace(\n new RegExp(`(\\n// Integration with Expo updates)?\\n.*${CREATE_MANIFEST_ANDROID_PATH}.*\\n`),\n ''\n );\n } else {\n cleanedUpBuildGradleContents = buildGradleContents;\n }\n\n const gradleScriptApply = formatApplyLineForBuildGradle(projectRoot);\n return `${cleanedUpBuildGradleContents}\\n// Integration with Expo updates\\n${gradleScriptApply}\\n`;\n } else {\n return buildGradleContents;\n }\n}\n\nexport function formatApplyLineForBuildGradle(projectRoot: string): string {\n const updatesGradleScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_ANDROID_PATH);\n\n if (!updatesGradleScriptPath) {\n throw new Error(\n \"Could not find the build script for Android. This could happen in case of outdated 'node_modules'. Run 'npm install' to make sure that it's up-to-date.\"\n );\n }\n\n const relativePath = path.relative(\n path.join(projectRoot, 'android', 'app'),\n updatesGradleScriptPath\n );\n const posixPath = process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n\n return `apply from: \"${posixPath}\"`;\n}\n\nexport function isBuildGradleConfigured(projectRoot: string, buildGradleContents: string): boolean {\n const androidBuildScript = formatApplyLineForBuildGradle(projectRoot);\n\n return (\n buildGradleContents\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n // Check for both single and double quotes\n .some(line => line === androidBuildScript || line === androidBuildScript.replace(/\"/g, \"'\"))\n );\n}\n\nexport function isMainApplicationMetaDataSet(androidManifest: AndroidManifest): boolean {\n const updateUrl = getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL);\n const runtimeVersion = getMainApplicationMetaDataValue(androidManifest, Config.RUNTIME_VERSION);\n const sdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n return Boolean(updateUrl && (sdkVersion || runtimeVersion));\n}\n\nexport function isMainApplicationMetaDataSynced(\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) ===\n getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL) &&\n String(getUpdatesEnabled(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.ENABLED) &&\n String(getUpdatesTimeout(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.LAUNCH_WAIT_MS) &&\n getUpdatesCheckOnLaunch(config) ===\n getMainApplicationMetaDataValue(androidManifest, Config.CHECK_ON_LAUNCH) &&\n areVersionsSynced(config, androidManifest)\n );\n}\n\nexport function areVersionsSynced(\n config: Pick<ExpoConfigUpdates, 'runtimeVersion' | 'sdkVersion'>,\n androidManifest: AndroidManifest\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config, 'android');\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = getMainApplicationMetaDataValue(\n androidManifest,\n Config.RUNTIME_VERSION\n );\n const currentSdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/android/Updates.ts"],"names":["CREATE_MANIFEST_ANDROID_PATH","Config","withUpdates","config","expoUsername","projectRoot","modRequest","expoUpdatesPackageVersion","modResults","setUpdatesConfig","androidManifest","username","mainApplication","ENABLED","String","CHECK_ON_LAUNCH","LAUNCH_WAIT_MS","updateUrl","UPDATE_URL","codeSigningCertificate","CODE_SIGNING_CERTIFICATE","codeSigningMetadata","CODE_SIGNING_METADATA","setVersionsConfig","runtimeVersion","RUNTIME_VERSION","Error","sdkVersion","SDK_VERSION","ensureBuildGradleContainsConfigurationScript","buildGradleContents","isBuildGradleConfigured","cleanedUpBuildGradleContents","isBuildGradleMisconfigured","split","some","line","includes","replace","RegExp","gradleScriptApply","formatApplyLineForBuildGradle","updatesGradleScriptPath","resolveFrom","silent","relativePath","path","relative","join","posixPath","process","platform","androidBuildScript","isMainApplicationMetaDataSet","Boolean","isMainApplicationMetaDataSynced","areVersionsSynced","expectedRuntimeVersion","expectedSdkVersion","currentRuntimeVersion","currentSdkVersion"],"mappings":"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","sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport {\n ExpoConfigUpdates,\n getExpoUpdatesPackageVersion,\n getRuntimeVersionNullable,\n getSDKVersion,\n getUpdatesCheckOnLaunch,\n getUpdatesCodeSigningCertificate,\n getUpdatesCodeSigningMetadataStringified,\n getUpdatesEnabled,\n getUpdatesTimeout,\n getUpdateUrl,\n} from '../utils/Updates';\nimport {\n addMetaDataItemToMainApplication,\n AndroidManifest,\n findMetaDataItem,\n getMainApplicationMetaDataValue,\n getMainApplicationOrThrow,\n removeMetaDataItemFromMainApplication,\n} from './Manifest';\n\nconst CREATE_MANIFEST_ANDROID_PATH = 'expo-updates/scripts/create-manifest-android.gradle';\n\nexport enum Config {\n ENABLED = 'expo.modules.updates.ENABLED',\n CHECK_ON_LAUNCH = 'expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH',\n LAUNCH_WAIT_MS = 'expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS',\n SDK_VERSION = 'expo.modules.updates.EXPO_SDK_VERSION',\n RUNTIME_VERSION = 'expo.modules.updates.EXPO_RUNTIME_VERSION',\n UPDATE_URL = 'expo.modules.updates.EXPO_UPDATE_URL',\n RELEASE_CHANNEL = 'expo.modules.updates.EXPO_RELEASE_CHANNEL',\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY',\n CODE_SIGNING_CERTIFICATE = 'expo.modules.updates.CODE_SIGNING_CERTIFICATE',\n CODE_SIGNING_METADATA = 'expo.modules.updates.CODE_SIGNING_METADATA',\n}\n\nexport const withUpdates: ConfigPlugin<{ expoUsername: string | null }> = (\n config,\n { expoUsername }\n) => {\n return withAndroidManifest(config, config => {\n const projectRoot = config.modRequest.projectRoot;\n const expoUpdatesPackageVersion = getExpoUpdatesPackageVersion(projectRoot);\n config.modResults = setUpdatesConfig(\n projectRoot,\n config,\n config.modResults,\n expoUsername,\n expoUpdatesPackageVersion\n );\n return config;\n });\n};\n\nexport function setUpdatesConfig(\n projectRoot: string,\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null,\n expoUpdatesPackageVersion?: string | null\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.ENABLED,\n String(getUpdatesEnabled(config))\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.CHECK_ON_LAUNCH,\n getUpdatesCheckOnLaunch(config, expoUpdatesPackageVersion)\n );\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.LAUNCH_WAIT_MS,\n String(getUpdatesTimeout(config))\n );\n\n const updateUrl = getUpdateUrl(config, username);\n if (updateUrl) {\n addMetaDataItemToMainApplication(mainApplication, Config.UPDATE_URL, updateUrl);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.UPDATE_URL);\n }\n\n const codeSigningCertificate = getUpdatesCodeSigningCertificate(projectRoot, config);\n if (codeSigningCertificate) {\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.CODE_SIGNING_CERTIFICATE,\n codeSigningCertificate\n );\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.CODE_SIGNING_CERTIFICATE);\n }\n\n const codeSigningMetadata = getUpdatesCodeSigningMetadataStringified(config);\n if (codeSigningMetadata) {\n addMetaDataItemToMainApplication(\n mainApplication,\n Config.CODE_SIGNING_METADATA,\n codeSigningMetadata\n );\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.CODE_SIGNING_METADATA);\n }\n\n return setVersionsConfig(config, androidManifest);\n}\n\nexport function setVersionsConfig(\n config: Pick<ExpoConfigUpdates, 'sdkVersion' | 'runtimeVersion'>,\n androidManifest: AndroidManifest\n): AndroidManifest {\n const mainApplication = getMainApplicationOrThrow(androidManifest);\n\n const runtimeVersion = getRuntimeVersionNullable(config, 'android');\n if (!runtimeVersion && findMetaDataItem(mainApplication, Config.RUNTIME_VERSION) > -1) {\n throw new Error(\n 'A runtime version is set in your AndroidManifest.xml, but is missing from your app.json/app.config.js. Please either set runtimeVersion in your app.json/app.config.js or remove expo.modules.updates.EXPO_RUNTIME_VERSION from your AndroidManifest.xml.'\n );\n }\n const sdkVersion = getSDKVersion(config);\n if (runtimeVersion) {\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.RUNTIME_VERSION, runtimeVersion);\n } else if (sdkVersion) {\n /**\n * runtime version maybe null in projects using classic updates. In that\n * case we use SDK version\n */\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n addMetaDataItemToMainApplication(mainApplication, Config.SDK_VERSION, sdkVersion);\n } else {\n removeMetaDataItemFromMainApplication(mainApplication, Config.RUNTIME_VERSION);\n removeMetaDataItemFromMainApplication(mainApplication, Config.SDK_VERSION);\n }\n\n return androidManifest;\n}\nexport function ensureBuildGradleContainsConfigurationScript(\n projectRoot: string,\n buildGradleContents: string\n): string {\n if (!isBuildGradleConfigured(projectRoot, buildGradleContents)) {\n let cleanedUpBuildGradleContents;\n\n const isBuildGradleMisconfigured = buildGradleContents\n .split('\\n')\n .some(line => line.includes(CREATE_MANIFEST_ANDROID_PATH));\n if (isBuildGradleMisconfigured) {\n cleanedUpBuildGradleContents = buildGradleContents.replace(\n new RegExp(`(\\n// Integration with Expo updates)?\\n.*${CREATE_MANIFEST_ANDROID_PATH}.*\\n`),\n ''\n );\n } else {\n cleanedUpBuildGradleContents = buildGradleContents;\n }\n\n const gradleScriptApply = formatApplyLineForBuildGradle(projectRoot);\n return `${cleanedUpBuildGradleContents}\\n// Integration with Expo updates\\n${gradleScriptApply}\\n`;\n } else {\n return buildGradleContents;\n }\n}\n\nexport function formatApplyLineForBuildGradle(projectRoot: string): string {\n const updatesGradleScriptPath = resolveFrom.silent(projectRoot, CREATE_MANIFEST_ANDROID_PATH);\n\n if (!updatesGradleScriptPath) {\n throw new Error(\n \"Could not find the build script for Android. This could happen in case of outdated 'node_modules'. Run 'npm install' to make sure that it's up-to-date.\"\n );\n }\n\n const relativePath = path.relative(\n path.join(projectRoot, 'android', 'app'),\n updatesGradleScriptPath\n );\n const posixPath = process.platform === 'win32' ? relativePath.replace(/\\\\/g, '/') : relativePath;\n\n return `apply from: \"${posixPath}\"`;\n}\n\nexport function isBuildGradleConfigured(projectRoot: string, buildGradleContents: string): boolean {\n const androidBuildScript = formatApplyLineForBuildGradle(projectRoot);\n\n return (\n buildGradleContents\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n // Check for both single and double quotes\n .some(line => line === androidBuildScript || line === androidBuildScript.replace(/\"/g, \"'\"))\n );\n}\n\nexport function isMainApplicationMetaDataSet(androidManifest: AndroidManifest): boolean {\n const updateUrl = getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL);\n const runtimeVersion = getMainApplicationMetaDataValue(androidManifest, Config.RUNTIME_VERSION);\n const sdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n return Boolean(updateUrl && (sdkVersion || runtimeVersion));\n}\n\nexport function isMainApplicationMetaDataSynced(\n projectRoot: string,\n config: ExpoConfigUpdates,\n androidManifest: AndroidManifest,\n username: string | null\n): boolean {\n return (\n getUpdateUrl(config, username) ===\n getMainApplicationMetaDataValue(androidManifest, Config.UPDATE_URL) &&\n String(getUpdatesEnabled(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.ENABLED) &&\n String(getUpdatesTimeout(config)) ===\n getMainApplicationMetaDataValue(androidManifest, Config.LAUNCH_WAIT_MS) &&\n getUpdatesCheckOnLaunch(config) ===\n getMainApplicationMetaDataValue(androidManifest, Config.CHECK_ON_LAUNCH) &&\n getUpdatesCodeSigningCertificate(projectRoot, config) ===\n getMainApplicationMetaDataValue(androidManifest, Config.CODE_SIGNING_CERTIFICATE) &&\n getUpdatesCodeSigningMetadataStringified(config) ===\n getMainApplicationMetaDataValue(androidManifest, Config.CODE_SIGNING_METADATA) &&\n areVersionsSynced(config, androidManifest)\n );\n}\n\nexport function areVersionsSynced(\n config: Pick<ExpoConfigUpdates, 'runtimeVersion' | 'sdkVersion'>,\n androidManifest: AndroidManifest\n): boolean {\n const expectedRuntimeVersion = getRuntimeVersionNullable(config, 'android');\n const expectedSdkVersion = getSDKVersion(config);\n\n const currentRuntimeVersion = getMainApplicationMetaDataValue(\n androidManifest,\n Config.RUNTIME_VERSION\n );\n const currentSdkVersion = getMainApplicationMetaDataValue(androidManifest, Config.SDK_VERSION);\n\n if (expectedRuntimeVersion !== null) {\n return currentRuntimeVersion === expectedRuntimeVersion && currentSdkVersion === null;\n } else if (expectedSdkVersion !== null) {\n return currentSdkVersion === expectedSdkVersion && currentRuntimeVersion === null;\n } else {\n return true;\n }\n}\n"],"file":"Updates.js"}
|
package/build/ios/Google.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ExpoConfig } from '@expo/config-types';
|
|
2
2
|
import { XcodeProject } from 'xcode';
|
|
3
|
-
import { ConfigPlugin } from '../Plugin.types';
|
|
3
|
+
import { ConfigPlugin, ModProps } from '../Plugin.types';
|
|
4
4
|
import { InfoPlist } from './IosConfig.types';
|
|
5
|
-
export declare const withGoogle: ConfigPlugin
|
|
5
|
+
export declare const withGoogle: ConfigPlugin;
|
|
6
6
|
export declare const withGoogleServicesFile: ConfigPlugin;
|
|
7
|
-
export declare function getGoogleSignInReservedClientId(config: Pick<ExpoConfig, 'ios'>): string | null;
|
|
7
|
+
export declare function getGoogleSignInReservedClientId(config: Pick<ExpoConfig, 'ios'>, modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>): string | null;
|
|
8
8
|
export declare function getGoogleServicesFile(config: Pick<ExpoConfig, 'ios'>): string | null;
|
|
9
|
-
export declare function setGoogleSignInReservedClientId(config: Pick<ExpoConfig, 'ios'>, infoPlist: InfoPlist): InfoPlist;
|
|
10
|
-
export declare function setGoogleConfig(config: Pick<ExpoConfig, 'ios'>, infoPlist: InfoPlist): InfoPlist;
|
|
9
|
+
export declare function setGoogleSignInReservedClientId(config: Pick<ExpoConfig, 'ios'>, infoPlist: InfoPlist, modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>): InfoPlist;
|
|
10
|
+
export declare function setGoogleConfig(config: Pick<ExpoConfig, 'ios'>, infoPlist: InfoPlist, modRequest: ModProps<InfoPlist>): InfoPlist;
|
|
11
11
|
export declare function setGoogleServicesFile(config: Pick<ExpoConfig, 'ios'>, { projectRoot, project }: {
|
|
12
12
|
project: XcodeProject;
|
|
13
13
|
projectRoot: string;
|
package/build/ios/Google.js
CHANGED
|
@@ -10,6 +10,26 @@ exports.setGoogleServicesFile = setGoogleServicesFile;
|
|
|
10
10
|
exports.setGoogleSignInReservedClientId = setGoogleSignInReservedClientId;
|
|
11
11
|
exports.withGoogleServicesFile = exports.withGoogle = void 0;
|
|
12
12
|
|
|
13
|
+
function _plist() {
|
|
14
|
+
const data = _interopRequireDefault(require("@expo/plist"));
|
|
15
|
+
|
|
16
|
+
_plist = function () {
|
|
17
|
+
return data;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function _assert() {
|
|
24
|
+
const data = _interopRequireDefault(require("assert"));
|
|
25
|
+
|
|
26
|
+
_assert = function () {
|
|
27
|
+
return data;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
return data;
|
|
31
|
+
}
|
|
32
|
+
|
|
13
33
|
function _fsExtra() {
|
|
14
34
|
const data = _interopRequireDefault(require("fs-extra"));
|
|
15
35
|
|
|
@@ -72,7 +92,13 @@ function _Xcodeproj() {
|
|
|
72
92
|
|
|
73
93
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
74
94
|
|
|
75
|
-
const withGoogle =
|
|
95
|
+
const withGoogle = config => {
|
|
96
|
+
return (0, _iosPlugins().withInfoPlist)(config, config => {
|
|
97
|
+
config.modResults = setGoogleConfig(config, config.modResults, config.modRequest);
|
|
98
|
+
return config;
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
|
|
76
102
|
exports.withGoogle = withGoogle;
|
|
77
103
|
|
|
78
104
|
const withGoogleServicesFile = config => {
|
|
@@ -87,10 +113,34 @@ const withGoogleServicesFile = config => {
|
|
|
87
113
|
|
|
88
114
|
exports.withGoogleServicesFile = withGoogleServicesFile;
|
|
89
115
|
|
|
90
|
-
function
|
|
91
|
-
|
|
116
|
+
function readGoogleServicesInfoPlist(relativePath, {
|
|
117
|
+
projectRoot
|
|
118
|
+
}) {
|
|
119
|
+
const googleServiceFilePath = _path().default.resolve(projectRoot, relativePath);
|
|
120
|
+
|
|
121
|
+
const contents = _fsExtra().default.readFileSync(googleServiceFilePath, 'utf8');
|
|
122
|
+
|
|
123
|
+
(0, _assert().default)(contents, 'GoogleService-Info.plist is empty');
|
|
124
|
+
return _plist().default.parse(contents);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function getGoogleSignInReservedClientId(config, modRequest) {
|
|
128
|
+
var _config$ios$config$go, _config$ios, _config$ios$config, _config$ios$config$go2, _infoPlist$REVERSED_C;
|
|
129
|
+
|
|
130
|
+
const reservedClientId = (_config$ios$config$go = (_config$ios = config.ios) === null || _config$ios === void 0 ? void 0 : (_config$ios$config = _config$ios.config) === null || _config$ios$config === void 0 ? void 0 : (_config$ios$config$go2 = _config$ios$config.googleSignIn) === null || _config$ios$config$go2 === void 0 ? void 0 : _config$ios$config$go2.reservedClientId) !== null && _config$ios$config$go !== void 0 ? _config$ios$config$go : null;
|
|
131
|
+
|
|
132
|
+
if (reservedClientId) {
|
|
133
|
+
return reservedClientId;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const googleServicesFileRelativePath = getGoogleServicesFile(config);
|
|
137
|
+
|
|
138
|
+
if (googleServicesFileRelativePath === null) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
92
141
|
|
|
93
|
-
|
|
142
|
+
const infoPlist = readGoogleServicesInfoPlist(googleServicesFileRelativePath, modRequest);
|
|
143
|
+
return (_infoPlist$REVERSED_C = infoPlist.REVERSED_CLIENT_ID) !== null && _infoPlist$REVERSED_C !== void 0 ? _infoPlist$REVERSED_C : null;
|
|
94
144
|
}
|
|
95
145
|
|
|
96
146
|
function getGoogleServicesFile(config) {
|
|
@@ -99,8 +149,8 @@ function getGoogleServicesFile(config) {
|
|
|
99
149
|
return (_config$ios$googleSer = (_config$ios2 = config.ios) === null || _config$ios2 === void 0 ? void 0 : _config$ios2.googleServicesFile) !== null && _config$ios$googleSer !== void 0 ? _config$ios$googleSer : null;
|
|
100
150
|
}
|
|
101
151
|
|
|
102
|
-
function setGoogleSignInReservedClientId(config, infoPlist) {
|
|
103
|
-
const reservedClientId = getGoogleSignInReservedClientId(config);
|
|
152
|
+
function setGoogleSignInReservedClientId(config, infoPlist, modRequest) {
|
|
153
|
+
const reservedClientId = getGoogleSignInReservedClientId(config, modRequest);
|
|
104
154
|
|
|
105
155
|
if (reservedClientId === null) {
|
|
106
156
|
return infoPlist;
|
|
@@ -109,8 +159,8 @@ function setGoogleSignInReservedClientId(config, infoPlist) {
|
|
|
109
159
|
return (0, _Scheme().appendScheme)(reservedClientId, infoPlist);
|
|
110
160
|
}
|
|
111
161
|
|
|
112
|
-
function setGoogleConfig(config, infoPlist) {
|
|
113
|
-
infoPlist = setGoogleSignInReservedClientId(config, infoPlist);
|
|
162
|
+
function setGoogleConfig(config, infoPlist, modRequest) {
|
|
163
|
+
infoPlist = setGoogleSignInReservedClientId(config, infoPlist, modRequest);
|
|
114
164
|
return infoPlist;
|
|
115
165
|
}
|
|
116
166
|
|
package/build/ios/Google.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ios/Google.ts"],"names":["withGoogle","
|
|
1
|
+
{"version":3,"sources":["../../src/ios/Google.ts"],"names":["withGoogle","config","modResults","setGoogleConfig","modRequest","withGoogleServicesFile","setGoogleServicesFile","projectRoot","project","readGoogleServicesInfoPlist","relativePath","googleServiceFilePath","path","resolve","contents","fs","readFileSync","plist","parse","getGoogleSignInReservedClientId","reservedClientId","ios","googleSignIn","googleServicesFileRelativePath","getGoogleServicesFile","infoPlist","REVERSED_CLIENT_ID","googleServicesFile","setGoogleSignInReservedClientId","copyFileSync","join","projectName","plistFilePath","hasFile","filepath","groupName","isBuildFile","verbose"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport plist from '@expo/plist';\nimport assert from 'assert';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { ConfigPlugin, ModProps } from '../Plugin.types';\nimport { withInfoPlist, withXcodeProject } from '../plugins/ios-plugins';\nimport { InfoPlist } from './IosConfig.types';\nimport { getSourceRoot } from './Paths';\nimport { appendScheme } from './Scheme';\nimport { addResourceFileToGroup, getProjectName } from './utils/Xcodeproj';\n\nexport const withGoogle: ConfigPlugin = config => {\n return withInfoPlist(config, config => {\n config.modResults = setGoogleConfig(config, config.modResults, config.modRequest);\n return config;\n });\n};\n\nexport const withGoogleServicesFile: ConfigPlugin = config => {\n return withXcodeProject(config, config => {\n config.modResults = setGoogleServicesFile(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nfunction readGoogleServicesInfoPlist(\n relativePath: string,\n { projectRoot }: { projectRoot: string }\n) {\n const googleServiceFilePath = path.resolve(projectRoot, relativePath);\n const contents = fs.readFileSync(googleServiceFilePath, 'utf8');\n assert(contents, 'GoogleService-Info.plist is empty');\n return plist.parse(contents);\n}\n\nexport function getGoogleSignInReservedClientId(\n config: Pick<ExpoConfig, 'ios'>,\n modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>\n): string | null {\n const reservedClientId = config.ios?.config?.googleSignIn?.reservedClientId ?? null;\n if (reservedClientId) {\n return reservedClientId;\n }\n\n const googleServicesFileRelativePath = getGoogleServicesFile(config);\n if (googleServicesFileRelativePath === null) {\n return null;\n }\n\n const infoPlist = readGoogleServicesInfoPlist(googleServicesFileRelativePath, modRequest);\n\n return infoPlist.REVERSED_CLIENT_ID ?? null;\n}\n\nexport function getGoogleServicesFile(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.googleServicesFile ?? null;\n}\n\nexport function setGoogleSignInReservedClientId(\n config: Pick<ExpoConfig, 'ios'>,\n infoPlist: InfoPlist,\n modRequest: Pick<ModProps<InfoPlist>, 'projectRoot'>\n): InfoPlist {\n const reservedClientId = getGoogleSignInReservedClientId(config, modRequest);\n\n if (reservedClientId === null) {\n return infoPlist;\n }\n\n return appendScheme(reservedClientId, infoPlist);\n}\n\nexport function setGoogleConfig(\n config: Pick<ExpoConfig, 'ios'>,\n infoPlist: InfoPlist,\n modRequest: ModProps<InfoPlist>\n): InfoPlist {\n infoPlist = setGoogleSignInReservedClientId(config, infoPlist, modRequest);\n return infoPlist;\n}\n\nexport function setGoogleServicesFile(\n config: Pick<ExpoConfig, 'ios'>,\n { projectRoot, project }: { project: XcodeProject; projectRoot: string }\n): XcodeProject {\n const googleServicesFileRelativePath = getGoogleServicesFile(config);\n if (googleServicesFileRelativePath === null) {\n return project;\n }\n\n const googleServiceFilePath = path.resolve(projectRoot, googleServicesFileRelativePath);\n fs.copyFileSync(\n googleServiceFilePath,\n path.join(getSourceRoot(projectRoot), 'GoogleService-Info.plist')\n );\n\n const projectName = getProjectName(projectRoot);\n const plistFilePath = `${projectName}/GoogleService-Info.plist`;\n if (!project.hasFile(plistFilePath)) {\n project = addResourceFileToGroup({\n filepath: plistFilePath,\n groupName: projectName,\n project,\n isBuildFile: true,\n verbose: true,\n });\n }\n return project;\n}\n"],"file":"Google.js"}
|